mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-20 02:40:03 +02:00
eiger server: blocking software trigger
This commit is contained in:
parent
129ec6930f
commit
cf7828e0ce
@ -1000,6 +1000,18 @@ int Feb_Control_StopAcquisition() { return Feb_Control_Reset(); }
|
||||
|
||||
int Feb_Control_SoftwareTrigger() {
|
||||
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;
|
||||
if (!Feb_Interface_ReadRegister(Feb_Control_AddressToAll(),
|
||||
DAQ_REG_CHIP_CMDS, &orig_value)) {
|
||||
@ -1024,6 +1036,32 @@ int Feb_Control_SoftwareTrigger() {
|
||||
return 0;
|
||||
}
|
||||
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;
|
||||
}
|
||||
@ -1883,15 +1921,15 @@ int Feb_Control_GetLeftFPGATemp() {
|
||||
if (!Feb_Control_activated) {
|
||||
return 0;
|
||||
}
|
||||
unsigned int temperature = 0;
|
||||
unsigned int value = 0;
|
||||
if (!Feb_Interface_ReadRegister(Feb_Control_leftAddress, FEB_REG_STATUS,
|
||||
&temperature)) {
|
||||
&value)) {
|
||||
LOG(logERROR, ("Trouble reading FEB_REG_STATUS reg to get left feb "
|
||||
"temperature\n"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
temperature = temperature >> 16;
|
||||
unsigned int temperature =
|
||||
((value & FEB_REG_STATUS_TEMP_MSK) >> FEB_REG_STATUS_TEMP_OFST);
|
||||
temperature =
|
||||
((((float)(temperature) / 65536.0f) / 0.00198421639f) - 273.15f) *
|
||||
1000; // Static conversation, copied from xps sysmon standalone driver
|
||||
|
@ -31,6 +31,14 @@
|
||||
#define DAQ_REG_RO_OFFSET 20
|
||||
#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_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_PERIOD_REG (DAQ_REG_RO_OFFSET + 5)
|
||||
// clang-format on
|
||||
|
Loading…
x
Reference in New Issue
Block a user