From 4036e6af8d88e18e16bbc226f711791610bc3468 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Mon, 18 Mar 2019 12:06:39 +0100 Subject: [PATCH] const qualified multi calls, python fixes --- python/sls_detector/detector.py | 23 +++++------ python/src/Detector.h | 27 ++++++++++--- python/src/main.cpp | 12 +++++- .../multiSlsDetector/multiSlsDetector.cpp | 39 ++++++++++++------- .../multiSlsDetector/multiSlsDetector.h | 24 +++++++----- .../slsDetector/slsDetector.cpp | 21 +++++----- slsDetectorSoftware/slsDetector/slsDetector.h | 12 +++--- .../slsDetector/slsDetectorCommand.cpp | 4 +- 8 files changed, 100 insertions(+), 62 deletions(-) diff --git a/python/sls_detector/detector.py b/python/sls_detector/detector.py index 854c0dee8..d78278407 100644 --- a/python/sls_detector/detector.py +++ b/python/sls_detector/detector.py @@ -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 diff --git a/python/src/Detector.h b/python/src/Detector.h index 7fcce49fe..18f2ff46b 100644 --- a/python/src/Detector.h +++ b/python/src/Detector.h @@ -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) { diff --git a/python/src/main.cpp b/python/src/main.cpp index bb3ba79fd..1c300a12f 100644 --- a/python/src/main.cpp +++ b/python/src/main.cpp @@ -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_ 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) ; diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 8d6f8e766..5f986c4ef 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -56,6 +56,17 @@ std::vector multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...), return result; } +template +std::vector multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...) const, + typename NonDeduced::type... Args) const { + std::vector result; + result.reserve(detectors.size()); + for (auto &d : detectors) { + result.push_back((d.get()->*somefunc)(Args...)); + } + return result; +} + template std::vector multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), typename NonDeduced::type... Args) { @@ -75,7 +86,7 @@ multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), typename NonD //Const qualified version template std::vector -multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), typename NonDeduced::type... Args) const{ +multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...) const, typename NonDeduced::type... Args) const { std::vector> 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 multiSlsDetector::getReceiverPort() const{ - return parallelCall(&slsDetector::setReceiverPort, -1); +std::vector 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(); diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 9a3b7fa63..34f0c7372 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -143,7 +143,13 @@ class multiSlsDetector : public virtual slsDetectorDefs, template struct NonDeduced { using type = CT; }; template - std::vector serialCall(RT (slsDetector::*somefunc)(CT...), typename NonDeduced::type... Args); + std::vector serialCall(RT (slsDetector::*somefunc)(CT...), + typename NonDeduced::type... Args); + + //Const qualified version should be preferred for calling get methods + template + std::vector serialCall(RT (slsDetector::*somefunc)(CT...) const, + typename NonDeduced::type... Args) const; /** * Loop through the detectors in parallel threads @@ -153,9 +159,9 @@ class multiSlsDetector : public virtual slsDetectorDefs, std::vector parallelCall(RT (slsDetector::*somefunc)(CT...), typename NonDeduced::type... Args); - //Const qualified version + //Const qualified version should be preferred for calling get methods template - std::vector parallelCall(RT (slsDetector::*somefunc)(CT...), + std::vector parallelCall(RT (slsDetector::*somefunc)(CT...) const, typename NonDeduced::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) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index a0e2e6ba9..1fb96a167 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -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) { diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 4cb5e0fa8..e97f048b4 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -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 diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index fe8f05113..bdb8cc41b 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -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);