eiger server: transmitting (data) status

This commit is contained in:
2020-04-03 11:02:15 +02:00
parent fae884e658
commit 0c4b721e13
11 changed files with 125 additions and 131 deletions

View File

@ -17,14 +17,15 @@ This document describes the differences between 4.2.0 and 4.1.1 releases.
1. Topics Concerning 1. Topics Concerning
==================== ====================
- (Eiger) Additional status: Transmitting
- (Eiger) Change in default vcal dac value - (Eiger) Change in default vcal dac value
- (Eiger) Deactivate a module - (Eiger) Deactivate a module
- (Eiger) Setting all trimbits argument check - (Eiger) Setting all trimbits argument check
- (Eiger client) Dynamic range change effect on clock divider - (Eiger client) Dynamic range change effect on clock divider
- (Eiger Receiver) Different rx_fifodepth defaults - (Eiger) Different rx_fifodepth defaults
- (Receiver) performance (memory allocation and alignment, file buffering)
- (Receiver) rx_fifodepth has a higher range - (Receiver) rx_fifodepth has a higher range
- (Receiver) subperiod in master file - (Receiver) subperiod in master file
- (Receiver) performance (memory allocation and alignment, file buffering)
- (Package) Removed warnings including memory overlap copy - (Package) Removed warnings including memory overlap copy
- (Users) Added setflippeddatax to users class - (Users) Added setflippeddatax to users class
- (Zmq) Client data streaming (Client data call back) - (Zmq) Client data streaming (Client data call back)
@ -57,6 +58,13 @@ This document describes the differences between 4.2.0 and 4.1.1 releases.
to full speed, whereas dynamic range of 32 still changes the clock divider to to full speed, whereas dynamic range of 32 still changes the clock divider to
quarter speed. quarter speed.
Detector Server (Eiger)
-----------------------
1. After acquiring, if the detector is still streaming out data, then the
status is Trasnmitting (command line: 'data'). Only after this process,
will it become idle. Previously, sls_detector_acquire waited for
end of data streaming before returning. It will continue to do so.
3. Resolved Issues 3. Resolved Issues

View File

@ -1 +0,0 @@
../slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.2.0.24.0

View File

@ -0,0 +1 @@
../slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.2.0.24.1

View File

