Dev/ctb separate dac and power (#1420)
Build and Deploy on local RHEL9 / build (push) Successful in 2m12s
Build on RHEL9 docker image / build (push) Successful in 3m33s
Build on RHEL8 docker image / build (push) Successful in 4m54s
Build and Deploy on local RHEL8 / build (push) Successful in 4m54s
Run Simulator Tests on local RHEL9 / build (push) Successful in 14m41s
Run Simulator Tests on local RHEL8 / build (push) Successful in 17m10s

* not allowing power names for dac names to prevent duplicate names

* wip

* v_abcd commands should be removed to prevent unintentional usage and throw with a suggestion command for dac and power

* binary in

* dacs with power dac names should work and do not take in dac units to avoid ambiguity, test with 0 value for power dacs should fail, to do: implement power commands

* wip: power in client, tests, and fixed server interfaces and ctb implementation, not tested

* wip. client and xilinx todo

* wip: ctb power works, tests left

* fixed some tests

* added vchip check

* python cmds still left. wip

* fixed xilinx. python left

* wip

* wip. xilinx

* fixed powerchip for ctb

* power all returns all

* configtransceiver is removed

* wip python

* wip

* wip

* wip

* wip

* wip

* wip

* wip xilinx

* wip

* wip

* wip

* pybindings

* fix getdacindex and getdacname for normal detectors to throw if random index that doesnt fit to the detector

* wip

* fixed tests

* fixes for python api

* wip

* python: moved powerlist to Ctb

* fixed tests to work for powelist in Ctb

* moved signallist, adclist, slowadc, slowadclist to Ctb

* throw approperiate error when no modules added for powers

* added dac test

* fix dac default names and test for dacs

* ctb dacs, yet to do othe rdacs

* dacs should work now even in tests

* run all tests

* DetectorPowers->NamedPowers in ctb

* comments

* removed unnecessary test code

* removed hard coded dac names in python NamedDacs and NamedPowers

* minor

* minor

* fixed error messages

* changed power to  be able to set DAC directly, using enable and disable methods with enabled to get
This commit is contained in:
2026-04-15 10:33:01 +02:00
committed by GitHub
parent 4ee61ae791
commit 5ec5d46c48
60 changed files with 42769 additions and 36358 deletions
+90 -7
View File
@@ -7,6 +7,17 @@ namespace sls {
std::string ToString(bool value) { return value ? "1" : "0"; }
std::string ToString(bool value, defs::boolFormat format) {
switch (format) {
case defs::boolFormat::TrueFalse:
return value ? "true" : "false";
case defs::boolFormat::OnOff:
return value ? "on" : "off";
default:
return value ? "1" : "0";
}
}
std::string ToString(const slsDetectorDefs::xy &coord) {
std::ostringstream oss;
oss << '[' << coord.x << ", " << coord.y << ']';
@@ -552,6 +563,38 @@ std::string ToString(const std::vector<defs::dacIndex> &vec) {
return os.str();
}
std::string ToString(const defs::powerIndex s) {
switch (s) {
case defs::V_POWER_A:
return std::string("v_a");
case defs::V_POWER_B:
return std::string("v_b");
case defs::V_POWER_C:
return std::string("v_c");
case defs::V_POWER_D:
return std::string("v_d");
case defs::V_POWER_IO:
return std::string("v_io");
case defs::V_POWER_CHIP:
return std::string("v_chip");
default:
return std::string("Unknown");
}
}
std::string ToString(const std::vector<defs::powerIndex> &vec) {
std::ostringstream os;
os << '[';
if (!vec.empty()) {
auto it = vec.begin();
os << ToString(*it++);
while (it != vec.end())
os << ", " << ToString(*it++);
}
os << ']';
return os.str();
}
std::string ToString(const defs::burstMode s) {
switch (s) {
case defs::BURST_INTERNAL:
@@ -1018,6 +1061,22 @@ template <> defs::dacIndex StringTo(const std::string &s) {
throw RuntimeError("Unknown dac Index " + s);
}
template <> defs::powerIndex StringTo(const std::string &s) {
if (s == "v_a")
return defs::V_POWER_A;
if (s == "v_b")
return defs::V_POWER_B;
if (s == "v_c")
return defs::V_POWER_C;
if (s == "v_d")
return defs::V_POWER_D;
if (s == "v_io")
return defs::V_POWER_IO;
if (s == "v_chip")
return defs::V_POWER_CHIP;
throw RuntimeError("Unknown power Index " + s);
}
template <> defs::burstMode StringTo(const std::string &s) {
if (s == "burst_internal")
return defs::BURST_INTERNAL;
@@ -1165,14 +1224,38 @@ template <> int StringTo(const std::string &s) {
}
template <> bool StringTo(const std::string &s) {
int i = std::stoi(s, nullptr, 10);
switch (i) {
case 0:
return false;
case 1:
return true;
return StringTo(s, defs::boolFormat::OneZero);
}
bool StringTo(const std::string &s, defs::boolFormat format) {
switch (format) {
case defs::boolFormat::TrueFalse: {
if (s == "true")
return true;
if (s == "false")
return false;
throw RuntimeError("Unknown boolean. Expecting 'true' or 'false'.");
}
case defs::boolFormat::OnOff: {
if (s == "on")
return true;
if (s == "off")
return false;
throw RuntimeError("Unknown boolean. Expecting 'on' or 'off'.");
}
case defs::boolFormat::OneZero: {
int i = std::stoi(s, nullptr, 10);
switch (i) {
case 0:
return false;
case 1:
return true;
default:
throw RuntimeError("Unknown boolean. Expecting 0 or 1.");
}
}
default:
throw RuntimeError("Unknown boolean. Expecting be 0 or 1.");
throw RuntimeError("Unknown boolean format.");
}
}