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:
Dhanya Thattil 2022-09-16 17:45:51 +02:00 committed by GitHub
parent e385618d09
commit bac32dcba9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 99 additions and 146 deletions

View File

@ -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
==================

View File

@ -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() {

View File

@ -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 */

View File

@ -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() {

View File

@ -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() {

View File

@ -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() {

View File

@ -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() {

View File

@ -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() {

View File

@ -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();

View File

@ -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);

View File

@ -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));

View File

@ -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