jungfrau server: programming allowed only in -update or -dev mode, -dev strictly for Carlos, in update mode one can only do programming

This commit is contained in:
maliakal_d 2018-05-11 13:42:46 +02:00
parent 8986b008dd
commit 23d73ae5ae
5 changed files with 132 additions and 107 deletions

View File

@ -7847,12 +7847,17 @@ int slsDetector::programFPGA(string fname){
std::cout<<std::endl; std::cout<<std::endl;
//check ending error //check ending error
if ((ret == FAIL) &&
(strstr(mess,"not implemented") == NULL) &&
(strstr(mess,"locked") == NULL) &&
(strstr(mess,"-update") == NULL)) {
controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); controlSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL) { if (ret==FAIL) {
controlSocket->ReceiveDataOnly(mess,sizeof(mess)); controlSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Detector returned error: " << mess << std::endl; std::cout<< "Detector returned error: " << mess << std::endl;
setErrorMask((getErrorMask())|(PROGRAMMING_ERROR)); setErrorMask((getErrorMask())|(PROGRAMMING_ERROR));
} }
}
disconnectControl(); disconnectControl();
if (ret==FORCE_UPDATE) if (ret==FORCE_UPDATE)
updateDetector(); updateDetector();
@ -7860,14 +7865,24 @@ int slsDetector::programFPGA(string fname){
//remapping stop server //remapping stop server
if ((ret == FAIL) &&
(strstr(mess,"not implemented") == NULL) &&
(strstr(mess,"locked") == NULL) &&
(strstr(mess,"-update") == NULL)) {
fnum=F_RESET_FPGA; fnum=F_RESET_FPGA;
int stopret; int stopret;
if (connectStop() == OK){ if (connectStop() == OK){
stopSocket->SendDataOnly(&fnum,sizeof(fnum)); stopSocket->SendDataOnly(&fnum,sizeof(fnum));
stopSocket->ReceiveDataOnly(&stopret,sizeof(stopret)); stopSocket->ReceiveDataOnly(&stopret,sizeof(stopret));
if (stopret==FAIL) {
controlSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Detector returned error: " << mess << std::endl;
setErrorMask((getErrorMask())|(PROGRAMMING_ERROR));
}
disconnectControl(); disconnectControl();
} }
} }
}
if (ret != FAIL) { if (ret != FAIL) {
printf("You can now restart the detector servers in normal mode.\n"); printf("You can now restart the detector servers in normal mode.\n");
} }

View File

@ -35,16 +35,16 @@ int main(int argc, char *argv[]){
int i; int i;
for (i = 1; i < argc; ++i) { for (i = 1; i < argc; ++i) {
if(!strcasecmp(argv[i],"-stopserver")) { if(!strcasecmp(argv[i],"-stopserver")) {
cprintf(BLUE,"detected stop server\n"); cprintf(BLUE,"Detected stop server\n");
controlserver = 0; controlserver = 0;
} }
else if(!strcasecmp(argv[i],"-debug")){ else if(!strcasecmp(argv[i],"-devel")){
cprintf(BLUE,"detected debug mode\n"); cprintf(BLUE,"Detected developer mode\n");
debugflag = 1; debugflag = 1;
} }
#ifdef JUNGFRAUD #ifdef JUNGFRAUD
else if(!strcasecmp(argv[i],"-programming")){ else if(!strcasecmp(argv[i],"-update")){
cprintf(BLUE,"detected programming mode\n"); cprintf(BLUE,"Detected update mode\n");
debugflag = PROGRAMMING_MODE; debugflag = PROGRAMMING_MODE;
} }
#endif #endif

View File

@ -337,7 +337,7 @@ int M_nofuncMode(int file_des){
while (n > 0) while (n > 0)
n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER);
strcat(mess, "On-board detector server in programming mode. Restart detector server in normal mode (without any arguments).\n"); strcat(mess, "On-board detector server in update mode. Restart detector server in normal mode (without any arguments) to continue.\n");
cprintf(BG_RED,"Error: %s",mess); cprintf(BG_RED,"Error: %s",mess);
n = sendData(file_des,&ret1,sizeof(ret1),INT32); n = sendData(file_des,&ret1,sizeof(ret1),INT32);
n = sendData(file_des,mess,sizeof(mess),OTHER); // mess is defined at function call n = sendData(file_des,mess,sizeof(mess),OTHER); // mess is defined at function call
@ -4954,7 +4954,6 @@ int program_fpga(int file_des) {
int ret=OK,ret1=OK; int ret=OK,ret1=OK;
int n=0; int n=0;
sprintf(mess,"program FPGA failed\n"); sprintf(mess,"program FPGA failed\n");
printf("Programming FPGA...");
#ifndef JUNGFRAUD #ifndef JUNGFRAUD
//to receive any arguments //to receive any arguments
@ -4964,7 +4963,18 @@ int program_fpga(int file_des) {
sprintf(mess,"Function (Program FPGA) is not implemented for this detector\n"); sprintf(mess,"Function (Program FPGA) is not implemented for this detector\n");
cprintf(RED, "Warning: %s", mess); cprintf(RED, "Warning: %s", mess);
#else #else
if (!debugflag) {
//to receive any arguments
while (n > 0)
n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER);
ret=FAIL;
sprintf(mess,"FPGA cannot be programmed in this mode. "
"Restart on-board detector server with -update for update mode to continue.\n");
cprintf(RED, "Warning: %s", mess);
}
else {
printf("Programming FPGA...");
size_t filesize = 0; size_t filesize = 0;
size_t totalsize = 0; size_t totalsize = 0;
size_t unitprogramsize = 0; size_t unitprogramsize = 0;
@ -5075,6 +5085,7 @@ int program_fpga(int file_des) {
#endif #endif
if (ret==OK) if (ret==OK)
ret=FORCE_UPDATE; ret=FORCE_UPDATE;
}
#endif #endif
// ret could be swapped during sendData // ret could be swapped during sendData
@ -5104,8 +5115,7 @@ int reset_fpga(int file_des) {
while (n > 0) while (n > 0)
n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER);
ret = FAIL; ret = FAIL;
sprintf(mess,"Function (Start Readout) is not implemented for this detector\n"); sprintf(mess,"Function (Reset FPGA) is not implemented for this detector\n"); cprintf(RED, "%s", mess);
cprintf(RED, "%s", mess);
#else #else
// execute action // execute action