mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 18:17:59 +02:00
wip
This commit is contained in:
@ -45,5 +45,6 @@ int startWritingFPGAprogram(FILE **filefp);
|
||||
int stopWritingFPGAprogram(FILE *filefp);
|
||||
|
||||
int startCopyingFPGAProgram(FILE **fd, uint64_t fsize, char *mess);
|
||||
int writeFPGAProgram(uint64_t fsize, FILE *fd, char *src, char *msg,
|
||||
int writeFPGAProgram(FILE *fd, char *src, uint64_t fsize, char *msg,
|
||||
char *mess);
|
||||
int verifyCheckSumofProgram(char* clientChecksum, char* mess);
|
||||
|
@ -179,7 +179,7 @@ int startCopyingFPGAProgram(FILE **fd, uint64_t fsize, char *mess) {
|
||||
return OK;
|
||||
}
|
||||
|
||||
int writeFPGAProgram(uint64_t fsize, FILE *fd, char *src, char* msg, char* mess) {
|
||||
int writeFPGAProgram(FILE *fd, char *src, uint64_t fsize, char* msg, char* mess) {
|
||||
LOG(logDEBUG1,
|
||||
("%s [fsize:%lu,fd:%p,src:%p\n", msg, (long long unsigned int)fsize, (void *)fd, (void *)src));
|
||||
|
||||
@ -192,3 +192,33 @@ int writeFPGAProgram(uint64_t fsize, FILE *fd, char *src, char* msg, char* mess)
|
||||
return OK;
|
||||
}
|
||||
|
||||
int verifyCheckSumofProgram(char* clientChecksum, char* mess) {
|
||||
LOG(logINFOBLUE, ("\tVerifying Checksum\n"));
|
||||
|
||||
// get checksum from copied file
|
||||
char cmd[MAX_STR_LENGTH] = {0};
|
||||
memset(cmd, 0, MAX_STR_LENGTH);
|
||||
sprintf(cmd, "md5sum %s", TEMP_PROG_FILE_NAME);
|
||||
char retvals[MAX_STR_LENGTH] = {0};
|
||||
memset(retvals, 0, MAX_STR_LENGTH);
|
||||
if (FAIL == executeCommand(cmd, retvals, logDEBUG1)) {
|
||||
strcpy(mess, retvals);
|
||||
// LOG(logERROR, (mess)); already printed in executecommand
|
||||
return FAIL;
|
||||
}
|
||||
char checksum[MAX_STR_LENGTH];
|
||||
memset(checksum, 0, sizeof(checksum));
|
||||
if (sscanf(retvals, "%s", checksum) != 1) {
|
||||
sprintf(mess, "Could not get checksum of fpga program copied over");
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
// compare checksum
|
||||
if (strcmp(clientChecksum, checksum)) {
|
||||
sprintf(mess, "Checksum of copied fpga program does not match. Client checksum:%s, copied checksum:%s\n", clientChecksum, checksum);
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
LOG(logINFO, ("\tChecksum verified from copied program\n"));
|
||||
return OK;
|
||||
}
|
@ -3730,7 +3730,7 @@ int program_fpga(int file_des) {
|
||||
memset(checksum, 0, MAX_STR_LENGTH);
|
||||
if (receiveData(file_des, checksum, MAX_STR_LENGTH, OTHER) < 0)
|
||||
return printSocketReadError();
|
||||
LOG(logINFOBLUE, ("checksum is: %s\n\n", checksum));
|
||||
LOG(logDEBUG1, ("checksum is: %s\n\n", checksum));
|
||||
|
||||
// open file and allocate memory for part program
|
||||
FILE *fd = NULL;
|
||||
@ -3746,15 +3746,20 @@ int program_fpga(int file_des) {
|
||||
}
|
||||
Server_SendResult(file_des, INT32, NULL, 0);
|
||||
if (ret == FAIL) {
|
||||
if (src != NULL) {
|
||||
free(src);
|
||||
}
|
||||
if (fd != NULL) {
|
||||
fclose(fd);
|
||||
}
|
||||
LOG(logERROR, ("Program FPGA FAIL1!\n"));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
|
||||
// copying program part by part
|
||||
uint64_t totalsize = filesize;
|
||||
while (ret != FAIL && filesize) {
|
||||
while (ret == OK && filesize) {
|
||||
uint64_t unitprogramsize = MAX_FPGAPROGRAMSIZE; // 2mb
|
||||
if (unitprogramsize > filesize) // less than 2mb
|
||||
unitprogramsize = filesize;
|
||||
@ -3776,7 +3781,7 @@ int program_fpga(int file_des) {
|
||||
filesize -= unitprogramsize;
|
||||
|
||||
// copy program
|
||||
ret = writeFPGAProgram(unitprogramsize, fd, src, "copy program to /var/tmp", mess);
|
||||
ret = writeFPGAProgram(fd, src, unitprogramsize, "copy program to /var/tmp", mess);
|
||||
Server_SendResult(file_des, INT32, NULL, 0);
|
||||
if (ret == FAIL) {
|
||||
break;
|
||||
@ -3787,15 +3792,23 @@ int program_fpga(int file_des) {
|
||||
(int)(((double)(totalsize - filesize) / totalsize) * 100)));
|
||||
fflush(stdout);
|
||||
}
|
||||
if (ret == FAIL) {
|
||||
if (src != NULL) {
|
||||
free(src);
|
||||
}
|
||||
if (fd != NULL) {
|
||||
fclose(fd);
|
||||
}
|
||||
|
||||
// checksum of copied program
|
||||
if (ret == OK) {
|
||||
ret = verifyCheckSumofProgram(checksum, mess);
|
||||
}
|
||||
Server_SendResult(file_des, INT32, NULL, 0);
|
||||
|
||||
if (ret == FAIL) {
|
||||
LOG(logERROR, ("Program FPGA FAIL!\n"));
|
||||
return FAIL;
|
||||
}
|
||||
free(src);
|
||||
fclose(fd);
|
||||
LOG(logINFO, ("\n\tCopying done\n"));
|
||||
|
||||
/* if (ret != FAIL) {
|
||||
fpgasrc[totalsize] = '\0';
|
||||
|
Reference in New Issue
Block a user