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)
Jungfrau 01.10.2024 (v1.6, HW v1.0) (updated in 9.0.0)
01.10.2024 (v2.6, HW v2.0) (updated in 9.0.0)
Jungfrau 20.09.2023 (v1.5, HW v1.0) (updated in 8.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)

View File

@ -2555,6 +2555,7 @@ void getPedestalParameters(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();
uint32_t addr = PEDESTAL_MODE_REG;

View File

@ -5,8 +5,8 @@
#include "sls/sls_detector_defs.h"
#define MIN_REQRD_VRSN_T_RD_API 0x171220
#define REQRD_FRMWRE_VRSN_BOARD2 0x241001 // 1.0 pcb (version = 010)
#define REQRD_FRMWRE_VRSN 0x241001 // 2.0 pcb (version = 011)
#define REQRD_FRMWRE_VRSN_BOARD2 0x230920 // 1.0 pcb (version = 010)
#define REQRD_FRMWRE_VRSN 0x230921 // 2.0 pcb (version = 011)
#define NUM_HARDWARE_VERSIONS (2)
#define HARDWARE_VERSION_NUMBERS \
@ -62,6 +62,7 @@
#define DEFAULT_TIMING_INFO_DECODER (SWISSFEL)
#define DEFAULT_ELECTRON_COLLECTION_MODE (0)
#define MAX_PEDESTAL_LOOPS (0xFF) // until fixed in firmware
#define HIGHVOLTAGE_MIN (60)
#define HIGHVOLTAGE_MAX (200)
#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 "
"use a different server name\n");
LOG(logERROR, (mess));
Server_SendResult(file_des, INT32, NULL, 0);
}
// in same folder as current process (will also work for virtual then
// with write permissions)
{
if (ret == OK) {
const int fileNameSize = 128;
char fname[fileNameSize];
if (getAbsPath(fname, fileNameSize, serverName) == FAIL) {
@ -11038,6 +11039,13 @@ int set_pedestal_mode(int file_des) {
"be 0. [%hhu, %hu].\n",
frames, loops);
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 {
setPedestalMode(enable, frames, loops);
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", {"-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));
{
std::ostringstream oss;
caller.call("pedestalmode", {"30", "1000"}, -1, PUT, oss);
REQUIRE(oss.str() == "pedestalmode [30, 1000]\n");
caller.call("pedestalmode", {"30", "100"}, -1, PUT, oss);
REQUIRE(oss.str() == "pedestalmode [30, 100]\n");
}
// cannot change any of these in pedestal mode
REQUIRE_THROWS_WITH(caller.call("frames", {"200"}, -1, PUT),
@ -563,20 +564,20 @@ TEST_CASE("pedestalmode", "[.cmdcall]") {
{
std::ostringstream oss;
caller.call("pedestalmode", {"50", "500"}, -1, PUT, oss);
REQUIRE(oss.str() == "pedestalmode [50, 500]\n");
caller.call("pedestalmode", {"50", "100"}, -1, PUT, oss);
REQUIRE(oss.str() == "pedestalmode [50, 100]\n");
}
{
std::ostringstream 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(
"Inconsistent pedestal mode to test");
REQUIRE(pedemode.enable == true);
REQUIRE(pedemode.frames == 50);
REQUIRE(pedemode.loops == 500);
REQUIRE(pedemode.loops == 100);
}
{
std::ostringstream oss;
@ -590,7 +591,7 @@ TEST_CASE("pedestalmode", "[.cmdcall]") {
}
uint8_t pedestalFrames = 50;
uint16_t pedestalLoops = 1000;
uint16_t pedestalLoops = 100;
int64_t expNumFrames = pedestalFrames * pedestalLoops * 2;
auto origFrames = det.getNumberOfFrames().squash(-1);
auto origTriggers = det.getNumberOfTriggers().squash(-1);
@ -671,11 +672,11 @@ TEST_CASE("timing_info_decoder", "[.cmdcall]") {
Caller caller(&det);
if (det.getDetectorType().squash() == defs::JUNGFRAU) {
auto prev_val = det.getTimingInfoDecoder();
{
/*{
std::ostringstream oss;
caller.call("timing_info_decoder", {"shine"}, -1, PUT, oss);
REQUIRE(oss.str() == "timing_info_decoder shine\n");
}
}*/
{
std::ostringstream oss;
caller.call("timing_info_decoder", {"swissfel"}, -1, PUT, oss);

View File

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

View File

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

View File

@ -51,6 +51,20 @@ def killProcess(name):
else:
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):
'''
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 + ')')
startGeneralTests(fp, file_results)
killAllStaleProcesses()
for server in servers:
try:
# print to terminal for progress