mirror of
https://github.com/thelsing/knx.git
synced 2026-02-23 13:50:35 +01:00
first real working version of knxPython
This commit is contained in:
@@ -8,4 +8,4 @@ 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)
|
||||
|
||||
include_directories(../src)
|
||||
include_directories(../src pybind11/include)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
cmake_minimum_required(VERSION 2.7)
|
||||
project(knx)
|
||||
|
||||
set(LIBRARIES_FROM_REFERENCES "")
|
||||
add_library(knx SHARED ../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/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)
|
||||
target_link_libraries(knx python3.5m "${LIBRARIES_FROM_REFERENCES}")
|
||||
include_directories(/usr/include/python3.5m ../src)
|
||||
SET_TARGET_PROPERTIES(knx PROPERTIES PREFIX "")
|
||||
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)
|
||||
|
||||
include_directories(../src)
|
||||
@@ -44,7 +44,7 @@
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<NMakeIncludeSearchPath>$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\python3.5dm;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\python3.5;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\c++\6;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\x86_64-linux-gnu\c++\6;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\c++\6\backward;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\lib\gcc\x86_64-linux-gnu\6\include;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\local\include;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\lib\gcc\x86_64-linux-gnu\6\include-fixed;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\x86_64-linux-gnu;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include;..\..\src;..\pybind11\include;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
|
||||
<NMakeIncludeSearchPath>$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\python3.5dm;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\python3.5;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\c++\6;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\x86_64-linux-gnu\c++\6;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\c++\6\backward;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\lib\gcc\x86_64-linux-gnu\6\include;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\local\include;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\lib\gcc\x86_64-linux-gnu\6\include-fixed;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include\x86_64-linux-gnu;$(LOCALAPPDATA)\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs\usr\include;..\..\src;..\pybind11\include;pybind11\include;..\src;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
|
||||
<NMakeForcedIncludes>$(ProjectDir)\gcc_Debug.h;$(VISUALGDB_DIR)\gcc_compat.h;$(NMakeForcedIncludes)</NMakeForcedIncludes>
|
||||
<NMakeBuildCommandLine>"$(VISUALGDB_DIR)\VisualGDB.exe" /build "$(ProjectPath)" "/solution:$(SolutionPath)" "/config:$(Configuration)" "/platform:$(Platform)"</NMakeBuildCommandLine>
|
||||
<NMakeCleanCommandLine>"$(VISUALGDB_DIR)\VisualGDB.exe" /clean "$(ProjectPath)" "/solution:$(SolutionPath)" "/config:$(Configuration)" "/platform:$(Platform)"</NMakeCleanCommandLine>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <pybind11/pybind11.h>
|
||||
#include <pybind11/stl_bind.h>
|
||||
#include <pybind11/functional.h>
|
||||
|
||||
namespace py = pybind11;
|
||||
|
||||
@@ -15,96 +16,14 @@ namespace py = pybind11;
|
||||
#include "knx/bau57B0.h"
|
||||
#include "knx/group_object_table_object.h"
|
||||
|
||||
|
||||
LinuxPlatform platform;
|
||||
Bau57B0 bau(platform);
|
||||
|
||||
#if 1 // this code will go to python later
|
||||
//float currentValue = 0;
|
||||
//float maxValue = 0;
|
||||
//float minValue = RAND_MAX;
|
||||
//long lastsend = 0;
|
||||
//
|
||||
//GroupObject groupObjects[]
|
||||
//{
|
||||
// GroupObject(2),
|
||||
// GroupObject(2),
|
||||
// GroupObject(2),
|
||||
// GroupObject(1)
|
||||
//}
|
||||
//;
|
||||
//#define CURR groupObjects[0]
|
||||
//#define MAX groupObjects[1]
|
||||
//#define MIN groupObjects[2]
|
||||
//#define RESET groupObjects[3]
|
||||
//
|
||||
//void measureTemp()
|
||||
//{
|
||||
// long now = platform.millis();
|
||||
// if ((now - lastsend) < 2000)
|
||||
// return;
|
||||
//
|
||||
// lastsend = now;
|
||||
// int r = rand();
|
||||
// currentValue = (r * 1.0) / (RAND_MAX * 1.0);
|
||||
// currentValue *= 100 * 100;
|
||||
//
|
||||
// CURR.objectWrite(currentValue);
|
||||
//
|
||||
// if (currentValue > maxValue)
|
||||
// {
|
||||
// maxValue = currentValue;
|
||||
// MAX.objectWrite(maxValue);
|
||||
// }
|
||||
//
|
||||
// if (currentValue < minValue)
|
||||
// {
|
||||
// minValue = currentValue;
|
||||
// MIN.objectWrite(minValue);
|
||||
// }
|
||||
//}
|
||||
|
||||
//void resetCallback(GroupObject& go)
|
||||
//{
|
||||
// if (go.objectReadBool())
|
||||
// {
|
||||
// maxValue = 0;
|
||||
// minValue = 10000;
|
||||
// }
|
||||
//}
|
||||
|
||||
//void appLoop()
|
||||
//{
|
||||
// if (!bau.configured())
|
||||
// return;
|
||||
//
|
||||
// measureTemp();
|
||||
//}
|
||||
|
||||
void setup()
|
||||
{
|
||||
srand((unsigned int)time(NULL));
|
||||
bau.readMemory();
|
||||
|
||||
// GroupObjectTableObject& got(bau.groupObjectTable());
|
||||
// got.groupObjects(groupObjects, 4);
|
||||
|
||||
DeviceObject& devObj(bau.deviceObject());
|
||||
devObj.manufacturerId(0xfa);
|
||||
|
||||
// RESET.updateHandler = resetCallback;
|
||||
|
||||
bau.enabled(true);
|
||||
}
|
||||
#endif
|
||||
|
||||
bool threadEnabled = false;
|
||||
static void loop()
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
bau.loop();
|
||||
//appLoop();
|
||||
platform.mdelay(100);
|
||||
}
|
||||
}
|
||||
@@ -117,7 +36,10 @@ static void Start()
|
||||
if (started)
|
||||
return;
|
||||
|
||||
setup();
|
||||
started = true;
|
||||
|
||||
bau.readMemory();
|
||||
bau.enabled(true);
|
||||
|
||||
workerThread = std::thread(loop);
|
||||
workerThread.detach();
|
||||
@@ -142,17 +64,32 @@ static void RegisterGroupObjects(std::vector<GroupObject>& gos)
|
||||
|
||||
PYBIND11_MAKE_OPAQUE(std::vector<GroupObject>);
|
||||
|
||||
PYBIND11_MODULE(knx, m) {
|
||||
m.doc() = "wrapper for knx device lib"; // optional module docstring
|
||||
PYBIND11_MODULE(knx, m)
|
||||
{
|
||||
m.doc() = "wrapper for knx device lib"; // optional module docstring
|
||||
|
||||
py::bind_vector<std::vector<GroupObject>>(m, "GroupObjectList");
|
||||
|
||||
m.def("Start", &Start, "Start knx handling thread.");
|
||||
m.def("ProgramMode", (bool (*)())&ProgramMode, "get programing mode active.");
|
||||
m.def("ProgramMode", (bool(*)())&ProgramMode, "get programing mode active.");
|
||||
m.def("ProgramMode", (bool(*)(bool))&ProgramMode, "Activate / deactivate programing mode.");
|
||||
m.def("RegisterGroupObjects", &RegisterGroupObjects);
|
||||
|
||||
py::class_<GroupObject>(m, "GroupObject")
|
||||
py::class_<GroupObject>(m, "GroupObject", py::dynamic_attr())
|
||||
.def(py::init<uint8_t>())
|
||||
.def("objectWrite", (void(GroupObject::*)(float))&GroupObject::objectWrite);
|
||||
.def("objectWrite", (void(GroupObject::*)(float))&GroupObject::objectWrite)
|
||||
.def("asap", &GroupObject::asap)
|
||||
.def("size", &GroupObject::valueSize)
|
||||
.def_property("value",
|
||||
[](GroupObject& go) { return py::bytes((const char*)go.valueRef(), go.valueSize()); },
|
||||
[](GroupObject& go, py::bytes bytesValue)
|
||||
{
|
||||
const auto value = static_cast<std::string>(bytesValue);
|
||||
if (value.length() != go.valueSize())
|
||||
throw std::length_error("bytesValue");
|
||||
|
||||
auto valueRef = go.valueRef();
|
||||
memcpy(valueRef, value.c_str(), go.valueSize());
|
||||
})
|
||||
.def("callBack", (void(GroupObject::*)(GroupObjectUpdatedHandler))&GroupObject::callback);
|
||||
}
|
||||
@@ -2,6 +2,9 @@ import knx
|
||||
import time
|
||||
import sys
|
||||
|
||||
def updated(g1):
|
||||
print(g1.value)
|
||||
|
||||
print("start")
|
||||
gos = knx.GroupObjectList()
|
||||
gos.append(knx.GroupObject(2))
|
||||
@@ -9,6 +12,11 @@ gos.append(knx.GroupObject(2))
|
||||
gos.append(knx.GroupObject(2))
|
||||
gos.append(knx.GroupObject(1))
|
||||
curr = gos[0]
|
||||
min = gos[1]
|
||||
max = gos[2]
|
||||
reset = gos[3]
|
||||
reset.callBack(updated)
|
||||
|
||||
knx.RegisterGroupObjects(gos)
|
||||
knx.Start()
|
||||
while True:
|
||||
@@ -16,15 +24,11 @@ while True:
|
||||
cmd = sys.stdin.read(1)
|
||||
if cmd == 'q':
|
||||
break
|
||||
elif cmd == 's':
|
||||
print("start knx")
|
||||
name = knx.Start()
|
||||
elif cmd == 'p':
|
||||
currentMode = knx.ProgramMode(not knx.ProgramMode())
|
||||
print("set programming mode to " + str(currentMode))
|
||||
elif cmd == 'w':
|
||||
cmd = sys.stdin.read(4)
|
||||
print(cmd)
|
||||
value = float(cmd)
|
||||
curr.objectWrite(value)
|
||||
print("wrote " + str(value) + " to curr")
|
||||
|
||||
Reference in New Issue
Block a user