mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 16:20:03 +02:00
WIP
This commit is contained in:
parent
a656668d73
commit
93c5505285
@ -41,8 +41,6 @@ char initErrorMessage[MAX_STR_LENGTH];
|
|||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
pthread_t pthread_virtual_tid;
|
pthread_t pthread_virtual_tid;
|
||||||
int virtual_status = 0;
|
|
||||||
int virtual_stop = 0;
|
|
||||||
uint64_t virtual_pattern[MAX_PATTERN_LENGTH];
|
uint64_t virtual_pattern[MAX_PATTERN_LENGTH];
|
||||||
int64_t virtual_currentFrameNumber = 2;
|
int64_t virtual_currentFrameNumber = 2;
|
||||||
#endif
|
#endif
|
||||||
@ -434,10 +432,7 @@ void initStopServer() {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_stop = 0;
|
sharedMemory_setStop(0);
|
||||||
if (!isControlServer) {
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -480,10 +475,7 @@ void setupDetector() {
|
|||||||
naSamples = 1;
|
naSamples = 1;
|
||||||
ndSamples = 1;
|
ndSamples = 1;
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
memset(virtual_pattern, 0, sizeof(virtual_pattern));
|
memset(virtual_pattern, 0, sizeof(virtual_pattern));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -2221,22 +2213,15 @@ int startStateMachine() {
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
||||||
if (isControlServer) {
|
if (sharedMemory_getStop() != 0) {
|
||||||
virtual_stop = sharedMemory_getStop();
|
LOG(logERROR, ("Cant start acquisition. "
|
||||||
if (virtual_stop != 0) {
|
"Stop server has not updated stop status to 0\n"));
|
||||||
LOG(logERROR, ("Cant start acquisition. "
|
return FAIL;
|
||||||
"Stop server has not updated stop status to 0\n"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
virtual_status = 1;
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
}
|
||||||
|
sharedMemory_setStatus(RUNNING);
|
||||||
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
||||||
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
||||||
@ -2297,10 +2282,8 @@ void *start_timer(void *arg) {
|
|||||||
// loop over number of frames
|
// loop over number of frames
|
||||||
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
||||||
|
|
||||||
// update the virtual stop from stop server
|
// check if manual stop
|
||||||
virtual_stop = sharedMemory_getStop();
|
if (sharedMemory_getStop() == 1) {
|
||||||
// check if virtual_stop is high
|
|
||||||
if (virtual_stop == 1) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2349,10 +2332,7 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -2360,24 +2340,17 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
int stopStateMachine() {
|
int stopStateMachine() {
|
||||||
LOG(logINFORED, ("Stopping State Machine\n"));
|
LOG(logINFORED, ("Stopping State Machine\n"));
|
||||||
// if scan active, stop scan
|
// if scan active, stop scan first
|
||||||
if (sharedMemory_getScanStatus()) {
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
sharedMemory_setScanStop(1);
|
sharedMemory_setScanStop(1);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
sharedMemory_setStop(1);
|
||||||
virtual_stop = 1;
|
// read till status is idle
|
||||||
sharedMemory_setStop(virtual_stop);
|
while (sharedMemory_getStatus() == RUNNING)
|
||||||
// read till status is idle
|
;
|
||||||
int tempStatus = 1;
|
sharedMemory_setStop(0);
|
||||||
while (tempStatus == 1) {
|
LOG(logINFO, ("Stopped State Machine\n"));
|
||||||
tempStatus = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
virtual_stop = 0;
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
virtual_status = tempStatus;
|
|
||||||
LOG(logINFO, ("Stopped State Machine\n"));
|
|
||||||
}
|
|
||||||
return OK;
|
return OK;
|
||||||
#endif
|
#endif
|
||||||
// stop state machine
|
// stop state machine
|
||||||
@ -2391,19 +2364,23 @@ int stopStateMachine() {
|
|||||||
|
|
||||||
enum runStatus getRunStatus() {
|
enum runStatus getRunStatus() {
|
||||||
LOG(logDEBUG1, ("Getting status\n"));
|
LOG(logDEBUG1, ("Getting status\n"));
|
||||||
|
// scan error or running
|
||||||
|
if (sharedMemory_getScanStatus() == ERROR) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan ERROR\n"));
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan RUNNING\n"));
|
||||||
|
return RUNNING;
|
||||||
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (sharedMemory_getScanStatus() || sharedMemory_getStatus()) {
|
if (sharedMemory_getStatus() == RUNNING) {
|
||||||
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
||||||
return RUNNING;
|
return RUNNING;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
||||||
return IDLE;
|
return IDLE;
|
||||||
#endif
|
#endif
|
||||||
if (sharedMemory_getScanStatus()) {
|
|
||||||
LOG(logINFOBLUE, ("Status: Scan RUNNING\n"));
|
|
||||||
return RUNNING;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t retval = bus_r(STATUS_REG);
|
uint32_t retval = bus_r(STATUS_REG);
|
||||||
LOG(logINFO, ("Status Register: %08x\n", retval));
|
LOG(logINFO, ("Status Register: %08x\n", retval));
|
||||||
|
|
||||||
@ -2674,10 +2651,7 @@ int readFrameFromFifo() {
|
|||||||
|
|
||||||
uint32_t runBusy() {
|
uint32_t runBusy() {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
return ((sharedMemory_getStatus() == RUNNING) ? 1 : 0);
|
||||||
virtual_status = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
return virtual_status;
|
|
||||||
#endif
|
#endif
|
||||||
uint32_t s = (bus_r(STATUS_REG) & STATUS_RN_BSY_MSK);
|
uint32_t s = (bus_r(STATUS_REG) & STATUS_RN_BSY_MSK);
|
||||||
// LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
// LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
||||||
|
@ -70,8 +70,6 @@ int eiger_tau_ns = 0;
|
|||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
pthread_t virtual_tid;
|
pthread_t virtual_tid;
|
||||||
int virtual_status = 0;
|
|
||||||
int virtual_stop = 0;
|
|
||||||
// values for virtual server
|
// values for virtual server
|
||||||
int64_t eiger_virtual_exptime = 0;
|
int64_t eiger_virtual_exptime = 0;
|
||||||
int64_t eiger_virtual_subexptime = 0;
|
int64_t eiger_virtual_subexptime = 0;
|
||||||
@ -364,10 +362,7 @@ void initStopServer() {
|
|||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
LOG(logINFOBLUE, ("Configuring Stop server\n"));
|
LOG(logINFOBLUE, ("Configuring Stop server\n"));
|
||||||
getModuleConfiguration();
|
getModuleConfiguration();
|
||||||
virtual_stop = 0;
|
sharedMemory_setStop(0);
|
||||||
if (!isControlServer) {
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
}
|
|
||||||
// get top/master in virtual
|
// get top/master in virtual
|
||||||
readConfigFile();
|
readConfigFile();
|
||||||
#else
|
#else
|
||||||
@ -669,10 +664,7 @@ void setupDetector() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LOG(logINFOBLUE, ("Setting Default Parameters\n"));
|
LOG(logINFOBLUE, ("Setting Default Parameters\n"));
|
||||||
@ -1987,22 +1979,15 @@ int startStateMachine() {
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
||||||
if (isControlServer) {
|
if (sharedMemory_getStop() != 0) {
|
||||||
virtual_stop = sharedMemory_getStop();
|
LOG(logERROR, ("Cant start acquisition. "
|
||||||
if (virtual_stop != 0) {
|
"Stop server has not updated stop status to 0\n"));
|
||||||
LOG(logERROR, ("Cant start acquisition. "
|
return FAIL;
|
||||||
"Stop server has not updated stop status to 0\n"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
virtual_status = 1;
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
}
|
||||||
|
sharedMemory_setStatus(RUNNING);
|
||||||
if (pthread_create(&virtual_tid, NULL, &start_timer, NULL)) {
|
if (pthread_create(&virtual_tid, NULL, &start_timer, NULL)) {
|
||||||
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("Virtual Acquisition started\n"));
|
LOG(logINFO, ("Virtual Acquisition started\n"));
|
||||||
@ -2107,10 +2092,8 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
usleep(eiger_virtual_transmission_delay_frame);
|
usleep(eiger_virtual_transmission_delay_frame);
|
||||||
|
|
||||||
// update the virtual stop from stop server
|
// check if manual stop
|
||||||
virtual_stop = sharedMemory_getStop();
|
if (sharedMemory_getStop() == 1) {
|
||||||
// check if virtual_stop is high
|
|
||||||
if (virtual_stop == 1) {
|
|
||||||
setStartingFrameNumber(frameNr + iframes + 1);
|
setStartingFrameNumber(frameNr + iframes + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2209,10 +2192,7 @@ void *start_timer(void *arg) {
|
|||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
closeUDPSocket(1);
|
closeUDPSocket(1);
|
||||||
|
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -2221,23 +2201,16 @@ void *start_timer(void *arg) {
|
|||||||
int stopStateMachine() {
|
int stopStateMachine() {
|
||||||
LOG(logINFORED, ("Stopping state machine\n"));
|
LOG(logINFORED, ("Stopping state machine\n"));
|
||||||
// if scan active, stop scan
|
// if scan active, stop scan
|
||||||
if (sharedMemory_getScanStatus()) {
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
sharedMemory_setScanStop(1);
|
sharedMemory_setScanStop(1);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
sharedMemory_setStop(1);
|
||||||
virtual_stop = 1;
|
// read till status is idle
|
||||||
sharedMemory_setStop(virtual_stop);
|
while (sharedMemory_getStatus() == RUNNING)
|
||||||
// read till status is idle
|
;
|
||||||
int tempStatus = 1;
|
sharedMemory_setStop(0);
|
||||||
while (tempStatus == 1) {
|
LOG(logINFO, ("Stopped State Machine\n"));
|
||||||
tempStatus = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
virtual_stop = 0;
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
virtual_status = tempStatus;
|
|
||||||
LOG(logINFO, ("Stopped State Machine\n"));
|
|
||||||
}
|
|
||||||
return OK;
|
return OK;
|
||||||
#else
|
#else
|
||||||
if ((Feb_Control_StopAcquisition() != STATUS_IDLE) ||
|
if ((Feb_Control_StopAcquisition() != STATUS_IDLE) ||
|
||||||
@ -2294,18 +2267,23 @@ int startReadOut() {
|
|||||||
|
|
||||||
enum runStatus getRunStatus() {
|
enum runStatus getRunStatus() {
|
||||||
LOG(logDEBUG1, ("Getting status\n"));
|
LOG(logDEBUG1, ("Getting status\n"));
|
||||||
|
// scan error or running
|
||||||
|
if (sharedMemory_getScanStatus() == ERROR) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan ERROR\n"));
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan RUNNING\n"));
|
||||||
|
return RUNNING;
|
||||||
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (sharedMemory_getScanStatus() || sharedMemory_getStatus()) {
|
if (sharedMemory_getStatus() == RUNNING) {
|
||||||
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
||||||
return RUNNING;
|
return RUNNING;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
||||||
return IDLE;
|
return IDLE;
|
||||||
#else
|
#else
|
||||||
if (sharedMemory_getScanStatus()) {
|
|
||||||
LOG(logINFOBLUE, ("Status: Scan RUNNING\n"));
|
|
||||||
return RUNNING;
|
|
||||||
}
|
|
||||||
int i = Feb_Control_AcquisitionInProgress();
|
int i = Feb_Control_AcquisitionInProgress();
|
||||||
if (i == STATUS_ERROR) {
|
if (i == STATUS_ERROR) {
|
||||||
LOG(logERROR, ("Status: ERROR reading status register\n"));
|
LOG(logERROR, ("Status: ERROR reading status register\n"));
|
||||||
@ -2330,7 +2308,7 @@ enum runStatus getRunStatus() {
|
|||||||
void readFrame(int *ret, char *mess) {
|
void readFrame(int *ret, char *mess) {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
// wait for status to be done
|
// wait for status to be done
|
||||||
while (virtual_status == 1) {
|
while (sharedMemory_getStatus() == RUNNING) {
|
||||||
usleep(500);
|
usleep(500);
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
||||||
|
@ -37,8 +37,6 @@ char initErrorMessage[MAX_STR_LENGTH];
|
|||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
pthread_t pthread_virtual_tid;
|
pthread_t pthread_virtual_tid;
|
||||||
int virtual_status = 0;
|
|
||||||
int virtual_stop = 0;
|
|
||||||
int64_t virtual_currentFrameNumber = 2;
|
int64_t virtual_currentFrameNumber = 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -343,10 +341,7 @@ void initStopServer() {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_stop = 0;
|
sharedMemory_setStop(0);
|
||||||
if (!isControlServer) {
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,10 +389,7 @@ void setupDetector() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// pll defines
|
// pll defines
|
||||||
@ -2241,22 +2233,15 @@ int startStateMachine() {
|
|||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
||||||
// set status to running
|
// set status to running
|
||||||
if (isControlServer) {
|
if (sharedMemory_getStop() != 0) {
|
||||||
virtual_stop = sharedMemory_getStop();
|
LOG(logERROR, ("Cant start acquisition. "
|
||||||
if (virtual_stop != 0) {
|
"Stop server has not updated stop status to 0\n"));
|
||||||
LOG(logERROR, ("Cant start acquisition. "
|
return FAIL;
|
||||||
"Stop server has not updated stop status to 0\n"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
virtual_status = 1;
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
}
|
||||||
|
sharedMemory_setStatus(RUNNING);
|
||||||
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
||||||
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
||||||
@ -2320,10 +2305,8 @@ void *start_timer(void *arg) {
|
|||||||
// loop over number of frames
|
// loop over number of frames
|
||||||
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
||||||
|
|
||||||
// update the virtual stop from stop server
|
// check if manual stop
|
||||||
virtual_stop = sharedMemory_getStop();
|
if (sharedMemory_getStop() == 1) {
|
||||||
// check if virtual_stop is high
|
|
||||||
if (virtual_stop == 1) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2396,10 +2379,7 @@ void *start_timer(void *arg) {
|
|||||||
closeUDPSocket(1);
|
closeUDPSocket(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -2408,23 +2388,15 @@ void *start_timer(void *arg) {
|
|||||||
int stopStateMachine() {
|
int stopStateMachine() {
|
||||||
LOG(logINFORED, ("Stopping State Machine\n"));
|
LOG(logINFORED, ("Stopping State Machine\n"));
|
||||||
// if scan active, stop scan
|
// if scan active, stop scan
|
||||||
if (sharedMemory_getScanStatus()) {
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
sharedMemory_setScanStop(1);
|
sharedMemory_setScanStop(1);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
sharedMemory_setStop(1);
|
||||||
virtual_stop = 1;
|
while (sharedMemory_getStatus() == RUNNING)
|
||||||
sharedMemory_setStop(virtual_stop);
|
;
|
||||||
// read till status is idle
|
sharedMemory_setStop(0);
|
||||||
int tempStatus = 1;
|
LOG(logINFO, ("Stopped State Machine\n"));
|
||||||
while (tempStatus == 1) {
|
|
||||||
tempStatus = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
virtual_stop = 0;
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
virtual_status = tempStatus;
|
|
||||||
LOG(logINFO, ("Stopped State Machine\n"));
|
|
||||||
}
|
|
||||||
return OK;
|
return OK;
|
||||||
#endif
|
#endif
|
||||||
// stop state machine
|
// stop state machine
|
||||||
@ -2435,18 +2407,23 @@ int stopStateMachine() {
|
|||||||
|
|
||||||
enum runStatus getRunStatus() {
|
enum runStatus getRunStatus() {
|
||||||
LOG(logDEBUG1, ("Getting status\n"));
|
LOG(logDEBUG1, ("Getting status\n"));
|
||||||
|
// scan error or running
|
||||||
|
if (sharedMemory_getScanStatus() == ERROR) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan ERROR\n"));
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan RUNNING\n"));
|
||||||
|
return RUNNING;
|
||||||
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (sharedMemory_getScanStatus() || sharedMemory_getStatus()) {
|
if (sharedMemory_getStatus() == RUNNING) {
|
||||||
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
||||||
return RUNNING;
|
return RUNNING;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
||||||
return IDLE;
|
return IDLE;
|
||||||
#endif
|
#endif
|
||||||
if (sharedMemory_getScanStatus()) {
|
|
||||||
LOG(logINFOBLUE, ("Status: Scan RUNNING\n"));
|
|
||||||
return RUNNING;
|
|
||||||
}
|
|
||||||
uint32_t retval = bus_r(FLOW_STATUS_REG);
|
uint32_t retval = bus_r(FLOW_STATUS_REG);
|
||||||
LOG(logINFO, ("Status Register: %08x\n", retval));
|
LOG(logINFO, ("Status Register: %08x\n", retval));
|
||||||
|
|
||||||
@ -2513,10 +2490,7 @@ void readFrame(int *ret, char *mess) {
|
|||||||
|
|
||||||
u_int32_t runBusy() {
|
u_int32_t runBusy() {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
return ((sharedMemory_getStatus() == RUNNING) ? 1 : 0);
|
||||||
virtual_status = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
return virtual_status;
|
|
||||||
#endif
|
#endif
|
||||||
u_int32_t s = (bus_r(FLOW_STATUS_REG) & FLOW_STATUS_RUN_BUSY_MSK);
|
u_int32_t s = (bus_r(FLOW_STATUS_REG) & FLOW_STATUS_RUN_BUSY_MSK);
|
||||||
// LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
// LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
||||||
|
@ -34,8 +34,6 @@ char initErrorMessage[MAX_STR_LENGTH];
|
|||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
pthread_t pthread_virtual_tid;
|
pthread_t pthread_virtual_tid;
|
||||||
int virtual_status = 0;
|
|
||||||
int virtual_stop = 0;
|
|
||||||
int highvoltage = 0;
|
int highvoltage = 0;
|
||||||
int64_t virtual_currentFrameNumber = 2;
|
int64_t virtual_currentFrameNumber = 2;
|
||||||
#endif
|
#endif
|
||||||
@ -357,10 +355,7 @@ void initStopServer() {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_stop = 0;
|
sharedMemory_setStop(0);
|
||||||
if (!isControlServer) {
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -370,10 +365,7 @@ void setupDetector() {
|
|||||||
LOG(logINFO, ("This Server is for 1 Gotthard module (1280 channels)\n"));
|
LOG(logINFO, ("This Server is for 1 Gotthard module (1280 channels)\n"));
|
||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Initialization
|
// Initialization
|
||||||
@ -1517,22 +1509,15 @@ int startStateMachine() {
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
||||||
if (isControlServer) {
|
if (sharedMemory_getStop() != 0) {
|
||||||
virtual_stop = sharedMemory_getStop();
|
LOG(logERROR, ("Cant start acquisition. "
|
||||||
if (virtual_stop != 0) {
|
"Stop server has not updated stop status to 0\n"));
|
||||||
LOG(logERROR, ("Cant start acquisition. "
|
return FAIL;
|
||||||
"Stop server has not updated stop status to 0\n"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
virtual_status = 1;
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
}
|
||||||
|
sharedMemory_setStatus(RUNNING);
|
||||||
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
||||||
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
||||||
@ -1580,10 +1565,8 @@ void *start_timer(void *arg) {
|
|||||||
// loop over number of frames
|
// loop over number of frames
|
||||||
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
||||||
|
|
||||||
// update the virtual stop from stop server
|
// check if manual stop
|
||||||
virtual_stop = sharedMemory_getStop();
|
if (sharedMemory_getStop() == 1) {
|
||||||
// check if virtual_stop is high
|
|
||||||
if (virtual_stop == 1) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1624,10 +1607,7 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1636,21 +1616,16 @@ void *start_timer(void *arg) {
|
|||||||
int stopStateMachine() {
|
int stopStateMachine() {
|
||||||
LOG(logINFORED, ("Stopping State Machine\n"));
|
LOG(logINFORED, ("Stopping State Machine\n"));
|
||||||
// if scan active, stop scan
|
// if scan active, stop scan
|
||||||
if (sharedMemory_getScanStatus()) {
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
sharedMemory_setScanStop(1);
|
sharedMemory_setScanStop(1);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
if (!isControlServer) {
|
||||||
virtual_stop = 1;
|
sharedMemory_setStop(1);
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
// read till status is idle
|
// read till status is idle
|
||||||
int tempStatus = 1;
|
while (sharedMemory_getStatus() == RUNNING)
|
||||||
while (tempStatus == 1) {
|
;
|
||||||
tempStatus = sharedMemory_getStatus();
|
sharedMemory_setStop(0);
|
||||||
}
|
|
||||||
virtual_stop = 0;
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
virtual_status = tempStatus;
|
|
||||||
LOG(logINFO, ("Stopped State Machine\n"));
|
LOG(logINFO, ("Stopped State Machine\n"));
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
@ -1674,18 +1649,24 @@ int stopStateMachine() {
|
|||||||
|
|
||||||
enum runStatus getRunStatus() {
|
enum runStatus getRunStatus() {
|
||||||
LOG(logDEBUG1, ("Getting status\n"));
|
LOG(logDEBUG1, ("Getting status\n"));
|
||||||
|
// scan error or running
|
||||||
|
if (sharedMemory_getScanStatus() == ERROR) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan ERROR\n"));
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan RUNNING\n"));
|
||||||
|
return RUNNING;
|
||||||
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (sharedMemory_getScanStatus() || sharedMemory_getStatus()) {
|
if (sharedMemory_getStatus() == RUNNING) {
|
||||||
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
||||||
return RUNNING;
|
return RUNNING;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
||||||
return IDLE;
|
return IDLE;
|
||||||
#endif
|
#endif
|
||||||
if (sharedMemory_getScanStatus()) {
|
|
||||||
LOG(logINFOBLUE, ("Status: Scan RUNNING\n"));
|
|
||||||
return RUNNING;
|
|
||||||
}
|
|
||||||
enum runStatus s = IDLE;
|
enum runStatus s = IDLE;
|
||||||
u_int32_t retval = runState(logINFO);
|
u_int32_t retval = runState(logINFO);
|
||||||
|
|
||||||
@ -1754,7 +1735,7 @@ enum runStatus getRunStatus() {
|
|||||||
|
|
||||||
void readFrame(int *ret, char *mess) {
|
void readFrame(int *ret, char *mess) {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
while (virtual_status) {
|
while (sharedMemory_getStatus() == RUNNING) {
|
||||||
// LOG(logERROR, ("Waiting for finished flag\n");
|
// LOG(logERROR, ("Waiting for finished flag\n");
|
||||||
usleep(5000);
|
usleep(5000);
|
||||||
}
|
}
|
||||||
@ -1778,17 +1759,14 @@ void readFrame(int *ret, char *mess) {
|
|||||||
|
|
||||||
u_int32_t runBusy() {
|
u_int32_t runBusy() {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
return ((sharedMemory_getStatus() == RUNNING) ? 1 : 0);
|
||||||
virtual_status = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
return virtual_status;
|
|
||||||
#endif
|
#endif
|
||||||
return runState(logDEBUG1) & STATUS_RN_BSY_MSK;
|
return runState(logDEBUG1) & STATUS_RN_BSY_MSK;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t runState(enum TLogLevel lev) {
|
u_int32_t runState(enum TLogLevel lev) {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
return virtual_status;
|
return (int)sharedMemory_getStatus();
|
||||||
#endif
|
#endif
|
||||||
u_int32_t s = bus_r(STATUS_REG);
|
u_int32_t s = bus_r(STATUS_REG);
|
||||||
LOG(lev, ("Status Register: 0x%08x\n", s));
|
LOG(lev, ("Status Register: 0x%08x\n", s));
|
||||||
|
@ -36,8 +36,6 @@ char initErrorMessage[MAX_STR_LENGTH];
|
|||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
pthread_t pthread_virtual_tid;
|
pthread_t pthread_virtual_tid;
|
||||||
int virtual_status = 0;
|
|
||||||
int virtual_stop = 0;
|
|
||||||
int virtual_image_test_mode = 0;
|
int virtual_image_test_mode = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -363,10 +361,7 @@ void initStopServer() {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_stop = 0;
|
sharedMemory_setStop(0);
|
||||||
if (!isControlServer) {
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
}
|
|
||||||
// temp threshold and reset event (read by stop server)
|
// temp threshold and reset event (read by stop server)
|
||||||
setThresholdTemperature(DEFAULT_TMP_THRSHLD);
|
setThresholdTemperature(DEFAULT_TMP_THRSHLD);
|
||||||
setTemperatureEvent(0);
|
setTemperatureEvent(0);
|
||||||
@ -382,10 +377,7 @@ void setupDetector() {
|
|||||||
clkPhase[i] = 0;
|
clkPhase[i] = 0;
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ALTERA_PLL_ResetPLL();
|
ALTERA_PLL_ResetPLL();
|
||||||
@ -1672,22 +1664,15 @@ int startStateMachine() {
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("starting state machine\n"));
|
LOG(logINFOBLUE, ("starting state machine\n"));
|
||||||
if (isControlServer) {
|
if (sharedMemory_getStop() != 0) {
|
||||||
virtual_stop = sharedMemory_getStop();
|
LOG(logERROR, ("Cant start acquisition. "
|
||||||
if (virtual_stop != 0) {
|
"Stop server has not updated stop status to 0\n"));
|
||||||
LOG(logERROR, ("Cant start acquisition. "
|
return FAIL;
|
||||||
"Stop server has not updated stop status to 0\n"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
virtual_status = 1;
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
}
|
||||||
|
sharedMemory_setStatus(RUNNING);
|
||||||
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
||||||
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
||||||
@ -1740,10 +1725,8 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
usleep(transmissionDelayUs);
|
usleep(transmissionDelayUs);
|
||||||
|
|
||||||
// update the virtual stop from stop server
|
// check if manual stop
|
||||||
virtual_stop = sharedMemory_getStop();
|
if (sharedMemory_getStop() == 1) {
|
||||||
// check if virtual_stop is high
|
|
||||||
if (virtual_stop == 1) {
|
|
||||||
setStartingFrameNumber(frameNr + iframes + 1);
|
setStartingFrameNumber(frameNr + iframes + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1818,10 +1801,7 @@ void *start_timer(void *arg) {
|
|||||||
closeUDPSocket(1);
|
closeUDPSocket(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1830,23 +1810,16 @@ void *start_timer(void *arg) {
|
|||||||
int stopStateMachine() {
|
int stopStateMachine() {
|
||||||
LOG(logINFORED, ("Stopping State Machine\n"));
|
LOG(logINFORED, ("Stopping State Machine\n"));
|
||||||
// if scan active, stop scan
|
// if scan active, stop scan
|
||||||
if (sharedMemory_getScanStatus()) {
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
sharedMemory_setScanStop(1);
|
sharedMemory_setScanStop(1);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
sharedMemory_setStop(1);
|
||||||
virtual_stop = 1;
|
// read till status is idle
|
||||||
sharedMemory_setStop(virtual_stop);
|
while (sharedMemory_getStatus() == RUNNING)
|
||||||
// read till status is idle
|
;
|
||||||
int tempStatus = 1;
|
sharedMemory_setStop(0);
|
||||||
while (tempStatus == 1) {
|
LOG(logINFO, ("Stopped State Machine\n"));
|
||||||
tempStatus = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
virtual_stop = 0;
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
virtual_status = tempStatus;
|
|
||||||
LOG(logINFO, ("Stopped State Machine\n"));
|
|
||||||
}
|
|
||||||
return OK;
|
return OK;
|
||||||
#endif
|
#endif
|
||||||
// stop state machine
|
// stop state machine
|
||||||
@ -1860,18 +1833,24 @@ int stopStateMachine() {
|
|||||||
|
|
||||||
enum runStatus getRunStatus() {
|
enum runStatus getRunStatus() {
|
||||||
LOG(logDEBUG1, ("Getting status\n"));
|
LOG(logDEBUG1, ("Getting status\n"));
|
||||||
|
// scan error or running
|
||||||
|
if (sharedMemory_getScanStatus() == ERROR) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan ERROR\n"));
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan RUNNING\n"));
|
||||||
|
return RUNNING;
|
||||||
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (sharedMemory_getScanStatus() || sharedMemory_getStatus()) {
|
if (sharedMemory_getStatus() == RUNNING) {
|
||||||
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
||||||
return RUNNING;
|
return RUNNING;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
||||||
return IDLE;
|
return IDLE;
|
||||||
#endif
|
#endif
|
||||||
if (sharedMemory_getScanStatus()) {
|
|
||||||
LOG(logINFOBLUE, ("Status: Scan RUNNING\n"));
|
|
||||||
return RUNNING;
|
|
||||||
}
|
|
||||||
enum runStatus s;
|
enum runStatus s;
|
||||||
u_int32_t retval = bus_r(STATUS_REG);
|
u_int32_t retval = bus_r(STATUS_REG);
|
||||||
LOG(logINFO, ("Status Register: %08x\n", retval));
|
LOG(logINFO, ("Status Register: %08x\n", retval));
|
||||||
@ -1932,10 +1911,7 @@ void readFrame(int *ret, char *mess) {
|
|||||||
|
|
||||||
u_int32_t runBusy() {
|
u_int32_t runBusy() {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
return ((sharedMemory_getStatus() == RUNNING) ? 1 : 0);
|
||||||
virtual_status = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
return virtual_status;
|
|
||||||
#endif
|
#endif
|
||||||
u_int32_t s = (bus_r(STATUS_REG) & RUN_BUSY_MSK);
|
u_int32_t s = (bus_r(STATUS_REG) & RUN_BUSY_MSK);
|
||||||
LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
||||||
|
@ -39,8 +39,6 @@ char initErrorMessage[MAX_STR_LENGTH];
|
|||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
pthread_t pthread_virtual_tid;
|
pthread_t pthread_virtual_tid;
|
||||||
int virtual_status = 0;
|
|
||||||
int virtual_stop = 0;
|
|
||||||
uint64_t virtual_pattern[MAX_PATTERN_LENGTH];
|
uint64_t virtual_pattern[MAX_PATTERN_LENGTH];
|
||||||
int64_t virtual_currentFrameNumber = 2;
|
int64_t virtual_currentFrameNumber = 2;
|
||||||
#endif
|
#endif
|
||||||
@ -430,10 +428,7 @@ void initStopServer() {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_stop = 0;
|
sharedMemory_setStop(0);
|
||||||
if (!isControlServer) {
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -486,10 +481,7 @@ void setupDetector() {
|
|||||||
adcEnableMask_10g = 0;
|
adcEnableMask_10g = 0;
|
||||||
nSamples = 1;
|
nSamples = 1;
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
memset(virtual_pattern, 0, sizeof(virtual_pattern));
|
memset(virtual_pattern, 0, sizeof(virtual_pattern));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1854,22 +1846,15 @@ int startStateMachine() {
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
||||||
if (isControlServer) {
|
if (sharedMemory_getStop() != 0) {
|
||||||
virtual_stop = sharedMemory_getStop();
|
LOG(logERROR, ("Cant start acquisition. "
|
||||||
if (virtual_stop != 0) {
|
"Stop server has not updated stop status to 0\n"));
|
||||||
LOG(logERROR, ("Cant start acquisition. "
|
return FAIL;
|
||||||
"Stop server has not updated stop status to 0\n"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
virtual_status = 1;
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
}
|
||||||
|
sharedMemory_setStatus(RUNNING);
|
||||||
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
||||||
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
||||||
@ -1930,10 +1915,8 @@ void *start_timer(void *arg) {
|
|||||||
// loop over number of frames
|
// loop over number of frames
|
||||||
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
||||||
|
|
||||||
// update the virtual stop from stop server
|
// check if manual stop
|
||||||
virtual_stop = sharedMemory_getStop();
|
if (sharedMemory_getStop() == 1) {
|
||||||
// check if virtual_stop is high
|
|
||||||
if (virtual_stop == 1) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1981,10 +1964,7 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1993,23 +1973,16 @@ void *start_timer(void *arg) {
|
|||||||
int stopStateMachine() {
|
int stopStateMachine() {
|
||||||
LOG(logINFORED, ("Stopping State Machine\n"));
|
LOG(logINFORED, ("Stopping State Machine\n"));
|
||||||
// if scan active, stop scan
|
// if scan active, stop scan
|
||||||
if (sharedMemory_getScanStatus()) {
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
sharedMemory_setScanStop(1);
|
sharedMemory_setScanStop(1);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
sharedMemory_setStop(1);
|
||||||
virtual_stop = 1;
|
// read till status is idle
|
||||||
sharedMemory_setStop(virtual_stop);
|
while (sharedMemory_getStatus() == RUNNING)
|
||||||
// read till status is idle
|
;
|
||||||
int tempStatus = 1;
|
sharedMemory_setStop(0);
|
||||||
while (tempStatus == 1) {
|
LOG(logINFO, ("Stopped State Machine\n"));
|
||||||
tempStatus = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
virtual_stop = 0;
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
virtual_status = tempStatus;
|
|
||||||
LOG(logINFO, ("Stopped State Machine\n"));
|
|
||||||
}
|
|
||||||
return OK;
|
return OK;
|
||||||
#endif
|
#endif
|
||||||
// stop state machine
|
// stop state machine
|
||||||
@ -2024,18 +1997,24 @@ int stopStateMachine() {
|
|||||||
|
|
||||||
enum runStatus getRunStatus() {
|
enum runStatus getRunStatus() {
|
||||||
LOG(logDEBUG1, ("Getting status\n"));
|
LOG(logDEBUG1, ("Getting status\n"));
|
||||||
|
// scan error or running
|
||||||
|
if (sharedMemory_getScanStatus() == ERROR) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan ERROR\n"));
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan RUNNING\n"));
|
||||||
|
return RUNNING;
|
||||||
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (sharedMemory_getScanStatus() || sharedMemory_getStatus()) {
|
if (sharedMemory_getStatus() == RUNNING) {
|
||||||
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
||||||
return RUNNING;
|
return RUNNING;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
||||||
return IDLE;
|
return IDLE;
|
||||||
#endif
|
#endif
|
||||||
if (sharedMemory_getScanStatus()) {
|
|
||||||
LOG(logINFOBLUE, ("Status: Scan RUNNING\n"));
|
|
||||||
return RUNNING;
|
|
||||||
}
|
|
||||||
uint32_t retval = bus_r(STATUS_REG);
|
uint32_t retval = bus_r(STATUS_REG);
|
||||||
LOG(logINFO, ("Status Register: %08x\n", retval));
|
LOG(logINFO, ("Status Register: %08x\n", retval));
|
||||||
|
|
||||||
@ -2263,10 +2242,7 @@ int readFrameFromFifo() {
|
|||||||
|
|
||||||
uint32_t runBusy() {
|
uint32_t runBusy() {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
return ((sharedMemory_getStatus() == RUNNING) ? 1 : 0);
|
||||||
virtual_status = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
return virtual_status;
|
|
||||||
#endif
|
#endif
|
||||||
uint32_t s = (bus_r(STATUS_REG) & STATUS_RN_BSY_MSK);
|
uint32_t s = (bus_r(STATUS_REG) & STATUS_RN_BSY_MSK);
|
||||||
// LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
// LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
||||||
|
@ -35,8 +35,6 @@ char initErrorMessage[MAX_STR_LENGTH];
|
|||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
pthread_t pthread_virtual_tid;
|
pthread_t pthread_virtual_tid;
|
||||||
int virtual_status = 0;
|
|
||||||
int virtual_stop = 0;
|
|
||||||
int64_t virtual_currentFrameNumber = 2;
|
int64_t virtual_currentFrameNumber = 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -332,10 +330,7 @@ void initStopServer() {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_stop = 0;
|
sharedMemory_setStop(0);
|
||||||
if (!isControlServer) {
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,10 +384,7 @@ void setupDetector() {
|
|||||||
clkPhase[i] = 0;
|
clkPhase[i] = 0;
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// pll defines
|
// pll defines
|
||||||
@ -1981,23 +1973,15 @@ int startStateMachine() {
|
|||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
LOG(logINFOBLUE, ("Starting State Machine\n"));
|
||||||
// set status to running
|
// set status to running
|
||||||
if (isControlServer) {
|
if (sharedMemory_getStop() != 0) {
|
||||||
virtual_stop = sharedMemory_getStop();
|
LOG(logERROR, ("Cant start acquisition. "
|
||||||
if (virtual_stop != 0) {
|
"Stop server has not updated stop status to 0\n"));
|
||||||
LOG(logERROR, ("Cant start acquisition. "
|
return FAIL;
|
||||||
"Stop server has not updated stop status to 0\n"));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual_status = 1;
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
}
|
||||||
|
sharedMemory_setStatus(RUNNING);
|
||||||
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
if (pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
|
||||||
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
|
||||||
@ -2039,10 +2023,8 @@ void *start_timer(void *arg) {
|
|||||||
// loop over number of frames
|
// loop over number of frames
|
||||||
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
for (int frameNr = 0; frameNr != numFrames; ++frameNr) {
|
||||||
|
|
||||||
// update the virtual stop from stop server
|
// check if manual stop
|
||||||
virtual_stop = sharedMemory_getStop();
|
if (sharedMemory_getStop() == 1) {
|
||||||
// check if virtual_stop is high
|
|
||||||
if (virtual_stop == 1) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2091,10 +2073,7 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
|
||||||
virtual_status = 0;
|
sharedMemory_setStatus(IDLE);
|
||||||
if (isControlServer) {
|
|
||||||
sharedMemory_setStatus(virtual_status);
|
|
||||||
}
|
|
||||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -2103,21 +2082,16 @@ void *start_timer(void *arg) {
|
|||||||
int stopStateMachine() {
|
int stopStateMachine() {
|
||||||
LOG(logINFORED, ("Stopping State Machine\n"));
|
LOG(logINFORED, ("Stopping State Machine\n"));
|
||||||
// if scan active, stop scan
|
// if scan active, stop scan
|
||||||
if (sharedMemory_getScanStatus()) {
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
sharedMemory_setScanStop(1);
|
sharedMemory_setScanStop(1);
|
||||||
}
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
if (!isControlServer) {
|
||||||
virtual_stop = 1;
|
sharedMemory_setStop(1);
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
// read till status is idle
|
// read till status is idle
|
||||||
int tempStatus = 1;
|
while (sharedMemory_getStatus() == RUNNING)
|
||||||
while (tempStatus == 1) {
|
;
|
||||||
tempStatus = sharedMemory_getStatus();
|
sharedMemory_setStop(0);
|
||||||
}
|
|
||||||
virtual_stop = 0;
|
|
||||||
sharedMemory_setStop(virtual_stop);
|
|
||||||
virtual_status = tempStatus;
|
|
||||||
LOG(logINFO, ("Stopped State Machine\n"));
|
LOG(logINFO, ("Stopped State Machine\n"));
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
@ -2130,18 +2104,24 @@ int stopStateMachine() {
|
|||||||
|
|
||||||
enum runStatus getRunStatus() {
|
enum runStatus getRunStatus() {
|
||||||
LOG(logDEBUG1, ("Getting status\n"));
|
LOG(logDEBUG1, ("Getting status\n"));
|
||||||
|
// scan error or running
|
||||||
|
if (sharedMemory_getScanStatus() == ERROR) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan ERROR\n"));
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
|
LOG(logINFOBLUE, ("Status: scan RUNNING\n"));
|
||||||
|
return RUNNING;
|
||||||
|
}
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (sharedMemory_getScanStatus() || sharedMemory_getStatus()) {
|
if (sharedMemory_getStatus() == RUNNING) {
|
||||||
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
LOG(logINFOBLUE, ("Status: RUNNING\n"));
|
||||||
return RUNNING;
|
return RUNNING;
|
||||||
}
|
}
|
||||||
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
LOG(logINFOBLUE, ("Status: IDLE\n"));
|
||||||
return IDLE;
|
return IDLE;
|
||||||
#endif
|
#endif
|
||||||
if (sharedMemory_getScanStatus()) {
|
|
||||||
LOG(logINFOBLUE, ("Status: Scan RUNNING\n"));
|
|
||||||
return RUNNING;
|
|
||||||
}
|
|
||||||
uint32_t retval = bus_r(FLOW_STATUS_REG);
|
uint32_t retval = bus_r(FLOW_STATUS_REG);
|
||||||
LOG(logINFO, ("Status Register: %08x\n", retval));
|
LOG(logINFO, ("Status Register: %08x\n", retval));
|
||||||
|
|
||||||
@ -2209,10 +2189,7 @@ void readFrame(int *ret, char *mess) {
|
|||||||
|
|
||||||
u_int32_t runBusy() {
|
u_int32_t runBusy() {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
if (!isControlServer) {
|
return ((sharedMemory_getStatus() == RUNNING) ? 1 : 0);
|
||||||
virtual_status = sharedMemory_getStatus();
|
|
||||||
}
|
|
||||||
return virtual_status;
|
|
||||||
#endif
|
#endif
|
||||||
u_int32_t s = (bus_r(FLOW_STATUS_REG) & FLOW_STATUS_RUN_BUSY_MSK);
|
u_int32_t s = (bus_r(FLOW_STATUS_REG) & FLOW_STATUS_RUN_BUSY_MSK);
|
||||||
// LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
// LOG(logDEBUG1, ("Status Register: %08x\n", s));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include "sls_detector_defs.h"
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
|
|
||||||
void sharedMemory_print();
|
void sharedMemory_print();
|
||||||
@ -12,12 +12,12 @@ int sharedMemory_remove();
|
|||||||
void sharedMemory_lock();
|
void sharedMemory_lock();
|
||||||
void sharedMemory_unlock();
|
void sharedMemory_unlock();
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
void sharedMemory_setStatus(int s);
|
void sharedMemory_setStatus(enum runStatus s);
|
||||||
int sharedMemory_getStatus();
|
enum runStatus sharedMemory_getStatus();
|
||||||
void sharedMemory_setStop(int s);
|
void sharedMemory_setStop(int s);
|
||||||
int sharedMemory_getStop();
|
int sharedMemory_getStop();
|
||||||
#endif
|
#endif
|
||||||
void sharedMemory_setScanStatus(int s);
|
void sharedMemory_setScanStatus(enum runStatus s);
|
||||||
int sharedMemory_getScanStatus();
|
enum runStatus sharedMemory_getScanStatus();
|
||||||
void sharedMemory_setScanStop(int s);
|
void sharedMemory_setScanStop(int s);
|
||||||
int sharedMemory_getScanStop();
|
int sharedMemory_getScanStop();
|
@ -224,5 +224,4 @@ int get_veto(int);
|
|||||||
int set_veto(int);
|
int set_veto(int);
|
||||||
int set_pattern(int);
|
int set_pattern(int);
|
||||||
int get_scan(int);
|
int get_scan(int);
|
||||||
int disable_scan(int);
|
int set_scan(int);
|
||||||
int enable_scan(int);
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include "sharedMemory.h"
|
#include "sharedMemory.h"
|
||||||
#include "clogger.h"
|
#include "clogger.h"
|
||||||
#include "sls_detector_defs.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -15,10 +14,10 @@
|
|||||||
typedef struct Memory {
|
typedef struct Memory {
|
||||||
int version;
|
int version;
|
||||||
sem_t sem;
|
sem_t sem;
|
||||||
int scanStatus;
|
enum runStatus scanStatus; // idle, running or error
|
||||||
int scanStop;
|
int scanStop;
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
int status;
|
enum runStatus status;
|
||||||
int stop;
|
int stop;
|
||||||
#endif
|
#endif
|
||||||
} sharedMem;
|
} sharedMem;
|
||||||
@ -32,8 +31,13 @@ void sharedMemory_print() {
|
|||||||
LOG(logINFO, ("%s Shared Memory:\n", isControlServer ? "c" : "s"));
|
LOG(logINFO, ("%s Shared Memory:\n", isControlServer ? "c" : "s"));
|
||||||
LOG(logINFO,
|
LOG(logINFO,
|
||||||
("%s version:0x%x\n", isControlServer ? "c" : "s", shm->version));
|
("%s version:0x%x\n", isControlServer ? "c" : "s", shm->version));
|
||||||
|
LOG(logINFO, ("%s scan status: %d\n", isControlServer ? "c" : "s",
|
||||||
|
(int)shm->scanStatus));
|
||||||
|
LOG(logINFO,
|
||||||
|
("%s scan stop: %d\n", isControlServer ? "c" : "s", shm->scanStop));
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
LOG(logINFO, ("%s status: %d\n", isControlServer ? "c" : "s", shm->status));
|
LOG(logINFO,
|
||||||
|
("%s status: %d\n", isControlServer ? "c" : "s", (int)shm->status));
|
||||||
LOG(logINFO, ("%s stop: %d\n", isControlServer ? "c" : "s", shm->stop));
|
LOG(logINFO, ("%s stop: %d\n", isControlServer ? "c" : "s", shm->stop));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -67,8 +71,10 @@ int sharedMemory_create(int port) {
|
|||||||
void sharedMemory_initialize() {
|
void sharedMemory_initialize() {
|
||||||
shm->version = SHM_VERSION;
|
shm->version = SHM_VERSION;
|
||||||
sem_init(&(shm->sem), 1, 1);
|
sem_init(&(shm->sem), 1, 1);
|
||||||
|
shm->scanStatus = IDLE;
|
||||||
|
shm->scanStop = 0;
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
shm->status = 0;
|
shm->status = IDLE;
|
||||||
shm->stop = 0;
|
shm->stop = 0;
|
||||||
#endif
|
#endif
|
||||||
LOG(logINFO, ("Shared memory initialized\n"))
|
LOG(logINFO, ("Shared memory initialized\n"))
|
||||||
@ -125,14 +131,14 @@ void sharedMemory_lock() { sem_wait(&(shm->sem)); }
|
|||||||
void sharedMemory_unlock() { sem_post(&(shm->sem)); }
|
void sharedMemory_unlock() { sem_post(&(shm->sem)); }
|
||||||
|
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
void sharedMemory_setStatus(int s) {
|
void sharedMemory_setStatus(enum runStatus s) {
|
||||||
sharedMemory_lock();
|
sharedMemory_lock();
|
||||||
shm->status = s;
|
shm->status = s;
|
||||||
sharedMemory_unlock();
|
sharedMemory_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
int sharedMemory_getStatus() {
|
enum runStatus sharedMemory_getStatus() {
|
||||||
int s = 0;
|
enum runStatus s = 0;
|
||||||
sharedMemory_lock();
|
sharedMemory_lock();
|
||||||
s = shm->status;
|
s = shm->status;
|
||||||
sharedMemory_unlock();
|
sharedMemory_unlock();
|
||||||
@ -154,14 +160,14 @@ int sharedMemory_getStop() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void sharedMemory_setScanStatus(int s) {
|
void sharedMemory_setScanStatus(enum runStatus s) {
|
||||||
sharedMemory_lock();
|
sharedMemory_lock();
|
||||||
shm->scanStatus = s;
|
shm->scanStatus = s;
|
||||||
sharedMemory_unlock();
|
sharedMemory_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
int sharedMemory_getScanStatus() {
|
enum runStatus sharedMemory_getScanStatus() {
|
||||||
int s = 0;
|
enum runStatus s = IDLE;
|
||||||
sharedMemory_lock();
|
sharedMemory_lock();
|
||||||
s = shm->scanStatus;
|
s = shm->scanStatus;
|
||||||
sharedMemory_unlock();
|
sharedMemory_unlock();
|
||||||
|
@ -55,7 +55,8 @@ int (*flist[NUM_DET_FUNCTIONS])(int);
|
|||||||
int scan = 0;
|
int scan = 0;
|
||||||
int numScanSteps = 0;
|
int numScanSteps = 0;
|
||||||
int *scanSteps = NULL;
|
int *scanSteps = NULL;
|
||||||
int64_t scanDacSettleTime_us = 0;
|
int64_t scanSettleTime_ns = 0;
|
||||||
|
enum dacIndex scanGlobalIndex = 0;
|
||||||
enum DACINDEX scanDac = 0;
|
enum DACINDEX scanDac = 0;
|
||||||
int scanTrimbits = 0;
|
int scanTrimbits = 0;
|
||||||
|
|
||||||
@ -341,8 +342,7 @@ void function_table() {
|
|||||||
flist[F_SET_VETO] = &set_veto;
|
flist[F_SET_VETO] = &set_veto;
|
||||||
flist[F_SET_PATTERN] = &set_pattern;
|
flist[F_SET_PATTERN] = &set_pattern;
|
||||||
flist[F_GET_SCAN] = get_scan;
|
flist[F_GET_SCAN] = get_scan;
|
||||||
flist[F_DISABLE_SCAN] = disable_scan;
|
flist[F_SET_SCAN] = set_scan;
|
||||||
flist[F_ENABLE_SCAN] = enable_scan;
|
|
||||||
// check
|
// check
|
||||||
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
|
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
|
||||||
LOG(logERROR, ("The last detector function enum has reached its "
|
LOG(logERROR, ("The last detector function enum has reached its "
|
||||||
@ -1723,56 +1723,76 @@ int start_state_machine(int blocking, int file_des) {
|
|||||||
strcpy(mess, "Could not start acquisition because ");
|
strcpy(mess, "Could not start acquisition because ");
|
||||||
strcat(mess, configureMessage);
|
strcat(mess, configureMessage);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
|
} else if (sharedMemory_getScanStatus() == RUNNING) {
|
||||||
|
ret = FAIL;
|
||||||
|
strcpy(mess, "Could not start acquisition because a scan is "
|
||||||
|
"already running!\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
} else {
|
} else {
|
||||||
|
// start acquisition thread should start here
|
||||||
|
|
||||||
int times = 1;
|
int times = 1;
|
||||||
|
sharedMemory_setScanStop(0);
|
||||||
|
sharedMemory_setScanStatus(IDLE); // if it was error
|
||||||
// start of scan
|
// start of scan
|
||||||
if (scan) {
|
if (scan) {
|
||||||
sharedMemory_setScanStop(0);
|
sharedMemory_setScanStatus(RUNNING);
|
||||||
sharedMemory_setScanStatus(1);
|
|
||||||
times = numScanSteps;
|
times = numScanSteps;
|
||||||
}
|
}
|
||||||
for (int i = 0; i != times; ++i) {
|
for (int i = 0; i != times; ++i) {
|
||||||
// if scanstop
|
// normal acquisition
|
||||||
if (scan && sharedMemory_getScanStop()) {
|
if (scan == 0) {
|
||||||
LOG(logINFORED, ("Scan stopped!\n"));
|
LOG(logINFOBLUE, ("Normal Acquisition (not scan)\n"));
|
||||||
sharedMemory_setScanStatus(0);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (scanTrimbits) {
|
// scan
|
||||||
LOG(logINFOBLUE, ("Trimbits scan %d/%d: [%d]\n", i, times,
|
else {
|
||||||
scanSteps[i]));
|
// check scan stop
|
||||||
#if defined(EIGERD) || defined(MYTHEN3D)
|
if (sharedMemory_getScanStop()) {
|
||||||
setAllTrimbits(scanSteps[i]);
|
LOG(logINFORED, ("Scan manually stopped!\n"));
|
||||||
#else
|
sharedMemory_setScanStatus(IDLE);
|
||||||
LOG(logERROR, ("trimbit scan not implemented!\n"));
|
break;
|
||||||
#endif
|
}
|
||||||
} else if (numScanSteps > 0) {
|
// trimbits scan
|
||||||
LOG(logINFOBLUE, ("Dac [%d] scan %d/%d: [%d]\n", scanDac, i,
|
if (scanTrimbits) {
|
||||||
times, scanSteps[i]));
|
LOG(logINFOBLUE, ("Trimbits scan %d/%d: [%d]\n", i,
|
||||||
setDAC(scanDac, scanSteps[i], 0);
|
times, scanSteps[i]));
|
||||||
int retval = getDAC(scanDac, 0);
|
#if !defined(EIGERD) && !defined(MYTHEN3D)
|
||||||
if (abs(retval - scanSteps[i]) > 5) {
|
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(mess, "trimbit scan not implemented for this "
|
||||||
|
"detector!\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
sharedMemory_setScanStatus(ERROR);
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
setAllTrimbits(scanSteps[i]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
// dac scan
|
||||||
|
else {
|
||||||
|
LOG(logINFOBLUE, ("Dac [%d] scan %d/%d: [%d]\n",
|
||||||
|
scanDac, i, times, scanSteps[i]));
|
||||||
|
setDAC(scanDac, scanSteps[i], 0);
|
||||||
|
int retval = getDAC(scanDac, 0);
|
||||||
|
if (abs(retval - scanSteps[i]) > 5) {
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(
|
||||||
|
mess,
|
||||||
"Could not scan. Setting dac %d : wrote %d but "
|
"Could not scan. Setting dac %d : wrote %d but "
|
||||||
"read %d\n",
|
"read %d\n",
|
||||||
scanDac, scanSteps[i], scanSteps[i]);
|
scanDac, scanSteps[i], scanSteps[i]);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
if (scan) {
|
sharedMemory_setScanStatus(ERROR);
|
||||||
sharedMemory_setScanStatus(0);
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
// check scan stop
|
||||||
|
if (sharedMemory_getScanStop()) {
|
||||||
|
LOG(logINFORED, ("Scan manually stopped!\n"));
|
||||||
|
sharedMemory_setScanStatus(IDLE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
usleep(scanSettleTime_ns / 1000);
|
||||||
LOG(logINFOBLUE, ("Normal Acquisition (not scan)\n"));
|
|
||||||
}
|
}
|
||||||
// if scanstop
|
|
||||||
if (scan && sharedMemory_getScanStop()) {
|
|
||||||
LOG(logINFORED, ("Scan stopped!\n"));
|
|
||||||
sharedMemory_setScanStatus(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
usleep(scanDacSettleTime_us);
|
|
||||||
#ifdef EIGERD
|
#ifdef EIGERD
|
||||||
prepareAcquisition();
|
prepareAcquisition();
|
||||||
#endif
|
#endif
|
||||||
@ -1789,7 +1809,7 @@ int start_state_machine(int blocking, int file_des) {
|
|||||||
#endif
|
#endif
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
if (scan) {
|
if (scan) {
|
||||||
sharedMemory_setScanStatus(0);
|
sharedMemory_setScanStatus(ERROR);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1801,7 +1821,7 @@ int start_state_machine(int blocking, int file_des) {
|
|||||||
}
|
}
|
||||||
// end of scan
|
// end of scan
|
||||||
if (scan) {
|
if (scan) {
|
||||||
sharedMemory_setScanStatus(0);
|
sharedMemory_setScanStatus(IDLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||||
@ -7456,184 +7476,214 @@ int set_pattern(int file_des) {
|
|||||||
int get_scan(int file_des) {
|
int get_scan(int file_des) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
int retval[4] = {-1, -1, -1, -1};
|
int retvals[5] = {0, 0, 0, 0, 0};
|
||||||
int64_t retval_time = -1;
|
int64_t retvals_dacTime = 0;
|
||||||
|
|
||||||
LOG(logDEBUG1, ("Getting scan\n"));
|
LOG(logDEBUG1, ("Getting scan\n"));
|
||||||
|
|
||||||
// get only
|
// get only
|
||||||
retval[0] = scan;
|
retvals[0] = scan;
|
||||||
LOG(logDEBUG1, ("scan mode retval: %u\n", retval));
|
if (scan) {
|
||||||
|
retvals[1] = scanGlobalIndex;
|
||||||
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
|
retvals[2] = scanSteps[0];
|
||||||
}
|
retvals[3] = scanSteps[numScanSteps - 1];
|
||||||
|
retvals[4] = scanSteps[1] - scanSteps[0];
|
||||||
int disable_scan(int file_des) {
|
retvals_dacTime = scanSettleTime_ns;
|
||||||
ret = OK;
|
|
||||||
memset(mess, 0, sizeof(mess));
|
|
||||||
|
|
||||||
// only set
|
|
||||||
if (Server_VerifyLock() == OK) {
|
|
||||||
LOG(logINFOBLUE, ("Disabling scan\n"));
|
|
||||||
scan = 0;
|
|
||||||
scanTrimbits = 0;
|
|
||||||
numScanSteps = 0;
|
|
||||||
if (scanSteps != NULL) {
|
|
||||||
free(scanSteps);
|
|
||||||
scanSteps = NULL;
|
|
||||||
}
|
|
||||||
int64_t arg = 1;
|
|
||||||
setNumFrames(arg);
|
|
||||||
int64_t retval = getNumFrames();
|
|
||||||
LOG(logDEBUG1, ("retval num frames %lld\n", (long long int)retval));
|
|
||||||
validate64(arg, retval, "set number of frames", DEC);
|
|
||||||
}
|
}
|
||||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
LOG(logDEBUG1, ("scan retval: [%s, dac:%d, start:%d, stop:%d, step:%d, "
|
||||||
|
"dacTime:%lldns]\n",
|
||||||
|
retvals[0] ? "enabled" : "disabled", retvals[1], retvals[2],
|
||||||
|
retvals[3], retvals[4], (long long int)retvals_dacTime));
|
||||||
|
Server_SendResult(file_des, INT32, NULL, 0);
|
||||||
|
if (ret != FAIL) {
|
||||||
|
sendData(file_des, retvals, sizeof(retvals), INT32);
|
||||||
|
sendData(file_des, &retvals_dacTime, sizeof(retvals_dacTime), INT64);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int enable_scan(int file_des) {
|
int set_scan(int file_des) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
int args[4] = {-1, -1, -1, -1};
|
int args[5] = {-1, -1, -1, -1, -1};
|
||||||
int64_t args_time = -1;
|
int64_t dacTime = -1;
|
||||||
|
int64_t retval = -1;
|
||||||
|
|
||||||
if (receiveData(file_des, args, sizeof(args), INT32) < 0)
|
if (receiveData(file_des, args, sizeof(args), INT32) < 0)
|
||||||
return printSocketReadError();
|
return printSocketReadError();
|
||||||
if (receiveData(file_des, args_time, sizeof(args_time), INT64) < 0)
|
if (receiveData(file_des, &dacTime, sizeof(dacTime), INT64) < 0)
|
||||||
return printSocketReadError();
|
return printSocketReadError();
|
||||||
|
|
||||||
// only set
|
// only set
|
||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
int startOffset = args[1];
|
int enable = args[0];
|
||||||
int endOffset = args[2];
|
enum dacIndex index = args[1];
|
||||||
int stepSize = args[3];
|
int start = args[2];
|
||||||
scanDacSettleTime_us = args[4] / 1000;
|
int stop = args[3];
|
||||||
scanTrimbits = 0;
|
int step = args[4];
|
||||||
|
|
||||||
if ((startOffset < endOffset && stepSize <= 0) ||
|
// disable scan
|
||||||
(endOffset < startOffset && stepSize >= 0)) {
|
if (enable == 0) {
|
||||||
ret = FAIL;
|
LOG(logINFOBLUE, ("Disabling scan"));
|
||||||
sprintf(mess, "Invalid scan parameters\n");
|
scan = 0;
|
||||||
LOG(logERROR, (mess));
|
numScanSteps = 0;
|
||||||
} else {
|
// setting number of frames to 1
|
||||||
// trimbit scan
|
|
||||||
if (args[0] == TRIMBIT_SCAN) {
|
|
||||||
#if defined(EIGERD) || defined(MYTHEN3D)
|
|
||||||
if (startOffset < 0 || startOffset > MAX_TRIMBITS_VALUE ||
|
|
||||||
endOffset < 0 || endOffset > MAX_TRIMBITS_VALUE) {
|
|
||||||
ret = FAIL;
|
|
||||||
sprintf(mess, "Invalid trimbits scan values\n");
|
|
||||||
LOG(logERROR, (mess));
|
|
||||||
} else {
|
|
||||||
scanTrimbits = 1;
|
|
||||||
LOG(logINFOBLUE, ("Trimbit scan enabled\n"));
|
|
||||||
#ifdef EIGERD
|
|
||||||
// changes settings to undefined
|
|
||||||
setSettings(UNDEFINED);
|
|
||||||
LOG(logERROR,
|
|
||||||
("Settings has been changed to undefined (change all "
|
|
||||||
"trimbits)\n"));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
ret = FAIL;
|
|
||||||
sprintf(mess, "Cannot enable trimbit scan. Not implemented for "
|
|
||||||
"this detector\n");
|
|
||||||
LOG(logERROR, (mess));
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
switch ((enum dacIndex)args[0]) {
|
|
||||||
case HIGH_VOLTAGE:
|
|
||||||
#ifdef EIGERD
|
|
||||||
case IO_DELAY:
|
|
||||||
#elif CHIPTESTBOARDD
|
|
||||||
case ADC_VPP:
|
|
||||||
case V_POWER_A:
|
|
||||||
case V_POWER_B:
|
|
||||||
case V_POWER_C:
|
|
||||||
case V_POWER_D:
|
|
||||||
case V_POWER_IO:
|
|
||||||
case V_POWER_CHIP:
|
|
||||||
case V_LIMIT:
|
|
||||||
#elif MOENCHD
|
|
||||||
case ADC_VPP:
|
|
||||||
case V_LIMIT:
|
|
||||||
#endif
|
|
||||||
modeNotImplemented("Scan Dac Index", args[0]);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
scanDac = getDACIndex(args[0]);
|
|
||||||
if (ret == FAIL) {
|
|
||||||
sprintf(
|
|
||||||
mess,
|
|
||||||
"Cannot enable scan. Dac index %d not implemented for "
|
|
||||||
"this detector for scanning\n",
|
|
||||||
args[0]);
|
|
||||||
LOG(logERROR, (mess));
|
|
||||||
} else if (startOffset < 0 || startOffset > getMaxDacSteps() ||
|
|
||||||
endOffset < 0 || endOffset > getMaxDacSteps()) {
|
|
||||||
ret = FAIL;
|
|
||||||
sprintf(mess, "Invalid dac scan values\n");
|
|
||||||
LOG(logERROR, (mess));
|
|
||||||
}
|
|
||||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
|
||||||
else if (checkVLimitDacCompliant(startOffset) == FAIL ||
|
|
||||||
checkVLimitDacCompliant(endOffset) == FAIL) {
|
|
||||||
ret = FAIL;
|
|
||||||
sprintf(mess,
|
|
||||||
"Invalid scan dac values."
|
|
||||||
"Exceeds voltage limit %d.\n",
|
|
||||||
getVLimit());
|
|
||||||
LOG(logERROR, (mess));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (ret == OK) {
|
|
||||||
#ifdef EIGERD
|
|
||||||
// changing dac changes settings to undefined
|
|
||||||
switch (scanDac) {
|
|
||||||
case E_VCMP_LL:
|
|
||||||
case E_VCMP_LR:
|
|
||||||
case E_VCMP_RL:
|
|
||||||
case E_VCMP_RR:
|
|
||||||
case E_VRPREAMP:
|
|
||||||
case E_VCP:
|
|
||||||
setSettings(UNDEFINED);
|
|
||||||
LOG(logERROR,
|
|
||||||
("Settings has been changed "
|
|
||||||
"to undefined (changed specific dacs)\n"));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
LOG(logINFOBLUE, ("Dac [%d] scan enabled\n", scanDac));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ret == OK) {
|
|
||||||
scan = 1;
|
|
||||||
numScanSteps = (abs(endOffset - startOffset) / abs(stepSize)) + 1;
|
|
||||||
if (scanSteps != NULL) {
|
|
||||||
free(scanSteps);
|
|
||||||
}
|
|
||||||
scanSteps = malloc(numScanSteps * sizeof(int));
|
|
||||||
for (int i = 0; i != numScanSteps; ++i) {
|
|
||||||
scanSteps[i] = startOffset + i * stepSize;
|
|
||||||
LOG(logDEBUG1, ("scansteps[%d]:%d\n", i, scanSteps[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG(logINFOBLUE,
|
|
||||||
("Enabling scan for dac[%d], start[%d], end[%d], "
|
|
||||||
"stepsize[%d], nsteps[%d]\n",
|
|
||||||
scanDac, startOffset, endOffset, stepSize, numScanSteps));
|
|
||||||
int64_t arg = 1;
|
int64_t arg = 1;
|
||||||
setNumFrames(arg);
|
setNumFrames(arg);
|
||||||
int64_t retval = getNumFrames();
|
retval = getNumFrames();
|
||||||
LOG(logDEBUG1, ("retval num frames %lld\n", (long long int)retval));
|
LOG(logDEBUG1, ("retval num frames %lld\n", (long long int)retval));
|
||||||
validate64(arg, retval, "set number of frames", DEC);
|
validate64(arg, retval, "set number of frames", DEC);
|
||||||
}
|
}
|
||||||
|
// enable scan
|
||||||
|
else {
|
||||||
|
if ((start < stop && step <= 0) || (stop < start && step >= 0)) {
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(mess, "Invalid scan parameters\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// trimbit scan
|
||||||
|
if (args[0] == TRIMBIT_SCAN) {
|
||||||
|
#if !defined(EIGERD) && !defined(MYTHEN3D)
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(mess,
|
||||||
|
"Cannot enable trimbit scan. Not implemented for "
|
||||||
|
"this detector\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
#else
|
||||||
|
if (start < 0 || start > MAX_TRIMBITS_VALUE || stop < 0 ||
|
||||||
|
stop > MAX_TRIMBITS_VALUE) {
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(mess, "Invalid trimbits scan values\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
}
|
||||||
|
// validated
|
||||||
|
else {
|
||||||
|
LOG(logINFOBLUE, ("Trimbit scan enabled\n"));
|
||||||
|
scanTrimbits = 1;
|
||||||
|
scanGlobalIndex = index;
|
||||||
|
scanSettleTime_ns = dacTime;
|
||||||
|
#ifdef EIGERD
|
||||||
|
// changing trimbits, settings to undefined
|
||||||
|
setSettings(UNDEFINED);
|
||||||
|
LOG(logERROR, ("Settings has been changed to undefined "
|
||||||
|
"(change all "
|
||||||
|
"trimbits)\n"));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
// dac scan
|
||||||
|
else {
|
||||||
|
if (start < 0 || start > getMaxDacSteps() || stop < 0 ||
|
||||||
|
stop > getMaxDacSteps()) {
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(mess, "Invalid dac scan values\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
}
|
||||||
|
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||||
|
else if (checkVLimitDacCompliant(start) == FAIL ||
|
||||||
|
checkVLimitDacCompliant(stop) == FAIL) {
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(mess,
|
||||||
|
"Invalid scan dac values."
|
||||||
|
"Exceeds voltage limit %d.\n",
|
||||||
|
getVLimit());
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else {
|
||||||
|
// validate allowed dac scans
|
||||||
|
switch (index) {
|
||||||
|
case HIGH_VOLTAGE:
|
||||||
|
#ifdef EIGERD
|
||||||
|
case IO_DELAY:
|
||||||
|
#elif CHIPTESTBOARDD
|
||||||
|
case ADC_VPP:
|
||||||
|
case V_POWER_A:
|
||||||
|
case V_POWER_B:
|
||||||
|
case V_POWER_C:
|
||||||
|
case V_POWER_D:
|
||||||
|
case V_POWER_IO:
|
||||||
|
case V_POWER_CHIP:
|
||||||
|
case V_LIMIT:
|
||||||
|
#elif MOENCHD
|
||||||
|
case ADC_VPP:
|
||||||
|
case V_LIMIT:
|
||||||
|
#endif
|
||||||
|
modeNotImplemented("Scan Dac Index", args[0]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// validate dac according to detector type
|
||||||
|
if (ret == OK) {
|
||||||
|
enum DACINDEX dac = getDACIndex(index);
|
||||||
|
if (ret == FAIL) {
|
||||||
|
sprintf(mess,
|
||||||
|
"Cannot enable scan. Dac index %d not "
|
||||||
|
"implemented for "
|
||||||
|
"this detector for scanning\n",
|
||||||
|
(int)index);
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
}
|
||||||
|
// validated
|
||||||
|
else {
|
||||||
|
LOG(logINFOBLUE,
|
||||||
|
("Dac [%d] scan enabled\n", scanDac));
|
||||||
|
scanTrimbits = 0;
|
||||||
|
scanGlobalIndex = index;
|
||||||
|
scanSettleTime_ns = dacTime;
|
||||||
|
scanDac = dac;
|
||||||
|
#ifdef EIGERD
|
||||||
|
// changing dac changes settings to undefined
|
||||||
|
switch (scanDac) {
|
||||||
|
case E_VCMP_LL:
|
||||||
|
case E_VCMP_LR:
|
||||||
|
case E_VCMP_RL:
|
||||||
|
case E_VCMP_RR:
|
||||||
|
case E_VRPREAMP:
|
||||||
|
case E_VCP:
|
||||||
|
setSettings(UNDEFINED);
|
||||||
|
LOG(logERROR, ("Settings has been changed "
|
||||||
|
"to undefined (changed "
|
||||||
|
"specific dacs)\n"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// valid scan
|
||||||
|
if (ret == OK) {
|
||||||
|
scan = 1;
|
||||||
|
numScanSteps = (abs(stop - start) / abs(step)) + 1;
|
||||||
|
if (scanSteps != NULL) {
|
||||||
|
free(scanSteps);
|
||||||
|
}
|
||||||
|
scanSteps = malloc(numScanSteps * sizeof(int));
|
||||||
|
for (int i = 0; i != numScanSteps; ++i) {
|
||||||
|
scanSteps[i] = start + i * step;
|
||||||
|
LOG(logDEBUG1, ("scansteps[%d]:%d\n", i, scanSteps[i]));
|
||||||
|
}
|
||||||
|
LOG(logINFOBLUE, ("Enabling scan for %s, start[%d], stop[%d], "
|
||||||
|
"step[%d], nsteps[%d]\n",
|
||||||
|
scanTrimbits == 1 ? "trimbits" : "dac", start,
|
||||||
|
stop, step, numScanSteps));
|
||||||
|
|
||||||
|
// setting number of frames to scansteps
|
||||||
|
int64_t arg = 1;
|
||||||
|
setNumFrames(arg);
|
||||||
|
retval = getNumFrames();
|
||||||
|
LOG(logDEBUG1,
|
||||||
|
("retval num frames %lld\n", (long long int)retval));
|
||||||
|
validate64(arg, retval, "set number of frames", DEC);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
|
||||||
}
|
}
|
||||||
|
@ -396,12 +396,10 @@ class Detector {
|
|||||||
|
|
||||||
Result<defs::scanParameters> getScan(Positions pos = {}) const;
|
Result<defs::scanParameters> getScan(Positions pos = {}) const;
|
||||||
|
|
||||||
/** also sets number of frames to 1 */
|
/** enables/ disables scans for dac, trimbits [Eiger/ Mythen3]
|
||||||
void disableScan();
|
* TRIMBIT_SCAN. Enabling scan sets number of frames to number of steps in
|
||||||
|
* receiver. Disabling scan sets number of frames to 1 */
|
||||||
/** scan dac, trimbits scan only for [Eiger/ Mythen3] TRIMBIT_SCAN, also
|
void setScan(const defs::scanParameters t);
|
||||||
* sets number of frames to number of steps in receiver */
|
|
||||||
void enableScan(const defs::scanParameters t);
|
|
||||||
|
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* *
|
* *
|
||||||
|
@ -1010,21 +1010,25 @@ std::string CmdProxy::Scan(int action) {
|
|||||||
auto t = det->getScan();
|
auto t = det->getScan();
|
||||||
os << ToString(t) << '\n';
|
os << ToString(t) << '\n';
|
||||||
} else if (action == defs::PUT_ACTION) {
|
} else if (action == defs::PUT_ACTION) {
|
||||||
|
// disable
|
||||||
if (args.size() == 1) {
|
if (args.size() == 1) {
|
||||||
if (StringTo<int>(args[0]) != 0) {
|
if (StringTo<int>(args[0]) != 0) {
|
||||||
throw sls::RuntimeError("Did you mean '0' to disable?");
|
throw sls::RuntimeError("Did you mean '0' to disable?");
|
||||||
}
|
}
|
||||||
det->disableScan();
|
det->setScan(defs::scanParameters());
|
||||||
os << "scan disabled" << '\n';
|
}
|
||||||
} else if (args.size() == 4) {
|
// enable without settling time
|
||||||
det->enableScan(defs::scanParameters(
|
else if (args.size() == 4) {
|
||||||
|
det->setScan(defs::scanParameters(
|
||||||
StringTo<defs::dacIndex>(args[0]), StringTo<int>(args[1]),
|
StringTo<defs::dacIndex>(args[0]), StringTo<int>(args[1]),
|
||||||
StringTo<int>(args[2]), StringTo<int>(args[3])));
|
StringTo<int>(args[2]), StringTo<int>(args[3])));
|
||||||
} else if (args.size() == 5) {
|
}
|
||||||
|
// enable with all parameters
|
||||||
|
else if (args.size() == 5) {
|
||||||
std::string time_str(args[4]);
|
std::string time_str(args[4]);
|
||||||
std::string unit = RemoveUnit(time_str);
|
std::string unit = RemoveUnit(time_str);
|
||||||
auto t = StringTo<time::ns>(time_str, unit);
|
auto t = StringTo<time::ns>(time_str, unit);
|
||||||
det->enableScan(defs::scanParameters(
|
det->setScan(defs::scanParameters(
|
||||||
StringTo<defs::dacIndex>(args[0]), StringTo<int>(args[1]),
|
StringTo<defs::dacIndex>(args[0]), StringTo<int>(args[1]),
|
||||||
StringTo<int>(args[2]), StringTo<int>(args[3]), t));
|
StringTo<int>(args[2]), StringTo<int>(args[3]), t));
|
||||||
} else {
|
} else {
|
||||||
|
@ -563,10 +563,8 @@ Result<defs::scanParameters> Detector::getScan(Positions pos) const {
|
|||||||
return pimpl->Parallel(&Module::getScan, pos);
|
return pimpl->Parallel(&Module::getScan, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Detector::disableScan() { pimpl->Parallel(&Module::disableScan, {}); }
|
void Detector::setScan(const defs::scanParameters t) {
|
||||||
|
pimpl->Parallel(&Module::setScan, {}, t);
|
||||||
void Detector::enableScan(const defs::scanParameters t) {
|
|
||||||
pimpl->Parallel(&Module::enableScan, {}, t);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Network Configuration (Detector<->Receiver)
|
// Network Configuration (Detector<->Receiver)
|
||||||
|
@ -453,13 +453,9 @@ defs::scanParameters Module::getScan() {
|
|||||||
return sendToDetector<defs::scanParameters>(F_GET_SCAN);
|
return sendToDetector<defs::scanParameters>(F_GET_SCAN);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Module::disableScan() {
|
void Module::setScan(const defs::scanParameters t) {
|
||||||
sendToDetector(F_DISABLE_SCAN);
|
auto retval = sendToDetector<int64_t>(F_SET_SCAN, t);
|
||||||
setNumberOfFrames(1);
|
// if disabled, retval is 1, else its number of steps
|
||||||
}
|
|
||||||
|
|
||||||
void Module::enableScan(const defs::scanParameters t) {
|
|
||||||
auto retval = sendToDetector<int64_t>(F_ENABLE_SCAN, t);
|
|
||||||
setNumberOfFrames(retval);
|
setNumberOfFrames(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,8 +167,7 @@ class Module : public virtual slsDetectorDefs {
|
|||||||
void setStartingFrameNumber(uint64_t value);
|
void setStartingFrameNumber(uint64_t value);
|
||||||
void sendSoftwareTrigger();
|
void sendSoftwareTrigger();
|
||||||
defs::scanParameters getScan();
|
defs::scanParameters getScan();
|
||||||
void disableScan();
|
void setScan(const defs::scanParameters t);
|
||||||
void enableScan(const defs::scanParameters t);
|
|
||||||
|
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* *
|
* *
|
||||||
|
@ -455,17 +455,22 @@ typedef struct {
|
|||||||
|
|
||||||
/** scan structure */
|
/** scan structure */
|
||||||
struct scanParameters {
|
struct scanParameters {
|
||||||
dacIndex dacInd{DAC_0};
|
int enable;
|
||||||
int startOffset{0};
|
dacIndex dacInd;
|
||||||
int stopOffset{0};
|
int startOffset;
|
||||||
int stepSize{0};
|
int stopOffset;
|
||||||
int64_t dacSettleTime_ns{100 * 1000};
|
int stepSize;
|
||||||
|
int64_t dacSettleTime_ns;
|
||||||
|
|
||||||
scanParameters() = default;
|
/** disable scan */
|
||||||
|
scanParameters()
|
||||||
|
: enable(0), dacInd(DAC_0), startOffset(0), stopOffset(0),
|
||||||
|
stepSize(0), dacSettleTime_ns{10000} {}
|
||||||
|
/** enable scan */
|
||||||
scanParameters(
|
scanParameters(
|
||||||
dacIndex dac, int start, int stop, int step,
|
dacIndex dac, int start, int stop, int step,
|
||||||
std::chrono::nanoseconds t = std::chrono::nanoseconds{10000})
|
std::chrono::nanoseconds t = std::chrono::nanoseconds{10000})
|
||||||
: dacInd(dac), startOffset(start), stopOffset(stop),
|
: enable(1), dacInd(dac), startOffset(start), stopOffset(stop),
|
||||||
stepSize(step) {
|
stepSize(step) {
|
||||||
dacSettleTime_ns = t.count();
|
dacSettleTime_ns = t.count();
|
||||||
}
|
}
|
||||||
|
@ -201,8 +201,7 @@ enum detFuncs {
|
|||||||
F_SET_VETO,
|
F_SET_VETO,
|
||||||
F_SET_PATTERN,
|
F_SET_PATTERN,
|
||||||
F_GET_SCAN,
|
F_GET_SCAN,
|
||||||
F_DISABLE_SCAN,
|
F_SET_SCAN,
|
||||||
F_ENABLE_SCAN,
|
|
||||||
|
|
||||||
NUM_DET_FUNCTIONS,
|
NUM_DET_FUNCTIONS,
|
||||||
RECEIVER_ENUM_START = 256, /**< detector function should not exceed this
|
RECEIVER_ENUM_START = 256, /**< detector function should not exceed this
|
||||||
@ -502,8 +501,7 @@ const char* getFunctionNameFromEnum(enum detFuncs func) {
|
|||||||
case F_SET_VETO: return "F_SET_VETO";
|
case F_SET_VETO: return "F_SET_VETO";
|
||||||
case F_SET_PATTERN: return "F_SET_PATTERN";
|
case F_SET_PATTERN: return "F_SET_PATTERN";
|
||||||
case F_GET_SCAN: return "F_GET_SCAN";
|
case F_GET_SCAN: return "F_GET_SCAN";
|
||||||
case F_DISABLE_SCAN: return "F_DISABLE_SCAN";
|
case F_SET_SCAN: return "F_SET_SCAN";
|
||||||
case F_ENABLE_SCAN: return "F_ENABLE_SCAN";
|
|
||||||
|
|
||||||
case NUM_DET_FUNCTIONS: return "NUM_DET_FUNCTIONS";
|
case NUM_DET_FUNCTIONS: return "NUM_DET_FUNCTIONS";
|
||||||
case RECEIVER_ENUM_START: return "RECEIVER_ENUM_START";
|
case RECEIVER_ENUM_START: return "RECEIVER_ENUM_START";
|
||||||
|
@ -104,13 +104,20 @@ std::ostream &operator<<(std::ostream &os,
|
|||||||
|
|
||||||
std::string ToString(const slsDetectorDefs::scanParameters &r) {
|
std::string ToString(const slsDetectorDefs::scanParameters &r) {
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << '[' << "dac " << r.dacInd << std::endl
|
oss << '[';
|
||||||
<< "start " << r.startOffset << std::endl
|
if (r.enable) {
|
||||||
<< "stop " << r.stopOffset << std::endl
|
oss << "enabled " << std::endl
|
||||||
<< "step " << r.stepSize << std::endl
|
<< "dac " << r.dacInd << std::endl
|
||||||
<< "settleTime "
|
<< "start " << r.startOffset << std::endl
|
||||||
<< ToString(std::chrono::nanoseconds{r.dacSettleTime_ns}) << std::endl
|
<< "stop " << r.stopOffset << std::endl
|
||||||
<< ']';
|
<< "step " << r.stepSize << std::endl
|
||||||
|
<< "settleTime "
|
||||||
|
<< ToString(std::chrono::nanoseconds{r.dacSettleTime_ns})
|
||||||
|
<< std::endl;
|
||||||
|
} else {
|
||||||
|
oss << "disabled";
|
||||||
|
}
|
||||||
|
oss << ']';
|
||||||
return oss.str();
|
return oss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user