actually writing the server binary from memory to file before linking, sycing, permissions etc

This commit is contained in:
maliakal_d 2021-11-10 17:48:18 +01:00
parent 4a8c365447
commit 32d664a77d
11 changed files with 39 additions and 5 deletions

View File

@ -48,3 +48,5 @@ int verifyChecksumFromFlash(char *mess, char *functionType,
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);

View File

@ -494,3 +494,26 @@ 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;
}

View File

@ -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 = writeBinaryFile(mess, serverName, src, filesize);
if (ret == OK) {
ret = setupDetectorServer(mess, serverName); 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 = writeBinaryFile(mess, serverName, src, filesize);
if (ret == OK) {
ret = setupDetectorServer(mess, serverName); 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);

View File

@ -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;