From 27d223d1990e80d7c057f7982b1a05b780c3ea89 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 19 Sep 2019 12:12:25 +0200 Subject: [PATCH] testing --- python/CMakeLists.txt | 3 ++ python/scripts/test_virtual.py | 33 +++++++++++++ python/sls_detector/experimental.py | 30 ++++++++++-- python/src/experimental.cpp | 39 +++++++++++----- sample/time.cpp | 46 +++++++++++++++++++ .../mythen3DetectorServer/CMakeLists.txt | 7 ++- 6 files changed, 140 insertions(+), 18 deletions(-) create mode 100644 python/scripts/test_virtual.py create mode 100644 sample/time.cpp diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 93b70120b..ee5a58c7e 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -46,4 +46,7 @@ endforeach(FILE ${PYTHON_FILES}) configure_file( scripts/basic.py ${CMAKE_BINARY_DIR}/basic.py +) +configure_file( scripts/test_virtual.py + ${CMAKE_BINARY_DIR}/test_virtual.py ) \ No newline at end of file diff --git a/python/scripts/test_virtual.py b/python/scripts/test_virtual.py new file mode 100644 index 000000000..a44c26b89 --- /dev/null +++ b/python/scripts/test_virtual.py @@ -0,0 +1,33 @@ +import pytest +import subprocess +import os +import sys +import time +sys.path.append(os.path.join(os.getcwd(), 'bin')) +from sls_detector import ExperimentalDetector + +@pytest.fixture(scope="module") +def virtual_jf_detectors(request): + print('Setting up virtual detectors') + subprocess.run(["killall", "jungfrauDetectorServer_virtual"]) + virtual_jf_detectors = [] + virtual_jf_detectors.append(subprocess.Popen('bin/jungfrauDetectorServer_virtual')) + time.sleep(5) + def fin(): + print("Cleaning up virtual detectors") + subprocess.run(["killall", "jungfrauDetectorServer_virtual"]) + + + + request.addfinalizer(fin) + return virtual_jf_detectors # provide the fixture value + + +def test_hostname(virtual_jf_detectors): + d = ExperimentalDetector() + d.hostname = 'localhost' + assert d.hostname == 'localhost' + +def test_fwversion(virtual_jf_detectors): + d = ExperimentalDetector() + assert d.detectorversion == 0 #Firmware of virtual detector \ No newline at end of file diff --git a/python/sls_detector/experimental.py b/python/sls_detector/experimental.py index 82a591219..7b7614cf6 100755 --- a/python/sls_detector/experimental.py +++ b/python/sls_detector/experimental.py @@ -1,4 +1,4 @@ -from _sls_detector import multiDetectorApi +from _sls_detector import CppDetectorApi from _sls_detector import slsDetectorDefs runStatus = slsDetectorDefs.runStatus @@ -35,20 +35,40 @@ def freeze(cls): @freeze -class ExperimentalDetector(multiDetectorApi): +class ExperimentalDetector(CppDetectorApi): """ This class is the base for detector specific interfaces. Most functions exists in two versions like the getExptime() function that uses the C++ API directly and the simplified exptime property. """ - def __init__(self, multi_id = 0): + + def __init__(self, multi_id=0): """ multi_id refers to the shared memory id of the slsDetectorPackage. Default value is 0. """ super().__init__(multi_id) + # CONFIGURATION + + @property + def hostname(self): + return element_if_equal(self.getHostname()) + + @hostname.setter + def hostname(self, hostnames): + if isinstance(hostnames, str): + hostnames = [hostnames] + if isinstance(hostnames, list): + self.setHostname(hostnames) + else: + raise ValueError("hostname needs to be string or list of strings") + + @property + def detectorversion(self): + return element_if_equal(self.getFirmwareVersion()) + # Acq @property def rx_status(self): @@ -95,7 +115,7 @@ class ExperimentalDetector(multiDetectorApi): """ return self.getAcquiringFlag() - + @busy.setter def busy(self, value): self.setAcquiringFlag(value) @@ -129,7 +149,7 @@ class ExperimentalDetector(multiDetectorApi): @property def fpath(self): return element_if_equal(self.getFilePath()) - + @fpath.setter def fpath(self, path): self.setFilePath(path) diff --git a/python/src/experimental.cpp b/python/src/experimental.cpp index 7f7168876..f4dfce6cb 100644 --- a/python/src/experimental.cpp +++ b/python/src/experimental.cpp @@ -8,25 +8,40 @@ #include "typecaster.h" namespace py = pybind11; void init_experimental(py::module &m) { - // Experimental API to use the multi directly and inherit from to reduce - // code duplication need to investigate how to handle documentation using sls::Detector; using sls::Positions; - py::class_ multiDetectorApi(m, "multiDetectorApi"); - multiDetectorApi + py::class_ CppDetectorApi(m, "CppDetectorApi"); + CppDetectorApi .def(py::init()) + // Configuration + .def("free", &Detector::freeSharedMemory) + .def("freeSharedMemory", &Detector::freeSharedMemory) + .def("loadConfig", &Detector::loadConfig) + .def("loadParameters", &Detector::loadParameters) + .def("getHostname", &Detector::getHostname, py::arg() = Positions{}) + .def("setHostname", &Detector::setHostname) + .def("getShmId", &Detector::getShmId) + .def("getFirmwareVersion", &Detector::getFirmwareVersion, + py::arg() = Positions{}) + .def("getDetectorServerVersion", &Detector::getDetectorServerVersion, + py::arg() = Positions{}) + .def("getSerialNumber", &Detector::getSerialNumber, + py::arg() = Positions{}) + .def("getClientVersion", &Detector::getClientVersion) + .def("getReceiverVersion", &Detector::getReceiverVersion, + py::arg() = Positions{}) + .def("getDetectorType", &Detector::getDetectorType, + py::arg() = Positions{}) + .def("size", &Detector::size) + + // Acq related .def("acquire", &Detector::acquire) .def("clearAcquiringFlag", &Detector::clearAcquiringFlag) .def("getReceiverStatus", &Detector::getReceiverStatus, py::arg() = Positions{}) - // Configuration - .def("free", &Detector::freeSharedMemory) - .def("loadConfig", &Detector::loadConfig) - .def("getHostname", &Detector::getHostname, py::arg() = Positions{}) - // Bits and registers .def("setBit", &Detector::setBit, py::arg(), py::arg(), py::arg() = Positions{}) @@ -42,9 +57,11 @@ void init_experimental(py::module &m) { // File .def("getFileNamePrefix", &Detector::getFileNamePrefix) - .def("setFileNamePrefix", &Detector::setFileNamePrefix, py::arg(),py::arg() = Positions{}) + .def("setFileNamePrefix", &Detector::setFileNamePrefix, py::arg(), + py::arg() = Positions{}) .def("getFilePath", &Detector::getFilePath) - .def("setFilePath", &Detector::setFilePath, py::arg(),py::arg() = Positions{}) + .def("setFilePath", &Detector::setFilePath, py::arg(), + py::arg() = Positions{}) .def("setFileWrite", &Detector::setFileWrite, py::arg(), py::arg() = Positions{}) .def("getFileWrite", &Detector::getFileWrite, py::arg() = Positions{}) diff --git a/sample/time.cpp b/sample/time.cpp new file mode 100644 index 000000000..20e7c4e6e --- /dev/null +++ b/sample/time.cpp @@ -0,0 +1,46 @@ +#include +#include +#include +#include + +#include "Result.h" +#include "Detector.h" +#include "container_utils.h" +#include "ToString.h" +#include + +std::chrono::nanoseconds to_nano(double val, const std::string &unit) { + if (unit == "us") + return std::chrono::duration_cast( + std::chrono::duration(val)); + else if (unit == "ms") + return std::chrono::duration_cast( + std::chrono::duration(val)); + else if (unit == "s") + return std::chrono::duration_cast( + std::chrono::duration(val)); +} + +int main() { + + // std::cout << "5.8 us is " << to_nano(5.8, "us").count() << " ns\n"; + // std::cout << "7 ms is " << to_nano(7, "ms").count() << " ns\n"; + // std::cout << "3.123 s is " << to_nano(3.123, "s").count() << " ns\n"; + + // sls::Result res{1,0,6,4,0,4}; + + + // std::unique_ptr + auto d = sls::make_unique(0); + + std::cout << d->getHostname() << "\n"; + + auto s= sls::ToString(d->getHostname()); + std::cout << s << "\n"; + + std::string str; + for (const auto& s : d->getHostname()) + str += s; + std::cout << str << "\n"; + +} \ No newline at end of file diff --git a/slsDetectorServers/mythen3DetectorServer/CMakeLists.txt b/slsDetectorServers/mythen3DetectorServer/CMakeLists.txt index de29c1221..faa66a8dc 100644 --- a/slsDetectorServers/mythen3DetectorServer/CMakeLists.txt +++ b/slsDetectorServers/mythen3DetectorServer/CMakeLists.txt @@ -3,8 +3,11 @@ add_executable(mythen3DetectorServer_virtual ../slsDetectorServer/src/slsDetectorServer.c ../slsDetectorServer/src/slsDetectorServer_funcs.c ../slsDetectorServer/src/communication_funcs.c - ../slsDetectorServer/src/blackfin.c - ../slsDetectorServer/src/communication_funcs_UDP.c + # ../slsDetectorServer/src/blackfin.c + ../slsDetectorServer/src/communication_funcs_UDP.c + ../slsDetectorServer/src/DAC6571.c + ../slsDetectorServer/src/common.c + ../slsDetectorServer/src/nios.c ) include_directories(