From 23d73ae5aee55e52d1d05452c633073ac1c6ad1a Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 11 May 2018 13:42:46 +0200 Subject: [PATCH] jungfrau server: programming allowed only in -update or -dev mode, -dev strictly for Carlos, in update mode one can only do programming --- .../bin/eigerDetectorServer_developer | Bin 297525 -> 297525 bytes .../bin/jungfrauDetectorServer_developer | Bin 113560 -> 113820 bytes .../slsDetector/slsDetector.cpp | 37 +++- .../slsDetectorServer/slsDetectorServer.c | 10 +- .../slsDetectorServer_funcs.c | 192 +++++++++--------- 5 files changed, 132 insertions(+), 107 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer index f2fa9f9a86f15b4a93cc05c6ac0c36650b009362..a524d96cb05952353a823159fb9cb7e735f714de 100755 GIT binary patch delta 25388 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

Of=-=VK5D^eRelmh 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 diff --git a/slsDetectorSoftware/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorSoftware/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer index 6a7b9f73056be5dbcb7412820ff89e881a997248..3c13253cf85dd67fa33a8d81d28073bfe432a223 100755 GIT binary patch delta 32148 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 J+qn-a|Gxsr%ZUI0 delta 31901 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 diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 0086681d6..d4b3b2c71 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -7847,11 +7847,16 @@ int slsDetector::programFPGA(string fname){ std::cout<ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==FAIL) { - controlSocket->ReceiveDataOnly(mess,sizeof(mess)); - std::cout<< "Detector returned error: " << mess << std::endl; - setErrorMask((getErrorMask())|(PROGRAMMING_ERROR)); + if ((ret == FAIL) && + (strstr(mess,"not implemented") == NULL) && + (strstr(mess,"locked") == NULL) && + (strstr(mess,"-update") == NULL)) { + controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); + if (ret==FAIL) { + controlSocket->ReceiveDataOnly(mess,sizeof(mess)); + std::cout<< "Detector returned error: " << mess << std::endl; + setErrorMask((getErrorMask())|(PROGRAMMING_ERROR)); + } } disconnectControl(); if (ret==FORCE_UPDATE) @@ -7860,12 +7865,22 @@ int slsDetector::programFPGA(string fname){ //remapping stop server - fnum=F_RESET_FPGA; - int stopret; - if (connectStop() == OK){ - stopSocket->SendDataOnly(&fnum,sizeof(fnum)); - stopSocket->ReceiveDataOnly(&stopret,sizeof(stopret)); - disconnectControl(); + if ((ret == FAIL) && + (strstr(mess,"not implemented") == NULL) && + (strstr(mess,"locked") == NULL) && + (strstr(mess,"-update") == NULL)) { + fnum=F_RESET_FPGA; + int stopret; + if (connectStop() == OK){ + stopSocket->SendDataOnly(&fnum,sizeof(fnum)); + 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(); + } } } if (ret != FAIL) { diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer.c index b2fad8509..fd4b0e443 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer.c @@ -35,16 +35,16 @@ int main(int argc, char *argv[]){ int i; for (i = 1; i < argc; ++i) { if(!strcasecmp(argv[i],"-stopserver")) { - cprintf(BLUE,"detected stop server\n"); + cprintf(BLUE,"Detected stop server\n"); controlserver = 0; } - else if(!strcasecmp(argv[i],"-debug")){ - cprintf(BLUE,"detected debug mode\n"); + else if(!strcasecmp(argv[i],"-devel")){ + cprintf(BLUE,"Detected developer mode\n"); debugflag = 1; } #ifdef JUNGFRAUD - else if(!strcasecmp(argv[i],"-programming")){ - cprintf(BLUE,"detected programming mode\n"); + else if(!strcasecmp(argv[i],"-update")){ + cprintf(BLUE,"Detected update mode\n"); debugflag = PROGRAMMING_MODE; } #endif diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 0c284ea15..65ef1dd16 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -337,7 +337,7 @@ int M_nofuncMode(int file_des){ while (n > 0) 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); n = sendData(file_des,&ret1,sizeof(ret1),INT32); 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 n=0; sprintf(mess,"program FPGA failed\n"); - printf("Programming FPGA..."); #ifndef JUNGFRAUD //to receive any arguments @@ -4964,78 +4963,48 @@ int program_fpga(int file_des) { sprintf(mess,"Function (Program FPGA) is not implemented for this detector\n"); cprintf(RED, "Warning: %s", mess); #else - - size_t filesize = 0; - size_t totalsize = 0; - size_t unitprogramsize = 0; - char* fpgasrc = NULL; - FILE* fp = NULL; - - // receive arguments - filesize - n = receiveData(file_des,&filesize,sizeof(filesize),INT32); - if (n < 0) return printSocketReadError(); - totalsize = filesize; -#ifdef VERY_VERBOSE - printf("\n\n Total size is:%d\n",totalsize); -#endif - - // execute action - if (differentClients && lockStatus) { - ret = FAIL; - sprintf(mess,"Detector locked by %s\n",lastClientIP); + 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); } -#ifdef SLS_DETECTOR_FUNCTION_LIST + else { - //opening file pointer to flash and telling FPGA to not touch flash - if(startWritingFPGAprogram(&fp) != OK) { - ret=FAIL; - sprintf(mess,"Could not write to flash. Error at startup.\n"); - cprintf(RED,"%s",mess); - } + printf("Programming FPGA..."); + size_t filesize = 0; + size_t totalsize = 0; + size_t unitprogramsize = 0; + char* fpgasrc = NULL; + FILE* fp = NULL; - //---------------- first ret ---------------- - // ret could be swapped during sendData - ret1 = ret; - // send ok / fail - n = sendData(file_des,&ret1,sizeof(ret),INT32); - // send return argument - if (ret==FAIL) { - n += sendData(file_des,mess,sizeof(mess),OTHER); - } - //---------------- first ret ---------------- - - if(ret!=FAIL) { - //erasing flash - eraseFlash(); - fpgasrc = (char*)malloc(MAX_FPGAPROGRAMSIZE); - } - - //writing to flash part by part - while(ret != FAIL && filesize){ - - unitprogramsize = MAX_FPGAPROGRAMSIZE; //2mb - if(unitprogramsize > filesize) //less than 2mb - unitprogramsize = filesize; + // receive arguments - filesize + n = receiveData(file_des,&filesize,sizeof(filesize),INT32); + if (n < 0) return printSocketReadError(); + totalsize = filesize; #ifdef VERY_VERBOSE - printf("unit size to receive is:%d\n",unitprogramsize); - printf("filesize:%d currentpointer:%d\n",filesize,currentPointer); + printf("\n\n Total size is:%d\n",totalsize); #endif - //receive - n = receiveData(file_des,fpgasrc,unitprogramsize,OTHER); - if (n < 0) return printSocketReadError(); + // execute action + if (differentClients && lockStatus) { + ret = FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + cprintf(RED, "Warning: %s", mess); + } +#ifdef SLS_DETECTOR_FUNCTION_LIST + else { + //opening file pointer to flash and telling FPGA to not touch flash + if(startWritingFPGAprogram(&fp) != OK) { + ret=FAIL; + sprintf(mess,"Could not write to flash. Error at startup.\n"); + cprintf(RED,"%s",mess); + } - if(!(unitprogramsize - filesize)){ - fpgasrc[unitprogramsize]='\0'; - filesize-=unitprogramsize; - unitprogramsize++; - }else - filesize-=unitprogramsize; - - ret = writeFPGAProgram(fpgasrc,unitprogramsize,fp); - - //---------------- middle rets ---------------- + //---------------- first ret ---------------- // ret could be swapped during sendData ret1 = ret; // send ok / fail @@ -5043,38 +5012,80 @@ int program_fpga(int file_des) { // send return argument if (ret==FAIL) { n += sendData(file_des,mess,sizeof(mess),OTHER); - cprintf(RED,"Failure: Breaking out of program receiving\n"); } - //---------------- middle rets ---------------- + //---------------- first ret ---------------- - if(ret != FAIL){ - //print progress - printf("Writing to Flash:%d%%\r",(int) (((double)(totalsize-filesize)/totalsize)*100) ); - fflush(stdout); + if(ret!=FAIL) { + //erasing flash + eraseFlash(); + fpgasrc = (char*)malloc(MAX_FPGAPROGRAMSIZE); } - } - printf("\n"); + //writing to flash part by part + while(ret != FAIL && filesize){ - //closing file pointer to flash and informing FPGA - stopWritingFPGAprogram(fp); - - //free resources - if(fpgasrc != NULL) - free(fpgasrc); - if(fp!=NULL) - fclose(fp); + unitprogramsize = MAX_FPGAPROGRAMSIZE; //2mb + if(unitprogramsize > filesize) //less than 2mb + unitprogramsize = filesize; #ifdef VERY_VERBOSE - printf("Done with program receiving command\n"); + printf("unit size to receive is:%d\n",unitprogramsize); + printf("filesize:%d currentpointer:%d\n",filesize,currentPointer); #endif - if (isControlServer) - basictests(debugflag); - init_detector(isControlServer); - } + //receive + n = receiveData(file_des,fpgasrc,unitprogramsize,OTHER); + if (n < 0) return printSocketReadError(); + + if(!(unitprogramsize - filesize)){ + fpgasrc[unitprogramsize]='\0'; + filesize-=unitprogramsize; + unitprogramsize++; + }else + filesize-=unitprogramsize; + + ret = writeFPGAProgram(fpgasrc,unitprogramsize,fp); + + //---------------- middle rets ---------------- + // ret could be swapped during sendData + ret1 = ret; + // send ok / fail + n = sendData(file_des,&ret1,sizeof(ret),INT32); + // send return argument + if (ret==FAIL) { + n += sendData(file_des,mess,sizeof(mess),OTHER); + cprintf(RED,"Failure: Breaking out of program receiving\n"); + } + //---------------- middle rets ---------------- + + if(ret != FAIL){ + //print progress + printf("Writing to Flash:%d%%\r",(int) (((double)(totalsize-filesize)/totalsize)*100) ); + fflush(stdout); + } + } + + printf("\n"); + + //closing file pointer to flash and informing FPGA + stopWritingFPGAprogram(fp); + + //free resources + if(fpgasrc != NULL) + free(fpgasrc); + if(fp!=NULL) + fclose(fp); +#ifdef VERY_VERBOSE + printf("Done with program receiving command\n"); #endif - if (ret==OK) - ret=FORCE_UPDATE; + + if (isControlServer) + basictests(debugflag); + init_detector(isControlServer); + } +#endif + if (ret==OK) + ret=FORCE_UPDATE; + } #endif // ret could be swapped during sendData @@ -5104,8 +5115,7 @@ int reset_fpga(int file_des) { while (n > 0) n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); ret = FAIL; - sprintf(mess,"Function (Start Readout) is not implemented for this detector\n"); - cprintf(RED, "%s", mess); + sprintf(mess,"Function (Reset FPGA) is not implemented for this detector\n"); cprintf(RED, "%s", mess); #else // execute action