diff --git a/RELEASE.txt b/RELEASE.txt index 4772723fd..5d1bbf6cf 100755 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -54,6 +54,8 @@ This document describes the differences between v7.0.0 and v6.x.x - added geometry to metadata - 10g eiger nextframenumber get fixed. - stop, able to set nextframenumber to a consistent (max + 1) for all modules if different (eiger/ctb/jungfrau/moench) +- fpga/kernel programming, checks if drive is a special file and not a normal file +- fpga/kernel programming, checks if drive is a special file and not a normal file - gotthard 25 um image reconstructed in gui and virtual hdf5 (firmware updated for slave to reverse channels) 2. Resolved Issues diff --git a/python/src/detector.cpp b/python/src/detector.cpp index 45ad603ed..024d08ddb 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -1531,9 +1531,10 @@ void init_det(py::module &m) { Detector::setAdditionalJsonParameter, py::arg(), py::arg(), py::arg() = Positions{}) .def("programFPGA", - (void (Detector::*)(const std::string &, sls::Positions)) & + (void (Detector::*)(const std::string &, const bool, + sls::Positions)) & Detector::programFPGA, - py::arg(), py::arg() = Positions{}) + py::arg(), py::arg(), py::arg() = Positions{}) .def("resetFPGA", (void (Detector::*)(sls::Positions)) & Detector::resetFPGA, py::arg() = Positions{}) diff --git a/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer b/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer index 3e3a18e9e..b85880659 100755 Binary files a/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer and b/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer differ diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer index e0544455f..de82c02ef 100755 Binary files a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer and b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer differ diff --git a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer index 40935898f..ad2379ae3 100755 Binary files a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer and b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer differ diff --git a/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer b/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer index 09af215a0..43d71d90b 100755 Binary files a/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer and b/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer differ diff --git a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer index bccdf98d0..d4200dfea 100755 Binary files a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer and b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer differ diff --git a/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer b/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer index 391942c4e..43cdabacb 100755 Binary files a/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer and b/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer differ diff --git a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer index 4f5714204..dadb7a648 100755 Binary files a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer and b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer differ diff --git a/slsDetectorServers/slsDetectorServer/include/programViaBlackfin.h b/slsDetectorServers/slsDetectorServer/include/programViaBlackfin.h index 0c644f27b..5c8cbec53 100644 --- a/slsDetectorServers/slsDetectorServer/include/programViaBlackfin.h +++ b/slsDetectorServers/slsDetectorServer/include/programViaBlackfin.h @@ -26,10 +26,12 @@ int preparetoCopyProgram(char *mess, char *functionType, FILE **fd, uint64_t fsize); int eraseAndWriteToFlash(char *mess, enum PROGRAM_INDEX index, char *functionType, char *clientChecksum, - ssize_t fsize); + ssize_t fsize, int forceDeleteNormalFile); int getDrive(char *mess, enum PROGRAM_INDEX index); /** Notify fpga not to touch flash, open src and flash drive to write */ -int openFileForFlash(char *mess, FILE **flashfd, FILE **srcfd); +int openFileForFlash(char *mess, enum PROGRAM_INDEX index, FILE **flashfd, FILE **srcfd, + int forceDeleteNormalFile); +int checkNormalFile(char *mess, enum PROGRAM_INDEX index, int forceDeleteNormalFile); int eraseFlash(char *mess); /* write from tmp file to flash */ int writeToFlash(char *mess, ssize_t fsize, FILE *flashfd, FILE *srcfd); diff --git a/slsDetectorServers/slsDetectorServer/include/slsDetectorServer_funcs.h b/slsDetectorServers/slsDetectorServer/include/slsDetectorServer_funcs.h index e68720305..385b45ae7 100644 --- a/slsDetectorServers/slsDetectorServer/include/slsDetectorServer_funcs.h +++ b/slsDetectorServers/slsDetectorServer/include/slsDetectorServer_funcs.h @@ -285,7 +285,8 @@ int update_detector_server(int); int receive_program(int file_des, enum PROGRAM_INDEX index); void receive_program_via_blackfin(int file_des, enum PROGRAM_INDEX index, char *functionType, uint64_t filesize, - char *checksum, char *serverName); + char *checksum, char *serverName, + int forceDeleteNormalFile); void receive_program_default(int file_des, enum PROGRAM_INDEX index, char *functionType, uint64_t filesize, char *checksum, char *serverName); diff --git a/slsDetectorServers/slsDetectorServer/src/programViaBlackfin.c b/slsDetectorServers/slsDetectorServer/src/programViaBlackfin.c index 5ad37fd43..0d5d6d840 100644 --- a/slsDetectorServers/slsDetectorServer/src/programViaBlackfin.c +++ b/slsDetectorServers/slsDetectorServer/src/programViaBlackfin.c @@ -7,6 +7,7 @@ #include "slsDetectorServer_defs.h" #include +#include #include #include // usleep @@ -38,6 +39,9 @@ #define CMD_GET_AMD_FLASH "dmesg | grep Amd" +#define CMD_CREATE_DEVICE_FILE_PART1 "mknod" +#define CMD_CREATE_DEVICE_FILE_PART2 "c 90 6" + #define FLASH_BUFFER_MEMORY_SIZE (128 * 1024) // 500 KB // clang-format on @@ -274,7 +278,8 @@ int allowUpdate(char *mess, char *functionType) { getKernelVersion(retvals); snprintf(mess, MAX_STR_LENGTH, "Could not update %s. Kernel version %s is too old to " - "update the Amd flash/ root directory. Most likely, blackfin needs rescue or replacement. Please contact us.\n", + "update the Amd flash/ root directory. Most likely, blackfin " + "needs rescue or replacement. Please contact us.\n", functionType, retvals); LOG(logERROR, (mess)); return FAIL; @@ -319,7 +324,7 @@ int preparetoCopyProgram(char *mess, char *functionType, FILE **fd, int eraseAndWriteToFlash(char *mess, enum PROGRAM_INDEX index, char *functionType, char *clientChecksum, - ssize_t fsize) { + ssize_t fsize, int forceDeleteNormalFile) { memset(messageType, 0, sizeof(messageType)); strcpy(messageType, functionType); @@ -330,7 +335,8 @@ int eraseAndWriteToFlash(char *mess, enum PROGRAM_INDEX index, FILE *flashfd = NULL; FILE *srcfd = NULL; - if (openFileForFlash(mess, &flashfd, &srcfd) == FAIL) { + if (openFileForFlash(mess, index, &flashfd, &srcfd, forceDeleteNormalFile) == + FAIL) { return FAIL; } @@ -434,7 +440,8 @@ int getDrive(char *mess, enum PROGRAM_INDEX index) { return OK; } -int openFileForFlash(char *mess, FILE **flashfd, FILE **srcfd) { +int openFileForFlash(char *mess, enum PROGRAM_INDEX index, FILE **flashfd, FILE **srcfd, + int forceDeleteNormalFile) { // open src file *srcfd = fopen(TEMP_PROG_FILE_NAME, "r"); if (*srcfd == NULL) { @@ -447,6 +454,11 @@ int openFileForFlash(char *mess, FILE **flashfd, FILE **srcfd) { } LOG(logDEBUG1, ("Temp file ready for reading\n")); + if (checkNormalFile(mess, index, forceDeleteNormalFile) == FAIL) { + fclose(*srcfd); + return FAIL; + } + // open flash drive for writing *flashfd = fopen(flashDriveName, "w"); if (*flashfd == NULL) { @@ -462,6 +474,95 @@ int openFileForFlash(char *mess, FILE **flashfd, FILE **srcfd) { return OK; } +int checkNormalFile(char *mess, enum PROGRAM_INDEX index, int forceDeleteNormalFile) { +#ifndef VIRTUAL + // check if its a normal file or special file + struct stat buf; + if (stat(flashDriveName, &buf) == -1) { + sprintf(mess, + "Could not %s. Unable to find the flash drive %s\n", + messageType, flashDriveName); + LOG(logERROR, (mess)); + return FAIL; + } + // zero = normal file (not char special drive file) + if (!S_ISCHR(buf.st_mode)) { + // kernel memory is not permanent + if (index != PROGRAM_FPGA) { + sprintf(mess, + "Could not %s. The flash drive found is a normal file. " + "Reboot board using 'rebootcontroller' command to load " + "proper device tree\n", + messageType); + LOG(logERROR, (mess)); + return FAIL; + } + + // user does not allow to fix it (default) + if (forceDeleteNormalFile == 0) { + sprintf(mess, + "Could not %s. The flash drive %s found for fpga programming is a normal file. To " + "fix this (by deleting this file, creating the flash drive and proceeding with " + "programming), re-run the programming command 'programfpga' with parameter " + "'--force-delete-normal-file'\n", + messageType, flashDriveName); + LOG(logERROR, (mess)); + return FAIL; + } + + // fpga memory stays after a reboot, user allowed to fix it + LOG(logWARNING, ("Flash drive invalidated (normal file). Fixing it...\n")); + + // user allows to fix it, so force delete normal file + char cmd[MAX_STR_LENGTH] = {0}; + char retvals[MAX_STR_LENGTH] = {0}; + + if (snprintf(cmd, MAX_STR_LENGTH, "rm %s", flashDriveName) >= + MAX_STR_LENGTH) { + sprintf(mess, + "Could not update %s. Command to delete normal file %s is " + "too long\n", + messageType, flashDriveName); + LOG(logERROR, (mess)); + return FAIL; + } + if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) { + snprintf( + mess, MAX_STR_LENGTH, + "Could not update %s. (could not delete normal file %s: %s)\n", + messageType, flashDriveName, retvals); + LOG(logERROR, (mess)); + return FAIL; + } + LOG(logINFO, ("\tDeleted Normal File (%s)\n", flashDriveName)); + + // create special drive + if (snprintf(cmd, MAX_STR_LENGTH, "%s %s %s", + CMD_CREATE_DEVICE_FILE_PART1, flashDriveName, + CMD_CREATE_DEVICE_FILE_PART2) >= MAX_STR_LENGTH) { + sprintf(mess, + "Could not update %s. Command to create special file %s is " + "too long\n", + messageType, flashDriveName); + LOG(logERROR, (mess)); + return FAIL; + } + if (executeCommand(cmd, retvals, logDEBUG1) == FAIL) { + snprintf( + mess, MAX_STR_LENGTH, + "Could not update %s. (could not create special file %s: %s)\n", + messageType, flashDriveName, retvals); + LOG(logERROR, (mess)); + return FAIL; + } + LOG(logINFO, ("\tSpecial File created (%s)\n", flashDriveName)); + } else { + LOG(logINFO, ("\tValidated flash drive (not a normal file)\n")); + } +#endif + return OK; +} + int eraseFlash(char *mess) { LOG(logINFO, ("\tErasing Flash...\n")); diff --git a/slsDetectorServers/slsDetectorServer/src/programViaNios.c b/slsDetectorServers/slsDetectorServer/src/programViaNios.c index c81598650..fef00ace5 100644 --- a/slsDetectorServers/slsDetectorServer/src/programViaNios.c +++ b/slsDetectorServers/slsDetectorServer/src/programViaNios.c @@ -8,6 +8,7 @@ #include #include // usleep +#include /* global variables */ @@ -146,6 +147,30 @@ int getDrive(char *mess, enum PROGRAM_INDEX index) { } int openFileForFlash(char *mess, FILE **flashfd) { +#ifndef VIRTUAL + // check if its a normal file or special file + struct stat buf; + if (stat(flashDriveName, &buf) == -1) { + sprintf(mess, + "Could not %s. Unable to find the flash drive %s\n", + messageType, flashDriveName); + LOG(logERROR, (mess)); + return FAIL; + } + // zero = normal file (not char drive special file) + if (!S_ISCHR(buf.st_mode)) { + // memory is not permanent + sprintf(mess, + "Could not %s. The flash drive found is a normal file. " + "Reboot board using 'rebootcontroller' command to load " + "proper device tree\n", + messageType); + LOG(logERROR, (mess)); + return FAIL; + } + LOG(logINFO, ("\tValidated flash drive (not a normal file)\n")); +#endif + *flashfd = fopen(flashDriveName, "w"); if (*flashfd == NULL) { sprintf(mess, diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 796dd4f3f..fc32272ea 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -4003,7 +4003,8 @@ int check_version(int file_des) { usleep(3 * 1000 * 1000); if (!isInitCheckDone()) { ret = FAIL; - strcpy(mess, "Server Initialization still not done done in server. Unexpected.\n"); + strcpy(mess, "Server Initialization still not done done in server. " + "Unexpected.\n"); LOG(logERROR, (mess)); } } @@ -9443,6 +9444,15 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) { LOG(logINFO, ("\tServer Name: %s\n", serverName)); } +#if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD) + int forceDeleteNormalFile = 0; + if (receiveData(file_des, &forceDeleteNormalFile, + sizeof(forceDeleteNormalFile), INT32) < 0) + return printSocketReadError(); + LOG(logINFO, + ("\tForce Delete Normal File flag? %s\n", (forceDeleteNormalFile ? "Y" : "N"))); +#endif + // in same folder as current process (will also work for virtual then // with write permissions) { @@ -9467,7 +9477,7 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) { checksum, serverName); #else receive_program_via_blackfin(file_des, index, functionType, - filesize, checksum, serverName); + filesize, checksum, serverName, forceDeleteNormalFile); #endif } @@ -9483,7 +9493,7 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) { void receive_program_via_blackfin(int file_des, enum PROGRAM_INDEX index, char *functionType, uint64_t filesize, - char *checksum, char *serverName) { + char *checksum, char *serverName, int forceDeleteNormalFile) { #if !defined(JUNGFRAUD) && !defined(CHIPTESTBOARDD) && !defined(MOENCHD) && \ !defined(GOTTHARDD) @@ -9582,7 +9592,7 @@ void receive_program_via_blackfin(int file_des, enum PROGRAM_INDEX index, case PROGRAM_FPGA: case PROGRAM_KERNEL: ret = eraseAndWriteToFlash(mess, index, functionType, checksum, - totalsize); + totalsize, forceDeleteNormalFile); break; case PROGRAM_SERVER: ret = moveBinaryFile(mess, serverName, TEMP_PROG_FILE_NAME, @@ -9785,20 +9795,24 @@ int set_top(int file_des) { if (Server_VerifyLock() == OK) { if (arg != 0 && arg != 1) { ret = FAIL; - sprintf(mess, "Could not set top mode. Invalid value: %d. Must be 0 or 1\n", arg); + sprintf( + mess, + "Could not set top mode. Invalid value: %d. Must be 0 or 1\n", + arg); LOG(logERROR, (mess)); } else { ret = setTop(arg == 1 ? OW_TOP : OW_BOTTOM); if (ret == FAIL) { - sprintf(mess, "Could not set %s\n", (arg == 1 ? "Top" : "Bottom")); + sprintf(mess, "Could not set %s\n", + (arg == 1 ? "Top" : "Bottom")); LOG(logERROR, (mess)); - } else { + } else { int retval = -1; ret = isTop(&retval); if (ret == FAIL) { strcpy(mess, "Could not get Top mode\n"); LOG(logERROR, (mess)); - } else { + } else { LOG(logDEBUG1, ("retval top: %d\n", retval)); validate(&ret, mess, arg, retval, "set top mode", DEC); } diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index 121403418..e359d49a5 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -1747,10 +1747,13 @@ class Detector { /** [Jungfrau][Gotthard][CTB][Moench][Mythen3][Gotthard2] * Advanced user Function! * Program firmware from command line, after which detector controller is - * rebooted. [Jungfrau][CTB][Moench] fname is a pof file (full path) \n - * [Mythen3][Gotthard2] fname is an rbf file (full path) + * rebooted. forceDeleteNormalFile is true, if normal file found + * in device tree, it must be deleted, a new device drive created and + * programming continued.[Jungfrau][CTB][Moench] fname is a pof file (full + * path) \n [Mythen3][Gotthard2] fname is an rbf file (full path) */ - void programFPGA(const std::string &fname, Positions pos = {}); + void programFPGA(const std::string &fname, const bool forceDeleteNormalFile, + Positions pos = {}); /** [Jungfrau][CTB][Moench] Advanced user Function! */ void resetFPGA(Positions pos = {}); diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index 0e8a1a3db..ddd2e1d5f 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -2832,19 +2832,31 @@ std::string CmdProxy::ProgramFpga(int action) { std::ostringstream os; os << cmd << ' '; if (action == defs::HELP_ACTION) { - os << "[fname.pof | fname.rbf (full path)]\n\t[Jungfrau][Ctb][Moench] " - "Programs FPGA from pof file (full path). Then, detector " - "controller is rebooted \n\t[Mythen3][Gotthard2] Programs FPGA " - "from rbf file (full path). Then, detector controller is " - "rebooted." + os << "[fname.pof | fname.rbf (full " + "path)][(opitonal)--force-delete-normal-file]\n\t[Jungfrau][Ctb][" + "Moench] Programs FPGA from pof file (full path). Then, detector " + "controller is rebooted. \n\t\tUse --force-delete-normal-file " + "argument, if normal file found in device tree, it must be " + "deleted, a new device drive created and programming " + "continued.\n\t[Mythen3][Gotthard2] Programs FPGA from rbf file " + "(full path). Then, detector controller is rebooted." << '\n'; } else if (action == defs::GET_ACTION) { throw sls::RuntimeError("Cannot get"); } else if (action == defs::PUT_ACTION) { - if (args.size() != 1) { + bool forceDeteleNormalFile = false; + if (args.size() == 2) { + if (args[1] != "--force-delete-normal-file") { + throw sls::RuntimeError( + "Could not scan second argument. Did you " + "mean --force-delete-normal-file?"); + } + forceDeteleNormalFile = true; + } else if (args.size() != 1) { WrongNumberOfParameters(1); } - det->programFPGA(args[0], std::vector{det_id}); + det->programFPGA(args[0], forceDeteleNormalFile, + std::vector{det_id}); os << "successful\n"; } else { throw sls::RuntimeError("Unknown action"); diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 9aee5b264..98108cf43 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -2187,10 +2187,11 @@ void Detector::setAdditionalJsonParameter(const std::string &key, // Advanced -void Detector::programFPGA(const std::string &fname, Positions pos) { +void Detector::programFPGA(const std::string &fname, + const bool forceDeleteNormalFile, Positions pos) { LOG(logINFO) << "Updating Firmware..."; std::vector buffer = pimpl->readProgrammingFile(fname); - pimpl->Parallel(&Module::programFPGA, pos, buffer); + pimpl->Parallel(&Module::programFPGA, pos, buffer, forceDeleteNormalFile); rebootController(pos); } @@ -2235,7 +2236,7 @@ void Detector::updateFirmwareAndServer(const std::string &sname, LOG(logINFO) << "Updating Firmware and Detector Server (with tftp)..."; LOG(logINFO) << "Updating Detector Server (via tftp)..."; pimpl->Parallel(&Module::copyDetectorServer, pos, sname, hostname); - programFPGA(fname, pos); + programFPGA(fname, false, pos); } void Detector::updateFirmwareAndServer(const std::string &sname, @@ -2246,7 +2247,7 @@ void Detector::updateFirmwareAndServer(const std::string &sname, std::vector buffer = readBinaryFile(sname, "Update Detector Server"); std::string filename = sls::getFileNameFromFilePath(sname); pimpl->Parallel(&Module::updateDetectorServer, pos, buffer, filename); - programFPGA(fname, pos); + programFPGA(fname, false, pos); } Result Detector::getUpdateMode(Positions pos) const { diff --git a/slsDetectorSoftware/src/Module.cpp b/slsDetectorSoftware/src/Module.cpp index f6b4f25e9..5555ec71f 100644 --- a/slsDetectorSoftware/src/Module.cpp +++ b/slsDetectorSoftware/src/Module.cpp @@ -2590,12 +2590,14 @@ void Module::setAdditionalJsonParameter(const std::string &key, } // Advanced -void Module::programFPGA(std::vector buffer) { +void Module::programFPGA(std::vector buffer, + const bool forceDeleteNormalFile) { switch (shm()->detType) { case JUNGFRAU: case CHIPTESTBOARD: case MOENCH: - sendProgram(true, buffer, F_PROGRAM_FPGA, "Update Firmware"); + sendProgram(true, buffer, F_PROGRAM_FPGA, "Update Firmware", "", + forceDeleteNormalFile); break; case MYTHEN3: case GOTTHARD2: @@ -3582,7 +3584,8 @@ sls_detector_module Module::readSettingsFile(const std::string &fname, void Module::sendProgram(bool blackfin, std::vector buffer, const int functionEnum, const std::string &functionType, - const std::string serverName) { + const std::string serverName, + const bool forceDeleteNormalFile) { LOG(logINFO) << "Module " << moduleIndex << " (" << shm()->hostname << "): Sending " << functionType; @@ -3606,6 +3609,11 @@ void Module::sendProgram(bool blackfin, std::vector buffer, client.Send(sname); } + // send forceDeleteNormalFile flag + if (blackfin) { + client.Send(static_cast(forceDeleteNormalFile)); + } + // validate memory allocation etc in detector if (client.Receive() == FAIL) { std::ostringstream os; diff --git a/slsDetectorSoftware/src/Module.h b/slsDetectorSoftware/src/Module.h index 7a4cfcc55..fe5c5f5b3 100644 --- a/slsDetectorSoftware/src/Module.h +++ b/slsDetectorSoftware/src/Module.h @@ -545,7 +545,8 @@ class Module : public virtual slsDetectorDefs { * Advanced * * * * ************************************************/ - void programFPGA(std::vector buffer); + void programFPGA(std::vector buffer, + const bool forceDeleteNormalFile); void resetFPGA(); void copyDetectorServer(const std::string &fname, const std::string &hostname); @@ -760,7 +761,8 @@ class Module : public virtual slsDetectorDefs { bool trimbits = true); void sendProgram(bool blackfin, std::vector buffer, const int functionEnum, const std::string &functionType, - const std::string serverName = ""); + const std::string serverName = "", + const bool forceDeleteNormalFile = false); void simulatingActivityinDetector(const std::string &functionType, const int timeRequired); diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 04645699b..71b44521d 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -6,10 +6,10 @@ #define APIRECEIVER 0x211124 #define APIGUI 0x211124 -#define APICTB 0x220318 -#define APIGOTTHARD 0x220318 -#define APIGOTTHARD2 0x220318 -#define APIJUNGFRAU 0x220318 -#define APIMYTHEN3 0x220318 -#define APIMOENCH 0x220318 -#define APIEIGER 0x220318 +#define APIEIGER 0x220324 +#define APICTB 0x220328 +#define APIGOTTHARD 0x220328 +#define APIGOTTHARD2 0x220328 +#define APIJUNGFRAU 0x220328 +#define APIMYTHEN3 0x220328 +#define APIMOENCH 0x220328