get/set timing, generate data for gotthard2, vref_rstore instead of restore for gotthard2

This commit is contained in:
2020-01-22 18:18:56 +01:00
parent 8cbf3c62a9
commit f881133795
24 changed files with 136 additions and 126 deletions

View File

@ -1418,22 +1418,18 @@ int setHighVoltage(int val){
void setTiming( enum timingMode arg){
if(arg != GET_TIMING_MODE){
switch(arg){
case AUTO_TIMING:
FILE_LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) & ~EXT_SIGNAL_MSK);
break;
case TRIGGER_EXPOSURE:
FILE_LOG(logINFO, ("Set Timing: Trigger\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) | EXT_SIGNAL_MSK);
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d\n", arg));
return;
}
}
switch(arg){
case AUTO_TIMING:
FILE_LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) & ~EXT_SIGNAL_MSK);
break;
case TRIGGER_EXPOSURE:
FILE_LOG(logINFO, ("Set Timing: Trigger\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) | EXT_SIGNAL_MSK);
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d\n", arg));
}
}

View File

@ -1106,36 +1106,46 @@ int setHighVoltage(int val) {
/* parameters - timing, extsig */
void setTiming( enum timingMode arg) {
enum timingMode ret=GET_TIMING_MODE;
if (arg != GET_TIMING_MODE) {
switch(arg) {
case AUTO_TIMING: ret = 0; break;
case TRIGGER_EXPOSURE: ret = 2; break;
case BURST_TRIGGER: ret = 1; break;
case GATED: ret = 3; break;
}
FILE_LOG(logDEBUG1, ("Setting Triggering Mode: %d\n", (int)ret));
#ifndef VIRTUAL
if (Feb_Control_SetTriggerMode(ret,1))
#endif
eiger_triggermode = ret;
int ret = 0;
switch(arg) {
case AUTO_TIMING:
ret = 0;
break;
case TRIGGER_EXPOSURE:
ret = 2;
break;
case BURST_TRIGGER:
ret = 1;
break;
case GATED:
ret = 3;
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d\n", arg));
return;
}
FILE_LOG(logDEBUG1, ("Setting Triggering Mode: %d\n", (int)ret));
#ifndef VIRTUAL
if (Feb_Control_SetTriggerMode(ret,1))
#endif
eiger_triggermode = ret;
}
enum timingMode getTiming() {
enum timingMode ret = GET_TIMING_MODE;
ret = eiger_triggermode;
switch((int)ret) {
case 0: ret = AUTO_TIMING; break;
case 2: ret = TRIGGER_EXPOSURE; break;
case 1: ret = BURST_TRIGGER; break;
case 3: ret = GATED; break;
switch(eiger_triggermode) {
case 0:
return AUTO_TIMING;
case 2:
return TRIGGER_EXPOSURE;
case 1:
return BURST_TRIGGER;
case 3:
return GATED;
default:
FILE_LOG(logERROR, ("Unknown trigger mode found %d\n", ret));
ret = 0;
FILE_LOG(logERROR, ("Unknown trigger mode found %d\n", eiger_triggermode));
return GET_TIMING_MODE;
}
return ret;
}

View File

@ -11,7 +11,7 @@ vref_h_adc 2099
vb_comp_fe 0
vb_comp_adc 0
vcom_cds 1400
vref_restore 640
vref_rstore 640
vb_opa_1st 0
vref_comp_fe 0
vcom_adc1 1400

View File

@ -626,8 +626,8 @@ int readConfigFile() {
idac = G2_VB_COMP_ADC;
} else if (!strcasecmp(command,"vcom_cds")) {
idac = G2_VCOM_CDS;
} else if (!strcasecmp(command,"vref_restore")) {
idac = G2_VREF_RESTORE;
} else if (!strcasecmp(command,"vref_rstore")) {
idac = G2_VREF_RSTORE;
} else if (!strcasecmp(command,"vb_opa_1st")) {
idac = G2_VB_OPA_1ST;
} else if (!strcasecmp(command,"vref_comp_fe")) {
@ -1091,21 +1091,18 @@ int setHighVoltage(int val){
/* parameters - timing */
void setTiming( enum timingMode arg){
if(arg != GET_TIMING_MODE){
switch(arg){
case AUTO_TIMING:
FILE_LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) & ~EXT_SIGNAL_MSK);
break;
case TRIGGER_EXPOSURE:
FILE_LOG(logINFO, ("Set Timing: Trigger\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) | EXT_SIGNAL_MSK);
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d\n", arg));
return;
}
}
switch(arg){
case AUTO_TIMING:
FILE_LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) & ~EXT_SIGNAL_MSK);
break;
case TRIGGER_EXPOSURE:
FILE_LOG(logINFO, ("Set Timing: Trigger\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) | EXT_SIGNAL_MSK);
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d\n", arg));
}
}
enum timingMode getTiming() {
@ -1945,9 +1942,19 @@ void* start_timer(void* arg) {
int numFrames = (getNumFrames() *
getNumTriggers() );
int64_t exp_ns = getExpTime();
int datasize = 2560;
int imagesize = NCHAN * NCHIP * 2;
int datasize = imagesize;
int packetsize = datasize + sizeof(sls_detector_header);
// Generate data
char imageData[imagesize];
memset(imageData, 0, imagesize);
{
int i = 0;
for (i = 0; i < imagesize; i += sizeof(uint8_t)) {
*((uint8_t*)(imageData + i)) = i;
}
}
int frameNr = 0;
// loop over number of frames
@ -1974,7 +1981,10 @@ void* start_timer(void* arg) {
header->row = detPos[X];
header->column = detPos[Y];
header->detType = (uint16_t)myDetectorType;
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
// fill data
memcpy(packetData + sizeof(sls_detector_header), imageData, datasize);
// send 1 packet = 1 frame
sendUDPPacket(0, packetData, packetsize);

View File

@ -61,7 +61,7 @@ enum DACINDEX {G2_VREF_H_ADC, /* 0 */ \
G2_VB_COMP_FE, /* 2 */ \
G2_VB_COMP_ADC, /* 3 */ \
G2_VCOM_CDS, /* 4 */ \
G2_VREF_RESTORE,/* 5 */ \
G2_VREF_RSTORE,/* 5 */ \
G2_VB_OPA_1ST, /* 6 */ \
G2_VREF_COMP_FE,/* 7 */ \
G2_VCOM_ADC1, /* 8 */ \
@ -73,7 +73,7 @@ enum DACINDEX {G2_VREF_H_ADC, /* 0 */ \
G2_DAC_UNUSED2, /* 14 */ \
G2_VCOM_ADC2 /* 15*/ \
};
#define DAC_NAMES "vref_h_adc", "dac_unused", "vb_comp_fe", "vb_comp_adc", "vcom_cds", "vref_restore", "vb_opa_1st", "vref_comp_fe", "vcom_adc1", "vref_prech", "vref_l_adc", "vref_cds", "vb_cs", "vb_opa_fd", "dac_unused2", "vcom_adc2"
#define DAC_NAMES "vref_h_adc", "dac_unused", "vb_comp_fe", "vb_comp_adc", "vcom_cds", "vref_rstore", "vb_opa_1st", "vref_comp_fe", "vcom_adc1", "vref_prech", "vref_l_adc", "vref_cds", "vb_cs", "vb_opa_fd", "dac_unused2", "vcom_adc2"
enum ONCHIP_DACINDEX {G2_VCHIP_COMP_FE, /* 0 */ \
G2_VCHIP_OPA_1ST, /* 1 */ \

View File

@ -1178,27 +1178,23 @@ int setHighVoltage(int val){
void setTiming( enum timingMode arg){
u_int32_t addr = EXT_SIGNAL_REG;
if (arg != GET_TIMING_MODE){
switch(arg){
case AUTO_TIMING:
FILE_LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(addr, EXT_SIGNAL_OFF_VAL);
break;
case TRIGGER_EXPOSURE:
if (signalMode == TRIGGER_IN_FALLING_EDGE) {
FILE_LOG(logINFO, ("Set Timing: Trigger (Falling Edge)\n"));
bus_w(addr, EXT_SIGNAL_TRGGR_IN_FLLNG_VAL);
} else {
FILE_LOG(logINFO, ("Set Timing: Trigger (Rising Edge)\n"));
bus_w(addr, EXT_SIGNAL_TRGGR_IN_RSNG_VAL);
}
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d for this detector\n", (int)arg));
return;
}
}
switch(arg) {
case AUTO_TIMING:
FILE_LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(addr, EXT_SIGNAL_OFF_VAL);
break;
case TRIGGER_EXPOSURE:
if (signalMode == TRIGGER_IN_FALLING_EDGE) {
FILE_LOG(logINFO, ("Set Timing: Trigger (Falling Edge)\n"));
bus_w(addr, EXT_SIGNAL_TRGGR_IN_FLLNG_VAL);
} else {
FILE_LOG(logINFO, ("Set Timing: Trigger (Rising Edge)\n"));
bus_w(addr, EXT_SIGNAL_TRGGR_IN_RSNG_VAL);
}
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d for this detector\n", (int)arg));
}
}
enum timingMode getTiming() {

View File

@ -919,22 +919,18 @@ int setHighVoltage(int val){
void setTiming( enum timingMode arg){
if(arg != GET_TIMING_MODE){
switch(arg){
case AUTO_TIMING:
FILE_LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) & ~EXT_SIGNAL_MSK);
break;
case TRIGGER_EXPOSURE:
FILE_LOG(logINFO, ("Set Timing: Trigger\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) | EXT_SIGNAL_MSK);
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d\n", arg));
return;
}
}
switch(arg){
case AUTO_TIMING:
FILE_LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) & ~EXT_SIGNAL_MSK);
break;
case TRIGGER_EXPOSURE:
FILE_LOG(logINFO, ("Set Timing: Trigger\n"));
bus_w(EXT_SIGNAL_REG, bus_r(EXT_SIGNAL_REG) | EXT_SIGNAL_MSK);
break;
default:
FILE_LOG(logERROR, ("Unknown timing mode %d\n", arg));
}
}

View File

@ -1383,13 +1383,7 @@ void* start_timer(void* arg) {
getNumTriggers() );
int64_t exp_ns = getExpTime();
int numCounters = __builtin_popcount(getCounterMask());
int dr = setDynamicRange(-1);
int imagesize = NCHAN_1_COUNTER * NCHIP * numCounters *
((dr > 16) ? 4 : // 32 bit
((dr > 8) ? 2 : // 16 bit
((dr > 4) ? 0.5 : // 4 bit
0.125))); // 1 bit
int imagesize = calculateDataBytes();
int datasize = imagesize / PACKETS_PER_FRAME;
int packetsize = datasize + sizeof(sls_detector_header);
@ -1568,7 +1562,15 @@ u_int32_t runBusy() {
/* common */
int calculateDataBytes() {
return 0;
int numCounters = __builtin_popcount(getCounterMask());
int dr = setDynamicRange(-1);
int databytes = NCHAN_1_COUNTER * NCHIP * numCounters *
((dr > 16) ? 4 : // 32 bit
((dr > 8) ? 2 : // 16 bit
((dr > 4) ? 0.5 : // 4 bit
0.125))); // 1 bit
return databytes;
}
int getTotalNumberOfChannels() {return (getNumberOfChannelsPerChip() * getNumberOfChips());}

View File

@ -1000,8 +1000,8 @@ int set_dac(int file_des) {
case VCOM_CDS:
serverDacIndex = G2_VCOM_CDS;
break;
case VREF_RESTORE:
serverDacIndex = G2_VREF_RESTORE;
case VREF_RSTORE:
serverDacIndex = G2_VREF_RSTORE;
break;
case VB_OPA_1ST:
serverDacIndex = G2_VB_OPA_1ST;