const qualified multi calls, python fixes

This commit is contained in:
Erik Frojdh 2019-03-18 12:06:39 +01:00
parent c0d5303b70
commit 4036e6af8d
8 changed files with 100 additions and 62 deletions

View File

@ -441,7 +441,7 @@ class Detector:
@property
def api_compatibility(self):
Compatibility = namedtuple('Compatibility', ['client_detector', 'client_receiver'])
c = Compatibility(self._api.isClientAndDetecorCompatible(), self._api.isClientAndReceiverCompatible())
c = Compatibility(self._api.isClientAndDetectorCompatible(), self._api.isClientAndReceiverCompatible())
return c
@property
@ -1022,18 +1022,15 @@ class Detector:
def rx_hostname(self):
"""
Receiver hostname
TODO! setting of individual hostnames, now done with API call
"""
s = self._api.getNetworkParameter('rx_hostname')
return element_if_equal(s)
return self._api.getReceiverHostname()
@rx_hostname.setter
@error_handling
def rx_hostname(self, names):
# if we pass a list join the list
if isinstance(names, list):
names = '+'.join(n for n in names)+'+'
self._api.setNetworkParameter('rx_hostname', names, -1)
def rx_hostname(self, name):
self._api.setReceiverHostname(name)
@property
@ -1042,16 +1039,16 @@ class Detector:
"""
Receiver UDP ip
"""
s = self._api.getNetworkParameter('rx_udpip')
return element_if_equal(s)
return self._api.getReceiverUDPIP(-1)
@rx_udpip.setter
def rx_udpip(self, ip):
if isinstance(ip, list):
for i, addr in enumerate(ip):
self._api.setNetworkParameter('rx_udpip', addr, i)
self._api.setReceiverUDPIP(addr, i)
else:
self._api.setNetworkParameter('rx_udpip', ip, -1)
self._api.setReceiverUDPIP(ip, -1)
@property

View File

