mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 00:00:02 +02:00
ctb 1g non blocking acquire (#555)
* allowing ctb and moench 1g to have non blocking acquisition also send data, refactoring wait for acquisition finished for all others
This commit is contained in:
parent
e385618d09
commit
bac32dcba9
@ -99,6 +99,7 @@ This document describes the differences between v7.0.0 and v6.x.x
|
||||
- setting rx_hostname (or udp_dstip with rx_hostname not none) will always set udp_dstmac. solves problem of chaing udp_dstip and udp_dstmac stays the same
|
||||
- jungfrau reset core and usleep removed (fix for 6.1.1 is now fixed in firmware)
|
||||
- g2 change clkdivs 2 3 4 to defaults for burst and cw mode.
|
||||
- ctb and moench: allowing 1g non blocking acquire to send data
|
||||
|
||||
2. Resolved Issues
|
||||
==================
|
||||
|
Binary file not shown.
@ -2083,7 +2083,7 @@ void *start_timer(void *arg) {
|
||||
closeUDPSocket(0);
|
||||
|
||||
sharedMemory_setStatus(IDLE);
|
||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@ -2203,40 +2203,31 @@ void readandSendUDPFrames(int *ret, char *mess) {
|
||||
closeUDPSocket(0);
|
||||
}
|
||||
|
||||
void readFrame(int *ret, char *mess) {
|
||||
#ifdef VIRTUAL
|
||||
// wait for acquisition to be done
|
||||
void waitForAcquisitionEnd() {
|
||||
while (runBusy()) {
|
||||
usleep(500); // random
|
||||
usleep(500);
|
||||
}
|
||||
#ifndef VIRTUAL
|
||||
int64_t retval = getNumFramesLeft() + 1;
|
||||
if (retval > 0) {
|
||||
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||
}
|
||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
||||
return;
|
||||
#endif
|
||||
// 1G
|
||||
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||
}
|
||||
|
||||
void readFrames(int *ret, char *mess) {
|
||||
#ifdef VIRTUAL
|
||||
while (runBusy()) {
|
||||
usleep(500);
|
||||
}
|
||||
#else
|
||||
// 1G force reading of frames
|
||||
if (!enableTenGigabitEthernet(-1)) {
|
||||
readandSendUDPFrames(ret, mess);
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
}
|
||||
// 10G
|
||||
else {
|
||||
// wait for acquisition to be done
|
||||
while (runBusy()) {
|
||||
usleep(500); // random
|
||||
}
|
||||
}
|
||||
|
||||
// ret could be fail in 1gudp for not creating udp sockets
|
||||
if (*ret != FAIL) {
|
||||
// frames left to give status
|
||||
int64_t retval = getNumFramesLeft() + 2;
|
||||
if (retval > 1) {
|
||||
sprintf(mess, "No data and run stopped: %lld frames left\n",
|
||||
(long long int)retval);
|
||||
LOG(logERROR, (mess));
|
||||
} else {
|
||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
||||
}
|
||||
}
|
||||
*ret = (int)OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
void unsetFifoReadStrobes() {
|
||||
|
Binary file not shown.
@ -2765,7 +2765,7 @@ void *start_timer(void *arg) {
|
||||
closeUDPSocket(1);
|
||||
|
||||
sharedMemory_setStatus(IDLE);
|
||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@ -2893,16 +2893,13 @@ enum runStatus getRunStatus() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void readFrame(int *ret, char *mess) {
|
||||
void waitForAcquisitionEnd(int *ret, char *mess) {
|
||||
#ifdef VIRTUAL
|
||||
// wait for status to be done
|
||||
while (sharedMemory_getStatus() == RUNNING) {
|
||||
usleep(500);
|
||||
}
|
||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
||||
return;
|
||||
#else
|
||||
|
||||
sharedMemory_lockLocalLink();
|
||||
if (Feb_Control_WaitForFinishedFlag(5000, 1) == STATUS_ERROR) {
|
||||
sharedMemory_unlockLocalLink();
|
||||
@ -2911,7 +2908,7 @@ void readFrame(int *ret, char *mess) {
|
||||
return;
|
||||
}
|
||||
sharedMemory_unlockLocalLink();
|
||||
LOG(logINFOGREEN, ("Acquisition finished\n"));
|
||||
LOG(logINFO, ("Acquisition done\n"));
|
||||
|
||||
// wait for detector to send
|
||||
int isTransmitting = 1;
|
||||
@ -2940,9 +2937,9 @@ void readFrame(int *ret, char *mess) {
|
||||
printf("Transmitting...\n");
|
||||
}
|
||||
}
|
||||
LOG(logINFO, ("Beb: Detector has sent all data (acquire)\n"));
|
||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
#endif
|
||||
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||
}
|
||||
|
||||
/* common */
|
||||
|
Binary file not shown.
@ -3310,7 +3310,7 @@ void *start_timer(void *arg) {
|
||||
}
|
||||
|
||||
sharedMemory_setStatus(IDLE);
|
||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@ -3396,18 +3396,11 @@ enum runStatus getRunStatus() {
|
||||
return s;
|
||||
}
|
||||
|
||||
void readFrame(int *ret, char *mess) {
|
||||
// wait for status to be done
|
||||
void waitForAcquisitionEnd() {
|
||||
while (runBusy()) {
|
||||
usleep(500);
|
||||
}
|
||||
#ifdef VIRTUAL
|
||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
||||
return;
|
||||
#endif
|
||||
|
||||
*ret = (int)OK;
|
||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
||||
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||
}
|
||||
|
||||
u_int32_t runBusy() {
|
||||
|
Binary file not shown.
@ -1729,7 +1729,7 @@ void *start_timer(void *arg) {
|
||||
closeUDPSocket(0);
|
||||
|
||||
sharedMemory_setStatus(IDLE);
|
||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@ -1854,28 +1854,17 @@ enum runStatus getRunStatus() {
|
||||
return s;
|
||||
}
|
||||
|
||||
void readFrame(int *ret, char *mess) {
|
||||
#ifdef VIRTUAL
|
||||
while (sharedMemory_getStatus() == RUNNING) {
|
||||
// LOG(logERROR, ("Waiting for finished flag\n");
|
||||
usleep(5000);
|
||||
}
|
||||
return;
|
||||
#endif
|
||||
// wait for status to be done
|
||||
void waitForAcquisitionEnd() {
|
||||
while (runBusy()) {
|
||||
usleep(500);
|
||||
}
|
||||
|
||||
// frames left to give status
|
||||
*ret = (int)OK;
|
||||
#ifndef VIRTUAL
|
||||
int64_t retval = getNumFramesLeft() + 1;
|
||||
if (retval > -1) {
|
||||
LOG(logERROR, ("No data and run stopped: %lld frames left\n",
|
||||
(long long int)retval));
|
||||
} else {
|
||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
||||
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||
}
|
||||
#endif
|
||||
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||
}
|
||||
|
||||
u_int32_t runBusy() {
|
||||
|
Binary file not shown.
@ -2712,7 +2712,7 @@ void *start_timer(void *arg) {
|
||||
}
|
||||
|
||||
sharedMemory_setStatus(IDLE);
|
||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@ -2824,26 +2824,17 @@ enum runStatus getRunStatus() {
|
||||
return s;
|
||||
}
|
||||
|
||||
void readFrame(int *ret, char *mess) {
|
||||
// wait for status to be done
|
||||
void waitForAcquisitionEnd() {
|
||||
while (runBusy()) {
|
||||
usleep(500);
|
||||
}
|
||||
#ifdef VIRTUAL
|
||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
||||
return;
|
||||
#endif
|
||||
|
||||
*ret = (int)OK;
|
||||
// frames left to give status
|
||||
#ifndef VIRTUAL
|
||||
int64_t retval = getNumFramesLeft() + 1;
|
||||
|
||||
if (retval > 0) {
|
||||
LOG(logERROR, ("No data and run stopped: %lld frames left\n",
|
||||
(long long int)retval));
|
||||
} else {
|
||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
||||
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||
}
|
||||
#endif
|
||||
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||
}
|
||||
|
||||
u_int32_t runBusy() {
|
||||
|
Binary file not shown.
@ -1755,7 +1755,7 @@ void *start_timer(void *arg) {
|
||||
closeUDPSocket(0);
|
||||
|
||||
sharedMemory_setStatus(IDLE);
|
||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@ -1877,40 +1877,31 @@ void readandSendUDPFrames(int *ret, char *mess) {
|
||||
closeUDPSocket(0);
|
||||
}
|
||||
|
||||
void readFrame(int *ret, char *mess) {
|
||||
#ifdef VIRTUAL
|
||||
// wait for acquisition to be done
|
||||
void waitForAcquisitionEnd() {
|
||||
while (runBusy()) {
|
||||
usleep(500); // random
|
||||
usleep(500);
|
||||
}
|
||||
#ifndef VIRTUAL
|
||||
int64_t retval = getNumFramesLeft() + 1;
|
||||
if (retval > 0) {
|
||||
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||
}
|
||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
||||
return;
|
||||
#endif
|
||||
// 1G
|
||||
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||
}
|
||||
|
||||
void readFrames(int *ret, char *mess) {
|
||||
#ifdef VIRTUAL
|
||||
while (runBusy()) {
|
||||
usleep(500);
|
||||
}
|
||||
#else
|
||||
// 1G force reading of frames
|
||||
if (!enableTenGigabitEthernet(-1)) {
|
||||
readandSendUDPFrames(ret, mess);
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
}
|
||||
// 10G
|
||||
else {
|
||||
// wait for acquisition to be done
|
||||
while (runBusy()) {
|
||||
usleep(500); // random
|
||||
}
|
||||
}
|
||||
|
||||
// ret could be fail in 1gudp for not creating udp sockets
|
||||
if (*ret != FAIL) {
|
||||
// frames left to give status
|
||||
int64_t retval = getNumFramesLeft() + 2;
|
||||
if (retval > 1) {
|
||||
sprintf(mess, "No data and run stopped: %lld frames left\n",
|
||||
(long long int)retval);
|
||||
LOG(logERROR, (mess));
|
||||
} else {
|
||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
||||
}
|
||||
}
|
||||
*ret = (int)OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
void unsetFifoReadStrobes() {
|
||||
|
Binary file not shown.
@ -2564,7 +2564,7 @@ void *start_timer(void *arg) {
|
||||
closeUDPSocket(0);
|
||||
|
||||
sharedMemory_setStatus(IDLE);
|
||||
LOG(logINFOBLUE, ("Finished Acquiring\n"));
|
||||
LOG(logINFOBLUE, ("Transmitting frames done\n"));
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@ -2689,27 +2689,18 @@ enum runStatus getRunStatus() {
|
||||
return s;
|
||||
}
|
||||
|
||||
void readFrame(int *ret, char *mess) {
|
||||
// wait for status to be done
|
||||
void waitForAcquisitionEnd() {
|
||||
while (runBusy()) {
|
||||
usleep(500);
|
||||
}
|
||||
|
||||
#ifdef VIRTUAL
|
||||
LOG(logINFOGREEN, ("acquisition successfully finished\n"));
|
||||
return;
|
||||
#endif
|
||||
|
||||
*ret = (int)OK;
|
||||
// frames left to give status
|
||||
#ifndef VIRTUAL
|
||||
int64_t retval = getNumFramesLeft() + 1;
|
||||
|
||||
if (retval > 0) {
|
||||
LOG(logERROR, ("No data and run stopped: %lld frames left\n",
|
||||
(long long int)retval));
|
||||
} else {
|
||||
LOG(logINFOGREEN, ("Acquisition successfully finished\n"));
|
||||
LOG(logINFORED, ("%lld frames left\n", (long long int)retval));
|
||||
}
|
||||
#endif
|
||||
LOG(logINFOGREEN, ("Blocking Acquisition done\n"));
|
||||
}
|
||||
|
||||
u_int32_t runBusy() {
|
||||
|
@ -666,7 +666,14 @@ int softwareTrigger(int block);
|
||||
int startReadOut();
|
||||
#endif
|
||||
enum runStatus getRunStatus();
|
||||
void readFrame(int *ret, char *mess);
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
void readFrames(int *ret, char *mess);
|
||||
#endif
|
||||
#ifdef EIGERD
|
||||
void waitForAcquisitionEnd(int *ret, char *mess);
|
||||
#else
|
||||
void waitForAcquisitionEnd();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
void readandSendUDPFrames(int *ret, char *mess);
|
||||
void unsetFifoReadStrobes();
|
||||
|
@ -52,7 +52,6 @@ int start_acquisition(int);
|
||||
int stop_acquisition(int);
|
||||
int get_run_status(int);
|
||||
int start_and_read_all(int);
|
||||
int read_all(int);
|
||||
int get_num_frames(int);
|
||||
int set_num_frames(int);
|
||||
int get_num_triggers(int);
|
||||
@ -305,4 +304,4 @@ int get_digital_pulsing(int);
|
||||
int set_digital_pulsing(int);
|
||||
int get_module(int);
|
||||
int get_synchronization(int);
|
||||
int set_synchronization(int);
|
||||
int set_synchronization(int);
|
||||
|
@ -2010,15 +2010,30 @@ void *start_state_machine(void *arg) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
readFrames(&ret, mess);
|
||||
if (ret == FAIL && scan) {
|
||||
sprintf(scanErrMessage, "Cannot scan at %d. ", scanSteps[i]);
|
||||
strcat(scanErrMessage, mess);
|
||||
sharedMemory_setScanStatus(ERROR);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
// blocking or scan
|
||||
if (*blocking || times > 1) {
|
||||
readFrame(&ret, mess);
|
||||
#ifdef EIGERD
|
||||
waitForAcquisitionEnd(&ret, mess);
|
||||
if (ret == FAIL && scan) {
|
||||
sprintf(scanErrMessage, "Cannot scan at %d. ", scanSteps[i]);
|
||||
strcat(scanErrMessage, mess);
|
||||
sharedMemory_setScanStatus(ERROR);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
waitForAcquisitionEnd();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
// end of scan
|
||||
@ -2061,18 +2076,6 @@ int get_run_status(int file_des) {
|
||||
|
||||
int start_and_read_all(int file_des) { return acquire(1, file_des); }
|
||||
|
||||
int read_all(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
|
||||
LOG(logDEBUG1, ("Reading all frames\n"));
|
||||
// only set
|
||||
if (Server_VerifyLock() == OK) {
|
||||
readFrame(&ret, mess);
|
||||
}
|
||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||
}
|
||||
|
||||
int get_num_frames(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
|
@ -5,10 +5,10 @@
|
||||
#define APILIB 0x220609
|
||||
#define APIRECEIVER 0x220609
|
||||
#define APIGUI 0x220609
|
||||
#define APIEIGER 0x220816
|
||||
#define APICTB 0x220831
|
||||
#define APIGOTTHARD 0x220831
|
||||
#define APIJUNGFRAU 0x220831
|
||||
#define APIMOENCH 0x220831
|
||||
#define APIMYTHEN3 0x220901
|
||||
#define APIGOTTHARD2 0x220912
|
||||
#define APICTB 0x220916
|
||||
#define APIGOTTHARD 0x220916
|
||||
#define APIGOTTHARD2 0x220916
|
||||
#define APIJUNGFRAU 0x220916
|
||||
#define APIMYTHEN3 0x220916
|
||||
#define APIMOENCH 0x220916
|
||||
#define APIEIGER 0x220916
|
||||
|
Loading…
x
Reference in New Issue
Block a user