first real working version of knxPython

This commit is contained in:
Thomas Kunze 2018-12-22 14:53:31 +01:00
parent 405aab0e5e
commit c44d22f6eb
14 changed files with 191 additions and 249 deletions

View File

@ -70,7 +70,7 @@ void setup()
knx.readMemory();
// register callback for reset GO
goReset.updateHandler = resetCallback;
goReset.callback(resetCallback);
// print values of parameters if device is already configured
if (knx.configured())

View File

@ -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)

View File

@ -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)

View File

@ -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>

View File

@ -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) {
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);
}

View File

@ -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")

View File

@ -83,8 +83,9 @@ void BauSystemB::updateGroupObject(GroupObject & go, uint8_t * data, uint8_t len
memcpy(goData, data, length);
go.commFlag(cfUpdate);
if (go.updateHandler)
go.updateHandler(go);
GroupObjectUpdatedHandler handler = go.callback();
if (handler)
handler(go);
}
void BauSystemB::readMemory()

View File

@ -43,7 +43,7 @@ private:
uint8_t _routingCount;
uint8_t _prgMode;
uint16_t _ownAddress;
uint16_t _manufacturerId;
uint16_t _manufacturerId = 0xfa; //Default to KNXA
uint32_t _bauNumber;
char _orderNumber[10];
uint8_t _hardwareType[6];

View File

@ -7,10 +7,11 @@
GroupObject::GroupObject(uint8_t size)
{
_data = new uint8_t[size];
memset(_data, 0, size);
_commFlag = Ok;
_table = 0;
_dataLength = size;
updateHandler = 0;
_updateHandler = 0;
}
GroupObject::GroupObject(const GroupObject& other)
@ -20,7 +21,7 @@ GroupObject::GroupObject(const GroupObject& other)
_table = other._table;
_dataLength = other._dataLength;
_asap = other._asap;
updateHandler = other.updateHandler;
_updateHandler = other._updateHandler;
memcpy(_data, other._data, _dataLength);
}
@ -252,3 +253,15 @@ void GroupObject::objectWrite(float value)
uint32_t tmp = value * 100;
objectWriteFloatDpt9(tmp);
}
void GroupObject::callback(GroupObjectUpdatedHandler handler)
{
_updateHandler = handler;
}
GroupObjectUpdatedHandler GroupObject::callback()
{
return _updateHandler;
}

View File