@ -89,6 +89,22 @@ class Detector {
return det.getReceiverCurrentFrameIndex();
}
std::string getReceiverHostname(int det_id = -1) const {
return det.getReceiverHostname(det_id);
}
void setReceiverHostname(const std::string &hostname, int det_id = -1) {
det.setReceiverHostname(hostname, det_id);
}
std::string getReceiverUDPIP(int det_id = -1) const {
return det.getReceiverUDPIP(det_id);
}
void setReceiverUDPIP(const std::string &ip, int det_id = -1) {
det.setReceiverUDPIP(ip, det_id);
}
void startReceiver() { det.startReceiver(); }
void stopReceiver() { det.stopReceiver(); }
@ -352,15 +368,15 @@ class Detector {
return mp;
}
bool isClientAndDetecorCompatible() {
auto r = det.checkDetectorVersionCompatibility(slsDetectorDefs::CONTROL_PORT);
bool isClientAndDetectorCompatible() {
auto r = det.checkDetectorVersionCompatibility();
if (r == 0)
return true;
else
return false;
}
bool isClientAndReceiverCompatible() {
auto r = det.checkReceiverVersionCompatibility(slsDetectorDefs::DATA_PORT);
auto r = det.checkReceiverVersionCompatibility();
if (r == 0)
return true;
else
@ -663,14 +679,13 @@ class Detector {
return vec;
}
void setReceiverUDPPort(int port, int det_id){
void setReceiverUDPPort(int port, int det_id) {
det.setReceiverUDPPort(port, det_id);
}
void setReceiverUDPPort2(int port, int det_id){
void setReceiverUDPPort2(int port, int det_id) {
det.setReceiverUDPPort2(port, det_id);
}
// //Set network parameter for all modules if det_id == -1 otherwise the module
// //specified with det_id.
// void setDetectorNetworkParameter(std::string par_name, std::string par, const int det_id) {

View File

@ -178,10 +178,16 @@ PYBIND11_MODULE(_sls_detector, m)
.def("setRxDataStreamStatus", &Detector::setRxDataStreamStatus)
//Network stuff
.def("getReceiverHostname", &Detector::getReceiverHostname)
.def("setReceiverHostname", &Detector::setReceiverHostname)
.def("getReceiverStreamingPort", &Detector::getReceiverStreamingPort)
.def("setReceiverStreamingPort", &Detector::setReceiverStreamingPort)
.def("getReceiverUDPPort", &Detector::getReceiverUDPPort)
.def("getReceiverUDPPort2", &Detector::getReceiverUDPPort2)
.def("setReceiverUDPPort", &Detector::setReceiverUDPPort)
.def("setReceiverUDPPort2", &Detector::setReceiverUDPPort2)
.def("setReceiverUDPIP", &Detector::setReceiverUDPIP)
.def("getReceiverUDPIP", &Detector::getReceiverUDPIP)
.def("getReceiverPort", &Detector::getReceiverPort)
.def("setReceiverPort", &Detector::setReceiverPort)
@ -207,7 +213,7 @@ PYBIND11_MODULE(_sls_detector, m)
.def("getReceiverPartialFramesPadding", &Detector::getReceiverPartialFramesPadding)
.def("getUserDetails", &Detector::getUserDetails)
.def("isClientAndDetecorCompatible", &Detector::isClientAndDetecorCompatible)
.def("isClientAndDetectorCompatible", &Detector::isClientAndDetectorCompatible)
.def("isClientAndReceiverCompatible", &Detector::isClientAndReceiverCompatible)
.def("getMeasuredPeriod", &Detector::getMeasuredPeriod)
.def("getMeasuredSubPeriod", &Detector::getMeasuredSubPeriod)
@ -276,7 +282,9 @@ py::class_<multiSlsDetector> multiDetectorApi(m, "multiDetectorApi");
py::cpp_function(&multiSlsDetector::setAcquiringFlag))
.def_property_readonly("rx_tcpport",
py::cpp_function(&multiSlsDetector::getReceiverPort))
// .def_property_readonly("rx_udpip",
// py::cpp_function(&multiSlsDetector::getReceiverUDPIP), py::arg("det_id")=1)
// .def("_setReceiverUDPIP", &multiSlsDetector::setReceiverUDPIP)
;

View File

@ -56,6 +56,17 @@ std::vector<RT> multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...),
return result;
}
template <typename RT, typename... CT>
std::vector<RT> multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...) const,
typename NonDeduced<CT>::type... Args) const {
std::vector<RT> result;
result.reserve(detectors.size());
for (auto &d : detectors) {
result.push_back((d.get()->*somefunc)(Args...));
}
return result;
}
template <typename RT, typename... CT>
std::vector<RT>
multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), typename NonDeduced<CT>::type... Args) {
@ -75,7 +86,7 @@ multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), typename NonD
//Const qualified version
template <typename RT, typename... CT>
std::vector<RT>
multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), typename NonDeduced<CT>::type... Args) const{
multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...) const, typename NonDeduced<CT>::type... Args) const {
std::vector<std::future<RT>> futures;
for (auto &d : detectors) {
futures.push_back(
@ -328,7 +339,7 @@ void multiSlsDetector::initSharedMemory(bool verify) {
multi_shm.OpenSharedMemory();
if (verify && multi_shm()->shmversion != MULTI_SHMVERSION) {
FILE_LOG(logERROR) << "Multi shared memory (" << multiId << ") version mismatch "
"(expected 0x"
"(expected 0x"
<< std::hex << MULTI_SHMVERSION << " but got 0x" << multi_shm()->shmversion << std::dec;
throw SharedMemoryError("Shared memory version mismatch!");
}
@ -765,8 +776,8 @@ int multiSlsDetector::setReceiverPort(int port_number, int detPos) {
return sls::minusOneIfDifferent(r);
}
std::vector<int> multiSlsDetector::getReceiverPort() const{
return parallelCall(&slsDetector::setReceiverPort, -1);
std::vector<int> multiSlsDetector::getReceiverPort() const {
return parallelCall(&slsDetector::getReceiverPort);
}
int multiSlsDetector::lockServer(int p, int detPos) {
@ -1624,25 +1635,25 @@ std::string multiSlsDetector::getDetectorIP(int detPos) {
return sls::concatenateIfDifferent(r);
}
std::string multiSlsDetector::setReceiver(const std::string &receiver, int detPos) {
std::string multiSlsDetector::setReceiverHostname(const std::string &receiver, int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->setReceiver(receiver);
return detectors[detPos]->setReceiverHostname(receiver);
}
// multi
auto r = parallelCall(&slsDetector::setReceiver, receiver);
auto r = parallelCall(&slsDetector::setReceiverHostname, receiver);
return sls::concatenateIfDifferent(r);
}
std::string multiSlsDetector::getReceiver(int detPos) {
std::string multiSlsDetector::getReceiverHostname(int detPos) const {
// single
if (detPos >= 0) {
return detectors[detPos]->getReceiver();
return detectors[detPos]->getReceiverHostname();
}
// multi
auto r = serialCall(&slsDetector::getReceiver);
auto r = parallelCall(&slsDetector::getReceiverHostname);
return sls::concatenateIfDifferent(r);
}
@ -1657,7 +1668,7 @@ std::string multiSlsDetector::setReceiverUDPIP(const std::string &udpip, int det
return sls::concatenateIfDifferent(r);
}
std::string multiSlsDetector::getReceiverUDPIP(int detPos) {
std::string multiSlsDetector::getReceiverUDPIP(int detPos) const {
// single
if (detPos >= 0) {
return detectors[detPos]->getReceiverUDPIP();
@ -1679,7 +1690,7 @@ std::string multiSlsDetector::setReceiverUDPMAC(const std::string &udpmac, int d
return sls::concatenateIfDifferent(r);
}
std::string multiSlsDetector::getReceiverUDPMAC(int detPos) {
std::string multiSlsDetector::getReceiverUDPMAC(int detPos) const {
// single
if (detPos >= 0) {
return detectors[detPos]->getReceiverUDPMAC();
@ -1701,7 +1712,7 @@ int multiSlsDetector::setReceiverUDPPort(int udpport, int detPos) {
return sls::minusOneIfDifferent(r);
}
int multiSlsDetector::getReceiverUDPPort(int detPos) {
int multiSlsDetector::getReceiverUDPPort(int detPos) const {
// single
if (detPos >= 0) {
return detectors[detPos]->getReceiverUDPPort();
@ -1723,7 +1734,7 @@ int multiSlsDetector::setReceiverUDPPort2(int udpport, int detPos) {
return sls::minusOneIfDifferent(r);
}
int multiSlsDetector::getReceiverUDPPort2(int detPos) {
int multiSlsDetector::getReceiverUDPPort2(int detPos) const {
// single
if (detPos >= 0) {
return detectors[detPos]->getReceiverUDPPort2();

View File

@ -143,7 +143,13 @@ class multiSlsDetector : public virtual slsDetectorDefs,
template <class CT>
struct NonDeduced { using type = CT; };
template <typename RT, typename... CT>
std::vector<RT> serialCall(RT (slsDetector::*somefunc)(CT...), typename NonDeduced<CT>::type... Args);
std::vector<RT> serialCall(RT (slsDetector::*somefunc)(CT...),
typename NonDeduced<CT>::type... Args);
//Const qualified version should be preferred for calling get methods
template <typename RT, typename... CT>
std::vector<RT> serialCall(RT (slsDetector::*somefunc)(CT...) const,
typename NonDeduced<CT>::type... Args) const;
/**
* Loop through the detectors in parallel threads
@ -153,9 +159,9 @@ class multiSlsDetector : public virtual slsDetectorDefs,
std::vector<RT> parallelCall(RT (slsDetector::*somefunc)(CT...),
typename NonDeduced<CT>::type... Args);
//Const qualified version
//Const qualified version should be preferred for calling get methods
template <typename RT, typename... CT>
std::vector<RT> parallelCall(RT (slsDetector::*somefunc)(CT...),
std::vector<RT> parallelCall(RT (slsDetector::*somefunc)(CT...) const,
typename NonDeduced<CT>::type... Args) const;
/**
@ -894,14 +900,14 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns the receiver IP address from shared memory
*/
std::string setReceiver(const std::string &receiver, int detPos = -1);
std::string setReceiverHostname(const std::string &receiver, int detPos = -1);
/**
* Returns the receiver IP address
* @param detPos -1 for all detectors in list or specific detector position
* @returns the receiver IP address
*/
std::string getReceiver(int detPos = -1);
std::string getReceiverHostname(int detPos = -1) const;
/**
* Validates the format of the receiver UDP IP address and sets it
@ -916,7 +922,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns the receiver UDP IP address
*/
std::string getReceiverUDPIP(int detPos = -1);
std::string getReceiverUDPIP(int detPos = -1) const;
/**
* Validates the format of the receiver UDP MAC address and sets it
@ -931,7 +937,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns the receiver UDP MAC address
*/
std::string getReceiverUDPMAC(int detPos = -1);
std::string getReceiverUDPMAC(int detPos = -1) const;
/**
* Sets the receiver UDP port
@ -946,7 +952,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns the receiver UDP port
*/
int getReceiverUDPPort(int detPos = -1);
int getReceiverUDPPort(int detPos = -1) const;
/**
* Sets the receiver UDP port 2
@ -961,7 +967,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
* @param detPos -1 for all detectors in list or specific detector position
* @returns the receiver UDP port 2 of same interface
*/
int getReceiverUDPPort2(int detPos = -1);
int getReceiverUDPPort2(int detPos = -1) const;
/**
* (advanced users)

View File

@ -844,6 +844,10 @@ int slsDetector::setReceiverPort(int port_number) {
return detector_shm()->receiverTCPPort;
}
int slsDetector::getReceiverPort() const{
return detector_shm()->receiverTCPPort;
}
int slsDetector::getControlPort() const {
return detector_shm()->controlPort;
}
@ -852,9 +856,6 @@ int slsDetector::getStopPort() const {
return detector_shm()->stopPort;
}
int slsDetector::getReceiverPort() const {
return detector_shm()->receiverTCPPort;
}
int slsDetector::lockServer(int lock) {
int fnum = F_LOCK_SERVER;
@ -2344,7 +2345,7 @@ std::string slsDetector::getDetectorIP() {
return std::string(detector_shm()->detectorIP);
}
std::string slsDetector::setReceiver(const std::string &receiverIP) {
std::string slsDetector::setReceiverHostname(const std::string &receiverIP) {
FILE_LOG(logDEBUG1) << "Setting up Receiver with " << receiverIP;
// recieverIP is none
if (receiverIP == "none") {
@ -2430,7 +2431,7 @@ std::string slsDetector::setReceiver(const std::string &receiverIP) {
return std::string(detector_shm()->receiver_hostname);
}
std::string slsDetector::getReceiver() {
std::string slsDetector::getReceiverHostname() const {
return std::string(detector_shm()->receiver_hostname);
}
@ -2458,7 +2459,7 @@ std::string slsDetector::setReceiverUDPIP(const std::string &udpip) {
return std::string(detector_shm()->receiverUDPIP);
}
std::string slsDetector::getReceiverUDPIP() {
std::string slsDetector::getReceiverUDPIP() const {
return std::string(detector_shm()->receiverUDPIP);
}
@ -2482,7 +2483,7 @@ std::string slsDetector::setReceiverUDPMAC(const std::string &udpmac) {
return std::string(detector_shm()->receiverUDPMAC);
}
std::string slsDetector::getReceiverUDPMAC() {
std::string slsDetector::getReceiverUDPMAC() const {
return std::string(detector_shm()->receiverUDPMAC);
}
@ -2496,7 +2497,7 @@ int slsDetector::setReceiverUDPPort(int udpport) {
return detector_shm()->receiverUDPPort;
}
int slsDetector::getReceiverUDPPort() {
int slsDetector::getReceiverUDPPort() const {
return detector_shm()->receiverUDPPort;
}
@ -2513,7 +2514,7 @@ int slsDetector::setReceiverUDPPort2(int udpport) {
return detector_shm()->receiverUDPPort2;
}
int slsDetector::getReceiverUDPPort2() {
int slsDetector::getReceiverUDPPort2() const {
return detector_shm()->receiverUDPPort2;
}
@ -4023,7 +4024,7 @@ int64_t slsDetector::getRateCorrection() {
void slsDetector::printReceiverConfiguration(TLogLevel level) {
FILE_LOG(level) << "#Detector " << detId << ":\n"
<< "Receiver Hostname:\t" << getReceiver() << "\nDetector UDP IP (Source):\t\t" << getDetectorIP() << "\nDetector UDP MAC:\t\t" << getDetectorMAC() << "\nReceiver UDP IP:\t" << getReceiverUDPIP() << "\nReceiver UDP MAC:\t" << getReceiverUDPMAC() << "\nReceiver UDP Port:\t" << getReceiverUDPPort() << "\nReceiver UDP Port2:\t" << getReceiverUDPPort2();
<< "Receiver Hostname:\t" << getReceiverHostname() << "\nDetector UDP IP (Source):\t\t" << getDetectorIP() << "\nDetector UDP MAC:\t\t" << getDetectorMAC() << "\nReceiver UDP IP:\t" << getReceiverUDPIP() << "\nReceiver UDP MAC:\t" << getReceiverUDPMAC() << "\nReceiver UDP Port:\t" << getReceiverUDPPort() << "\nReceiver UDP Port2:\t" << getReceiverUDPPort2();
}
int slsDetector::setReceiverOnline(int value) {

View File

@ -819,13 +819,13 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs {
* @param receiver receiver hostname or IP address
* @returns the receiver IP address from shared memory
*/
std::string setReceiver(const std::string &receiver);
std::string setReceiverHostname(const std::string &receiver);
/**
* Returns the receiver IP address\sa sharedSlsDetector
* @returns the receiver IP address
*/
std::string getReceiver();
std::string getReceiverHostname() const;
/**
* Validates the format of the receiver UDP IP address and sets it \sa sharedSlsDetector
@ -838,7 +838,7 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs {
* Returns the receiver UDP IP address\sa sharedSlsDetector
* @returns the receiver UDP IP address
*/
std::string getReceiverUDPIP();
std::string getReceiverUDPIP() const;
/**
* Validates the format of the receiver UDP MAC address and sets it \sa sharedSlsDetector
@ -851,7 +851,7 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs {
* Returns the receiver UDP MAC address\sa sharedSlsDetector
* @returns the receiver UDP MAC address
*/
std::string getReceiverUDPMAC();
std::string getReceiverUDPMAC() const;
/**
* Sets the receiver UDP port\sa sharedSlsDetector
@ -864,7 +864,7 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs {
* Returns the receiver UDP port\sa sharedSlsDetector
* @returns the receiver UDP port
*/
int getReceiverUDPPort();
int getReceiverUDPPort() const;
/**
* Sets the receiver UDP port 2\sa sharedSlsDetector
@ -877,7 +877,7 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs {
* Returns the receiver UDP port 2 of same interface\sa sharedSlsDetector
* @returns the receiver UDP port 2 of same interface
*/
int getReceiverUDPPort2();
int getReceiverUDPPort2() const;
/**
* Sets the client zmq port\sa sharedSlsDetector

View File

@ -2796,9 +2796,9 @@ std::string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int
return myDet->getDetectorIP(detPos);
} else if (cmd == "rx_hostname") {
if (action == PUT_ACTION) {
myDet->setReceiver(args[1], detPos);
myDet->setReceiverHostname(args[1], detPos);
}
return myDet->getReceiver(detPos);
return myDet->getReceiverHostname(detPos);
} else if (cmd == "rx_udpip") {
if (action == PUT_ACTION) {
myDet->setReceiverUDPIP(args[1], detPos);