mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-21 19:30:03 +02:00
vetoalg: wip
This commit is contained in:
parent
206c48c7a0
commit
af16ad4040
@ -11,7 +11,7 @@ import subprocess
|
||||
|
||||
from parse import remove_comments
|
||||
|
||||
allow_bitwise_op = ["EthernetInterface"]
|
||||
allow_bitwise_op = ["ethernetInterface"]
|
||||
|
||||
op_key = {"operator|": "__or__",
|
||||
"operator&" : "__and__"}
|
||||
@ -22,7 +22,7 @@ def single_line_enum(line):
|
||||
|
||||
def extract_enums(lines):
|
||||
|
||||
# deal with enum class EthernetInterface : int32_t
|
||||
# deal with enum class ethernetInterface : int32_t
|
||||
# and normal enum burstMode {
|
||||
|
||||
line_iter = iter(lines)
|
||||
@ -89,7 +89,7 @@ def generate_enum_string(enums):
|
||||
|
||||
#Here add the operators
|
||||
for op in operators:
|
||||
data.append(f"\n\t.def(\"{op_key[op]}\", py::overload_cast< const slsDetectorDefs::EthernetInterface&, const slsDetectorDefs::EthernetInterface&>(&{op}))")
|
||||
data.append(f"\n\t.def(\"{op_key[op]}\", py::overload_cast< const slsDetectorDefs::ethernetInterface&, const slsDetectorDefs::ethernetInterface&>(&{op}))")
|
||||
|
||||
|
||||
data.append(';\n\n')
|
||||
|
@ -1075,12 +1075,12 @@ void init_det(py::module &m) {
|
||||
Detector::setVeto,
|
||||
py::arg(), py::arg() = Positions{})
|
||||
.def("getVetoStream",
|
||||
(Result<defs::EthernetInterface>(Detector::*)(sls::Positions)
|
||||
(Result<defs::ethernetInterface>(Detector::*)(sls::Positions)
|
||||
const) &
|
||||
Detector::getVetoStream,
|
||||
py::arg() = Positions{})
|
||||
.def("setVetoStream",
|
||||
(void (Detector::*)(const defs::EthernetInterface,
|
||||
(void (Detector::*)(const defs::ethernetInterface,
|
||||
sls::Positions)) &
|
||||
Detector::setVetoStream,
|
||||
py::arg(), py::arg() = Positions{})
|
||||
|
@ -278,19 +278,19 @@ void init_enums(py::module &m) {
|
||||
slsDetectorDefs::timingSourceType::TIMING_EXTERNAL)
|
||||
.export_values();
|
||||
|
||||
py::enum_<slsDetectorDefs::EthernetInterface>(Defs, "EthernetInterface",
|
||||
py::enum_<slsDetectorDefs::ethernetInterface>(Defs, "ethernetInterface",
|
||||
py::arithmetic())
|
||||
.value("NONE", slsDetectorDefs::EthernetInterface::NONE)
|
||||
.value("I3GBE", slsDetectorDefs::EthernetInterface::I3GBE)
|
||||
.value("I10GBE", slsDetectorDefs::EthernetInterface::I10GBE)
|
||||
.value("ALL", slsDetectorDefs::EthernetInterface::ALL)
|
||||
.value("NONE", slsDetectorDefs::ethernetInterface::NONE)
|
||||
.value("I3GBE", slsDetectorDefs::ethernetInterface::I3GBE)
|
||||
.value("I10GBE", slsDetectorDefs::ethernetInterface::I10GBE)
|
||||
.value("ALL", slsDetectorDefs::ethernetInterface::ALL)
|
||||
.export_values()
|
||||
.def("__or__",
|
||||
py::overload_cast<const slsDetectorDefs::EthernetInterface &,
|
||||
const slsDetectorDefs::EthernetInterface &>(
|
||||
py::overload_cast<const slsDetectorDefs::ethernetInterface &,
|
||||
const slsDetectorDefs::ethernetInterface &>(
|
||||
&operator|))
|
||||
.def("__and__",
|
||||
py::overload_cast<const slsDetectorDefs::EthernetInterface &,
|
||||
const slsDetectorDefs::EthernetInterface &>(
|
||||
py::overload_cast<const slsDetectorDefs::ethernetInterface &,
|
||||
const slsDetectorDefs::ethernetInterface &>(
|
||||
&operator&));
|
||||
}
|
||||
|
@ -8412,7 +8412,7 @@ int get_master(int file_des){
|
||||
int get_veto_stream(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
enum EthernetInterface retval = NONE;
|
||||
enum ethernetInterface retval = NONE;
|
||||
|
||||
LOG(logDEBUG1, ("Getting veto stream\n"));
|
||||
|
||||
@ -8429,7 +8429,7 @@ int get_veto_stream(int file_des) {
|
||||
int set_veto_stream(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
enum EthernetInterface arg = 0;
|
||||
enum ethernetInterface arg = 0;
|
||||
|
||||
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
|
||||
return printSocketReadError();
|
||||
|
@ -1248,7 +1248,7 @@ class Detector {
|
||||
void setVeto(const bool enable, Positions pos = {});
|
||||
|
||||
/** [Gotthard2] */
|
||||
Result<defs::EthernetInterface> getVetoStream(Positions pos = {}) const;
|
||||
Result<defs::ethernetInterface> getVetoStream(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard2] Options: NONE (Default), I3GBE, I10GBE (debugging), ALL
|
||||
* Enable or disable the 2 veto streaming interfaces available. Can
|
||||
@ -1257,7 +1257,18 @@ class Detector {
|
||||
* interface in receiver for listening to veto packets (writes a separate
|
||||
* file if writing enabled). Also restarts client and receiver zmq sockets
|
||||
* if zmq streaming enabled.*/
|
||||
void setVetoStream(const defs::EthernetInterface value, Positions pos = {});
|
||||
void setVetoStream(const defs::ethernetInterface value, Positions pos = {});
|
||||
|
||||
/** [Gotthard2] */
|
||||
Result<defs::vetoAlgorithm>
|
||||
getVetoAlgorithm(const defs::ethernetInterface value,
|
||||
Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard2] Options(vetoAlgorithm): DEFAULT_ALGORITHM.
|
||||
* Options(ethernetInterface): I3GBE, I10GBE */
|
||||
void setVetoAlgorithm(const defs::vetoAlgorithm alg,
|
||||
const defs::ethernetInterface value,
|
||||
Positions pos = {});
|
||||
|
||||
/** [Gotthard2] */
|
||||
Result<int> getADCConfiguration(const int chipIndex, const int adcIndex,
|
||||
|
@ -1825,21 +1825,59 @@ std::string CmdProxy::VetoStreaming(int action) {
|
||||
if (args.empty()) {
|
||||
WrongNumberOfParameters(1);
|
||||
}
|
||||
defs::EthernetInterface interface = defs::EthernetInterface::NONE;
|
||||
defs::ethernetInterface interface = GetVetoInterface(true);
|
||||
det->setVetoStream(interface, std::vector<int>{det_id});
|
||||
os << ToString(interface) << '\n';
|
||||
} else {
|
||||
throw sls::RuntimeError("Unknown action");
|
||||
}
|
||||
return os.str();
|
||||
}
|
||||
|
||||
defs::ethernetInterface CmdProxy::GetVetoInterface(bool isNoneAllowed) {
|
||||
defs::ethernetInterface interface = defs::ethernetInterface::NONE;
|
||||
for (const auto &arg : args) {
|
||||
if (arg == "none") {
|
||||
if (!isNoneAllowed) {
|
||||
throw sls::RuntimeError("Must specifiy an interface");
|
||||
} else {
|
||||
if (args.size() > 1) {
|
||||
throw sls::RuntimeError(
|
||||
"cannot have other arguments with 'none'. args: " +
|
||||
std::string(
|
||||
"cannot have other arguments with 'none'. args: ") +
|
||||
ToString(args));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
StringTo<defs::EthernetInterface>(arg);
|
||||
interface = interface | (StringTo<defs::EthernetInterface>(arg));
|
||||
interface = interface | (StringTo<defs::ethernetInterface>(arg));
|
||||
}
|
||||
det->setVetoStream(interface, std::vector<int>{det_id});
|
||||
os << ToString(interface) << '\n';
|
||||
return interface;
|
||||
}
|
||||
|
||||
std::string CmdProxy::VetoAlgorithm(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[default] [3gbe|10gbe|...]\n\t[Gotthard2] Set the veto "
|
||||
"algorithm."
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
if (args.size() < 1) {
|
||||
WrongNumberOfParameters(1);
|
||||
}
|
||||
defs::ethernetInterface interface = GetVetoInterface(false);
|
||||
auto t = det->getVetoAlgorithm(interface, std::vector<int>{det_id});
|
||||
os << OutString(t) << ' ' << ToString(interface) << '\n';
|
||||
} else if (action == defs::PUT_ACTION) {
|
||||
if (args.size() < 2) {
|
||||
WrongNumberOfParameters(2);
|
||||
}
|
||||
defs::vetoAlgorithm alg = StringTo<defs::vetoAlgorithm>(args[0]);
|
||||
args.erase(args.begin());
|
||||
defs::ethernetInterface interface = GetVetoInterface(false);
|
||||
det->setVetoAlgorithm(alg, interface, std::vector<int>{det_id});
|
||||
os << ToString(alg) << ' ' << ToString(interface) << '\n';
|
||||
} else {
|
||||
throw sls::RuntimeError("Unknown action");
|
||||
}
|
||||
|
@ -958,6 +958,7 @@ class CmdProxy {
|
||||
{"timingsource", &CmdProxy::timingsource},
|
||||
{"veto", &CmdProxy::veto},
|
||||
{"vetostream", &CmdProxy::VetoStreaming},
|
||||
{"vetoalg", &CmdProxy::VetoAlgorithm},
|
||||
{"confadc", &CmdProxy::ConfigureADC},
|
||||
{"badchannels", &CmdProxy::BadChannels},
|
||||
|
||||
@ -1134,6 +1135,8 @@ class CmdProxy {
|
||||
std::string VetoFile(int action);
|
||||
std::string BurstMode(int action);
|
||||
std::string VetoStreaming(int action);
|
||||
defs::ethernetInterface GetVetoInterface(bool isNoneAllowed);
|
||||
std::string VetoAlgorithm(int action);
|
||||
std::string ConfigureADC(int action);
|
||||
std::string BadChannels(int action);
|
||||
/* Mythen3 Specific */
|
||||
|
@ -1565,37 +1565,53 @@ void Detector::setVeto(bool enable, Positions pos) {
|
||||
pimpl->Parallel(&Module::setVeto, pos, enable);
|
||||
}
|
||||
|
||||
Result<defs::EthernetInterface> Detector::getVetoStream(Positions pos) const {
|
||||
Result<defs::ethernetInterface> Detector::getVetoStream(Positions pos) const {
|
||||
// 3gbe
|
||||
auto r3 = pimpl->Parallel(&Module::getVetoStream, pos);
|
||||
// 10gbe (debugging interface) opens 2nd udp interface in receiver
|
||||
auto r10 = getNumberofUDPInterfaces_(pos);
|
||||
|
||||
Result<defs::EthernetInterface> res(r3.size());
|
||||
Result<defs::ethernetInterface> res(r3.size());
|
||||
for (unsigned int i = 0; i < res.size(); ++i) {
|
||||
res[i] = (r3[i] ? defs::EthernetInterface::I3GBE
|
||||
: defs::EthernetInterface::NONE);
|
||||
res[i] = (r3[i] ? defs::ethernetInterface::I3GBE
|
||||
: defs::ethernetInterface::NONE);
|
||||
if (r10[i] == 2) {
|
||||
res[i] = res[i] | defs::EthernetInterface::I10GBE;
|
||||
res[i] = res[i] | defs::ethernetInterface::I10GBE;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
void Detector::setVetoStream(defs::EthernetInterface interface, Positions pos) {
|
||||
void Detector::setVetoStream(defs::ethernetInterface interface, Positions pos) {
|
||||
// 3gbe
|
||||
bool i3gbe = (interface & defs::EthernetInterface::I3GBE) == defs::EthernetInterface::I3GBE;
|
||||
bool i3gbe = (interface & defs::ethernetInterface::I3GBE) ==
|
||||
defs::ethernetInterface::I3GBE;
|
||||
pimpl->Parallel(&Module::setVetoStream, pos, i3gbe);
|
||||
|
||||
// 10gbe (debugging interface) opens 2nd udp interface in receiver
|
||||
int old_numinterfaces = getNumberofUDPInterfaces_(pos).tsquash(
|
||||
"retrieved inconsistent number of udp interfaces");
|
||||
int numinterfaces = ((interface & defs::EthernetInterface::I10GBE) == defs::EthernetInterface::I3GBE) ? 2 : 1;
|
||||
int numinterfaces = ((interface & defs::ethernetInterface::I10GBE) ==
|
||||
defs::ethernetInterface::I3GBE)
|
||||
? 2
|
||||
: 1;
|
||||
if (numinterfaces != old_numinterfaces) {
|
||||
setNumberofUDPInterfaces_(numinterfaces, pos);
|
||||
}
|
||||
}
|
||||
|
||||
Result<defs::vetoAlgorithm>
|
||||
Detector::getVetoAlgorithm(const defs::ethernetInterface interface,
|
||||
Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getVetoAlgorithm, pos, interface);
|
||||
}
|
||||
|
||||
void Detector::setVetoAlgorithm(const defs::vetoAlgorithm alg,
|
||||
defs::ethernetInterface interface,
|
||||
Positions pos) {
|
||||
pimpl->Parallel(&Module::setVetoAlgorithm, pos, alg, interface);
|
||||
}
|
||||
|
||||
Result<int> Detector::getADCConfiguration(const int chipIndex,
|
||||
const int adcIndex,
|
||||
Positions pos) const {
|
||||
|
@ -1878,6 +1878,17 @@ void Module::setVetoStream(const bool value) {
|
||||
sendToDetector(F_SET_VETO_STREAM, static_cast<int>(value), nullptr);
|
||||
}
|
||||
|
||||
slsDetectorDefs::vetoAlgorithm
|
||||
Module::getVetoAlgorithm(const slsDetectorDefs::ethernetInterface) const {
|
||||
return alg_;
|
||||
}
|
||||
|
||||
void Module::setVetoAlgorithm(
|
||||
const slsDetectorDefs::vetoAlgorithm alg,
|
||||
const slsDetectorDefs::ethernetInterface interface) {
|
||||
alg_ = alg;
|
||||
}
|
||||
|
||||
int Module::getADCConfiguration(const int chipIndex, const int adcIndex) const {
|
||||
int args[]{chipIndex, adcIndex};
|
||||
return sendToDetector<int>(F_GET_ADC_CONFIGURATION, args);
|
||||
|
@ -408,6 +408,10 @@ class Module : public virtual slsDetectorDefs {
|
||||
void setVeto(bool enable);
|
||||
bool getVetoStream() const;
|
||||
void setVetoStream(const bool value);
|
||||
slsDetectorDefs::vetoAlgorithm
|
||||
getVetoAlgorithm(const slsDetectorDefs::ethernetInterface) const;
|
||||
void setVetoAlgorithm(const slsDetectorDefs::vetoAlgorithm alg,
|
||||
const slsDetectorDefs::ethernetInterface interface);
|
||||
int getADCConfiguration(const int chipIndex, const int adcIndex) const;
|
||||
void setADCConfiguration(const int chipIndex, const int adcIndex,
|
||||
int value);
|
||||
@ -721,6 +725,7 @@ class Module : public virtual slsDetectorDefs {
|
||||
|
||||
const int moduleId;
|
||||
mutable sls::SharedMemory<sharedSlsDetector> shm{0, 0};
|
||||
slsDetectorDefs::vetoAlgorithm alg_{slsDetectorDefs::DEFAULT_ALGORITHM};
|
||||
};
|
||||
|
||||
} // namespace sls
|
@ -686,6 +686,58 @@ TEST_CASE("vetostream", "[.cmd]") {
|
||||
REQUIRE_THROWS(proxy.Call("vetostream", {"dfgd"}, -1, GET));
|
||||
}
|
||||
|
||||
TEST_CASE("vetoalg", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::GOTTHARD2) {
|
||||
auto prev_val_3g = det.getVetoAlgorithm(defs::ethernetInterface::I3GBE);
|
||||
auto prev_val_10g =
|
||||
det.getVetoAlgorithm(defs::ethernetInterface::I10GBE);
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("vetoalg", {"default", "3gbe"}, -1, PUT, oss);
|
||||
REQUIRE(oss.str() == "vetoalg default 3gbe\n");
|
||||
}
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("vetoalg", {"3gbe"}, -1, GET, oss);
|
||||
REQUIRE(oss.str() == "vetoalg default 3gbe\n");
|
||||
}
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("vetoalg", {"default", "10gbe"}, -1, PUT, oss);
|
||||
REQUIRE(oss.str() == "vetoalg default 10gbe\n");
|
||||
}
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("vetoalg", {"10gbe"}, -1, GET, oss);
|
||||
REQUIRE(oss.str() == "vetoalg default 10gbe\n");
|
||||
}
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("vetoalg", {"default", "3gbe", "10gbe"}, -1, PUT, oss);
|
||||
REQUIRE(oss.str() == "vetoalg default 3gbe, 10gbe\n");
|
||||
}
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("vetoalg", {"3gbe", "10gbe"}, -1, GET, oss);
|
||||
REQUIRE(oss.str() == "vetoalg default 3gbe, 10gbe\n");
|
||||
}
|
||||
REQUIRE_THROWS(proxy.Call("vetostream", {"3gbe", "none"}, -1, PUT));
|
||||
for (int i = 0; i != det.size(); ++i) {
|
||||
det.setVetoAlgorithm(prev_val_3g[i], defs::ethernetInterface::I3GBE,
|
||||
{i});
|
||||
det.setVetoAlgorithm(prev_val_10g[i],
|
||||
defs::ethernetInterface::I10GBE, {i});
|
||||
}
|
||||
} else {
|
||||
REQUIRE_THROWS(proxy.Call("vetoalg", {"3gbe"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("vetoalg", {"none"}, -1, PUT));
|
||||
}
|
||||
REQUIRE_THROWS(proxy.Call("vetoalg", {"dfgd"}, -1, GET));
|
||||
}
|
||||
|
||||
TEST_CASE("confadc", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
|
@ -1412,9 +1412,9 @@ sls::MacAddr ClientInterface::setUdpIp(sls::IpAddr arg) {
|
||||
LOG(logERROR) << "Failed to get udp ethernet interface from IP " << arg
|
||||
<< ". Got " << eth;
|
||||
}
|
||||
impl()->setEthernetInterface(eth);
|
||||
impl()->setethernetInterface(eth);
|
||||
if (myDetectorType == EIGER) {
|
||||
impl()->setEthernetInterface2(eth);
|
||||
impl()->setethernetInterface2(eth);
|
||||
}
|
||||
// get mac address
|
||||
auto retval = sls::InterfaceNameToMac(eth);
|
||||
@ -1446,7 +1446,7 @@ sls::MacAddr ClientInterface::setUdpIp2(sls::IpAddr arg) {
|
||||
LOG(logERROR) << "Failed to get udp ethernet interface2 from IP " << arg
|
||||
<< ". Got " << eth;
|
||||
}
|
||||
impl()->setEthernetInterface2(eth);
|
||||
impl()->setethernetInterface2(eth);
|
||||
|
||||
// get mac address
|
||||
auto retval = sls::InterfaceNameToMac(eth);
|
||||
|
@ -939,16 +939,16 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
|
||||
LOG(logINFO) << "Number of Interfaces: " << numUDPInterfaces;
|
||||
}
|
||||
|
||||
std::string Implementation::getEthernetInterface() const { return eth[0]; }
|
||||
std::string Implementation::getethernetInterface() const { return eth[0]; }
|
||||
|
||||
void Implementation::setEthernetInterface(const std::string &c) {
|
||||
void Implementation::setethernetInterface(const std::string &c) {
|
||||
eth[0] = c;
|
||||
LOG(logINFO) << "Ethernet Interface: " << eth[0];
|
||||
}
|
||||
|
||||
std::string Implementation::getEthernetInterface2() const { return eth[1]; }
|
||||
std::string Implementation::getethernetInterface2() const { return eth[1]; }
|
||||
|
||||
void Implementation::setEthernetInterface2(const std::string &c) {
|
||||
void Implementation::setethernetInterface2(const std::string &c) {
|
||||
eth[1] = c;
|
||||
LOG(logINFO) << "Ethernet Interface 2: " << eth[1];
|
||||
}
|
||||
|
@ -98,11 +98,11 @@ class Implementation : private virtual slsDetectorDefs {
|
||||
int getNumberofUDPInterfaces() const;
|
||||
/* [Jungfrau] */
|
||||
void setNumberofUDPInterfaces(const int n);
|
||||
std::string getEthernetInterface() const;
|
||||
void setEthernetInterface(const std::string &c);
|
||||
std::string getEthernetInterface2() const;
|
||||
std::string getethernetInterface() const;
|
||||
void setethernetInterface(const std::string &c);
|
||||
std::string getethernetInterface2() const;
|
||||
/* [Jungfrau] */
|
||||
void setEthernetInterface2(const std::string &c);
|
||||
void setethernetInterface2(const std::string &c);
|
||||
uint32_t getUDPPortNumber() const;
|
||||
void setUDPPortNumber(const uint32_t i);
|
||||
uint32_t getUDPPortNumber2() const;
|
||||
|
@ -36,7 +36,8 @@ std::string ToString(const defs::dacIndex s);
|
||||
std::string ToString(const std::vector<defs::dacIndex> &vec);
|
||||
std::string ToString(const defs::burstMode s);
|
||||
std::string ToString(const defs::timingSourceType s);
|
||||
std::string ToString(const defs::EthernetInterface s);
|
||||
std::string ToString(const defs::ethernetInterface s);
|
||||
std::string ToString(const defs::vetoAlgorithm s);
|
||||
|
||||
std::string ToString(const slsDetectorDefs::xy &coord);
|
||||
std::ostream &operator<<(std::ostream &os, const slsDetectorDefs::xy &coord);
|
||||
@ -298,7 +299,8 @@ template <> defs::readoutMode StringTo(const std::string &s);
|
||||
template <> defs::dacIndex StringTo(const std::string &s);
|
||||
template <> defs::burstMode StringTo(const std::string &s);
|
||||
template <> defs::timingSourceType StringTo(const std::string &s);
|
||||
template <> defs::EthernetInterface StringTo(const std::string &s);
|
||||
template <> defs::ethernetInterface StringTo(const std::string &s);
|
||||
template <> defs::vetoAlgorithm StringTo(const std::string &s);
|
||||
|
||||
template <> uint32_t StringTo(const std::string &s);
|
||||
template <> uint64_t StringTo(const std::string &s);
|
||||
|
@ -395,9 +395,9 @@ typedef struct {
|
||||
enum timingSourceType { TIMING_INTERNAL, TIMING_EXTERNAL };
|
||||
|
||||
#ifdef __cplusplus
|
||||
enum class EthernetInterface {
|
||||
enum class ethernetInterface {
|
||||
#else
|
||||
enum EthernetInterface {
|
||||
enum ethernetInterface {
|
||||
#endif
|
||||
NONE = 0,
|
||||
I3GBE = 1 << 1,
|
||||
@ -405,6 +405,8 @@ typedef struct {
|
||||
ALL = I3GBE | I10GBE
|
||||
};
|
||||
|
||||
enum vetoAlgorithm { DEFAULT_ALGORITHM };
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
/** scan structure */
|
||||
@ -496,16 +498,18 @@ typedef struct {
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
inline slsDetectorDefs::EthernetInterface
|
||||
operator|( const slsDetectorDefs::EthernetInterface &a,
|
||||
const slsDetectorDefs::EthernetInterface &b) {
|
||||
return slsDetectorDefs::EthernetInterface(static_cast<int32_t>(a) |
|
||||
inline slsDetectorDefs::ethernetInterface
|
||||
operator|(const slsDetectorDefs::ethernetInterface &a,
|
||||
const slsDetectorDefs::ethernetInterface &b) {
|
||||
return slsDetectorDefs::ethernetInterface(static_cast<int32_t>(a) |
|
||||
static_cast<int32_t>(b));
|
||||
};
|
||||
|
||||
inline slsDetectorDefs::EthernetInterface operator&( const slsDetectorDefs::EthernetInterface &a,
|
||||
const slsDetectorDefs::EthernetInterface &b) {
|
||||
return slsDetectorDefs::EthernetInterface(static_cast<int32_t>(a) & static_cast<int32_t>(b));
|
||||
inline slsDetectorDefs::ethernetInterface
|
||||
operator&(const slsDetectorDefs::ethernetInterface &a,
|
||||
const slsDetectorDefs::ethernetInterface &b) {
|
||||
return slsDetectorDefs::ethernetInterface(static_cast<int32_t>(a) &
|
||||
static_cast<int32_t>(b));
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -519,16 +519,18 @@ std::string ToString(const defs::timingSourceType s) {
|
||||
}
|
||||
}
|
||||
|
||||
std::string ToString(const defs::EthernetInterface s) {
|
||||
std::string ToString(const defs::ethernetInterface s) {
|
||||
std::ostringstream os;
|
||||
std::string rs;
|
||||
switch (s) {
|
||||
case defs::EthernetInterface::NONE:
|
||||
case defs::ethernetInterface::NONE:
|
||||
return std::string("none");
|
||||
default:
|
||||
if ((s & defs::EthernetInterface::I3GBE)!=defs::EthernetInterface::NONE)
|
||||
if ((s & defs::ethernetInterface::I3GBE) !=
|
||||
defs::ethernetInterface::NONE)
|
||||
os << "3gbe, ";
|
||||
if ((s & defs::EthernetInterface::I10GBE)!=defs::EthernetInterface::NONE)
|
||||
if ((s & defs::ethernetInterface::I10GBE) !=
|
||||
defs::ethernetInterface::NONE)
|
||||
os << "10gbe, ";
|
||||
auto rs = os.str();
|
||||
rs.erase(rs.end() - 2, rs.end());
|
||||
@ -536,6 +538,15 @@ std::string ToString(const defs::EthernetInterface s) {
|
||||
}
|
||||
}
|
||||
|
||||
std::string ToString(const defs::vetoAlgorithm s) {
|
||||
switch (s) {
|
||||
case defs::DEFAULT_ALGORITHM:
|
||||
return std::string("default");
|
||||
default:
|
||||
return std::string("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
const std::string &ToString(const std::string &s) { return s; }
|
||||
|
||||
template <> defs::detectorType StringTo(const std::string &s) {
|
||||
@ -876,17 +887,23 @@ template <> defs::timingSourceType StringTo(const std::string &s) {
|
||||
throw sls::RuntimeError("Unknown timing source type " + s);
|
||||
}
|
||||
|
||||
template <> defs::EthernetInterface StringTo(const std::string &s) {
|
||||
template <> defs::ethernetInterface StringTo(const std::string &s) {
|
||||
std::string rs = s;
|
||||
if (s.find(',') != std::string::npos)
|
||||
rs.erase(rs.find(','));
|
||||
if (rs == "none")
|
||||
return defs::EthernetInterface::NONE;
|
||||
return defs::ethernetInterface::NONE;
|
||||
if (rs == "3gbe")
|
||||
return defs::EthernetInterface::I3GBE;
|
||||
return defs::ethernetInterface::I3GBE;
|
||||
if (rs == "10gbe")
|
||||
return defs::EthernetInterface::I10GBE;
|
||||
throw sls::RuntimeError("Unknown EthernetInterface type " + s);
|
||||
return defs::ethernetInterface::I10GBE;
|
||||
throw sls::RuntimeError("Unknown ethernetInterface type " + s);
|
||||
}
|
||||
|
||||
template <> defs::vetoAlgorithm StringTo(const std::string &s) {
|
||||
if (s == "default")
|
||||
return defs::DEFAULT_ALGORITHM;
|
||||
throw sls::RuntimeError("Unknown veto algorithm " + s);
|
||||
}
|
||||
|
||||
template <> uint32_t StringTo(const std::string &s) {
|
||||
|
@ -324,10 +324,10 @@ TEST_CASE("Print a member of patternParameters") {
|
||||
REQUIRE(ToString(pat->limits) == "[4, 100]");
|
||||
}
|
||||
|
||||
TEST_CASE("EthernetInterface") {
|
||||
REQUIRE(ToString(sls::defs::EthernetInterface::NONE) == "none");
|
||||
REQUIRE(ToString(sls::defs::EthernetInterface::I10GBE) == "10gbe");
|
||||
REQUIRE(ToString(sls::defs::EthernetInterface::I3GBE) == "3gbe");
|
||||
REQUIRE(ToString(sls::defs::EthernetInterface::I3GBE |
|
||||
sls::defs::EthernetInterface::I10GBE) == "3gbe, 10gbe");
|
||||
TEST_CASE("ethernetInterface") {
|
||||
REQUIRE(ToString(sls::defs::ethernetInterface::NONE) == "none");
|
||||
REQUIRE(ToString(sls::defs::ethernetInterface::I10GBE) == "10gbe");
|
||||
REQUIRE(ToString(sls::defs::ethernetInterface::I3GBE) == "3gbe");
|
||||
REQUIRE(ToString(sls::defs::ethernetInterface::I3GBE |
|
||||
sls::defs::ethernetInterface::I10GBE) == "3gbe, 10gbe");
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user