@ -180,131 +180,103 @@ void Beb_GetModuleConfiguration(int* master, int* top, int* normal){
} }
} }
int Beb_IsTransmitting(int* retval, int tengiga, int waitForDelay) {
void Beb_EndofDataSend(int tengiga){
//mapping new memory //mapping new memory
u_int32_t* csp0base=0; u_int32_t* csp0base = 0;
int l_framepktLsbcounter, l_framepktMsbcounter, l_txndelaycounter, l_framedelaycounter; int addr_l_txndelaycounter = 0, addr_l_framedelaycounter = 0;
int r_framepktLsbcounter, r_framepktMsbcounter, r_txndelaycounter, r_framedelaycounter; int addr_r_txndelaycounter = 0, addr_r_framedelaycounter = 0;
int l_framepktLsbcounter_new, l_framepktMsbcounter_new, l_txndelaycounter_new, l_framedelaycounter_new; int addr_l_framepktLsbcounter = 0, addr_l_framepktMsbcounter = 0;
int r_framepktLsbcounter_new, r_framepktMsbcounter_new, r_txndelaycounter_new, r_framedelaycounter_new; int addr_r_framepktLsbcounter = 0, addr_r_framepktMsbcounter = 0;
int addr_l_framepktLsbcounter, addr_l_framepktMsbcounter, addr_l_txndelaycounter, addr_l_framedelaycounter; if (tengiga) {
int addr_r_framepktLsbcounter, addr_r_framepktMsbcounter, addr_r_txndelaycounter, addr_r_framedelaycounter;
switch(tengiga){
case 0:
addr_l_framepktLsbcounter = ONE_GIGA_LEFT_INDEX_LSB_COUNTER;
addr_l_framepktMsbcounter = ONE_GIGA_LEFT_INDEX_MSB_COUNTER;
addr_l_txndelaycounter = ONE_GIGA_LEFT_TXN_DELAY_COUNTER;
addr_l_framedelaycounter = ONE_GIGA_LEFT_FRAME_DELAY_COUNTER;
addr_r_framepktLsbcounter = ONE_GIGA_RIGHT_INDEX_LSB_COUNTER;
addr_r_framepktMsbcounter = ONE_GIGA_RIGHT_INDEX_MSB_COUNTER;
addr_r_txndelaycounter = ONE_GIGA_RIGHT_TXN_DELAY_COUNTER;
addr_r_framedelaycounter = ONE_GIGA_RIGHT_FRAME_DELAY_COUNTER;
break;
case 1:
addr_l_framepktLsbcounter = TEN_GIGA_LEFT_INDEX_LSB_COUNTER;
addr_l_framepktMsbcounter = TEN_GIGA_LEFT_INDEX_MSB_COUNTER;
addr_l_txndelaycounter = TEN_GIGA_LEFT_TXN_DELAY_COUNTER; addr_l_txndelaycounter = TEN_GIGA_LEFT_TXN_DELAY_COUNTER;
addr_l_framedelaycounter = TEN_GIGA_LEFT_FRAME_DELAY_COUNTER; addr_l_framedelaycounter = TEN_GIGA_LEFT_FRAME_DELAY_COUNTER;
addr_r_framepktLsbcounter = TEN_GIGA_RIGHT_INDEX_LSB_COUNTER;
addr_r_framepktMsbcounter = TEN_GIGA_RIGHT_INDEX_MSB_COUNTER;
addr_r_txndelaycounter = TEN_GIGA_RIGHT_TXN_DELAY_COUNTER; addr_r_txndelaycounter = TEN_GIGA_RIGHT_TXN_DELAY_COUNTER;
addr_r_framedelaycounter = TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER; addr_r_framedelaycounter = TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER;
break; addr_l_framepktLsbcounter = TEN_GIGA_LEFT_INDEX_LSB_COUNTER;
addr_l_framepktMsbcounter = TEN_GIGA_LEFT_INDEX_MSB_COUNTER;
addr_r_framepktLsbcounter = TEN_GIGA_RIGHT_INDEX_LSB_COUNTER;
addr_r_framepktMsbcounter = TEN_GIGA_RIGHT_INDEX_MSB_COUNTER;
} else {
addr_l_txndelaycounter = ONE_GIGA_LEFT_TXN_DELAY_COUNTER;
addr_l_framedelaycounter = ONE_GIGA_LEFT_FRAME_DELAY_COUNTER;
addr_r_txndelaycounter = ONE_GIGA_RIGHT_TXN_DELAY_COUNTER;
addr_r_framedelaycounter = ONE_GIGA_RIGHT_FRAME_DELAY_COUNTER;
addr_l_framepktLsbcounter = ONE_GIGA_LEFT_INDEX_LSB_COUNTER;
addr_l_framepktMsbcounter = ONE_GIGA_LEFT_INDEX_MSB_COUNTER;
addr_r_framepktLsbcounter = ONE_GIGA_RIGHT_INDEX_LSB_COUNTER;
addr_r_framepktMsbcounter = ONE_GIGA_RIGHT_INDEX_MSB_COUNTER;
} }
//open file pointer //open file pointer
int fd = Beb_open(&csp0base,XPAR_COUNTER_BASEADDR); int fd = Beb_open(&csp0base,XPAR_COUNTER_BASEADDR);
if(fd < 0){ if(fd < 0){
cprintf(BG_RED,"Delay read counter fail\n"); cprintf(BG_RED,"Could not read Beb Delay read counter\n");
return; return FAIL;
}else{ } else {
//read data first time //read data first time
l_framepktLsbcounter = Beb_Read32(csp0base, addr_l_framepktLsbcounter); int l_txndelaycounter = Beb_Read32(csp0base, addr_l_txndelaycounter);
l_framepktMsbcounter = Beb_Read32(csp0base, addr_l_framepktMsbcounter); int l_framedelaycounter = Beb_Read32(csp0base, addr_l_framedelaycounter);
l_txndelaycounter = Beb_Read32(csp0base, addr_l_txndelaycounter); int r_txndelaycounter = Beb_Read32(csp0base, addr_r_txndelaycounter);
l_framedelaycounter = Beb_Read32(csp0base, addr_l_framedelaycounter); int r_framedelaycounter = Beb_Read32(csp0base, addr_r_framedelaycounter);
r_framepktLsbcounter = Beb_Read32(csp0base, addr_r_framepktLsbcounter); int l_framepktLsbcounter = Beb_Read32(csp0base, addr_l_framepktLsbcounter);
r_framepktMsbcounter = Beb_Read32(csp0base, addr_r_framepktMsbcounter); int l_framepktMsbcounter = Beb_Read32(csp0base, addr_l_framepktMsbcounter);
r_txndelaycounter = Beb_Read32(csp0base, addr_r_txndelaycounter); int r_framepktLsbcounter = Beb_Read32(csp0base, addr_r_framepktLsbcounter);
r_framedelaycounter = Beb_Read32(csp0base, addr_r_framedelaycounter); int r_framepktMsbcounter = Beb_Read32(csp0base, addr_r_framepktMsbcounter);
//#ifdef VERBOSE #ifdef VERBOSE
printf("\nLeft\n" printf("\nFirst Read:\n"
"FramepacketLsbcounter: %d\n" "\tLeft [Txndelaycounter:%d, Framedelaycounter:%d]\n"
"FramepacketMsbcounter: %d\n" "\tRight [Txndelaycounter:%d, Framedelaycounter:%d]\n",
"Txndelaycounter:%d\n" "\tLeft [FramepacketLsbcounter:%d, FramepacketMsbcounter:%d]\n"
"Framedelaycounter:%d\n" "\tRight [FramepacketLsbcounter:%d, FramepacketMsbcounter:%d]\n",
"\nRight\n" l_txndelaycounter,l_framedelaycounter, r_txndelaycounter,r_framedelaycounter,
"FramepacketLsbcounter: %d\n" l_framepktLsbcounter, l_framepktMsbcounter, r_framepktLsbcounter, r_framepktMsbcounter);
"FramepacketMsbcounter: %d\n" #endif
"Txndelaycounter:%d\n" // wait for max counter delay
"Framedelaycounter:%d\n\n", if (waitForDelay) {
l_framepktLsbcounter,l_framepktMsbcounter,l_txndelaycounter,l_framedelaycounter, int maxtimer = (MAX(MAX(l_txndelaycounter,l_framedelaycounter),MAX(r_txndelaycounter,r_framedelaycounter))) / 100; // counter values in 10 ns
r_framepktLsbcounter,r_framepktMsbcounter,r_txndelaycounter,r_framedelaycounter); printf("Will wait for %d us\n", maxtimer);
//#endif usleep (maxtimer);
}
//keep comparing with previous values // wait for 1 ms
int maxtimer; else {
while(1){ printf("Will wait for 1 ms\n");
maxtimer = MAX(MAX(l_txndelaycounter,l_framedelaycounter),MAX(r_txndelaycounter,r_framedelaycounter)); usleep (1 * 1000);
maxtimer /= 100;
printf("Will wait for %d us\n",maxtimer);
usleep(maxtimer);
//read new values
l_framepktLsbcounter_new = Beb_Read32(csp0base, addr_l_framepktLsbcounter);
l_framepktMsbcounter_new = Beb_Read32(csp0base, addr_l_framepktMsbcounter);
l_txndelaycounter_new = Beb_Read32(csp0base, addr_l_txndelaycounter);
l_framedelaycounter_new = Beb_Read32(csp0base, addr_l_framedelaycounter);
r_framepktLsbcounter_new = Beb_Read32(csp0base, addr_r_framepktLsbcounter);
r_framepktMsbcounter_new = Beb_Read32(csp0base, addr_r_framepktMsbcounter);
r_txndelaycounter_new = Beb_Read32(csp0base, addr_r_txndelaycounter);
r_framedelaycounter_new = Beb_Read32(csp0base, addr_r_framedelaycounter);
//#ifdef VERBOSE
printf("\nLeft\n"
"FramepacketLsbcounter: %d\n"
"FramepacketMsbcounter: %d\n"
"Txndelaycounter:%d\n"
"Framedelaycounter:%d\n"
"\nRight\n"
"FramepacketLsbcounter: %d\n"
"FramepacketMsbcounter: %d\n"
"Txndelaycounter:%d\n"
"Framedelaycounter:%d\n\n",
l_framepktLsbcounter_new,l_framepktMsbcounter_new,l_txndelaycounter_new,l_framedelaycounter_new,
r_framepktLsbcounter_new,r_framepktMsbcounter_new,r_txndelaycounter_new,r_framedelaycounter_new);
//#endif
if ((l_framepktLsbcounter == l_framepktLsbcounter_new) &&
(l_framepktMsbcounter == l_framepktMsbcounter_new) &&
(r_framepktLsbcounter == r_framepktLsbcounter_new) &&
(r_framepktMsbcounter == r_framepktMsbcounter_new))
break;
//update old values
l_framepktLsbcounter = l_framepktLsbcounter_new;
l_framepktMsbcounter = l_framepktMsbcounter_new;
l_txndelaycounter = l_txndelaycounter_new;
l_framedelaycounter = l_framedelaycounter_new;
r_framepktLsbcounter = r_framepktLsbcounter_new;
r_framepktMsbcounter = r_framepktMsbcounter_new;
r_txndelaycounter = r_txndelaycounter_new;
r_framedelaycounter = r_framedelaycounter_new;
} }
printf("Detector has send all data\n"); // read values again
int l_txndelaycounter2 = Beb_Read32(csp0base, addr_l_txndelaycounter);
int l_framedelaycounter2 = Beb_Read32(csp0base, addr_l_framedelaycounter);
int r_txndelaycounter2 = Beb_Read32(csp0base, addr_r_txndelaycounter);
int r_framedelaycounter2 = Beb_Read32(csp0base, addr_r_framedelaycounter);
int l_framepktLsbcounter2 = Beb_Read32(csp0base, addr_l_framepktLsbcounter);
int l_framepktMsbcounter2 = Beb_Read32(csp0base, addr_l_framepktMsbcounter);
int r_framepktLsbcounter2 = Beb_Read32(csp0base, addr_r_framepktLsbcounter);
int r_framepktMsbcounter2 = Beb_Read32(csp0base, addr_r_framepktMsbcounter);
#ifdef VERBOSE
printf("\nSecond Read:\n"
"\tLeft [Txndelaycounter:%d, Framedelaycounter:%d]\n"
"\tRight [Txndelaycounter:%d, Framedelaycounter:%d]\n",
"\tLeft [FramepacketLsbcounter:%d, FramepacketMsbcounter:%d]\n"
"\tRight [FramepacketLsbcounter:%d, FramepacketMsbcounter:%d]\n",
l_txndelaycounter2,l_framedelaycounter2, r_txndelaycounter2,r_framedelaycounter2,
l_framepktLsbcounter2, l_framepktMsbcounter2, r_framepktLsbcounter2, r_framepktMsbcounter2);
#endif
// any change in values, it is still transmitting
if (l_txndelaycounter != l_txndelaycounter2 || l_framedelaycounter != l_framedelaycounter2 ||
r_txndelaycounter != r_txndelaycounter2 || r_framedelaycounter != r_framedelaycounter2 ||
l_framepktLsbcounter != l_framepktLsbcounter2 || l_framepktMsbcounter != l_framepktMsbcounter2 ||
r_framepktLsbcounter != r_framepktLsbcounter2 || r_framepktMsbcounter != r_framepktMsbcounter2) {
*retval = 1;
} else {
*retval = 0;
}
//close file pointer //close file pointer
Beb_close(fd,csp0base); Beb_close(fd,csp0base);
} }
return OK;
} }
/* do not work at the moment */ /* do not work at the moment */
int Beb_SetMasterViaSoftware(){ int Beb_SetMasterViaSoftware(){

View File

@ -46,7 +46,7 @@ struct BebInfo{
void Beb_GetModuleConfiguration(int* master, int* top, int* normal); void Beb_GetModuleConfiguration(int* master, int* top, int* normal);
void Beb_EndofDataSend(int tengiga); int Beb_IsTransmitting(int* retval, int tengiga, int waitForDelay);
int Beb_SetMasterViaSoftware(); int Beb_SetMasterViaSoftware();
int Beb_SetSlaveViaSoftware(); int Beb_SetSlaveViaSoftware();

View File

@ -1,9 +1,9 @@
Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repsitory UUID: 9649982932b2db75b9bf720ce4a13e7cdb059430 Repsitory UUID: fae884e65851d15bd0ca541956b3263cf79bc1b2
Revision: 361 Revision: 362
Branch: 4.1.2-rc Branch: 4.2.0-rc
Last Changed Author: Gemma_Tinti Last Changed Author: Dhanya_Thattil
Last Changed Rev: 4157 Last Changed Rev: 4166
Last Changed Date: 2020-03-09 18:18:12.000000001 +0100 ./xparameters.h Last Changed Date: 2020-04-03 10:42:36.000000001 +0200 ./Beb.h

View File

@ -1,6 +1,6 @@
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
#define GITREPUUID "9649982932b2db75b9bf720ce4a13e7cdb059430" #define GITREPUUID "fae884e65851d15bd0ca541956b3263cf79bc1b2"
#define GITAUTH "Gemma_Tinti" #define GITAUTH "Dhanya_Thattil"
#define GITREV 0x4157 #define GITREV 0x4166
#define GITDATE 0x20200309 #define GITDATE 0x20200403
#define GITBRANCH "4.1.2-rc" #define GITBRANCH "4.2.0-rc"

View File

@ -1737,19 +1737,23 @@ enum runStatus getRunStatus(){
#else #else
int i = Feb_Control_AcquisitionInProgress(); int i = Feb_Control_AcquisitionInProgress();
switch (i) { if (i == STATUS_ERROR) {
case STATUS_ERROR:
printf("Status: ERROR reading status register\n"); printf("Status: ERROR reading status register\n");
return ERROR; return ERROR;
case STATUS_IDLE: } else if (i == STATUS_IDLE) {
int isTransmitting = 0;
if (Beb_IsTransmitting(&isTransmitting, send_to_ten_gig, 0) == FAIL) {
return ERROR;
}
if (isTransmitting) {
printf("Status: TRANSMITTING\n");
return TRANSMITTING;
}
printf("Status: IDLE\n"); printf("Status: IDLE\n");
return IDLE; return IDLE;
default:
printf("Status: RUNNING...\n");
return RUNNING;
} }
printf("Status: RUNNING...\n");
return IDLE; return RUNNING;
#endif #endif
} }
@ -1783,8 +1787,18 @@ void readFrame(int *ret, char *mess){
} }
//wait for detector to send //wait for detector to send
Beb_EndofDataSend(send_to_ten_gig); int isTransmitting = 1;
while (isTransmitting) {
if (Beb_IsTransmitting(&isTransmitting, send_to_ten_gig, 1) == FAIL) {
strcpy(mess,"Could not read delay counters\n");
*ret = (int)FAIL;
return;
}
if (isTransmitting) {
printf("Transmitting...\n");
}
}
printf("Detector has sent all data\n");
printf("*****Done Waiting...\n"); printf("*****Done Waiting...\n");
*ret = (int)FINISHED; *ret = (int)FINISHED;