mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-20 02:40:03 +02:00
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:
parent
8986b008dd
commit
23d73ae5ae
Binary file not shown.
Binary file not shown.
@ -7847,11 +7847,16 @@ int slsDetector::programFPGA(string fname){
|
|||||||
std::cout<<std::endl;
|
std::cout<<std::endl;
|
||||||
|
|
||||||
//check ending error
|
//check ending error
|
||||||
controlSocket->ReceiveDataOnly(&ret,sizeof(ret));
|
if ((ret == FAIL) &&
|
||||||
if (ret==FAIL) {
|
(strstr(mess,"not implemented") == NULL) &&
|
||||||
controlSocket->ReceiveDataOnly(mess,sizeof(mess));
|
(strstr(mess,"locked") == NULL) &&
|
||||||
std::cout<< "Detector returned error: " << mess << std::endl;
|
(strstr(mess,"-update") == NULL)) {
|
||||||
setErrorMask((getErrorMask())|(PROGRAMMING_ERROR));
|
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();
|
disconnectControl();
|
||||||
if (ret==FORCE_UPDATE)
|
if (ret==FORCE_UPDATE)
|
||||||
@ -7860,12 +7865,22 @@ int slsDetector::programFPGA(string fname){
|
|||||||
|
|
||||||
|
|
||||||
//remapping stop server
|
//remapping stop server
|
||||||
fnum=F_RESET_FPGA;
|
if ((ret == FAIL) &&
|
||||||
int stopret;
|
(strstr(mess,"not implemented") == NULL) &&
|
||||||
if (connectStop() == OK){
|
(strstr(mess,"locked") == NULL) &&
|
||||||
stopSocket->SendDataOnly(&fnum,sizeof(fnum));
|
(strstr(mess,"-update") == NULL)) {
|
||||||
stopSocket->ReceiveDataOnly(&stopret,sizeof(stopret));
|
fnum=F_RESET_FPGA;
|
||||||
disconnectControl();
|
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) {
|
if (ret != FAIL) {
|
||||||
|
@ -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
|
||||||
|
@ -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,78 +4963,48 @@ 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) {
|
||||||
size_t filesize = 0;
|
//to receive any arguments
|
||||||
size_t totalsize = 0;
|
while (n > 0)
|
||||||
size_t unitprogramsize = 0;
|
n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER);
|
||||||
char* fpgasrc = NULL;
|
ret=FAIL;
|
||||||
FILE* fp = NULL;
|
sprintf(mess,"FPGA cannot be programmed in this mode. "
|
||||||
|
"Restart on-board detector server with -update for update mode to continue.\n");
|
||||||
// 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);
|
|
||||||
cprintf(RED, "Warning: %s", mess);
|
cprintf(RED, "Warning: %s", mess);
|
||||||
}
|
}
|
||||||
#ifdef SLS_DETECTOR_FUNCTION_LIST
|
|
||||||
else {
|
else {
|
||||||
//opening file pointer to flash and telling FPGA to not touch flash
|
printf("Programming FPGA...");
|
||||||
if(startWritingFPGAprogram(&fp) != OK) {
|
size_t filesize = 0;
|
||||||
ret=FAIL;
|
size_t totalsize = 0;
|
||||||
sprintf(mess,"Could not write to flash. Error at startup.\n");
|
size_t unitprogramsize = 0;
|
||||||
cprintf(RED,"%s",mess);
|
char* fpgasrc = NULL;
|
||||||
}
|
FILE* fp = NULL;
|
||||||
|
|
||||||
//---------------- first ret ----------------
|
// receive arguments - filesize
|
||||||
// ret could be swapped during sendData
|
n = receiveData(file_des,&filesize,sizeof(filesize),INT32);
|
||||||
ret1 = ret;
|
if (n < 0) return printSocketReadError();
|
||||||
// send ok / fail
|
totalsize = filesize;
|
||||||
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;
|
|
||||||
#ifdef VERY_VERBOSE
|
#ifdef VERY_VERBOSE
|
||||||
printf("unit size to receive is:%d\n",unitprogramsize);
|
printf("\n\n Total size is:%d\n",totalsize);
|
||||||
printf("filesize:%d currentpointer:%d\n",filesize,currentPointer);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//receive
|
// execute action
|
||||||
n = receiveData(file_des,fpgasrc,unitprogramsize,OTHER);
|
if (differentClients && lockStatus) {
|
||||||
if (n < 0) return printSocketReadError();
|
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)){
|
//---------------- first ret ----------------
|
||||||
fpgasrc[unitprogramsize]='\0';
|
|
||||||
filesize-=unitprogramsize;
|
|
||||||
unitprogramsize++;
|
|
||||||
}else
|
|
||||||
filesize-=unitprogramsize;
|
|
||||||
|
|
||||||
ret = writeFPGAProgram(fpgasrc,unitprogramsize,fp);
|
|
||||||
|
|
||||||
//---------------- middle rets ----------------
|
|
||||||
// ret could be swapped during sendData
|
// ret could be swapped during sendData
|
||||||
ret1 = ret;
|
ret1 = ret;
|
||||||
// send ok / fail
|
// send ok / fail
|
||||||
@ -5043,38 +5012,80 @@ int program_fpga(int file_des) {
|
|||||||
// send return argument
|
// send return argument
|
||||||
if (ret==FAIL) {
|
if (ret==FAIL) {
|
||||||
n += sendData(file_des,mess,sizeof(mess),OTHER);
|
n += sendData(file_des,mess,sizeof(mess),OTHER);
|
||||||
cprintf(RED,"Failure: Breaking out of program receiving\n");
|
|
||||||
}
|
}
|
||||||
//---------------- middle rets ----------------
|
//---------------- first ret ----------------
|
||||||
|
|
||||||
if(ret != FAIL){
|
if(ret!=FAIL) {
|
||||||
//print progress
|
//erasing flash
|
||||||
printf("Writing to Flash:%d%%\r",(int) (((double)(totalsize-filesize)/totalsize)*100) );
|
eraseFlash();
|
||||||
fflush(stdout);
|
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
|
unitprogramsize = MAX_FPGAPROGRAMSIZE; //2mb
|
||||||
stopWritingFPGAprogram(fp);
|
if(unitprogramsize > filesize) //less than 2mb
|
||||||
|
unitprogramsize = filesize;
|
||||||
//free resources
|
|
||||||
if(fpgasrc != NULL)
|
|
||||||
free(fpgasrc);
|
|
||||||
if(fp!=NULL)
|
|
||||||
fclose(fp);
|
|
||||||
#ifdef VERY_VERBOSE
|
#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
|
#endif
|
||||||
|
|
||||||
if (isControlServer)
|
//receive
|
||||||
basictests(debugflag);
|
n = receiveData(file_des,fpgasrc,unitprogramsize,OTHER);
|
||||||
init_detector(isControlServer);
|
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
|
#endif
|
||||||
if (ret==OK)
|
|
||||||
ret=FORCE_UPDATE;
|
if (isControlServer)
|
||||||
|
basictests(debugflag);
|
||||||
|
init_detector(isControlServer);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (ret==OK)
|
||||||
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user