@ -4,6 +4,7 @@
#include <stdint.h>
#include "knx_types.h"
class GroupObjectTableObject;
enum ComFlag
@ -17,7 +18,14 @@ enum ComFlag
};
class GroupObject;
typedef void (*GroupObjectUpdatedHandler)(GroupObject& go);
#ifdef __linux__
#include <functional>
typedef std::function<void(GroupObject&)> GroupObjectUpdatedHandler;
#else
typedef void(*GroupObjectUpdatedHandler)(GroupObject& go);
#endif
class GroupObject
{
@ -109,8 +117,10 @@ public:
size_t sizeInTelegram();
uint8_t* valueRef();
uint16_t asap();
GroupObjectUpdatedHandler updateHandler;
void callback(GroupObjectUpdatedHandler hanlder);
GroupObjectUpdatedHandler callback();
private:
GroupObjectUpdatedHandler _updateHandler;
size_t goSize();
uint16_t _asap;
ComFlag _commFlag;

View File

@ -218,7 +218,7 @@ void LinuxPlatform::doMemoryMapping()
_fd = open("flash.bin", O_RDWR | O_CREAT, S_IRWXU | S_IRGRP | S_IROTH);
if (_fd < 0)
{
perror("Error in file opening");
puts("Error in file opening");
//exit(-1);
}
@ -226,7 +226,7 @@ void LinuxPlatform::doMemoryMapping()
uint32_t ret = fstat(_fd, &st);
if (ret < 0)
{
perror("Error in fstat");
puts("Error in fstat");
//exit(-1);
}
@ -235,7 +235,7 @@ void LinuxPlatform::doMemoryMapping()
{
if (ftruncate(_fd, FLASHSIZE) != 0)
{
perror("Error extending file");
puts("Error extending file");
//exit(-1);
}
len_file = FLASHSIZE;
@ -250,7 +250,7 @@ void LinuxPlatform::doMemoryMapping()
if (addr == MAP_FAILED)
{
perror("Error in mmap");
puts("Error in mmap");
//exit(-1);
}
_mappedFile = addr;
@ -308,9 +308,10 @@ uint8_t* LinuxPlatform::allocMemory(size_t size)
throw std::overflow_error("MAX_MEM was to small");
return addr;
}
#endif
void LinuxPlatform::freeMemory(uint8_t* ptr)
{
/* do nothing. Memory is freed on restart()*/
}
#endif

View File

@ -75,18 +75,10 @@ void setup()
srand((unsigned int)time(NULL));
bau.readMemory();
uint8_t hwType[] = { 0x0, 0x0, 0x8, 0x0, 0x0, 0x2 };
GroupObjectTableObject& got(bau.groupObjectTable());
got.groupObjects(groupObjects, 4);
DeviceObject& devObj(bau.deviceObject());
devObj.manufacturerId(0xfa);
devObj.bauNumber(0xdeadbeef);
devObj.orderNumber("Coolstuff");
devObj.hardwareType(hwType);
devObj.version(0x0020);
RESET.updateHandler = resetCallback;
RESET.callback(resetCallback);
if (bau.deviceObject().induvidualAddress() == 0)
bau.deviceObject().progMode(true);

View File

@ -171,116 +171,6 @@
</CodeAnalyzerSettings>
</CodeSense>
<Configurations>
<VisualGDBConfiguration>
<PlatformName>NodeMCU 1 0 (ESP-12E Module)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
<AdditionalStartupCommands>
<GDBPreStartupCommands />
<GDBStartupCommands />
<GDBFinalizationCommands />
</AdditionalStartupCommands>
<AdditionalGDBSettings>
<Features>
<DisableAutoDetection>false</DisableAutoDetection>
<UseFrameParameter>false</UseFrameParameter>
<SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
<ListLocalsSupported>false</ListLocalsSupported>
<ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
<ThreadInfoSupported>false</ThreadInfoSupported>
<PendingBreakpointsSupported>false</PendingBreakpointsSupported>
<SupportTargetCommand>false</SupportTargetCommand>
<ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
</Features>
<EnableSmartStepping>false</EnableSmartStepping>
<FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
<ForceSingleThreadedMode>false</ForceSingleThreadedMode>
<UseAppleExtensions>false</UseAppleExtensions>
<CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
<MakeLogFile>false</MakeLogFile>
<IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
<UseRelativePathsOnly>false</UseRelativePathsOnly>
<ExitAction>None</ExitAction>
<DisableDisassembly>false</DisableDisassembly>
<ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
<StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
<ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
<DisableSignals>false</DisableSignals>
<EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
<EnableNonStopMode>false</EnableNonStopMode>
<MaxBreakpointLimit>0</MaxBreakpointLimit>
</AdditionalGDBSettings>
<DebugMethod>
<ID>gdbstub</ID>
<Configuration xsi:type="com.visualgdb.edp.espxx.settings.gdbstub">
<StubBaudRate>74880</StubBaudRate>
<BootloaderBaudRate>115200</BootloaderBaudRate>
<BootloaderResetDelay>50</BootloaderResetDelay>
<BootloaderActivationSequence>!DTR;RTS;SLEEP;DTR;!RTS;SLEEP;!DTR;SLEEP</BootloaderActivationSequence>
<ProgramMode>Auto</ProgramMode>
<SuppressResetConfirmation>false</SuppressResetConfirmation>
<FLASHSettings>
<Size>size4M</Size>
<Frequency>freq40M</Frequency>
<Mode>QIO</Mode>
</FLASHSettings>
</Configuration>
</DebugMethod>
<AutoDetectRTOS>true</AutoDetectRTOS>
<SemihostingSupport>Disabled</SemihostingSupport>
<SemihostingPollingDelay>0</SemihostingPollingDelay>
<StepIntoEntryPoint>false</StepIntoEntryPoint>
<ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
<ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
<StopAtEntryPoint>false</StopAtEntryPoint>
<EnableVirtualHalts>false</EnableVirtualHalts>
<DynamicAnalysisSettings />
<EndOfStackSymbol>_estack</EndOfStackSymbol>
<TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
<KeepConsoleAfterExit>false</KeepConsoleAfterExit>
<CheckInterfaceDrivers>true</CheckInterfaceDrivers>
</DebugSettingsOverride>
<BuildSettingsExtension xsi:type="com.visualgdb.build.external.arduino.extension">
<BoardID>esp8266:esp8266:nodemcuv2</BoardID>
<COMPort>COM7</COMPort>
<Properties>
<Entries>
<KeyValue>
<Key>CpuFrequency</Key>
<Value>80</Value>
</KeyValue>
<KeyValue>
<Key>VTable</Key>
<Value>flash</Value>
</KeyValue>
<KeyValue>
<Key>FlashSize</Key>
<Value>4M1M</Value>
</KeyValue>
<KeyValue>
<Key>LwIPVariant</Key>
<Value>v2mss536</Value>
</KeyValue>
<KeyValue>
<Key>Debug</Key>
<Value>Disabled</Value>
</KeyValue>
<KeyValue>
<Key>DebugLevel</Key>
<Value>None____</Value>
</KeyValue>
<KeyValue>
<Key>FlashErase</Key>
<Value>none</Value>
</KeyValue>
<KeyValue>
<Key>UploadSpeed</Key>
<Value>115200</Value>
</KeyValue>
</Entries>
</Properties>
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
<VisualGDBConfiguration>
<PlatformName>Arduino Genuino Zero (Native USB Port)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
@ -338,6 +228,100 @@
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
<VisualGDBConfiguration>
<PlatformName>NodeMCU 1 0 (ESP-12E Module)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
<AdditionalStartupCommands />
<AdditionalGDBSettings>
<Features>
<DisableAutoDetection>false</DisableAutoDetection>
<UseFrameParameter>false</UseFrameParameter>
<SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
<ListLocalsSupported>false</ListLocalsSupported>
<ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
<ThreadInfoSupported>false</ThreadInfoSupported>
<PendingBreakpointsSupported>false</PendingBreakpointsSupported>
<SupportTargetCommand>false</SupportTargetCommand>
<ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
</Features>
<EnableSmartStepping>false</EnableSmartStepping>
<FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
<ForceSingleThreadedMode>false</ForceSingleThreadedMode>
<UseAppleExtensions>false</UseAppleExtensions>
<CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
<MakeLogFile>false</MakeLogFile>
<IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
<UseRelativePathsOnly>false</UseRelativePathsOnly>
<ExitAction>None</ExitAction>
<DisableDisassembly>false</DisableDisassembly>
<ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
<StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
<ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
<DisableSignals>false</DisableSignals>
<EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
<EnableNonStopMode>false</EnableNonStopMode>
<MaxBreakpointLimit>0</MaxBreakpointLimit>
</AdditionalGDBSettings>
<DebugMethod />
<AutoDetectRTOS>true</AutoDetectRTOS>
<SemihostingSupport>Auto</SemihostingSupport>
<SemihostingPollingDelay>0</SemihostingPollingDelay>
<StepIntoEntryPoint>false</StepIntoEntryPoint>
<ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
<ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
<StopAtEntryPoint>false</StopAtEntryPoint>
<EnableVirtualHalts>false</EnableVirtualHalts>
<DynamicAnalysisSettings />
<EndOfStackSymbol>_estack</EndOfStackSymbol>
<TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
<KeepConsoleAfterExit>false</KeepConsoleAfterExit>
<CheckInterfaceDrivers>true</CheckInterfaceDrivers>
</DebugSettingsOverride>
<BuildSettingsExtension xsi:type="com.visualgdb.build.external.arduino.extension">
<BoardID>esp8266:esp8266:nodemcuv2</BoardID>
<Properties>
<Entries>
<KeyValue>
<Key>xtal</Key>
<Value>80</Value>
</KeyValue>
<KeyValue>
<Key>vt</Key>
<Value>flash</Value>
</KeyValue>
<KeyValue>
<Key>exception</Key>
<Value>enabled</Value>
</KeyValue>
<KeyValue>
<Key>eesz</Key>
<Value>4M</Value>
</KeyValue>
<KeyValue>
<Key>ip</Key>
<Value>lm2f</Value>
</KeyValue>
<KeyValue>
<Key>dbg</Key>
<Value>Disabled</Value>
</KeyValue>
<KeyValue>
<Key>lvl</Key>
<Value>None____</Value>
</KeyValue>
<KeyValue>
<Key>wipe</Key>
<Value>none</Value>
</KeyValue>
<KeyValue>
<Key>baud</Key>
<Value>115200</Value>
</KeyValue>
</Entries>
</Properties>
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
</Configurations>
<ProgramArgumentsSuggestions />
</VisualGDBProjectSettings2>

View File

@ -105,36 +105,36 @@ Global
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|NodeMCU 1 0 (ESP-12E Module).Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x64.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x86.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x64.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x86.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x64.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x64.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x64.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|VisualGDB.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x64.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x86.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x64.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x64.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x64.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)