From 174e29372c7c50deb85fd4ac92f1c8103c00f9dc Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 9 May 2019 20:52:04 +0200 Subject: [PATCH] make GOT completely dynamic from ETS. GOs are now only available if device was programmed via ETS --- examples/knx-bme680/knx-bme680.ino | 41 ++---- examples/knx-demo/knx-demo.ino | 24 +-- examples/knx-sonoffS20/knx-sonoffS20.ino | 30 ++-- knxPython/knxmodule.cpp | 10 +- src/esp_platform.cpp | 163 +++++++++++++++++++++ src/knx/apdu.cpp | 14 +- src/knx/bits.cpp | 178 +---------------------- src/knx/bits.h | 39 ++--- src/knx/data_link_layer.cpp | 2 +- src/knx/group_object.cpp | 10 +- src/knx/group_object.h | 2 +- src/knx/group_object_table_object.cpp | 41 ++++-- src/knx/group_object_table_object.h | 6 +- src/knx/tpuart_data_link_layer.cpp | 46 +++--- src/knx_facade.cpp | 11 +- src/knx_facade.h | 2 +- src/linux_platform.cpp | 164 +++++++++++++++++++++ src/main.cpp | 21 +-- src/samd_platform.cpp | 136 ++++++++++++++++- visualstudio/knx.sln | 45 ++++++ 20 files changed, 643 insertions(+), 342 deletions(-) diff --git a/examples/knx-bme680/knx-bme680.ino b/examples/knx-bme680/knx-bme680.ino index 6b3ef71..5ff5b52 100644 --- a/examples/knx-bme680/knx-bme680.ino +++ b/examples/knx-bme680/knx-bme680.ino @@ -2,33 +2,18 @@ #include #include -// declare array of all groupobjects with their sizes in byte -GroupObject groupObjects[] -{ - GroupObject(2), - GroupObject(2), - GroupObject(2), - GroupObject(2), - GroupObject(2), - GroupObject(1), - GroupObject(2), - GroupObject(2), - GroupObject(1), - GroupObject(2) -} -; // create named references for easy access to group objects -GroupObject& goRawTemperature = groupObjects[0]; -GroupObject& goPressure = groupObjects[1]; -GroupObject& goRawHumidity = groupObjects[2]; -GroupObject& goGasResistance = groupObjects[3]; -GroupObject& goIaqEstimate = groupObjects[4]; -GroupObject& goIaqAccurace = groupObjects[5]; -GroupObject& goTemperature = groupObjects[6]; -GroupObject& goHumidity = groupObjects[7]; -GroupObject& goTriggerSample = groupObjects[8]; -GroupObject& goCo2Ppm = groupObjects[9]; +#define goRawTemperature knx.getGroupObject(0) +#define goPressure knx.getGroupObject(1) +#define goRawHumidity knx.getGroupObject(2) +#define goGasResistance knx.getGroupObject(3) +#define goIaqEstimate knx.getGroupObject(4) +#define goIaqAccurace knx.getGroupObject(5) +#define goTemperature knx.getGroupObject(6) +#define goHumidity knx.getGroupObject(7) +#define goTriggerSample knx.getGroupObject(8) +#define goCo2Ppm knx.getGroupObject(9) #define STATE_SAVE_PERIOD UINT32_C(360 * 60 * 1000) // 360 minutes - 4 times a day @@ -62,14 +47,12 @@ void setup(void) WiFiManager wifiManager; wifiManager.autoConnect("knx-bme680"); - // register group objects - knx.registerGroupObjects(groupObjects, 10); - // read adress table, association table, groupobject table and parameters from eeprom knx.readMemory(); // register callback for reset GO - goTriggerSample.callback(triggerCallback); + if(knx.configured()) + goTriggerSample.callback(triggerCallback); iaqSensor.begin(BME680_I2C_ADDR_SECONDARY, Wire); diff --git a/examples/knx-demo/knx-demo.ino b/examples/knx-demo/knx-demo.ino index 8786799..d29688f 100644 --- a/examples/knx-demo/knx-demo.ino +++ b/examples/knx-demo/knx-demo.ino @@ -1,19 +1,11 @@ #include -// declare array of all groupobjects with their sizes in byte -GroupObject groupObjects[] -{ - GroupObject(2), - GroupObject(2), - GroupObject(2), - GroupObject(1) -}; // create named references for easy access to group objects -GroupObject& goCurrent = groupObjects[0]; -GroupObject& goMax = groupObjects[1]; -GroupObject& goMin = groupObjects[2]; -GroupObject& goReset = groupObjects[3]; +#define goCurrent knx.getGroupObject(0) +#define goMax knx.getGroupObject(1) +#define goMin knx.getGroupObject(2) +#define goReset knx.getGroupObject(3) float currentValue = 0; float maxValue = 0; @@ -64,17 +56,15 @@ void setup() randomSeed(millis()); - // register group objects - knx.registerGroupObjects(groupObjects, 4); // read adress table, association table, groupobject table and parameters from eeprom knx.readMemory(); - // register callback for reset GO - goReset.callback(resetCallback); - // print values of parameters if device is already configured if (knx.configured()) { + // register callback for reset GO + goReset.callback(resetCallback); + SerialDBG.print("Timeout: "); SerialDBG.println(knx.paramByte(0)); SerialDBG.print("Zykl. senden: "); SerialDBG.println(knx.paramByte(1)); SerialDBG.print("Min/Max senden: "); SerialDBG.println(knx.paramByte(2)); diff --git a/examples/knx-sonoffS20/knx-sonoffS20.ino b/examples/knx-sonoffS20/knx-sonoffS20.ino index 994469d..be90bbe 100644 --- a/examples/knx-sonoffS20/knx-sonoffS20.ino +++ b/examples/knx-sonoffS20/knx-sonoffS20.ino @@ -3,19 +3,10 @@ #define RELAYPIN 12 -// declare array of all groupobjects with their sizes in byte -GroupObject groupObjects[] -{ - GroupObject(1), - GroupObject(1), - GroupObject(1) -}; - // create named references for easy access to group objects -GroupObject& goSwitch = groupObjects[0]; -GroupObject& goBlock = groupObjects[1]; -GroupObject& goStatus = groupObjects[2]; - +#define goSwitch knx.getGroupObject(0) +#define goBlock knx.getGroupObject(1) +#define goStatus knx.getGroupObject(2) // callback from switch-GO @@ -33,17 +24,18 @@ void setup() { SerialDBG.begin(115200); - WiFiManager wifiManager; + WiFiManager wifiManager; wifiManager.autoConnect("knx-sonoffS20"); - // register group objects - knx.registerGroupObjects(groupObjects, 3); // read adress table, association table, groupobject table and parameters from eeprom knx.readMemory(); - // register callback for reset GO - goSwitch.callback(switchCallback); - + if (knx.configured()) + { + // register callback for reset GO + goSwitch.callback(switchCallback); + } + // start the framework. Will get wifi first. knx.start(); } @@ -54,7 +46,7 @@ void loop() knx.loop(); // only run the application code if the device was configured with ETS - if (!knx.configured()) + if(!knx.configured()) return; // nothing else to do. diff --git a/knxPython/knxmodule.cpp b/knxPython/knxmodule.cpp index f9559fc..4c2b3d2 100644 --- a/knxPython/knxmodule.cpp +++ b/knxPython/knxmodule.cpp @@ -75,12 +75,6 @@ static bool Configured() return bau.configured(); } -static void RegisterGroupObjects(std::vector& gos) -{ - GroupObjectTableObject& got(bau.groupObjectTable()); - got.groupObjects(gos.data(), gos.size()); -} - PYBIND11_MAKE_OPAQUE(std::vector); PYBIND11_MODULE(knx, m) @@ -94,12 +88,12 @@ PYBIND11_MODULE(knx, m) 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."); - m.def("RegisterGroupObjects", &RegisterGroupObjects); m.def("FlashFilePath", []() { return platform.flashFilePath(); }); m.def("FlashFilePath", [](std::string path) { platform.flashFilePath(path); }); + m.def("GetGroupObject", [](uint16_t goNr) { return bau.groupObjectTable().get(goNr); }); py::class_(m, "GroupObject", py::dynamic_attr()) - .def(py::init()) + .def(py::init()) .def("objectWrite", (void(GroupObject::*)(float))&GroupObject::objectWrite) .def("asap", &GroupObject::asap) .def("size", &GroupObject::valueSize) diff --git a/src/esp_platform.cpp b/src/esp_platform.cpp index 0d99ca7..498fc30 100644 --- a/src/esp_platform.cpp +++ b/src/esp_platform.cpp @@ -171,4 +171,167 @@ size_t EspPlatform::readBytesUart(uint8_t *buffer, size_t length) printHex("p>", buffer, length); return length; } + +void print(const char* s) +{ + printf("%s", s); +} +void print(char c) +{ + printf("%c", c); +} + +void print(unsigned char num) +{ + print(num, DEC); +} + +void print(unsigned char num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(int num) +{ + print(num, DEC); +} + +void print(int num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(unsigned int num) +{ + print(num, DEC); +} + +void print(unsigned int num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(long num) +{ + print(num, DEC); +} + +void print(long num, int base) +{ + if (base == HEX) + printf("%lX", num); + else + printf("%ld", num); +} + +void print(unsigned long num) +{ + print(num, DEC); +} + +void print(unsigned long num, int base) +{ + if (base == HEX) + printf("%lX", num); + else + printf("%ld", num); +} + +void print(double num) +{ + printf("%f", num); +} + +void println(const char* s) +{ + printf("%s\n", s); +} +void println(char c) +{ + printf("%c\n", c); +} + +void println(unsigned char num) +{ + println(num, DEC); +} + +void println(unsigned char num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(int num) +{ + println(num, DEC); +} + +void println(int num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(unsigned int num) +{ + println(num, DEC); +} + +void println(unsigned int num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(long num) +{ + println(num, DEC); +} + +void println(long num, int base) +{ + if (base == HEX) + printf("%lX\n", num); + else + printf("%ld\n", num); +} + +void println(unsigned long num) +{ + println(num, DEC); +} + +void println(unsigned long num, int base) +{ + if (base == HEX) + printf("%lX\n", num); + else + printf("%ld\n", num); +} + +void println(double num) +{ + printf("%f\n", num); +} + +void println(void) +{ + printf("\n"); +} #endif diff --git a/src/knx/apdu.cpp b/src/knx/apdu.cpp index 369b158..8809d10 100644 --- a/src/knx/apdu.cpp +++ b/src/knx/apdu.cpp @@ -40,14 +40,14 @@ uint8_t APDU::length() const void APDU::printPDU() { - _print("APDU: "); - _print(type(), HEX); - _print(" "); - _print(_data[0] & 0x3, HEX); + print("APDU: "); + print(type(), HEX); + print(" "); + print(_data[0] & 0x3, HEX); for (uint8_t i = 1; i < length() + 1; ++i) { - if (i) _print(" "); - _print(_data[i], HEX); + if (i) print(" "); + print(_data[i], HEX); } - _println(); + println(); } diff --git a/src/knx/bits.cpp b/src/knx/bits.cpp index 0c867ec..5762b24 100644 --- a/src/knx/bits.cpp +++ b/src/knx/bits.cpp @@ -9,13 +9,13 @@ uint8_t* popByte(uint8_t& b, uint8_t* data) void printHex(const char* suffix, const uint8_t *data, size_t length) { - _print(suffix); + print(suffix); for (int i = 0; i < length; i++) { - if (data[i] < 0x10) { _print("0"); } - _print(data[i], HEX); - _print(" "); + if (data[i] < 0x10) { print("0"); } + print(data[i], HEX); + print(" "); } - _println(); + println(); } uint8_t* popWord(uint16_t& w, uint8_t* data) @@ -84,171 +84,3 @@ uint32_t getInt(uint8_t * data) { return (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]; } - - -#ifdef __linux__ - -void print(const char* s) -{ - printf("%s", s); -} -void print(char c) -{ - printf("%c", c); -} - -void print(unsigned char num) -{ - print(num, DEC); -} - -void print(unsigned char num, int base) -{ - if (base == HEX) - printf("%X", num); - else - printf("%d", num); -} - -void print(int num) -{ - print(num, DEC); -} - -void print(int num, int base) -{ - if (base == HEX) - printf("%X", num); - else - printf("%d", num); -} - -void print(unsigned int num) -{ - print(num, DEC); -} - -void print(unsigned int num, int base) -{ - if (base == HEX) - printf("%X", num); - else - printf("%d", num); -} - -void print(long num) -{ - print(num, DEC); -} - -void print(long num, int base) -{ - if (base == HEX) - printf("%lX", num); - else - printf("%ld", num); -} - -void print(unsigned long num) -{ - print(num, DEC); -} - -void print(unsigned long num, int base) -{ - if (base == HEX) - printf("%lX", num); - else - printf("%ld", num); -} - -void print(double num) -{ - printf("%f", num); -} - -void println(const char* s) -{ - printf("%s\n", s); -} -void println(char c) -{ - printf("%c\n", c); -} - -void println(unsigned char num) -{ - println(num, DEC); -} - -void println(unsigned char num, int base) -{ - if (base == HEX) - printf("%X\n", num); - else - printf("%d\n", num); -} - -void println(int num) -{ - println(num, DEC); -} - -void println(int num, int base) -{ - if (base == HEX) - printf("%X\n", num); - else - printf("%d\n", num); -} - -void println(unsigned int num) -{ - println(num, DEC); -} - -void println(unsigned int num, int base) -{ - if (base == HEX) - printf("%X\n", num); - else - printf("%d\n", num); -} - -void println(long num) -{ - println(num, DEC); -} - -void println(long num, int base) -{ - if (base == HEX) - printf("%lX\n", num); - else - printf("%ld\n", num); -} - -void println(unsigned long num) -{ - println(num, DEC); -} - -void println(unsigned long num, int base) -{ - if (base == HEX) - printf("%lX\n", num); - else - printf("%ld\n", num); -} - -void println(double num) -{ - printf("%f\n", num); -} - -void println(void) -{ - printf("\n"); -} - -#endif \ No newline at end of file diff --git a/src/knx/bits.h b/src/knx/bits.h index 4c12de8..4a01dab 100644 --- a/src/knx/bits.h +++ b/src/knx/bits.h @@ -1,21 +1,30 @@ #pragma once -#include +#include +#include #ifdef __linux__ #include -#include +#elif ARDUINO_ARCH_SAMD +#define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) ) +#define ntohs(x) htons(x) +#define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \ + ((x)<< 8 & 0x00FF0000UL) | \ + ((x)>> 8 & 0x0000FF00UL) | \ + ((x)>>24 & 0x000000FFUL) ) +#define ntohl(x) htonl(x) +#elif ARDUINO_ARCH_ESP8266 +#include +#endif #define lowByte(val) ((val) & 255) #define highByte(val) (((val) >> ((sizeof(val) - 1) << 3)) & 255) #define bitRead(val, bitno) (((val) >> (bitno)) & 1) - + +// print functions are implemented in the platform files #define DEC 10 #define HEX 16 -#define _print print -#define _println println - void print(const char[]); void print(char); void print(unsigned char, int = DEC); @@ -35,23 +44,7 @@ void println(unsigned long, int = DEC); void println(double, int = 2); void println(void); -#elif ARDUINO_ARCH_SAMD -#include -#define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) ) -#define ntohs(x) htons(x) -#define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \ - ((x)<< 8 & 0x00FF0000UL) | \ - ((x)>> 8 & 0x0000FF00UL) | \ - ((x)>>24 & 0x000000FFUL) ) -#define ntohl(x) htonl(x) -#define _print SerialUSB.print -#define _println SerialUSB.println -#else -#include -#include -#define _print Serial.print -#define _println Serial.println -#endif + void printHex(const char* suffix, const uint8_t *data, size_t length); diff --git a/src/knx/data_link_layer.cpp b/src/knx/data_link_layer.cpp index cae00bb..1503e14 100644 --- a/src/knx/data_link_layer.cpp +++ b/src/knx/data_link_layer.cpp @@ -76,7 +76,7 @@ bool DataLinkLayer::sendTelegram(NPDU & npdu, AckType ack, uint16_t destinationA if (!frame.valid()) { - _println("invalid frame"); + println("invalid frame"); return false; } diff --git a/src/knx/group_object.cpp b/src/knx/group_object.cpp index 75b1ecf..eca0a3c 100644 --- a/src/knx/group_object.cpp +++ b/src/knx/group_object.cpp @@ -4,13 +4,12 @@ #include "datapoint_types.h" #include "group_object_table_object.h" -GroupObject::GroupObject(uint8_t size) +GroupObject::GroupObject() { - _data = new uint8_t[size]; - memset(_data, 0, size); + _data = 0; _commFlag = Ok; _table = 0; - _dataLength = size; + _dataLength = 0; _updateHandler = 0; } @@ -27,7 +26,8 @@ GroupObject::GroupObject(const GroupObject& other) GroupObject::~GroupObject() { - delete[] _data; + if (_data) + delete[] _data; } bool GroupObject::responseUpdateEnable() diff --git a/src/knx/group_object.h b/src/knx/group_object.h index 1ca095a..fce815c 100644 --- a/src/knx/group_object.h +++ b/src/knx/group_object.h @@ -31,7 +31,7 @@ class GroupObject { friend class GroupObjectTableObject; public: - GroupObject(uint8_t size); + GroupObject(); GroupObject(const GroupObject& other); virtual ~GroupObject(); // config flags from ETS diff --git a/src/knx/group_object_table_object.cpp b/src/knx/group_object_table_object.cpp index 022cada..4eb8e1a 100644 --- a/src/knx/group_object_table_object.cpp +++ b/src/knx/group_object_table_object.cpp @@ -7,19 +7,22 @@ GroupObjectTableObject::GroupObjectTableObject(Platform& platform) : TableObject(platform) { - _groupObjects = 0; - _groupObjectCount = 0; +} + +GroupObjectTableObject::~GroupObjectTableObject() +{ + freeGroupObjects(); } void GroupObjectTableObject::readProperty(PropertyID id, uint32_t start, uint32_t& count, uint8_t* data) { switch (id) { - case PID_OBJECT_TYPE: - pushWord(OT_GRP_OBJ_TABLE, data); - break; - default: - TableObject::readProperty(id, start, count, data); + case PID_OBJECT_TYPE: + pushWord(OT_GRP_OBJ_TABLE, data); + break; + default: + TableObject::readProperty(id, start, count, data); } } @@ -81,6 +84,7 @@ GroupObject& GroupObjectTableObject::nextUpdatedObject(bool& valid) void GroupObjectTableObject::groupObjects(GroupObject * objs, uint16_t size) { + freeGroupObjects(); _groupObjects = objs; _groupObjectCount = size; initGroupObjects(); @@ -104,18 +108,22 @@ bool GroupObjectTableObject::initGroupObjects() { if (!_tableData) return false; + + freeGroupObjects(); uint16_t goCount = ntohs(_tableData[0]); - if (goCount != _groupObjectCount) - return false; + + _groupObjects = new GroupObject[goCount]; + _groupObjectCount = goCount; for (uint16_t asap = 1; asap <= goCount; asap++) { GroupObject& go = _groupObjects[asap - 1]; go._asap = asap; go._table = this; - if (go._dataLength != go.goSize()) - return false; + + go._dataLength = go.goSize(); + go._data = new uint8_t[go._dataLength]; if (go.valueReadOnInit()) go.requestObjectRead(); @@ -142,4 +150,13 @@ uint8_t GroupObjectTableObject::propertyCount() PropertyDescription* GroupObjectTableObject::propertyDescriptions() { return _propertyDescriptions; -} \ No newline at end of file +} + +void GroupObjectTableObject::freeGroupObjects() +{ + if (_groupObjects) + delete[] _groupObjects; + + _groupObjectCount = 0; + _groupObjects = 0; +} diff --git a/src/knx/group_object_table_object.h b/src/knx/group_object_table_object.h index c3c742e..44d1057 100644 --- a/src/knx/group_object_table_object.h +++ b/src/knx/group_object_table_object.h @@ -9,6 +9,7 @@ class GroupObjectTableObject: public TableObject public: GroupObjectTableObject(Platform& platform); + virtual ~GroupObjectTableObject(); void readProperty(PropertyID id, uint32_t start, uint32_t& count, uint8_t* data); uint16_t entryCount(); GroupObject& get(uint16_t asap); @@ -22,8 +23,9 @@ protected: uint8_t propertyCount(); PropertyDescription* propertyDescriptions(); private: + void freeGroupObjects(); bool initGroupObjects(); uint16_t* _tableData = 0; - GroupObject* _groupObjects; - uint16_t _groupObjectCount; + GroupObject* _groupObjects = 0; + uint16_t _groupObjectCount = 0; }; \ No newline at end of file diff --git a/src/knx/tpuart_data_link_layer.cpp b/src/knx/tpuart_data_link_layer.cpp index 6c881e0..b799721 100644 --- a/src/knx/tpuart_data_link_layer.cpp +++ b/src/knx/tpuart_data_link_layer.cpp @@ -276,7 +276,7 @@ bool TpUartDataLinkLayer::checkDataCon(uint8_t firstByte) if (_sendBuffer == 0) { - _println("got unexpected L_DATA_CON"); + println("got unexpected L_DATA_CON"); return true; } @@ -293,7 +293,7 @@ bool TpUartDataLinkLayer::checkPollDataInd(uint8_t firstByte) return false; // not sure if this can happen - _println("got L_POLL_DATA_IND"); + println("got L_POLL_DATA_IND"); return true; } @@ -304,7 +304,7 @@ bool TpUartDataLinkLayer::checkAckNackInd(uint8_t firstByte) return false; // this can only happen in bus monitor mode - _println("got L_ACKN_IND"); + println("got L_ACKN_IND"); return true; } @@ -313,7 +313,7 @@ bool TpUartDataLinkLayer::checkResetInd(uint8_t firstByte) if (firstByte != U_RESET_IND) return false; - _println("got U_RESET_IND"); + println("got U_RESET_IND"); return true; } @@ -323,9 +323,9 @@ bool TpUartDataLinkLayer::checkStateInd(uint8_t firstByte) if (tmp != U_STATE_IND) return false; - _print("got U_STATE_IND: 0x"); - _print(firstByte, HEX); - _println(); + print("got U_STATE_IND: 0x"); + print(firstByte, HEX); + println(); return true; } @@ -335,9 +335,9 @@ bool TpUartDataLinkLayer::checkFrameStateInd(uint8_t firstByte) if (tmp != U_FRAME_STATE_IND) return false; - _print("got U_FRAME_STATE_IND: 0x"); - _print(firstByte, HEX); - _println(); + print("got U_FRAME_STATE_IND: 0x"); + print(firstByte, HEX); + println(); return true; } @@ -347,9 +347,9 @@ bool TpUartDataLinkLayer::checkConfigureInd(uint8_t firstByte) if (tmp != U_CONFIGURE_IND) return false; - _print("got U_CONFIGURE_IND: 0x"); - _print(firstByte, HEX); - _println(); + print("got U_CONFIGURE_IND: 0x"); + print(firstByte, HEX); + println(); return true; } @@ -358,7 +358,7 @@ bool TpUartDataLinkLayer::checkFrameEndInd(uint8_t firstByte) if (firstByte != U_FRAME_END_IND) return false; - _println("got U_FRAME_END_IND"); + println("got U_FRAME_END_IND"); return true; } @@ -367,7 +367,7 @@ bool TpUartDataLinkLayer::checkStopModeInd(uint8_t firstByte) if (firstByte != U_STOP_MODE_IND) return false; - _println("got U_STOP_MODE_IND"); + println("got U_STOP_MODE_IND"); return true; } @@ -376,25 +376,25 @@ bool TpUartDataLinkLayer::checkSystemStatInd(uint8_t firstByte) if (firstByte != U_SYSTEM_STAT_IND) return false; - _print("got U_SYSTEM_STAT_IND: 0x"); + print("got U_SYSTEM_STAT_IND: 0x"); while (true) { int tmp = _platform.readUart(); if (tmp < 0) continue; - _print(tmp, HEX); + print(tmp, HEX); break; } - _println(); + println(); return true; } void TpUartDataLinkLayer::handleUnexpected(uint8_t firstByte) { - _print("got UNEXPECTED: 0x"); - _print(firstByte, HEX); - _println(); + print("got UNEXPECTED: 0x"); + print(firstByte, HEX); + println(); } void TpUartDataLinkLayer::enabled(bool value) @@ -402,8 +402,8 @@ void TpUartDataLinkLayer::enabled(bool value) if (value && !_enabled) { _platform.setupUart(); - _print("ownaddr "); - _println(_deviceObject.induvidualAddress(), HEX); + print("ownaddr "); + println(_deviceObject.induvidualAddress(), HEX); resetChip(); _enabled = true; return; diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index a5d188a..0cb0db5 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -89,11 +89,6 @@ void KnxFacade::loop() _bau.loop(); } -void KnxFacade::registerGroupObjects(GroupObject* groupObjects, uint16_t count) -{ - _bau.groupObjectTable().groupObjects(groupObjects, count); -} - void KnxFacade::manufacturerId(uint16_t value) { _bau.deviceObject().manufacturerId(value); @@ -190,3 +185,9 @@ uint8_t* KnxFacade::restore(uint8_t* buffer) return buffer; } + + +GroupObject& KnxFacade::getGroupObject(uint16_t goNr) +{ + return _bau.groupObjectTable().get(goNr); +} diff --git a/src/knx_facade.h b/src/knx_facade.h index 22b07c3..10aee42 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -29,7 +29,6 @@ public: void readMemory(); void writeMemory(); void loop(); - void registerGroupObjects(GroupObject* groupObjects, uint16_t count); void manufacturerId(uint16_t value); void bauNumber(uint32_t value); void orderNumber(const char* value); @@ -42,6 +41,7 @@ public: uint8_t paramByte(uint32_t addr); uint16_t paramWord(uint32_t addr); uint32_t paramInt(uint32_t addr); + GroupObject& getGroupObject(uint16_t goNr); private: BauSystemB& _bau; uint32_t _ledPin = LED_BUILTIN; diff --git a/src/linux_platform.cpp b/src/linux_platform.cpp index 54bcdb5..541f7b5 100644 --- a/src/linux_platform.cpp +++ b/src/linux_platform.cpp @@ -329,4 +329,168 @@ std::string LinuxPlatform::flashFilePath() { return _flashFilePath; } + +void print(const char* s) +{ + printf("%s", s); +} +void print(char c) +{ + printf("%c", c); +} + +void print(unsigned char num) +{ + print(num, DEC); +} + +void print(unsigned char num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(int num) +{ + print(num, DEC); +} + +void print(int num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(unsigned int num) +{ + print(num, DEC); +} + +void print(unsigned int num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(long num) +{ + print(num, DEC); +} + +void print(long num, int base) +{ + if (base == HEX) + printf("%lX", num); + else + printf("%ld", num); +} + +void print(unsigned long num) +{ + print(num, DEC); +} + +void print(unsigned long num, int base) +{ + if (base == HEX) + printf("%lX", num); + else + printf("%ld", num); +} + +void print(double num) +{ + printf("%f", num); +} + +void println(const char* s) +{ + printf("%s\n", s); +} +void println(char c) +{ + printf("%c\n", c); +} + +void println(unsigned char num) +{ + println(num, DEC); +} + +void println(unsigned char num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(int num) +{ + println(num, DEC); +} + +void println(int num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(unsigned int num) +{ + println(num, DEC); +} + +void println(unsigned int num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(long num) +{ + println(num, DEC); +} + +void println(long num, int base) +{ + if (base == HEX) + printf("%lX\n", num); + else + printf("%ld\n", num); +} + +void println(unsigned long num) +{ + println(num, DEC); +} + +void println(unsigned long num, int base) +{ + if (base == HEX) + printf("%lX\n", num); + else + printf("%ld\n", num); +} + +void println(double num) +{ + printf("%f\n", num); +} + +void println(void) +{ + printf("\n"); +} + #endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index c01a1cd..624259b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,17 +15,10 @@ 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] +#define CURR bau.groupObjectTable().get(0) +#define MAX bau.groupObjectTable().get(1) +#define MIN bau.groupObjectTable().get(2) +#define RESET bau.groupObjectTable().get(3) void measureTemp() { @@ -75,10 +68,8 @@ void setup() srand((unsigned int)time(NULL)); bau.readMemory(); - GroupObjectTableObject& got(bau.groupObjectTable()); - got.groupObjects(groupObjects, 4); - - RESET.callback(resetCallback); + if (bau.configured()) + RESET.callback(resetCallback); if (bau.deviceObject().induvidualAddress() == 0) bau.deviceObject().progMode(true); diff --git a/src/samd_platform.cpp b/src/samd_platform.cpp index 102515c..d222621 100644 --- a/src/samd_platform.cpp +++ b/src/samd_platform.cpp @@ -45,7 +45,7 @@ void SamdPlatform::mdelay(uint32_t millis) void SamdPlatform::restart() { - SerialUSB.println("restart"); + SerialDBG.println("restart"); NVIC_SystemReset(); } @@ -153,4 +153,138 @@ size_t SamdPlatform::readBytesUart(uint8_t *buffer, size_t length) //printHex("p>", buffer, length); return length; } + +void print(const char* s) +{ + SerialDBG.print(s); +} +void print(char c) +{ + SerialDBG.print(c); +} + +void print(unsigned char num) +{ + SerialDBG.print(num); +} + +void print(unsigned char num, int base) +{ + SerialDBG.print(num, base); +} + +void print(int num) +{ + SerialDBG.print(num); +} + +void print(int num, int base) +{ + SerialDBG.print(num, base); +} + +void print(unsigned int num) +{ + SerialDBG.print(num); +} + +void print(unsigned int num, int base) +{ + SerialDBG.print(num, base); +} + +void print(long num) +{ + SerialDBG.print(num); +} + +void print(long num, int base) +{ + SerialDBG.print(num, base); +} + +void print(unsigned long num) +{ + SerialDBG.print(num); +} + +void print(unsigned long num, int base) +{ + SerialDBG.print(num, base); +} + +void print(double num) +{ + SerialDBG.print(num); +} + +void println(const char* s) +{ + SerialDBG.println(s); +} + +void println(char c) +{ + SerialDBG.println(c); +} + +void println(unsigned char num) +{ + SerialDBG.println(num); +} + +void println(unsigned char num, int base) +{ + SerialDBG.println(num, base); +} + +void println(int num) +{ + SerialDBG.println(num); +} + +void println(int num, int base) +{ + SerialDBG.println(num, base); +} + +void println(unsigned int num) +{ + SerialDBG.println(num); +} + +void println(unsigned int num, int base) +{ + SerialDBG.println(num, base); +} + +void println(long num) +{ + SerialDBG.println(num); +} + +void println(long num, int base) +{ + SerialDBG.println(num, base); +} + +void println(unsigned long num) +{ + SerialDBG.println(num); +} + +void println(unsigned long num, int base) +{ + SerialDBG.println(num, base); +} + +void println(double num) +{ + SerialDBG.println(num); +} + +void println(void) +{ + SerialDBG.println(); +} #endif \ No newline at end of file diff --git a/visualstudio/knx.sln b/visualstudio/knx.sln index f36415e..bdca709 100644 --- a/visualstudio/knx.sln +++ b/visualstudio/knx.sln @@ -17,21 +17,25 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Arduino Genuino Zero (Native USB Port) = Debug|Arduino Genuino Zero (Native USB Port) + Debug|Mixed = Debug|Mixed Debug|NodeMCU_1 0_(ESP-12E_Module) = Debug|NodeMCU_1 0_(ESP-12E_Module) Debug|VisualGDB = Debug|VisualGDB Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 MinSizeRel|Arduino Genuino Zero (Native USB Port) = MinSizeRel|Arduino Genuino Zero (Native USB Port) + MinSizeRel|Mixed = MinSizeRel|Mixed MinSizeRel|NodeMCU_1 0_(ESP-12E_Module) = MinSizeRel|NodeMCU_1 0_(ESP-12E_Module) MinSizeRel|VisualGDB = MinSizeRel|VisualGDB MinSizeRel|x64 = MinSizeRel|x64 MinSizeRel|x86 = MinSizeRel|x86 Release|Arduino Genuino Zero (Native USB Port) = Release|Arduino Genuino Zero (Native USB Port) + Release|Mixed = Release|Mixed Release|NodeMCU_1 0_(ESP-12E_Module) = Release|NodeMCU_1 0_(ESP-12E_Module) Release|VisualGDB = Release|VisualGDB Release|x64 = Release|x64 Release|x86 = Release|x86 RelWithDebInfo|Arduino Genuino Zero (Native USB Port) = RelWithDebInfo|Arduino Genuino Zero (Native USB Port) + RelWithDebInfo|Mixed = RelWithDebInfo|Mixed RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module) = RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module) RelWithDebInfo|VisualGDB = RelWithDebInfo|VisualGDB RelWithDebInfo|x64 = RelWithDebInfo|x64 @@ -39,6 +43,7 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|Mixed.ActiveCfg = Debug|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|VisualGDB.ActiveCfg = Debug|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|VisualGDB.Build.0 = Debug|VisualGDB @@ -46,6 +51,8 @@ Global {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|x86.ActiveCfg = Debug|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Mixed.ActiveCfg = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Mixed.Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|VisualGDB.ActiveCfg = Release|VisualGDB @@ -55,6 +62,7 @@ Global {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|x86.ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|x86.Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|Mixed.ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|VisualGDB.ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|VisualGDB.Build.0 = Release|VisualGDB @@ -62,6 +70,8 @@ Global {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|x86.ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Mixed.ActiveCfg = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Mixed.Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|VisualGDB @@ -72,6 +82,8 @@ Global {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|x86.Build.0 = Release|VisualGDB {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Mixed.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Mixed.Build.0 = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|VisualGDB.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) @@ -79,6 +91,8 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x86.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -89,12 +103,15 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -105,6 +122,8 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {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|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.Build.0 = 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|Arduino Genuino Zero (Native USB Port) @@ -112,6 +131,8 @@ Global {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|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {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|Arduino Genuino Zero (Native USB Port) @@ -122,6 +143,8 @@ Global {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|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {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|Arduino Genuino Zero (Native USB Port) @@ -129,6 +152,8 @@ Global {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|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {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|Arduino Genuino Zero (Native USB Port) @@ -138,12 +163,15 @@ Global {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|Mixed.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|x64.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|x86.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -154,12 +182,15 @@ Global {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|VisualGDB.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -169,6 +200,8 @@ Global {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Mixed.ActiveCfg = Debug|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Mixed.Build.0 = Debug|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|VisualGDB.ActiveCfg = Debug|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x64.ActiveCfg = Debug|Win32 @@ -176,6 +209,8 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x86.Build.0 = Debug|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Mixed.ActiveCfg = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Mixed.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|VisualGDB.ActiveCfg = Release|Win32 @@ -185,6 +220,7 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|x86.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|x86.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|Mixed.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|VisualGDB.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x64.ActiveCfg = Release|Win32 @@ -192,6 +228,8 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x86.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Mixed.ActiveCfg = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Mixed.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Win32 @@ -201,6 +239,8 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x86.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x86.Build.0 = Release|Win32 {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Mixed.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Mixed.Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|VisualGDB.ActiveCfg = Debug|Generic ESP8266 Module @@ -208,6 +248,8 @@ Global {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|x86.ActiveCfg = Debug|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module @@ -218,12 +260,15 @@ Global {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x86.Build.0 = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|x64.ActiveCfg = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|x86.ActiveCfg = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module