Dev/jf firmware rollback (#1011)

* jf: rolling back firmware required to v1.5 and 2.5, updated release notes, fixed a bug when updating server (when server name same as link name:throws with no message, pedestal mode check changed for the time being for loops to be 0xFF size

* compensating for jf fw bug for pedestalmode where loops should be 16 bit, but is 8 bit in fw. to be fixed in next version

* formatting

* formatting, merge fix

* fixed python test simulator to kill previous servers

* rmeoved merge binary
This commit is contained in:
maliakal_d 2024-10-24 15:53:49 +02:00 committed by GitHub
parent 60868ae74e
commit 5f805f8789
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 45 additions and 18 deletions

View File

@ -66,8 +66,8 @@ This document describes the differences between vx.x.x and vx.0.2
Eiger 02.10.2023 (v32) (updated in 7.0.3) Eiger 02.10.2023 (v32) (updated in 7.0.3)
Jungfrau 01.10.2024 (v1.6, HW v1.0) (updated in 9.0.0) Jungfrau 20.09.2023 (v1.5, HW v1.0) (updated in 8.0.0)
01.10.2024 (v2.6, HW v2.0) (updated in 9.0.0) 21.09.2023 (v2.5, HW v2.0) (updated in 8.0.0)
Mythen3 11.10.2024 (v1.5) (updated in 9.0.0) Mythen3 11.10.2024 (v1.5) (updated in 9.0.0)

View File

@ -2555,6 +2555,7 @@ void getPedestalParameters(uint8_t *frames, uint16_t *loops) {
} }
void setPedestalMode(int enable, uint8_t frames, uint16_t loops) { void setPedestalMode(int enable, uint8_t frames, uint16_t loops) {
// Note: loops is 8 bit in firmware as a bug.To be fixed in next version
int prevPedestalEnable = getPedestalMode(); int prevPedestalEnable = getPedestalMode();
uint32_t addr = PEDESTAL_MODE_REG; uint32_t addr = PEDESTAL_MODE_REG;

View File

@ -5,8 +5,8 @@
#include "sls/sls_detector_defs.h" #include "sls/sls_detector_defs.h"
#define MIN_REQRD_VRSN_T_RD_API 0x171220 #define MIN_REQRD_VRSN_T_RD_API 0x171220
#define REQRD_FRMWRE_VRSN_BOARD2 0x241001 // 1.0 pcb (version = 010) #define REQRD_FRMWRE_VRSN_BOARD2 0x230920 // 1.0 pcb (version = 010)
#define REQRD_FRMWRE_VRSN 0x241001 // 2.0 pcb (version = 011) #define REQRD_FRMWRE_VRSN 0x230921 // 2.0 pcb (version = 011)
#define NUM_HARDWARE_VERSIONS (2) #define NUM_HARDWARE_VERSIONS (2)
#define HARDWARE_VERSION_NUMBERS \ #define HARDWARE_VERSION_NUMBERS \
@ -62,6 +62,7 @@
#define DEFAULT_TIMING_INFO_DECODER (SWISSFEL) #define DEFAULT_TIMING_INFO_DECODER (SWISSFEL)
#define DEFAULT_ELECTRON_COLLECTION_MODE (0) #define DEFAULT_ELECTRON_COLLECTION_MODE (0)
#define MAX_PEDESTAL_LOOPS (0xFF) // until fixed in firmware
#define HIGHVOLTAGE_MIN (60) #define HIGHVOLTAGE_MIN (60)
#define HIGHVOLTAGE_MAX (200) #define HIGHVOLTAGE_MAX (200)
#define DAC_MIN_MV (0) #define DAC_MIN_MV (0)

View File

@ -9863,11 +9863,12 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) {
strcpy(mess, "Server name is the same as the symbolic link. Please " strcpy(mess, "Server name is the same as the symbolic link. Please "
"use a different server name\n"); "use a different server name\n");
LOG(logERROR, (mess)); LOG(logERROR, (mess));
Server_SendResult(file_des, INT32, NULL, 0);
} }
// in same folder as current process (will also work for virtual then // in same folder as current process (will also work for virtual then
// with write permissions) // with write permissions)
{ if (ret == OK) {
const int fileNameSize = 128; const int fileNameSize = 128;
char fname[fileNameSize]; char fname[fileNameSize];
if (getAbsPath(fname, fileNameSize, serverName) == FAIL) { if (getAbsPath(fname, fileNameSize, serverName) == FAIL) {
@ -11038,6 +11039,13 @@ int set_pedestal_mode(int file_des) {
"be 0. [%hhu, %hu].\n", "be 0. [%hhu, %hu].\n",
frames, loops); frames, loops);
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} else if (loops > MAX_PEDESTAL_LOOPS) {
ret = FAIL;
sprintf(mess,
"Could not set pedestal mode. Loops [%hu] cannot be "
"greater than %d.\n",
loops, MAX_PEDESTAL_LOOPS);
LOG(logERROR, (mess));
} else { } else {
setPedestalMode(enable, frames, loops); setPedestalMode(enable, frames, loops);
int retvalEnable = getPedestalMode(); int retvalEnable = getPedestalMode();

View File

@ -530,13 +530,14 @@ TEST_CASE("pedestalmode", "[.cmdcall]") {
REQUIRE_THROWS(caller.call("pedestalmode", {"256", "10"}, -1, PUT)); REQUIRE_THROWS(caller.call("pedestalmode", {"256", "10"}, -1, PUT));
REQUIRE_THROWS(caller.call("pedestalmode", {"-1", "10"}, 0, PUT)); REQUIRE_THROWS(caller.call("pedestalmode", {"-1", "10"}, 0, PUT));
REQUIRE_THROWS(caller.call("pedestalmode", {"20", "65536"}, 0, PUT)); REQUIRE_THROWS(caller.call("pedestalmode", {"20", "1000"}, 0, PUT));
REQUIRE_THROWS(caller.call("pedestalmode", {"2000", "100"}, 0, PUT));
REQUIRE_THROWS(caller.call("pedestalmode", {"20", "-1"}, 0, PUT)); REQUIRE_THROWS(caller.call("pedestalmode", {"20", "-1"}, 0, PUT));
{ {
std::ostringstream oss; std::ostringstream oss;
caller.call("pedestalmode", {"30", "1000"}, -1, PUT, oss); caller.call("pedestalmode", {"30", "100"}, -1, PUT, oss);
REQUIRE(oss.str() == "pedestalmode [30, 1000]\n"); REQUIRE(oss.str() == "pedestalmode [30, 100]\n");
} }
// cannot change any of these in pedestal mode // cannot change any of these in pedestal mode
REQUIRE_THROWS_WITH(caller.call("frames", {"200"}, -1, PUT), REQUIRE_THROWS_WITH(caller.call("frames", {"200"}, -1, PUT),
@ -563,20 +564,20 @@ TEST_CASE("pedestalmode", "[.cmdcall]") {
{ {
std::ostringstream oss; std::ostringstream oss;
caller.call("pedestalmode", {"50", "500"}, -1, PUT, oss); caller.call("pedestalmode", {"50", "100"}, -1, PUT, oss);
REQUIRE(oss.str() == "pedestalmode [50, 500]\n"); REQUIRE(oss.str() == "pedestalmode [50, 100]\n");
} }
{ {
std::ostringstream oss; std::ostringstream oss;
caller.call("pedestalmode", {}, -1, GET, oss); caller.call("pedestalmode", {}, -1, GET, oss);
REQUIRE(oss.str() == "pedestalmode [enabled, 50, 500]\n"); REQUIRE(oss.str() == "pedestalmode [enabled, 50, 100]\n");
} }
{ {
auto pedemode = det.getPedestalMode().tsquash( auto pedemode = det.getPedestalMode().tsquash(
"Inconsistent pedestal mode to test"); "Inconsistent pedestal mode to test");
REQUIRE(pedemode.enable == true); REQUIRE(pedemode.enable == true);
REQUIRE(pedemode.frames == 50); REQUIRE(pedemode.frames == 50);
REQUIRE(pedemode.loops == 500); REQUIRE(pedemode.loops == 100);
} }
{ {
std::ostringstream oss; std::ostringstream oss;
@ -590,7 +591,7 @@ TEST_CASE("pedestalmode", "[.cmdcall]") {
} }
uint8_t pedestalFrames = 50; uint8_t pedestalFrames = 50;
uint16_t pedestalLoops = 1000; uint16_t pedestalLoops = 100;
int64_t expNumFrames = pedestalFrames * pedestalLoops * 2; int64_t expNumFrames = pedestalFrames * pedestalLoops * 2;
auto origFrames = det.getNumberOfFrames().squash(-1); auto origFrames = det.getNumberOfFrames().squash(-1);
auto origTriggers = det.getNumberOfTriggers().squash(-1); auto origTriggers = det.getNumberOfTriggers().squash(-1);
@ -671,11 +672,11 @@ TEST_CASE("timing_info_decoder", "[.cmdcall]") {
Caller caller(&det); Caller caller(&det);
if (det.getDetectorType().squash() == defs::JUNGFRAU) { if (det.getDetectorType().squash() == defs::JUNGFRAU) {
auto prev_val = det.getTimingInfoDecoder(); auto prev_val = det.getTimingInfoDecoder();
{ /*{
std::ostringstream oss; std::ostringstream oss;
caller.call("timing_info_decoder", {"shine"}, -1, PUT, oss); caller.call("timing_info_decoder", {"shine"}, -1, PUT, oss);
REQUIRE(oss.str() == "timing_info_decoder shine\n"); REQUIRE(oss.str() == "timing_info_decoder shine\n");
} }*/
{ {
std::ostringstream oss; std::ostringstream oss;
caller.call("timing_info_decoder", {"swissfel"}, -1, PUT, oss); caller.call("timing_info_decoder", {"swissfel"}, -1, PUT, oss);

View File

@ -11,9 +11,9 @@
*@short constructs the fifo structure *@short constructs the fifo structure
*/ */
#include "sls/CircularFifo.h"
#include "sls/logger.h" #include "sls/logger.h"
#include "sls/sls_detector_defs.h" #include "sls/sls_detector_defs.h"
#include "sls/CircularFifo.h"
#include <atomic> #include <atomic>

View File

@ -8,7 +8,7 @@
#define APIXILINXCTB "developer 0x240918" #define APIXILINXCTB "developer 0x240918"
#define APIEIGER "developer 0x240918" #define APIEIGER "developer 0x240918"
#define APIMYTHEN3 "developer 0x241001" #define APIMYTHEN3 "developer 0x241001"
#define APIJUNGFRAU "developer 0x241001"
#define APIRECEIVER "developer 0x241014" #define APIRECEIVER "developer 0x241014"
#define APILIB "developer 0x241021" #define APILIB "developer 0x241021"
#define APIGOTTHARD2 "developer 0x241022" #define APIGOTTHARD2 "developer 0x241022"
#define APIJUNGFRAU "developer 0x241024"

View File

@ -51,6 +51,20 @@ def killProcess(name):
else: else:
print('process not running : ' + name) print('process not running : ' + name)
def killAllStaleProcesses():
killProcess('eigerDetectorServer_virtual')
killProcess('jungfrauDetectorServer_virtual')
killProcess('mythen3DetectorServer_virtual')
killProcess('gotthard2DetectorServer_virtual')
killProcess('gotthardDetectorServer_virtual')
killProcess('ctbDetectorServer_virtual')
killProcess('moenchDetectorServer_virtual')
killProcess('xilinx_ctbDetectorServer_virtual')
killProcess('slsReceiver')
killProcess('slsMultiReceiver')
cleanSharedmemory()
def cleanup(name): def cleanup(name):
''' '''
kill both servers, receivers and clean shared memory kill both servers, receivers and clean shared memory
@ -202,6 +216,8 @@ with open(fname, 'w') as fp:
Log(Fore.BLUE, 'General tests (results: ' + file_results + ')') Log(Fore.BLUE, 'General tests (results: ' + file_results + ')')
startGeneralTests(fp, file_results) startGeneralTests(fp, file_results)
killAllStaleProcesses()
for server in servers: for server in servers:
try: try:
# print to terminal for progress # print to terminal for progress