7.0.3.rc: fix server logic in checking detector idle (#859)

* fix buggy logic in checking detector idle and an argument check
This commit is contained in:
maliakal_d 2023-11-09 14:21:11 +01:00 committed by GitHub
parent 14e11e8b5b
commit c64e87a2b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 47 additions and 19 deletions

View File

@ -4667,7 +4667,8 @@ int set_read_n_rows(int file_des) {
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if ((Server_VerifyLock() == OK) &&
(check_detector_idle("set number of rows") == OK)) {
if (arg <= 0 || arg > MAX_ROWS_PER_READOUT) {
ret = FAIL;
sprintf(mess,
@ -4699,8 +4700,7 @@ int set_read_n_rows(int file_des) {
LOG(logERROR, (mess));
} else
#elif JUNGFRAUD
if ((check_detector_idle("set number of rows") == OK) &&
(arg % READ_N_ROWS_MULTIPLE != 0)) {
if (arg % READ_N_ROWS_MULTIPLE != 0) {
ret = FAIL;
sprintf(mess,
"Could not set number of rows. %d must be a multiple "
@ -8283,9 +8283,9 @@ int set_master(int file_des) {
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if ((check_detector_idle("set master") == OK) &&
(arg != 0 && arg != 1)) {
if ((Server_VerifyLock() == OK) &&
(check_detector_idle("set master") == OK)) {
if (arg != 0 && arg != 1) {
ret = FAIL;
sprintf(mess, "Could not set master. Invalid argument %d.\n", arg);
LOG(logERROR, (mess));
@ -8839,9 +8839,9 @@ int set_flip_rows(int file_des) {
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if ((check_detector_idle("set flip rows") == OK) &&
(arg != 0 && arg != 1)) {
if ((Server_VerifyLock() == OK) &&
(check_detector_idle("set flip rows") == OK)) {
if (arg != 0 && arg != 1) {
ret = FAIL;
sprintf(mess, "Could not set flip rows. Invalid argument %d.\n",
arg);
@ -10163,9 +10163,9 @@ int set_synchronization(int file_des) {
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if ((check_detector_idle("set synchronization") == OK) &&
(arg != 0 && arg != 1)) {
if ((Server_VerifyLock() == OK) &&
(check_detector_idle("set synchronization") == OK)) {
if (arg != 0 && arg != 1) {
ret = FAIL;
sprintf(mess,
"Could not set synchronization. Invalid argument %d.\n",

View File

@ -550,6 +550,34 @@ TEST_CASE("sync", "[.cmd]") {
proxy.Call("sync", {}, -1, GET, oss);
REQUIRE(oss.str() == "sync 1\n");
}
// setting sync when running
{
auto prev_timing =
det.getTimingMode().tsquash("inconsistent timing mode in test");
auto prev_frames =
det.getNumberOfFrames().tsquash("inconsistent #frames in test");
auto prev_exptime =
det.getExptime().tsquash("inconsistent exptime in test");
auto prev_period =
det.getPeriod().tsquash("inconsistent period in test");
det.setTimingMode(defs::AUTO_TIMING);
det.setNumberOfFrames(10000);
det.setExptime(std::chrono::microseconds(200));
det.setPeriod(std::chrono::milliseconds(1000));
det.setSynchronization(1);
det.startDetector();
REQUIRE_THROWS(proxy.Call("sync", {"0"}, -1, PUT));
{
std::ostringstream oss;
proxy.Call("sync", {}, -1, GET, oss);
REQUIRE(oss.str() == "sync 1\n");
}
det.stopDetector();
det.setTimingMode(prev_timing);
det.setNumberOfFrames(prev_frames);
det.setExptime(prev_exptime);
det.setPeriod(prev_period);
}
det.setSynchronization(prev_val);
} else {
REQUIRE_THROWS(proxy.Call("sync", {}, -1, GET));

View File

@ -2,12 +2,12 @@
// Copyright (C) 2021 Contributors to the SLS Detector Package
/** API versions */
#define RELEASE "7.0.3"
#define APICTB "7.0.3 0x231107"
#define APIGOTTHARD "7.0.3 0x231107"
#define APIGOTTHARD2 "7.0.3 0x231107"
#define APIJUNGFRAU "7.0.3 0x231107"
#define APIMYTHEN3 "7.0.3 0x231107"
#define APIMOENCH "7.0.3 0x231107"
#define APIEIGER "7.0.3 0x231107"
#define APILIB "7.0.3 0x231108"
#define APIRECEIVER "7.0.3 0x231108"
#define APICTB "7.0.3 0x231109"
#define APIGOTTHARD "7.0.3 0x231109"
#define APIGOTTHARD2 "7.0.3 0x231109"
#define APIJUNGFRAU "7.0.3 0x231109"
#define APIMYTHEN3 "7.0.3 0x231109"
#define APIMOENCH "7.0.3 0x231109"
#define APIEIGER "7.0.3 0x231109"