mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-19 18:40:01 +02:00
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:
parent
60868ae74e
commit
5f805f8789
@ -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)
|
||||||
|
|
||||||
|
Binary file not shown.
@ -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;
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user