eiger server: blocking software trigger

This commit is contained in:
maliakal_d 2021-06-02 16:59:20 +02:00
parent 129ec6930f
commit cf7828e0ce
2 changed files with 50 additions and 4 deletions

View File

@ -1000,6 +1000,18 @@ int Feb_Control_StopAcquisition() { return Feb_Control_Reset(); }
int Feb_Control_SoftwareTrigger() { int Feb_Control_SoftwareTrigger() {
if (Feb_Control_activated) { if (Feb_Control_activated) {
// read exp toggle value
int prev_toggle = 0;
unsigned int value = 0;
if (!Feb_Interface_ReadRegister(Feb_Control_AddressToAll,
FEB_REG_STATUS, &value)) {
LOG(logERROR, ("Could not read FEB_REG_STATUS reg\n"));
return 0;
}
int prev_toggle = ((value & FEB_REG_STATUS_EXP_TGL_MSK) >>
FEB_REG_STATUS_EXP_TGL_OFST);
// send software trigger
unsigned int orig_value = 0; unsigned int orig_value = 0;
if (!Feb_Interface_ReadRegister(Feb_Control_AddressToAll(), if (!Feb_Interface_ReadRegister(Feb_Control_AddressToAll(),
DAQ_REG_CHIP_CMDS, &orig_value)) { DAQ_REG_CHIP_CMDS, &orig_value)) {
@ -1024,6 +1036,32 @@ int Feb_Control_SoftwareTrigger() {
return 0; return 0;
} }
LOG(logINFO, ("Software Internal Trigger Sent!\n")); LOG(logINFO, ("Software Internal Trigger Sent!\n"));
// wait for trigger for 20ms
usleep(20 * 1000);
if (!Feb_Interface_ReadRegister(Feb_Control_AddressToAll,
FEB_REG_STATUS, &value)) {
LOG(logERROR, ("Could not read FEB_REG_STATUS reg\n"));
return 0;
}
int toggle = ((value & FEB_REG_STATUS_EXP_TGL_MSK) >>
FEB_REG_STATUS_EXP_TGL_OFST);
// no toggle, so no trigger
if (toggle == prev_toggle) {
LOG(logERROR, ("Software trigger failed. No exposure toggle "
"detected in 20ms.\n"));
return 0;
}
// read that it exposed
int exposure =
((value & FEB_REG_STATUS_EXP_MSK) >> FEB_REG_STATUS_EXP_OFST);
if (!exposure) {
LOG(logERROR,
("Software trigger failed. No exposure detected in 20ms.\n"));
return 0;
}
} }
return 1; return 1;
} }
@ -1883,15 +1921,15 @@ int Feb_Control_GetLeftFPGATemp() {
if (!Feb_Control_activated) { if (!Feb_Control_activated) {
return 0; return 0;
} }
unsigned int temperature = 0; unsigned int value = 0;
if (!Feb_Interface_ReadRegister(Feb_Control_leftAddress, FEB_REG_STATUS, if (!Feb_Interface_ReadRegister(Feb_Control_leftAddress, FEB_REG_STATUS,
&temperature)) { &value)) {
LOG(logERROR, ("Trouble reading FEB_REG_STATUS reg to get left feb " LOG(logERROR, ("Trouble reading FEB_REG_STATUS reg to get left feb "
"temperature\n")); "temperature\n"));
return 0; return 0;
} }
unsigned int temperature =
temperature = temperature >> 16; ((value & FEB_REG_STATUS_TEMP_MSK) >> FEB_REG_STATUS_TEMP_OFST);
temperature = temperature =
((((float)(temperature) / 65536.0f) / 0.00198421639f) - 273.15f) * ((((float)(temperature) / 65536.0f) / 0.00198421639f) - 273.15f) *
1000; // Static conversation, copied from xps sysmon standalone driver 1000; // Static conversation, copied from xps sysmon standalone driver

View File

@ -31,6 +31,14 @@
#define DAQ_REG_RO_OFFSET 20 #define DAQ_REG_RO_OFFSET 20
#define DAQ_REG_STATUS (DAQ_REG_RO_OFFSET + 0) // also pg and fifo status register #define DAQ_REG_STATUS (DAQ_REG_RO_OFFSET + 0) // also pg and fifo status register
#define FEB_REG_STATUS (DAQ_REG_RO_OFFSET + 3) #define FEB_REG_STATUS (DAQ_REG_RO_OFFSET + 3)
#define FEB_REG_STATUS_EXP_OFST (5)
#define FEB_REG_STATUS_EXP_MSK (0x00000001 << FEB_REG_STATUS_EXP_OFST)
#define FEB_REG_STATUS_EXP_TGL_OFST (6)
#define FEB_REG_STATUS_EXP_TGL_MSK (0x00000001 << FEB_REG_STATUS_EXP_TGL_OFST)
#define FEB_REG_STATUS_TEMP_OFST (16)
#define FEB_REG_STATUS_TEMP_MSK (0x0000FFFF << FEB_REG_STATUS_TEMP_OFST)
#define MEAS_SUBPERIOD_REG (DAQ_REG_RO_OFFSET + 4) #define MEAS_SUBPERIOD_REG (DAQ_REG_RO_OFFSET + 4)
#define MEAS_PERIOD_REG (DAQ_REG_RO_OFFSET + 5) #define MEAS_PERIOD_REG (DAQ_REG_RO_OFFSET + 5)
// clang-format on // clang-format on