From a585bf2bb7c3f4c5d6d92c6ea70024c623a0b26f Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 29 Jun 2019 10:30:58 +0200 Subject: [PATCH] add Prepare and Destroy --- knxPython/CMakeLists.txt | 35 +++++++++++++++++++++++++++++++++-- knxPython/CMakeSettings.json | 2 +- knxPython/knxmodule.cpp | 24 ++++++++++++++++++++---- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/knxPython/CMakeLists.txt b/knxPython/CMakeLists.txt index f3ea501..272ee00 100644 --- a/knxPython/CMakeLists.txt +++ b/knxPython/CMakeLists.txt @@ -6,6 +6,37 @@ project(knx) add_subdirectory(pybind11) -pybind11_add_module(knx ../src/knx/address_table_object.cpp ../src/knx/apdu.cpp ../src/knx/application_layer.cpp ../src/knx/application_program_object.cpp ../src/knx/association_table_object.cpp ../src/knx/bau.cpp ../src/knx/bau07B0.cpp ../src/knx/bau57B0.cpp ../src/knx/bau_systemB.cpp ../src/knx/bits.cpp ../src/knx/cemi_frame.cpp ../src/knx/datapoint_types.cpp ../src/knx/data_link_layer.cpp ../src/knx/device_object.cpp ../src/knx/group_object.cpp ../src/knx/group_object_table_object.cpp ../src/knx/interface_object.cpp ../src/knx/ip_data_link_layer.cpp ../src/knx/ip_parameter_object.cpp ../src/knx/memory.cpp ../src/knx/network_layer.cpp ../src/knx/npdu.cpp ../src/knx/platform.cpp ../src/knx/table_object.cpp ../src/knx/tpdu.cpp ../src/knx/tpuart_data_link_layer.cpp ../src/knx/transport_layer.cpp ../src/linux_platform.cpp knxmodule.cpp) - +pybind11_add_module(knx + knxmodule.cpp + ../src/knx/address_table_object.cpp + ../src/knx/apdu.cpp + ../src/knx/application_layer.cpp + ../src/knx/application_program_object.cpp + ../src/knx/association_table_object.cpp + ../src/knx/bau.cpp + ../src/knx/bau07B0.cpp + ../src/knx/bau57B0.cpp + ../src/knx/bau_systemB.cpp + ../src/knx/bits.cpp + ../src/knx/cemi_frame.cpp + ../src/knx/data_link_layer.cpp + ../src/knx/device_object.cpp + ../src/knx/group_object.cpp + ../src/knx/group_object_table_object.cpp + ../src/knx/interface_object.cpp + ../src/knx/ip_data_link_layer.cpp + ../src/knx/ip_parameter_object.cpp + ../src/knx/memory.cpp + ../src/knx/network_layer.cpp + ../src/knx/npdu.cpp + ../src/knx/table_object.cpp + ../src/knx/tpdu.cpp + ../src/knx/tpuart_data_link_layer.cpp + ../src/knx/transport_layer.cpp + ../src/knx/platform.cpp + ../src/linux_platform.cpp + ../src/knx_facade.cpp + ../src/knx/dptconvert.cpp + ../src/knx/knx_value.cpp + ../src/knx/dpt.cpp) include_directories(../src pybind11/include) diff --git a/knxPython/CMakeSettings.json b/knxPython/CMakeSettings.json index 12fad42..9c2d1fa 100644 --- a/knxPython/CMakeSettings.json +++ b/knxPython/CMakeSettings.json @@ -12,7 +12,7 @@ "ctestCommandArgs": "", "inheritEnvironments": [ "linux_x64" ], "wslPath": "${defaultWSLPath}", - "addressSanitizerEnabled": true, + "addressSanitizerEnabled": false, "addressSanitizerRuntimeFlags": "detect_leaks=0", "variables": [] } diff --git a/knxPython/knxmodule.cpp b/knxPython/knxmodule.cpp index 78b4c03..9a3c62f 100644 --- a/knxPython/knxmodule.cpp +++ b/knxPython/knxmodule.cpp @@ -1,6 +1,7 @@ #include #include #include +#include namespace py = pybind11; @@ -11,6 +12,7 @@ namespace py = pybind11; #include #include #include +#include #include "linux_platform.h" #include "knx/bau57B0.h" @@ -31,10 +33,22 @@ static void loop() } static std::thread workerThread; +static std::vector argv; -static void Prepare(int argc, char** argv) +struct StdStringCStrFunctor { - platform = new LinuxPlatform(argc, argv); + const char* operator() (const std::string& str) { return str.c_str(); } +}; + +static void Prepare(std::vector args) +{ + //for(int i = 0; i < args.size(); i++) + // printf("%s\n", args[i].c_str()); + + argv = std::vector(args.size()); + std::transform(args.begin(), args.end(), argv.begin(), StdStringCStrFunctor()); + + platform = new LinuxPlatform(argv.size(), const_cast(argv.data())); bau = new Bau57B0(*platform); } @@ -109,7 +123,9 @@ PYBIND11_MODULE(knx, m) py::bind_vector>(m, "GroupObjectList"); m.def("Start", &Start, "Start knx handling thread."); - m.def("Stop", &Start, "Stop knx handling thread."); + m.def("Stop", &Stop, "Stop knx handling thread."); + m.def("Prepare", &Prepare, "Allocated needed objects."); + m.def("Destroy", &Destroy, "Free object allocated by Prepare."); m.def("ProgramMode", (bool(*)())&ProgramMode, "get programing mode active."); m.def("ProgramMode", (bool(*)(bool))&ProgramMode, "Activate / deactivate programing mode."); m.def("Configured", (bool(*)())&Configured, "get configured status."); @@ -152,4 +168,4 @@ PYBIND11_MODULE(knx, m) go.objectWritten(); }) .def("callBack", (void(GroupObject::*)(GroupObjectUpdatedHandler))&GroupObject::callback); -} \ No newline at end of file +}