mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-12-29 07:31:18 +01:00
actually writing the server binary from memory to file before linking, sycing, permissions etc
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -47,4 +47,6 @@ int verifyChecksumFromFlash(char *mess, char *functionType,
|
|||||||
char *clientChecksum, char *fname, ssize_t fsize);
|
char *clientChecksum, char *fname, ssize_t fsize);
|
||||||
int verifyChecksum(char *mess, char *functionType, char *clientChecksum,
|
int verifyChecksum(char *mess, char *functionType, char *clientChecksum,
|
||||||
MD5_CTX *c, char *msg);
|
MD5_CTX *c, char *msg);
|
||||||
int setupDetectorServer(char *mess, char *sname);
|
int setupDetectorServer(char *mess, char *sname);
|
||||||
|
|
||||||
|
int writeBinaryFile(char* mess, char* fname, char* buffer, uint64_t filesize);
|
||||||
@@ -493,4 +493,27 @@ int setupDetectorServer(char *mess, char *sname) {
|
|||||||
}
|
}
|
||||||
LOG(logINFO, ("\tsync\n"));
|
LOG(logINFO, ("\tsync\n"));
|
||||||
return OK;
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int writeBinaryFile(char* mess, char* fname, char* buffer, uint64_t filesize) {
|
||||||
|
FILE *fp = fopen(fname, "wb");
|
||||||
|
if (fp == NULL) {
|
||||||
|
sprintf(mess, "Could not copy detector server. (writing to file)\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t bytesWritten = fwrite(buffer, 1, filesize, fp);
|
||||||
|
if (bytesWritten != (size_t)filesize) {
|
||||||
|
sprintf(mess, "Could not copy detector server. Expected to write %lu bytes, wrote %lu bytes)\n", (long unsigned int)filesize, (long unsigned int)bytesWritten);
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
if (fclose(fp) != 0) {
|
||||||
|
sprintf(mess, "Could not copy detector server. (closing file pointer)\n");
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
LOG(logINFO, ("\tWritten server binary to %s (%lu bytes)\n", fname, (long unsigned int)bytesWritten));
|
||||||
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -9381,7 +9381,10 @@ void receive_program_via_blackfin(int file_des, enum PROGRAM_INDEX index,
|
|||||||
totalsize);
|
totalsize);
|
||||||
break;
|
break;
|
||||||
case PROGRAM_SERVER:
|
case PROGRAM_SERVER:
|
||||||
ret = setupDetectorServer(mess, serverName);
|
ret = writeBinaryFile(mess, serverName, src, filesize);
|
||||||
|
if (ret == OK) {
|
||||||
|
ret = setupDetectorServer(mess, serverName);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
modeNotImplemented("Program index", (int)index);
|
modeNotImplemented("Program index", (int)index);
|
||||||
@@ -9454,22 +9457,27 @@ void receive_program_default(int file_des, enum PROGRAM_INDEX index,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(GOTTHARD2D) || defined(MYTHEN3D)
|
|
||||||
// appropriate functions
|
// appropriate functions
|
||||||
switch (index) {
|
switch (index) {
|
||||||
|
#if defined(GOTTHARD2D) || defined(MYTHEN3D)
|
||||||
case PROGRAM_FPGA:
|
case PROGRAM_FPGA:
|
||||||
case PROGRAM_KERNEL:
|
case PROGRAM_KERNEL:
|
||||||
ret = eraseAndWriteToFlash(mess, index, functionType, checksum, src,
|
ret = eraseAndWriteToFlash(mess, index, functionType, checksum, src,
|
||||||
filesize);
|
filesize);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined(GOTTHARD2D) || defined(MYTHEN3D) || defined(EIGERD)
|
||||||
case PROGRAM_SERVER:
|
case PROGRAM_SERVER:
|
||||||
ret = setupDetectorServer(mess, serverName);
|
ret = writeBinaryFile(mess, serverName, src, filesize);
|
||||||
|
if (ret == OK) {
|
||||||
|
ret = setupDetectorServer(mess, serverName);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
modeNotImplemented("Program index", (int)index);
|
modeNotImplemented("Program index", (int)index);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
// send result
|
// send result
|
||||||
Server_SendResult(file_des, INT32, NULL, 0);
|
Server_SendResult(file_des, INT32, NULL, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -2534,6 +2534,7 @@ void Module::updateDetectorServer(std::vector<char> buffer,
|
|||||||
break;
|
break;
|
||||||
case MYTHEN3:
|
case MYTHEN3:
|
||||||
case GOTTHARD2:
|
case GOTTHARD2:
|
||||||
|
case EIGER:
|
||||||
sendProgram(false, buffer, F_UPDATE_DETECTOR_SERVER,
|
sendProgram(false, buffer, F_UPDATE_DETECTOR_SERVER,
|
||||||
"Update Detector Server (no tftp)", serverName);
|
"Update Detector Server (no tftp)", serverName);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user