From 89047447a68387260c026e56856da5d1496a64e9 Mon Sep 17 00:00:00 2001 From: Kyle Schwarz Date: Mon, 10 Mar 2025 10:50:25 -0400 Subject: [PATCH] Bindings: Python: Add DoIP Ethernet Activation --- bindings/python/CMakeLists.txt | 1 + bindings/python/icsneopy/communication/io.cpp | 19 +++++++++++ bindings/python/icsneopy/device/device.cpp | 2 ++ bindings/python/icsneopy/icsneocpp.cpp | 2 ++ docs/icsneopy/examples.rst | 33 +++++++++++++++++++ 5 files changed, 57 insertions(+) create mode 100644 bindings/python/icsneopy/communication/io.cpp diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index 4d9da1e..11b1d44 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -21,6 +21,7 @@ pybind11_add_module(icsneopy icsneopy/api/version.cpp icsneopy/device/devicetype.cpp icsneopy/communication/network.cpp + icsneopy/communication/io.cpp icsneopy/communication/message/message.cpp icsneopy/communication/message/canmessage.cpp icsneopy/communication/message/canerrormessage.cpp diff --git a/bindings/python/icsneopy/communication/io.cpp b/bindings/python/icsneopy/communication/io.cpp new file mode 100644 index 0000000..341476a --- /dev/null +++ b/bindings/python/icsneopy/communication/io.cpp @@ -0,0 +1,19 @@ +#include +#include +#include + +#include "icsneo/communication/io.h" + +namespace icsneo { + +void init_io(pybind11::module_& m) { + pybind11::enum_(m, "IO") + .value("EthernetActivation", IO::EthernetActivation) + .value("USBHostPower", IO::USBHostPower) + .value("BackupPowerEnabled", IO::BackupPowerEnabled) + .value("BackupPowerGood", IO::BackupPowerGood) + .value("Misc", IO::Misc) + .value("EMisc", IO::EMisc); +} + +} // namespace icsneo diff --git a/bindings/python/icsneopy/device/device.cpp b/bindings/python/icsneopy/device/device.cpp index ebb99b3..897a313 100644 --- a/bindings/python/icsneopy/device/device.cpp +++ b/bindings/python/icsneopy/device/device.cpp @@ -19,6 +19,7 @@ void init_device(pybind11::module_& m) { .def("disable_message_polling", &Device::disableMessagePolling, pybind11::call_guard()) .def("enable_message_polling", &Device::enableMessagePolling, pybind11::call_guard()) .def("get_current_message_count", &Device::getCurrentMessageCount) + .def("get_digital_io", &Device::getDigitalIO, pybind11::arg("type"), pybind11::arg("number"), pybind11::call_guard()) .def("get_gptp_status", &Device::getGPTPStatus, pybind11::arg("timeout") = std::chrono::milliseconds(100), pybind11::call_guard()) .def("get_messages", [](Device& device) { return device.getMessages(); }, pybind11::call_guard()) .def("get_polling_message_limit", &Device::getPollingMessageLimit) @@ -42,6 +43,7 @@ void init_device(pybind11::module_& m) { .def("remove_message_callback", &Device::removeMessageCallback, pybind11::call_guard()) .def("request_tc10_sleep", &Device::requestTC10Sleep, pybind11::call_guard()) .def("request_tc10_wake", &Device::requestTC10Wake, pybind11::call_guard()) + .def("set_digital_io", pybind11::overload_cast(&Device::setDigitalIO), pybind11::arg("type"), pybind11::arg("number"), pybind11::arg("value"), pybind11::call_guard()) .def("set_polling_message_limit", &Device::setPollingMessageLimit) .def("set_rtc", &Device::setRTC, pybind11::call_guard()) .def("start_script", &Device::startScript, pybind11::call_guard()) diff --git a/bindings/python/icsneopy/icsneocpp.cpp b/bindings/python/icsneopy/icsneocpp.cpp index 8acf5cd..6471d04 100644 --- a/bindings/python/icsneopy/icsneocpp.cpp +++ b/bindings/python/icsneopy/icsneocpp.cpp @@ -10,6 +10,7 @@ void init_event(pybind11::module_&); void init_eventcallback(pybind11::module_&); void init_eventmanager(pybind11::module_&); void init_network(pybind11::module_&); +void init_io(pybind11::module_&); void init_devicetype(pybind11::module_&); void init_message(pybind11::module_&); void init_canmessage(pybind11::module_&); @@ -39,6 +40,7 @@ PYBIND11_MODULE(icsneopy, m) { init_version(m); init_devicetype(m); init_network(m); + init_io(m); init_message(m); init_canmessage(m); init_canerrormessage(m); diff --git a/docs/icsneopy/examples.rst b/docs/icsneopy/examples.rst index b1ed8f5..8ed4c1d 100644 --- a/docs/icsneopy/examples.rst +++ b/docs/icsneopy/examples.rst @@ -128,3 +128,36 @@ TC10 print(f"post wake status: wake: {status.wakeStatus}, sleep: {status.sleepStatus}") else: print(f"{device} does not support TC10") + +DoIP Ethernet Activation +======================== + +.. code-block:: python + + import icsneopy + import time + + devs = icsneopy.find_all_devices() + + dev = devs[0] + + dev.open() + + # the device must be online for digital I/O + dev.go_online() + + print(f"initial state: {dev.get_digital_io(icsneopy.IO.EthernetActivation, 1)}") + + dev.set_digital_io(icsneopy.IO.EthernetActivation, 1, True) + + print(f"after setting to true: {dev.get_digital_io(icsneopy.IO.EthernetActivation, 1)}") + + # allow for observing the change + time.sleep(2) + + dev.set_digital_io(icsneopy.IO.EthernetActivation, 1, False) + + print(f"after setting to false: {dev.get_digital_io(icsneopy.IO.EthernetActivation, 1)}") + + # allow for observing the change + time.sleep(2)