diff --git a/slsDetectorServers/jungfrauDetectorServer/gitInfo.txt b/slsDetectorServers/jungfrauDetectorServer/gitInfo.txt index 68e820fcd..73b8cb909 100644 --- a/slsDetectorServers/jungfrauDetectorServer/gitInfo.txt +++ b/slsDetectorServers/jungfrauDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorPackage/slsDetectorServers/jungfrauDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: ed9dc3b386898603d74a489528292139d47aac1a -Revision: 32 +Repsitory UUID: 969551ae373167dcfc28466f19e53a349da70f67 +Revision: 33 Branch: program -Last Changed Author: Erik_Frojdh -Last Changed Rev: 4488 -Last Changed Date: 2019-03-29 14:42:42.000000002 +0100 ../slsDetectorServer/slsDetectorServer_funcs.c +Last Changed Author: Dhanya_Thattil +Last Changed Rev: 4489 +Last Changed Date: 2019-04-01 09:39:27.000000002 +0200 ../slsDetectorServer/slsDetectorServer_funcs.c diff --git a/slsDetectorServers/jungfrauDetectorServer/gitInfoJungfrau.h b/slsDetectorServers/jungfrauDetectorServer/gitInfoJungfrau.h index 2f78fa4ac..f12356498 100644 --- a/slsDetectorServers/jungfrauDetectorServer/gitInfoJungfrau.h +++ b/slsDetectorServers/jungfrauDetectorServer/gitInfoJungfrau.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "ed9dc3b386898603d74a489528292139d47aac1a" -#define GITAUTH "Erik_Frojdh" -#define GITREV 0x4488 -#define GITDATE 0x20190329 +#define GITREPUUID "969551ae373167dcfc28466f19e53a349da70f67" +#define GITAUTH "Dhanya_Thattil" +#define GITREV 0x4489 +#define GITDATE 0x20190401 #define GITBRANCH "program" diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c index 54b304d61..4bc04c5d0 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c @@ -3279,106 +3279,101 @@ int program_fpga(int file_des) { // only set if (Server_VerifyLock() == OK) { + FILE_LOG(logINFOBLUE, ("Programming FPGA...\n")); + + size_t filesize = 0; + size_t totalsize = 0; + size_t unitprogramsize = 0; + char* fpgasrc = NULL; + FILE* fp = NULL; + + // filesize + if (receiveData(file_des,&filesize,sizeof(filesize),INT32) < 0) + return printSocketReadError(); + totalsize = filesize; + FILE_LOG(logDEBUG1, ("Total program size is: %d\n", totalsize)); + // not in programming mode - if (debugflag != PROGRAMMING_MODE) { - //to receive any arguments - int n = 1; - while (n > 0) - n = receiveData(file_des, mess, MAX_STR_LENGTH, OTHER); + /*if (debugflag != PROGRAMMING_MODE) { ret = FAIL; sprintf(mess,"FPGA cannot be programmed in this mode. " "Restart on-board detector server with -update for programming mode.\n"); FILE_LOG(logERROR,(mess)); + }*/ + + // opening file pointer to flash and telling FPGA to not touch flash + if (ret != FAIL && startWritingFPGAprogram(&fp) != OK) { + ret = FAIL; + sprintf(mess,"Could not write to flash. Error at startup.\n"); + FILE_LOG(logERROR,(mess)); } - else { - FILE_LOG(logINFOBLUE, ("Programming FPGA...\n")); + //---------------- first ret ---------------- + Server_SendResult(file_des, INT32, NO_UPDATE, NULL, 0); - size_t filesize = 0; - size_t totalsize = 0; - size_t unitprogramsize = 0; - char* fpgasrc = NULL; - FILE* fp = NULL; + if (ret != FAIL) { + //erasing flash + eraseFlash(); + fpgasrc = (char*)malloc(MAX_FPGAPROGRAMSIZE); + } - // filesize - if (receiveData(file_des,&filesize,sizeof(filesize),INT32) < 0) + //writing to flash part by part + while(ret != FAIL && filesize) { + + unitprogramsize = MAX_FPGAPROGRAMSIZE; //2mb + if (unitprogramsize > filesize) //less than 2mb + unitprogramsize = filesize; + FILE_LOG(logDEBUG1, ("unit size to receive is:%d\n" + "filesize:%d\n", unitprogramsize, filesize)); + + + //receive part of program + if (receiveData(file_des,fpgasrc,unitprogramsize,OTHER) < 0) return printSocketReadError(); - totalsize = filesize; - FILE_LOG(logDEBUG1, ("Total program size is: %d\n", totalsize)); - // 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"); - FILE_LOG(logERROR,(mess)); - } + if (!(unitprogramsize - filesize)) { + fpgasrc[unitprogramsize] = '\0'; + filesize -= unitprogramsize; + unitprogramsize++; + } else + filesize -= unitprogramsize; - //---------------- first ret ---------------- + // write part to flash + ret = writeFPGAProgram(fpgasrc, unitprogramsize, fp); + + //---------------- middle rets ---------------- Server_SendResult(file_des, INT32, NO_UPDATE, NULL, 0); - 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; - FILE_LOG(logDEBUG1, ("unit size to receive is:%d\n" - "filesize:%d\n", unitprogramsize, filesize)); - //receive part of program - if (receiveData(file_des,fpgasrc,unitprogramsize,OTHER) < 0) - return printSocketReadError(); - - if (!(unitprogramsize - filesize)) { - fpgasrc[unitprogramsize] = '\0'; - filesize -= unitprogramsize; - unitprogramsize++; - } else - filesize -= unitprogramsize; - - // write part to flash - ret = writeFPGAProgram(fpgasrc, unitprogramsize, fp); - - //---------------- middle rets ---------------- - Server_SendResult(file_des, INT32, NO_UPDATE, NULL, 0); - - - - if (ret == FAIL) { - FILE_LOG(logERROR, ("Failure: Breaking out of program receiving\n")); - } else { - //print progress - FILE_LOG(logINFO, ("Writing to Flash:%d%%\r", - (int) (((double)(totalsize-filesize)/totalsize)*100) )); - fflush(stdout); - } - } - printf("\n"); - FILE_LOG(logINFO, ("Done copying program or due to failure earlier\n")); - - // closing file pointer to flash and informing FPGA - stopWritingFPGAprogram(fp); - - //free resources - if (fpgasrc != NULL) - free(fpgasrc); - if (fp != NULL) - fclose(fp); - - FILE_LOG(logDEBUG1, ("Done with program receiving command\n")); - - if (ret != FAIL && isControlServer) { - basictests(); - initControlServer(); + if (ret == FAIL) { + FILE_LOG(logERROR, ("Failure: Breaking out of program receiving\n")); + } else { + //print progress + FILE_LOG(logINFO, ("Writing to Flash:%d%%\r", + (int) (((double)(totalsize-filesize)/totalsize)*100) )); + fflush(stdout); } } + printf("\n"); + FILE_LOG(logINFO, ("Done copying program or due to failure earlier\n")); + + // closing file pointer to flash and informing FPGA + stopWritingFPGAprogram(fp); + + //free resources + if (fpgasrc != NULL) + free(fpgasrc); + if (fp != NULL) + fclose(fp); + + FILE_LOG(logDEBUG1, ("Done with program receiving command\n")); + + if (ret != FAIL && isControlServer) { + basictests(); + initControlServer(); + } + } #endif #endif diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index 164833a83..2773e7ca7 100644 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -3403,7 +3403,7 @@ int slsDetector::programFPGA(std::vector buffer) { int fnum = F_PROGRAM_FPGA; int ret = FAIL; char mess[MAX_STR_LENGTH] = {0}; - FILE_LOG(logINFO) << "Sending programming binary to detector " << detector_shm()->hostname; + FILE_LOG(logINFO) << "Sending programming binary to detector " << detId << " (" << detector_shm()->hostname << ")"; if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); @@ -3413,14 +3413,16 @@ int slsDetector::programFPGA(std::vector buffer) { // opening error if (ret == FAIL) { client.receiveData(mess, sizeof(mess)); - throw RuntimeError("Detector " + std::to_string(detId) + - " returned error: " + std::string(mess)); + std::ostringstream os; + os << "Detector " << detId << " (" << detector_shm()->hostname << ")" << + " returned error: " << mess; + throw RuntimeError(os.str()); } // erasing flash if (ret != FAIL) { FILE_LOG(logINFO) << "This can take awhile. Please be patient..."; - FILE_LOG(logINFO) << detId << "Erasing Flash:"; + FILE_LOG(logINFO) << "Erasing Flash for detector " << detId << " (" << detector_shm()->hostname << ")"; printf("%d%%\r", 0); std::cout << std::flush; // erasing takes 65 seconds, printing here (otherwise need threads @@ -3434,7 +3436,7 @@ int slsDetector::programFPGA(std::vector buffer) { std::cout << std::flush; } printf("\n"); - FILE_LOG(logINFO) << detId << "Writing to Flash:"; + FILE_LOG(logINFO) << "Writing to Flash to detector " << detId << " (" << detector_shm()->hostname << ")"; printf("%d%%\r", 0); std::cout << std::flush; } @@ -3464,8 +3466,10 @@ int slsDetector::programFPGA(std::vector buffer) { } else { printf("\n"); client.receiveData(mess, sizeof(mess)); - throw RuntimeError("Detector " + std::to_string(detId) + - " returned error: " + std::string(mess)); + std::ostringstream os; + os << "Detector " << detId << " (" << detector_shm()->hostname << ")" << + " returned error: " << mess; + throw RuntimeError(os.str()); } } printf("\n"); @@ -3476,8 +3480,10 @@ int slsDetector::programFPGA(std::vector buffer) { client.receiveData(&ret, sizeof(ret)); if (ret == FAIL) { client.receiveData(mess, sizeof(mess)); - throw RuntimeError("Detector " + std::to_string(detId) + - " returned error: " + std::string(mess)); + std::ostringstream os; + os << "Detector " << detId << " (" << detector_shm()->hostname << ")" << + " returned error: " << mess; + throw RuntimeError(os.str()); } } @@ -3495,8 +3501,10 @@ int slsDetector::programFPGA(std::vector buffer) { stop.receiveData(&stopret, sizeof(stopret)); if (stopret == FAIL) { client.receiveData(mess, sizeof(mess)); - throw RuntimeError("Detector " + std::to_string(detId) + - " returned error: " + std::string(mess)); + std::ostringstream os; + os << "Detector " << detId << " (" << detector_shm()->hostname << ")" << + " returned error: " << mess; + throw RuntimeError(os.str()); } } }