get status works in eiger server

This commit is contained in:
Maliakal Dhanya 2014-06-18 16:37:35 +02:00
parent cf52d85f73
commit b29879511b
5 changed files with 21 additions and 131 deletions

View File

@ -810,17 +810,20 @@ bool FebControl::WaitForFinishedFlag(int sleep_time_us){
} }
bool FebControl::AcquisitionInProgress(){ bool FebControl::AcquisitionInProgress(){
unsigned int status_reg_r=0;
for(unsigned int i=1;i<modules.size();i++){ if(!(GetDAQStatusRegister(modules[1]->GetTopRightAddress(),status_reg_r)))
unsigned int status_reg_r=0,status_reg_l=0; return 0;
/**edited by dhanya*/ if(status_reg_r&DAQ_STATUS_DAQ_RUNNING) return 1;
/* if(!(GetDAQStatusRegister(modules[i]->GetTopLeftAddress(),status_reg_r)&&GetDAQStatusRegister(modules[i]->GetTopRightAddress(),status_reg_l))){*/
if(!(GetDAQStatusRegister(modules[i]->GetTopLeftAddress(),status_reg_r)||GetDAQStatusRegister(modules[i]->GetTopRightAddress(),status_reg_l))){ /*
if(!(GetDAQStatusRegister(modules[i]->GetTopLeftAddress(),status_reg_r)&&GetDAQStatusRegister(modules[i]->GetTopRightAddress(),status_reg_l))){
for(int i=0;i<2;i++) cout<<"Waring trouble reading status register. Returning zero to avoid inifite loops, this could cause trouble!"<<endl; for(int i=0;i<2;i++) cout<<"Waring trouble reading status register. Returning zero to avoid inifite loops, this could cause trouble!"<<endl;
return 0; //to avoid inifite loops return 0; //to avoid inifite loops
} }
if((status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING) return 1; if((status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING) return 1;
} }
*/
return 0; //i.e. not running (status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING; return 0; //i.e. not running (status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING;
} }
@ -886,7 +889,7 @@ bool FebControl::SetDynamicRange(unsigned int four_eight_sixteen_or_thirtytwo){
} }
unsigned int FebControl::GetDynamicRange(){ unsigned int FebControl::GetDynamicRange(){
if(subFrameMode|DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) return 32; if(subFrameMode&DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) return 32;
else if(DAQ_STATIC_BIT_M4&staticBits) return 4; else if(DAQ_STATIC_BIT_M4&staticBits) return 4;
else if(DAQ_STATIC_BIT_M8&staticBits) return 8; else if(DAQ_STATIC_BIT_M8&staticBits) return 8;

View File

@ -55,6 +55,9 @@ void FebInterface::SendCompleteList(unsigned int n,unsigned int* list){
bool FebInterface::WriteTo(unsigned int ch){ bool FebInterface::WriteTo(unsigned int ch){
if(ch>0xfff) return 0; if(ch>0xfff) return 0;
send_data_raw[0] = 0x8fff0000;
if(ll->Write(4,send_data_raw)!=4) return 0;
send_data_raw[0] = 0x90000000 | (ch<<16); send_data_raw[0] = 0x90000000 | (ch<<16);
if(ll->Write(4,send_data_raw)!=4) return 0; if(ll->Write(4,send_data_raw)!=4) return 0;

View File

@ -11,9 +11,6 @@
#include "EigerHighLevelFunctions.c" #include "EigerHighLevelFunctions.c"
#include "EigerBackEndFunctions.c" #include "EigerBackEndFunctions.c"
int tempframes;
int64_t timewait1;
int64_t timewait2;
enum detectorSettings thisSettings = STANDARD; enum detectorSettings thisSettings = STANDARD;
//static const string dacNames[16] = {"Svp","Svn","Vtr","Vrf","Vrs","Vtgstv","Vcmp_ll","Vcmp_lr","Cal","Vcmp_rl","Vcmp_rr","Rxb_rb","Rxb_lb","Vcp","Vcn","Vis"}; //static const string dacNames[16] = {"Svp","Svn","Vtr","Vrf","Vrs","Vtgstv","Vcmp_ll","Vcmp_lr","Cal","Vcmp_rl","Vcmp_rr","Rxb_rb","Rxb_lb","Vcp","Vcn","Vis"};
@ -258,16 +255,13 @@ enum runStatus getRunStatus(){
char *readFrame(int *ret, char *mess){ char *readFrame(int *ret, char *mess){
int i; int i = EigerRunStatus();
int64_t t; printf("status:%d\n",i);
t=timewait1>timewait2?timewait1:timewait2; while(i){
/*RequestImages();done inside startacqusition *//** polling should be done in server */ i = EigerRunStatus();
printf("status:%d\n",EigerRunStatus()); printf("status:%d\n",i);
/*while(EigerRunStatus())*/ usleep(1000);/* should be watiing in server*/
printf("going to randomly wait for %f us\n",tempframes*(t/1000)); }*ret = (int)FINISHED;
for(i=0;i<tempframes;i++)
usleep(t/1000);/*get status doesnt work.so temporarily wait for 2s*#frames*/
*ret = (int)FINISHED;
return NULL; return NULL;
} }
@ -280,19 +274,16 @@ int64_t setTimer(enum timerIndex ind, int64_t val){
printf(" Setting number of frames: %d\n",(unsigned int)val); printf(" Setting number of frames: %d\n",(unsigned int)val);
EigerSetNumberOfExposures((unsigned int)val); EigerSetNumberOfExposures((unsigned int)val);
SetDestinationParameters(val); SetDestinationParameters(val);
tempframes = val;
}return EigerGetNumberOfExposures(); }return EigerGetNumberOfExposures();
case ACQUISITION_TIME: case ACQUISITION_TIME:
if(val >= 0){ if(val >= 0){
printf(" Setting exp time: %fs\n",val/(1E9)); printf(" Setting exp time: %fs\n",val/(1E9));
EigerSetExposureTime(val/(1E9)); EigerSetExposureTime(val/(1E9));
timewait1 = val;
}return (EigerGetExposureTime()*(1E9)); }return (EigerGetExposureTime()*(1E9));
case FRAME_PERIOD: case FRAME_PERIOD:
if(val >= 0){ if(val >= 0){
printf(" Setting acq period: %fs\n",val/(1E9)); printf(" Setting acq period: %fs\n",val/(1E9));
EigerSetExposurePeriod(val/(1E9)); EigerSetExposurePeriod(val/(1E9));
timewait2 = val;
}return (EigerGetExposurePeriod()*(1E9)); }return (EigerGetExposurePeriod()*(1E9));
/* case DELAY_AFTER_TRIGGER: /* case DELAY_AFTER_TRIGGER:
if(val >= 0) if(val >= 0)
@ -472,118 +463,11 @@ enum externalSignalFlag setExtSignal(int signalindex, enum externalSignalFlag f
enum externalCommunicationMode setTiming( enum externalCommunicationMode arg){ enum externalCommunicationMode setTiming( enum externalCommunicationMode arg){
//template setTiming from firmware_funcs.c
//template getFPGASignal from firmware_funcs.c
//getFPGASignal(signalindex) used later on in this fucntion
//gets flag from fpga reg, checks if flag within limits,
//if( flag=SIGNAL_OFF and signals[signalindex]==MASTER_SLAVE_SYNCHRONIZATION), return -1, (ensures masterslaveflag !=off now)
//else return flag
enum externalCommunicationMode ret=GET_EXTERNAL_COMMUNICATION_MODE; enum externalCommunicationMode ret=GET_EXTERNAL_COMMUNICATION_MODE;
//sets timingmode variable
//ensures that the signals are in acceptance with timing mode and according sets the timing mode
/*
int g=-1, t=-1, rot=-1;
int i;
switch (ti) {
case AUTO_TIMING:
timingMode=ti;
// disable all gates/triggers in except if used for master/slave synchronization
for (i=0; i<4; i++) {
if (getFPGASignal(i)>0 && getFPGASignal(i)<GATE_OUT_ACTIVE_HIGH && signals[i]!=MASTER_SLAVE_SYNCHRONIZATION)
setFPGASignal(i,SIGNAL_OFF);
}
break;
case TRIGGER_EXPOSURE:
timingMode=ti;
// if one of the signals is configured to be trigger, set it and unset possible gates
for (i=0; i<4; i++) {
if (signals[i]==TRIGGER_IN_RISING_EDGE || signals[i]==TRIGGER_IN_FALLING_EDGE)
setFPGASignal(i,signals[i]);
else if (signals[i]==GATE_IN_ACTIVE_HIGH || signals[i]==GATE_IN_ACTIVE_LOW)
setFPGASignal(i,SIGNAL_OFF);
else if (signals[i]==RO_TRIGGER_IN_RISING_EDGE || signals[i]==RO_TRIGGER_IN_FALLING_EDGE)
setFPGASignal(i,SIGNAL_OFF);
}
break;
case TRIGGER_READOUT:
timingMode=ti;
// if one of the signals is configured to be trigger, set it and unset possible gates
for (i=0; i<4; i++) {
if (signals[i]==RO_TRIGGER_IN_RISING_EDGE || signals[i]==RO_TRIGGER_IN_FALLING_EDGE)
setFPGASignal(i,signals[i]);
else if (signals[i]==GATE_IN_ACTIVE_HIGH || signals[i]==GATE_IN_ACTIVE_LOW)
setFPGASignal(i,SIGNAL_OFF);
else if (signals[i]==TRIGGER_IN_RISING_EDGE || signals[i]==TRIGGER_IN_FALLING_EDGE)
setFPGASignal(i,SIGNAL_OFF);
}
break;
case GATE_FIX_NUMBER:
timingMode=ti;
// if one of the signals is configured to be trigger, set it and unset possible gates
for (i=0; i<4; i++) {
if (signals[i]==RO_TRIGGER_IN_RISING_EDGE || signals[i]==RO_TRIGGER_IN_FALLING_EDGE)
setFPGASignal(i,SIGNAL_OFF);
else if (signals[i]==GATE_IN_ACTIVE_HIGH || signals[i]==GATE_IN_ACTIVE_LOW)
setFPGASignal(i,signals[i]);
else if (signals[i]==TRIGGER_IN_RISING_EDGE || signals[i]==TRIGGER_IN_FALLING_EDGE)
setFPGASignal(i,SIGNAL_OFF);
}
break;
case GATE_WITH_START_TRIGGER:
timingMode=ti;
for (i=0; i<4; i++) {
if (signals[i]==RO_TRIGGER_IN_RISING_EDGE || signals[i]==RO_TRIGGER_IN_FALLING_EDGE)
setFPGASignal(i,SIGNAL_OFF);
else if (signals[i]==GATE_IN_ACTIVE_HIGH || signals[i]==GATE_IN_ACTIVE_LOW)
setFPGASignal(i,signals[i]);
else if (signals[i]==TRIGGER_IN_RISING_EDGE || signals[i]==TRIGGER_IN_FALLING_EDGE)
setFPGASignal(i,signals[i]);
}
break;
default:
;
}
for (i=0; i<4; i++) {
if (signals[i]!=MASTER_SLAVE_SYNCHRONIZATION) {
if (getFPGASignal(i)==RO_TRIGGER_IN_RISING_EDGE || getFPGASignal(i)==RO_TRIGGER_IN_FALLING_EDGE)
rot=i;
else if (getFPGASignal(i)==GATE_IN_ACTIVE_HIGH || getFPGASignal(i)==GATE_IN_ACTIVE_LOW)
g=i;
else if (getFPGASignal(i)==TRIGGER_IN_RISING_EDGE || getFPGASignal(i)==TRIGGER_IN_FALLING_EDGE)
t=i;
}
}
if (g>=0 && t>=0 && rot<0) {
ret=GATE_WITH_START_TRIGGER;
} else if (g<0 && t>=0 && rot<0) {
ret=TRIGGER_EXPOSURE;
} else if (g>=0 && t<0 && rot<0) {
ret=GATE_FIX_NUMBER;
} else if (g<0 && t<0 && rot>0) {
ret=TRIGGER_READOUT;
} else if (g<0 && t<0 && rot<0) {
ret = AUTO_TIMING; ret = AUTO_TIMING;
}
*/
return ret; return ret;
} }