From 74fe42acafa0b21250ca9c8ef264cb7fbeeebf89 Mon Sep 17 00:00:00 2001 From: mumpf Date: Sat, 17 Aug 2019 21:14:46 +0200 Subject: [PATCH 01/13] corrected float with DPT9 (#27) * corrected float with DPT9 * Switch Programming-LED also via Bus/ETS * Again: Prog-LED switchable from bus/ETS --- src/knx/knx_value.cpp | 2 ++ src/knx_facade.cpp | 41 +++++++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/knx/knx_value.cpp b/src/knx/knx_value.cpp index 4985085..7b6f93a 100644 --- a/src/knx/knx_value.cpp +++ b/src/knx/knx_value.cpp @@ -532,6 +532,8 @@ struct tm KNXValue::timeValue() const KNXValue::KNXValue(float value) { + _value.doubleValue = value; + _type = DoubleType; } KNXValue& KNXValue::operator=(const float value) diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 1e93ce8..34ae0dc 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -17,11 +17,13 @@ Bau57B0 bau(platform); #endif bool _toogleProgMode = false; +bool _progLedState = false; + #ifndef __linux__ KnxFacade knx(bau); ICACHE_RAM_ATTR void buttonUp() { - _toogleProgMode = true; + _toogleProgMode = true; } #endif @@ -48,17 +50,6 @@ bool KnxFacade::progMode() void KnxFacade::progMode(bool value) { - if (value) - { - println("progmode on"); - digitalWrite(knx.ledPin(), _ledPinActiveOn); - } - else - { - println("progmode off"); - digitalWrite(knx.ledPin(), HIGH - _ledPinActiveOn); - } - _bau.deviceObject().progMode(value); } @@ -109,11 +100,25 @@ void KnxFacade::writeMemory() void KnxFacade::loop() { - if(_toogleProgMode) - { - progMode(!progMode()); - _toogleProgMode = false; - } + if (progMode() != _progLedState) + { + _progLedState = progMode(); + if (_progLedState) + { + println("progmode on"); + digitalWrite(knx.ledPin(), _ledPinActiveOn); + } + else + { + println("progmode off"); + digitalWrite(knx.ledPin(), HIGH - _ledPinActiveOn); + } + } + if (_toogleProgMode) + { + progMode(!progMode()); + _toogleProgMode = false; + } _bau.loop(); } @@ -150,7 +155,7 @@ void KnxFacade::version(uint16_t value) void KnxFacade::start() { pinMode(_ledPin, OUTPUT); - + digitalWrite(_ledPin, HIGH - _ledPinActiveOn); pinMode(_buttonPin, INPUT_PULLUP); From da5466ab02cba840284d5d67f888a34916291558 Mon Sep 17 00:00:00 2001 From: mumpf Date: Sun, 18 Aug 2019 19:40:08 +0200 Subject: [PATCH 02/13] DPT16 (to bus) implemented (#28) * DPT16 (to bus) implemented --- src/knx/dptconvert.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/knx/dptconvert.cpp b/src/knx/dptconvert.cpp index f499585..f4a30c9 100644 --- a/src/knx/dptconvert.cpp +++ b/src/knx/dptconvert.cpp @@ -1275,8 +1275,13 @@ int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, int payload_l int valueToBusValueString(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) { - //TODO - return false; + const char* strValue = value; + uint8_t val = strValue[0]; + for (int n = 0; n < 14; n++) { + if (val) val = strValue[n]; //string terminator 0x00 will stop further assignments and init the remainig payload with zero + unsigned8ToPayload(payload, payload_length, n, val, 0xff); + } + return true; } int valueToBusValueScene(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) From db740d66870fe9873daf823ff89b32794f8abd7a Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 22 Aug 2019 21:31:02 +0200 Subject: [PATCH 03/13] remove mdelay and millis from platform --- knx-linux/main.cpp | 4 +- src/esp_platform.cpp | 10 -- src/esp_platform.h | 70 +++++++------- src/knx/bau_systemB.cpp | 2 +- src/knx/bits.h | 3 + src/knx/ip_data_link_layer.cpp | 2 +- src/knx/platform.h | 4 +- src/knx/tpuart_data_link_layer.cpp | 16 ++-- src/knx/transport_layer.cpp | 17 ++-- src/knx/transport_layer.h | 3 +- src/linux_platform.cpp | 4 +- src/linux_platform.h | 2 - src/samd_platform.cpp | 10 -- src/samd_platform.h | 72 +++++++------- visualstudio/knx-bme680.vgdbproj | 57 ----------- visualstudio/knx-demo.vgdbproj | 120 +++++++++++------------ visualstudio/knx-sonoffS20.vgdbproj | 65 +------------ visualstudio/knx.sln | 141 ++++++++++------------------ 18 files changed, 204 insertions(+), 398 deletions(-) diff --git a/knx-linux/main.cpp b/knx-linux/main.cpp index e84b3c6..31723b6 100644 --- a/knx-linux/main.cpp +++ b/knx-linux/main.cpp @@ -18,7 +18,7 @@ long lastsend = 0; void measureTemp() { - long now = platform->millis(); + long now = millis(); if ((now - lastsend) < 10000) return; @@ -97,6 +97,6 @@ int main(int argc, char **argv) knx->loop(); if(knx->configured()) appLoop(); - platform->mdelay(100); + delay(100); } } \ No newline at end of file diff --git a/src/esp_platform.cpp b/src/esp_platform.cpp index 663e5a9..626804f 100644 --- a/src/esp_platform.cpp +++ b/src/esp_platform.cpp @@ -31,16 +31,6 @@ void EspPlatform::macAddress(uint8_t * addr) wifi_get_macaddr(STATION_IF, addr); } -uint32_t EspPlatform::millis() -{ - return ::millis(); -} - -void EspPlatform::mdelay(uint32_t millis) -{ - delay(millis); -} - void EspPlatform::restart() { Serial.println("restart"); diff --git a/src/esp_platform.h b/src/esp_platform.h index 85c0bb7..2be3e2d 100644 --- a/src/esp_platform.h +++ b/src/esp_platform.h @@ -1,27 +1,25 @@ -#ifdef ARDUINO_ARCH_ESP8266 -#include "knx/platform.h" -#include -#include - -#define SerialDBG Serial - -class EspPlatform : public Platform -{ -public: - EspPlatform(); - - // ip stuff - uint32_t currentIpAddress(); - uint32_t currentSubnetMask(); - uint32_t currentDefaultGateway(); - void macAddress(uint8_t* addr); - - // basic stuff - uint32_t millis(); - void mdelay(uint32_t millis); - void restart(); - void fatalError(); - +#ifdef ARDUINO_ARCH_ESP8266 +#include "knx/platform.h" +#include +#include + +#define SerialDBG Serial + +class EspPlatform : public Platform +{ +public: + EspPlatform(); + + // ip stuff + uint32_t currentIpAddress(); + uint32_t currentSubnetMask(); + uint32_t currentDefaultGateway(); + void macAddress(uint8_t* addr); + + // basic stuff + void restart(); + void fatalError(); + //multicast void setupMultiCast(uint32_t addr, uint16_t port); void closeMultiCast(); @@ -29,21 +27,21 @@ public: int readBytes(uint8_t* buffer, uint16_t maxLen); //uart - void setupUart(); - void closeUart(); - int uartAvailable(); - size_t writeUart(const uint8_t data); - size_t writeUart(const uint8_t *buffer, size_t size); - int readUart(); + void setupUart(); + void closeUart(); + int uartAvailable(); + size_t writeUart(const uint8_t data); + size_t writeUart(const uint8_t *buffer, size_t size); + int readUart(); size_t readBytesUart(uint8_t *buffer, size_t length); //memory uint8_t* getEepromBuffer(uint16_t size); void commitToEeprom(); -private: - uint32_t _mulitcastAddr; - uint16_t _mulitcastPort; - WiFiUDP _udp; -}; - +private: + uint32_t _mulitcastAddr; + uint16_t _mulitcastPort; + WiFiUDP _udp; +}; + #endif \ No newline at end of file diff --git a/src/knx/bau_systemB.cpp b/src/knx/bau_systemB.cpp index 4917894..4e66daa 100644 --- a/src/knx/bau_systemB.cpp +++ b/src/knx/bau_systemB.cpp @@ -5,7 +5,7 @@ BauSystemB::BauSystemB(Platform& platform): _memory(platform), _addrTable(platform), _assocTable(platform), _groupObjTable(platform), _appProgram(platform), _platform(platform), _appLayer(_assocTable, *this), - _transLayer(_appLayer, _addrTable, _platform), _netLayer(_transLayer) + _transLayer(_appLayer, _addrTable), _netLayer(_transLayer) { _appLayer.transportLayer(_transLayer); _transLayer.networkLayer(_netLayer); diff --git a/src/knx/bits.h b/src/knx/bits.h index ee9ed64..b261cec 100644 --- a/src/knx/bits.h +++ b/src/knx/bits.h @@ -14,6 +14,9 @@ #define DEC 10 #define HEX 16 +void delay(uint32_t millis); +uint32_t millis(); + #elif ARDUINO_ARCH_SAMD #include #define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) ) diff --git a/src/knx/ip_data_link_layer.cpp b/src/knx/ip_data_link_layer.cpp index 9467e55..2472d05 100644 --- a/src/knx/ip_data_link_layer.cpp +++ b/src/knx/ip_data_link_layer.cpp @@ -35,7 +35,7 @@ bool IpDataLinkLayer::sendFrame(CemiFrame& frame) bool success = sendBytes(buffer, length); // only send 50 packet per second: see KNX 3.2.6 p.6 - _platform.mdelay(20); + delay(20); dataConReceived(frame, success); delete[] buffer; return success; diff --git a/src/knx/platform.h b/src/knx/platform.h index e680920..16c9bf0 100644 --- a/src/knx/platform.h +++ b/src/knx/platform.h @@ -13,10 +13,10 @@ class Platform virtual uint32_t currentDefaultGateway() = 0; virtual void macAddress(uint8_t* data) = 0; - virtual uint32_t millis() = 0; + //virtual uint32_t millis() = 0; virtual void restart() = 0; virtual void fatalError() = 0; - virtual void mdelay(uint32_t millis) = 0; + //virtual void mdelay(uint32_t millis) = 0; virtual void setupMultiCast(uint32_t addr, uint16_t port) = 0; virtual void closeMultiCast() = 0; diff --git a/src/knx/tpuart_data_link_layer.cpp b/src/knx/tpuart_data_link_layer.cpp index 12b45fe..48fef44 100644 --- a/src/knx/tpuart_data_link_layer.cpp +++ b/src/knx/tpuart_data_link_layer.cpp @@ -115,13 +115,13 @@ void TpUartDataLinkLayer::loop() if (sendSingleFrameByte() == false) { _waitConfirm = true; - _waitConfirmStartTime = _platform.millis(); + _waitConfirmStartTime = millis(); _loopState = IDLE; } break; case RX_FIRST_BYTE: rxByte = _platform.readUart(); - _lastByteRxTime = _platform.millis(); + _lastByteRxTime = millis(); _RxByteCnt = 0; _xorSum = 0; if ((rxByte & L_DATA_MASK) == L_DATA_STANDARD_IND) @@ -208,7 +208,7 @@ void TpUartDataLinkLayer::loop() _loopState = IDLE; break; case RX_L_DATA: - if (_platform.millis() - _lastByteRxTime > BYTE_TIMEOUT) + if (millis() - _lastByteRxTime > BYTE_TIMEOUT) { _RxByteCnt = 0; _loopState = IDLE; @@ -217,7 +217,7 @@ void TpUartDataLinkLayer::loop() } if (!_platform.uartAvailable()) break; - _lastByteRxTime = _platform.millis(); + _lastByteRxTime = millis(); rxByte = _platform.readUart(); if (_RxByteCnt == MAX_KNX_TELEGRAM_SIZE) @@ -314,7 +314,7 @@ void TpUartDataLinkLayer::loop() if (!_platform.uartAvailable()) break; rxByte = _platform.readUart(); - _lastByteRxTime = _platform.millis(); + _lastByteRxTime = millis(); if ((rxByte & L_DATA_CON_MASK) == L_DATA_CON) { //println("L_DATA_CON received"); @@ -343,7 +343,7 @@ void TpUartDataLinkLayer::loop() if (_waitConfirm) { - if (_platform.millis() - _waitConfirmStartTime > CONFIRM_TIMEOUT) + if (millis() - _waitConfirmStartTime > CONFIRM_TIMEOUT) { println("L_DATA_CON not received within expected time"); uint8_t cemiBuffer[MAX_KNX_TELEGRAM_SIZE]; @@ -374,13 +374,13 @@ bool TpUartDataLinkLayer::resetChip() { uint8_t cmd = U_RESET_REQ; _platform.writeUart(cmd); - _waitConfirmStartTime = _platform.millis(); + _waitConfirmStartTime = millis(); while (true) { int resp = _platform.readUart(); if (resp == U_RESET_IND) return true; - else if (_platform.millis() - _waitConfirmStartTime > RESET_TIMEOUT) + else if (millis() - _waitConfirmStartTime > RESET_TIMEOUT) return false; } } diff --git a/src/knx/transport_layer.cpp b/src/knx/transport_layer.cpp index 4686716..eb00d64 100644 --- a/src/knx/transport_layer.cpp +++ b/src/knx/transport_layer.cpp @@ -4,10 +4,11 @@ #include "network_layer.h" #include "application_layer.h" #include "platform.h" +#include "bits.h" #include -TransportLayer::TransportLayer(ApplicationLayer& layer, AddressTableObject& gat, Platform& platform): _savedFrame(0), - _savedFrameConnecting(0), _applicationLayer(layer), _groupAddressTable(gat), _platform(platform) +TransportLayer::TransportLayer(ApplicationLayer& layer, AddressTableObject& gat): _savedFrame(0), + _savedFrameConnecting(0), _applicationLayer(layer), _groupAddressTable(gat) { _currentState = Closed; } @@ -528,13 +529,13 @@ void TransportLayer::ackTimeoutIndication() void TransportLayer::loop() { - uint32_t millis = _platform.millis(); - if (_connectionTimeoutEnabled - && (millis - _connectionTimeoutStartMillis) > _connectionTimeoutMillis) + uint32_t milliseconds = millis(); + if (_connectionTimeoutEnabled + && (milliseconds - _connectionTimeoutStartMillis) > _connectionTimeoutMillis) connectionTimeoutIndication(); if (_ackTimeoutEnabled - && (millis - _ackTimeoutStartMillis) > _ackTimeoutMillis) + && (milliseconds - _ackTimeoutStartMillis) > _ackTimeoutMillis) ackTimeoutIndication(); if (_savedConnectingValid) @@ -696,7 +697,7 @@ void TransportLayer::A15(Priority priority, uint16_t tsap) void TransportLayer::enableConnectionTimeout() { - _connectionTimeoutStartMillis = _platform.millis(); + _connectionTimeoutStartMillis = millis(); _connectionTimeoutEnabled = true; } @@ -707,7 +708,7 @@ void TransportLayer::disableConnectionTimeout() void TransportLayer::enableAckTimeout() { - _ackTimeoutStartMillis = _platform.millis(); + _ackTimeoutStartMillis = millis(); _ackTimeoutEnabled = true; } diff --git a/src/knx/transport_layer.h b/src/knx/transport_layer.h index 57d69c5..f2d6c5e 100644 --- a/src/knx/transport_layer.h +++ b/src/knx/transport_layer.h @@ -16,7 +16,7 @@ enum StateType { Closed, OpenIdle, OpenWait, Connecting }; class TransportLayer { public: - TransportLayer(ApplicationLayer& layer, AddressTableObject& gat, Platform& platform); + TransportLayer(ApplicationLayer& layer, AddressTableObject& gat); void networkLayer(NetworkLayer& layer); #pragma region from network layer @@ -114,5 +114,4 @@ private: ApplicationLayer& _applicationLayer; AddressTableObject& _groupAddressTable; NetworkLayer* _networkLayer; - Platform& _platform; }; diff --git a/src/linux_platform.cpp b/src/linux_platform.cpp index 958d288..80bf42e 100644 --- a/src/linux_platform.cpp +++ b/src/linux_platform.cpp @@ -58,7 +58,7 @@ uint32_t LinuxPlatform::currentDefaultGateway() return 0; } -uint32_t LinuxPlatform::millis() +uint32_t millis() { struct timespec spec; @@ -66,7 +66,7 @@ uint32_t LinuxPlatform::millis() return spec.tv_sec * 1000 + round(spec.tv_nsec / 1.0e6); } -void LinuxPlatform::mdelay(uint32_t millis) +void delay(uint32_t millis) { struct timespec ts; ts.tv_sec = millis / 1000; diff --git a/src/linux_platform.h b/src/linux_platform.h index 4881d8a..6fa91d5 100644 --- a/src/linux_platform.h +++ b/src/linux_platform.h @@ -23,8 +23,6 @@ public: void macAddress(uint8_t* addr) override; // basic stuff - uint32_t millis() override; - void mdelay(uint32_t millis) override; void restart() override; void fatalError() override; diff --git a/src/samd_platform.cpp b/src/samd_platform.cpp index d222621..01214cf 100644 --- a/src/samd_platform.cpp +++ b/src/samd_platform.cpp @@ -33,16 +33,6 @@ void SamdPlatform::macAddress(uint8_t * addr) // not needed } -uint32_t SamdPlatform::millis() -{ - return::millis(); -} - -void SamdPlatform::mdelay(uint32_t millis) -{ - delay(millis); -} - void SamdPlatform::restart() { SerialDBG.println("restart"); diff --git a/src/samd_platform.h b/src/samd_platform.h index df7acdb..92af8ed 100644 --- a/src/samd_platform.h +++ b/src/samd_platform.h @@ -1,29 +1,27 @@ -#include "knx/platform.h" - -#include "Arduino.h" - -#ifdef ARDUINO_ARCH_SAMD - -#define SerialDBG SerialUSB -#define SerialKNX Serial1 - -class SamdPlatform : public Platform -{ -public: - SamdPlatform(); - - // ip stuff - uint32_t currentIpAddress(); - uint32_t currentSubnetMask(); - uint32_t currentDefaultGateway(); - void macAddress(uint8_t* addr); - - // basic stuff - uint32_t millis(); - void mdelay(uint32_t millis); - void restart(); - void fatalError(); - +#include "knx/platform.h" + +#include "Arduino.h" + +#ifdef ARDUINO_ARCH_SAMD + +#define SerialDBG SerialUSB +#define SerialKNX Serial1 + +class SamdPlatform : public Platform +{ +public: + SamdPlatform(); + + // ip stuff + uint32_t currentIpAddress(); + uint32_t currentSubnetMask(); + uint32_t currentDefaultGateway(); + void macAddress(uint8_t* addr); + + // basic stuff + void restart(); + void fatalError(); + //multicast void setupMultiCast(uint32_t addr, uint16_t port); void closeMultiCast(); @@ -31,20 +29,20 @@ public: int readBytes(uint8_t* buffer, uint16_t maxLen); //uart - virtual void setupUart(); - virtual void closeUart(); - virtual int uartAvailable(); - virtual size_t writeUart(const uint8_t data); - virtual size_t writeUart(const uint8_t *buffer, size_t size); - virtual int readUart(); + virtual void setupUart(); + virtual void closeUart(); + virtual int uartAvailable(); + virtual size_t writeUart(const uint8_t data); + virtual size_t writeUart(const uint8_t *buffer, size_t size); + virtual int readUart(); virtual size_t readBytesUart(uint8_t *buffer, size_t length); //memory uint8_t* getEepromBuffer(uint16_t size); void commitToEeprom(); -private: - uint32_t _mulitcastAddr; - uint16_t _mulitcastPort; -}; - +private: + uint32_t _mulitcastAddr; + uint16_t _mulitcastPort; +}; + #endif \ No newline at end of file diff --git a/visualstudio/knx-bme680.vgdbproj b/visualstudio/knx-bme680.vgdbproj index 2998acb..e9a2452 100644 --- a/visualstudio/knx-bme680.vgdbproj +++ b/visualstudio/knx-bme680.vgdbproj @@ -272,63 +272,6 @@ Sketch - - Arduino_Genuino_Zero_(Native_USB_Port) - - - - - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - true - false - None - false - false - main - true - false - false - false - 0 - - - true - Auto - 0 - false - false - true - false - false - - _estack - 0 - false - true - - - arduino:samd:arduino_zero_native - - - - Sketch - - \ No newline at end of file diff --git a/visualstudio/knx-demo.vgdbproj b/visualstudio/knx-demo.vgdbproj index f74ad5d..56b2942 100644 --- a/visualstudio/knx-demo.vgdbproj +++ b/visualstudio/knx-demo.vgdbproj @@ -173,69 +173,6 @@ - - Arduino Genuino Zero (Native USB Port) - - - - - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - true - false - None - false - false - main - true - false - false - false - 0 - - - gdbsim - - - - - true - Disabled - 0 - false - false - true - false - false - - _estack - 0 - false - true - - - arduino:samd:arduino_zero_native - COM11 - - - - Sketch - - NodeMCU_1 0_(ESP-12E_Module) @@ -334,6 +271,63 @@ Sketch + + Arduino_Genuino_Zero_(Native_USB_Port) + + + + + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + true + false + None + false + false + main + true + false + false + false + 0 + + + true + Auto + 0 + false + false + true + false + false + + _estack + 0 + false + true + + + arduino:samd:arduino_zero_native + + + + Sketch + + \ No newline at end of file diff --git a/visualstudio/knx-sonoffS20.vgdbproj b/visualstudio/knx-sonoffS20.vgdbproj index 3b957d8..53b75db 100644 --- a/visualstudio/knx-sonoffS20.vgdbproj +++ b/visualstudio/knx-sonoffS20.vgdbproj @@ -25,8 +25,10 @@ ..\.. + false Output\$(PlatformName.defuse)\$(ConfigurationName.defuse) true + @@ -171,69 +173,6 @@ - - Arduino Genuino Zero (Native USB Port) - - - - - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - true - false - None - false - false - main - true - false - false - false - 0 - - - gdbsim - - - - - true - Disabled - 0 - false - false - true - false - false - - _estack - 0 - false - true - - - arduino:samd:arduino_zero_native - COM11 - - - - Sketch - - NodeMCU 1 0 (ESP-12E Module) diff --git a/visualstudio/knx.sln b/visualstudio/knx.sln index 0d5f69e..166482e 100644 --- a/visualstudio/knx.sln +++ b/visualstudio/knx.sln @@ -18,124 +18,101 @@ 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 RelWithDebInfo|x86 = RelWithDebInfo|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {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|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Mixed.ActiveCfg = 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|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x64.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) - {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|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x64.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {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|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {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|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x64.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {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|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) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.Build.0 = 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|NodeMCU_1 0_(ESP-12E_Module) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Mixed.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|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|Mixed.ActiveCfg = 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|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|NodeMCU_1 0_(ESP-12E_Module) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Mixed.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|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) + {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 = Release|NodeMCU_1 0_(ESP-12E_Module) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x64.Build.0 = Release|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}.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|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}.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|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}.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|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) {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 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x86.ActiveCfg = Debug|Win32 - {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 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|VisualGDB.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|x64.ActiveCfg = Release|Win32 @@ -144,7 +121,6 @@ Global {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 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x86.ActiveCfg = Release|Win32 @@ -153,45 +129,37 @@ Global {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 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|VisualGDB.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x64.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x64.Build.0 = Release|Win32 {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|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Generic ESP8266 Module {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|VisualGDB.ActiveCfg = Debug|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|x64.ActiveCfg = Debug|Generic ESP8266 Module {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|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Generic ESP8266 Module {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|Generic ESP8266 Module - {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|VisualGDB.Build.0 = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x64.ActiveCfg = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x64.Build.0 = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x86.ActiveCfg = Release|Generic ESP8266 Module {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).ActiveCfg = Release|Generic ESP8266 Module {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|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Generic ESP8266 Module {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|Generic ESP8266 Module - {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|VisualGDB.Build.0 = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x64.ActiveCfg = Release|Generic ESP8266 Module @@ -200,17 +168,13 @@ Global {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x86.Build.0 = Release|Generic ESP8266 Module {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|Mixed.ActiveCfg = Debug|Win32 - {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|VisualGDB.ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|x64.ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|x86.ActiveCfg = Debug|Win32 - {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|x86.Build.0 = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Mixed.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Mixed.Build.0 = Release|Win32 - {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32 - {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|VisualGDB.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|VisualGDB.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|x64.ActiveCfg = Release|Win32 @@ -219,7 +183,6 @@ Global {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|x86.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|Mixed.ActiveCfg = Release|Win32 - {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|VisualGDB.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|x64.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|x86.ActiveCfg = Release|Win32 @@ -228,8 +191,6 @@ Global {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Mixed.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Mixed.Build.0 = Release|Win32 - {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32 - {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|VisualGDB.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|x64.ActiveCfg = Release|Win32 @@ -238,8 +199,6 @@ Global {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|x86.Build.0 = Release|Win32 {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|Mixed.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) - {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) - {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|x64.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) @@ -247,8 +206,6 @@ Global {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -257,8 +214,6 @@ Global {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -266,8 +221,6 @@ Global {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) From d23613ad65ac4258c5a1728c5c232811036300a8 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 22 Aug 2019 22:57:35 +0200 Subject: [PATCH 04/13] convert KnxFacade to a template class --- knx-linux/main.cpp | 43 +++---- src/knx/bau.h | 1 + src/knx/bits.h | 15 +++ src/knx/platform.h | 2 - src/knx_facade.cpp | 231 ++------------------------------- src/knx_facade.h | 283 +++++++++++++++++++++++++++++++++++------ src/linux_platform.cpp | 29 ++++- src/linux_platform.h | 4 +- 8 files changed, 314 insertions(+), 294 deletions(-) diff --git a/knx-linux/main.cpp b/knx-linux/main.cpp index 31723b6..3a38d4a 100644 --- a/knx-linux/main.cpp +++ b/knx-linux/main.cpp @@ -6,15 +6,14 @@ #include #include -KnxFacade* knx = 0; -Platform* platform = 0; +KnxFacade knx; long lastsend = 0; -#define CURR knx->getGroupObject(1) -#define MAX knx->getGroupObject(2) -#define MIN knx->getGroupObject(3) -#define RESET knx->getGroupObject(4) +#define CURR knx.getGroupObject(1) +#define MAX knx.getGroupObject(2) +#define MIN knx.getGroupObject(3) +#define RESET knx.getGroupObject(4) void measureTemp() { @@ -52,7 +51,7 @@ void resetCallback(GroupObject& go) void appLoop() { - if (!knx->configured()) + if (!knx.configured()) return; measureTemp(); @@ -61,12 +60,12 @@ void appLoop() void setup() { srand((unsigned int)time(NULL)); - knx->readMemory(); + knx.readMemory(); - if (knx->induvidualAddress() == 0) - knx->progMode(true); + if (knx.induvidualAddress() == 0) + knx.progMode(true); - if (knx->configured()) + if (knx.configured()) { CURR.dataPointType(Dpt(9, 1)); MIN.dataPointType(Dpt(9, 1)); @@ -75,27 +74,25 @@ void setup() MAX.valueNoSend(-273.0); RESET.dataPointType(Dpt(1, 15)); RESET.callback(resetCallback); - printf("Timeout: %d\n", knx->paramWord(0)); - printf("Zykl. senden: %d\n", knx->paramByte(2)); - printf("Min/Max senden: %d\n", knx->paramByte(3)); - printf("Aenderung senden: %d\n", knx->paramByte(4)); - printf("Abgleich %d\n", knx->paramByte(5)); + printf("Timeout: %d\n", knx.paramWord(0)); + printf("Zykl. senden: %d\n", knx.paramByte(2)); + printf("Min/Max senden: %d\n", knx.paramByte(3)); + printf("Aenderung senden: %d\n", knx.paramByte(4)); + printf("Abgleich %d\n", knx.paramByte(5)); } - knx->start(); + knx.start(); } int main(int argc, char **argv) { - platform = new LinuxPlatform(argc, argv); - Bau57B0 bau(*platform); - knx = new KnxFacade(bau); - + knx.platform().cmdLineArgs(argc, argv); + setup(); while (1) { - knx->loop(); - if(knx->configured()) + knx.loop(); + if(knx.configured()) appLoop(); delay(100); } diff --git a/src/knx/bau.h b/src/knx/bau.h index a6cbd8d..14ca5b5 100644 --- a/src/knx/bau.h +++ b/src/knx/bau.h @@ -5,6 +5,7 @@ class BusAccessUnit { public: + virtual ~BusAccessUnit() {} virtual void groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, bool status); virtual void groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType); virtual void groupValueReadResponseConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopTtype, diff --git a/src/knx/bits.h b/src/knx/bits.h index b261cec..49f20e8 100644 --- a/src/knx/bits.h +++ b/src/knx/bits.h @@ -14,8 +14,23 @@ #define DEC 10 #define HEX 16 +#define INPUT (0x0) +#define OUTPUT (0x1) +#define INPUT_PULLUP (0x2) +#define INPUT_PULLDOWN (0x3) + +#define LOW (0x0) +#define HIGH (0x1) +#define CHANGE 2 +#define FALLING 3 +#define RISING 4 + void delay(uint32_t millis); uint32_t millis(); +void pinMode(uint32_t dwPin, uint32_t dwMode); +void digitalWrite(uint32_t dwPin, uint32_t dwVal); +typedef void (*voidFuncPtr)(void); +void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode); #elif ARDUINO_ARCH_SAMD #include diff --git a/src/knx/platform.h b/src/knx/platform.h index 16c9bf0..497d98e 100644 --- a/src/knx/platform.h +++ b/src/knx/platform.h @@ -13,10 +13,8 @@ class Platform virtual uint32_t currentDefaultGateway() = 0; virtual void macAddress(uint8_t* data) = 0; - //virtual uint32_t millis() = 0; virtual void restart() = 0; virtual void fatalError() = 0; - //virtual void mdelay(uint32_t millis) = 0; virtual void setupMultiCast(uint32_t addr, uint16_t port) = 0; virtual void closeMultiCast() = 0; diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 34ae0dc..63feeb0 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -3,232 +3,17 @@ #include "knx/bits.h" #ifdef ARDUINO_ARCH_SAMD -SamdPlatform platform; -Bau07B0 bau(platform); +KnxFacade knx; #define ICACHE_RAM_ATTR #elif ARDUINO_ARCH_ESP8266 -EspPlatform platform; -Bau57B0 bau(platform); -#elif __linux__ //linux -// noops on linux -#define digitalWrite(a, b) -#define pinMode(a, b) -#define attachInterrupt(a, b, c) +KnxFacade knx; +#elif __linux__ +#define ICACHE_RAM_ATTR #endif -bool _toogleProgMode = false; -bool _progLedState = false; - -#ifndef __linux__ -KnxFacade knx(bau); ICACHE_RAM_ATTR void buttonUp() { - _toogleProgMode = true; -} -#endif - -KnxFacade::KnxFacade(BauSystemB &bau) : _bau(bau) -{ - manufacturerId(0xfa); - _bau.addSaveRestore(this); -} - -bool KnxFacade::enabled() -{ - return _bau.enabled(); -} - -void KnxFacade::enabled(bool value) -{ - _bau.enabled(true); -} - -bool KnxFacade::progMode() -{ - return _bau.deviceObject().progMode(); -} - -void KnxFacade::progMode(bool value) -{ - _bau.deviceObject().progMode(value); -} - -bool KnxFacade::configured() -{ - return _bau.configured(); -} - -uint32_t KnxFacade::ledPinActiveOn() -{ - return _ledPinActiveOn; -} - -void KnxFacade::ledPinActiveOn(uint32_t value) -{ - _ledPinActiveOn = value; -} - -uint32_t KnxFacade::ledPin() -{ - return _ledPin; -} - -void KnxFacade::ledPin(uint32_t value) -{ - _ledPin = value; -} - -uint32_t KnxFacade::buttonPin() -{ - return _buttonPin; -} - -void KnxFacade::buttonPin(uint32_t value) -{ - _buttonPin = value; -} - -void KnxFacade::readMemory() -{ - _bau.readMemory(); -} - -void KnxFacade::writeMemory() -{ - _bau.writeMemory(); -} - -void KnxFacade::loop() -{ - if (progMode() != _progLedState) - { - _progLedState = progMode(); - if (_progLedState) - { - println("progmode on"); - digitalWrite(knx.ledPin(), _ledPinActiveOn); - } - else - { - println("progmode off"); - digitalWrite(knx.ledPin(), HIGH - _ledPinActiveOn); - } - } - if (_toogleProgMode) - { - progMode(!progMode()); - _toogleProgMode = false; - } - _bau.loop(); -} - -void KnxFacade::manufacturerId(uint16_t value) -{ - _bau.deviceObject().manufacturerId(value); -} - -void KnxFacade::bauNumber(uint32_t value) -{ - _bau.deviceObject().bauNumber(value); -} - -uint16_t KnxFacade::induvidualAddress() -{ - return _bau.deviceObject().induvidualAddress(); -} - -void KnxFacade::orderNumber(const char *value) -{ - _bau.deviceObject().orderNumber(value); -} - -void KnxFacade::hardwareType(uint8_t *value) -{ - _bau.deviceObject().hardwareType(value); -} - -void KnxFacade::version(uint16_t value) -{ - _bau.deviceObject().version(value); -} - -void KnxFacade::start() -{ - pinMode(_ledPin, OUTPUT); - - digitalWrite(_ledPin, HIGH - _ledPinActiveOn); - - pinMode(_buttonPin, INPUT_PULLUP); - - attachInterrupt(_buttonPin, buttonUp, RISING); - enabled(true); -} - -uint8_t *KnxFacade::paramData(uint32_t addr) -{ - if (!_bau.configured()) - return nullptr; - - return _bau.parameters().data(addr); -} - -uint8_t KnxFacade::paramByte(uint32_t addr) -{ - if (!_bau.configured()) - return 0; - - return _bau.parameters().getByte(addr); -} - -uint16_t KnxFacade::paramWord(uint32_t addr) -{ - if (!_bau.configured()) - return 0; - - return _bau.parameters().getWord(addr); -} - -uint32_t KnxFacade::paramInt(uint32_t addr) -{ - if (!_bau.configured()) - return 0; - - return _bau.parameters().getInt(addr); -} - -void KnxFacade::setSaveCallback(saveRestoreCallback func) -{ - _saveCallback = func; -} - -void KnxFacade::setRestoreCallback(saveRestoreCallback func) -{ - _restoreCallback = func; -} - -uint8_t *KnxFacade::save(uint8_t *buffer) -{ - if (_saveCallback != 0) - return _saveCallback(buffer); - - return buffer; -} - -uint8_t *KnxFacade::restore(uint8_t *buffer) -{ - if (_restoreCallback != 0) - return _restoreCallback(buffer); - - return buffer; -} - -GroupObject &KnxFacade::getGroupObject(uint16_t goNr) -{ - return _bau.groupObjectTable().get(goNr); -} - - -void KnxFacade::restart(uint16_t individualAddress) -{ - _bau.restartRequest(individualAddress); -} + #ifndef __linux__ + knx._toogleProgMode = true; + #endif +} \ No newline at end of file diff --git a/src/knx_facade.h b/src/knx_facade.h index 8155a55..469c4d3 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -1,5 +1,7 @@ #pragma once +#include "knx/bits.h" + #ifdef ARDUINO_ARCH_SAMD #include "samd_platform.h" #include "knx/bau07B0.h" @@ -10,67 +12,268 @@ #include "linux_platform.h" #include "knx/bau57B0.h" #define LED_BUILTIN 0 -#define HIGH 1 -#define LOW 0 #endif - +void buttonUp(); typedef uint8_t* (*saveRestoreCallback)(uint8_t* buffer); -class KnxFacade : private SaveRestore +template class KnxFacade : private SaveRestore { -public: - KnxFacade(BauSystemB& bau); - bool enabled(); - void enabled(bool value); - bool progMode(); - void progMode(bool value); - bool configured(); + friend void buttonUp(); + + public: + KnxFacade() : _platformPtr(new P()), _bauPtr(new B(*_platformPtr)), _bau(*_bauPtr) + {} + + virtual ~KnxFacade() + { + if (_bauPtr) + delete _bauPtr; + + if (_platformPtr) + delete _platformPtr; + } + + KnxFacade(B& bau) : _bau(bau) + { + manufacturerId(0xfa); + _bau.addSaveRestore(this); + } + + P& platform() + { + return *_platformPtr; + } + + B& bau() + { + return _bau; + } + + bool enabled() + { + return _bau.enabled(); + } + + void enabled(bool value) + { + _bau.enabled(true); + } + + bool progMode() + { + return _bau.deviceObject().progMode(); + } + + void progMode(bool value) + { + _bau.deviceObject().progMode(value); + } + + bool configured() + { + return _bau.configured(); + } + /** * returns HIGH if led is active on HIGH, LOW otherwise */ - uint32_t ledPinActiveOn(); + uint32_t ledPinActiveOn() + { + return _ledPinActiveOn; + } + /** * Sets if the programming led is active on HIGH or LOW. * * Set to HIGH for GPIO--RESISTOR--LED--GND or to LOW for GPIO--LED--RESISTOR--VDD */ - void ledPinActiveOn(uint32_t value); - uint32_t ledPin(); - void ledPin(uint32_t value); - uint32_t buttonPin(); - void buttonPin(uint32_t value); - void readMemory(); - void writeMemory(); - uint16_t induvidualAddress(); - void loop(); - void manufacturerId(uint16_t value); - void bauNumber(uint32_t value); - void orderNumber(const char* value); - void hardwareType(uint8_t* value); - void version(uint16_t value); - void start(); - void setSaveCallback(saveRestoreCallback func); - void setRestoreCallback(saveRestoreCallback func); - uint8_t* paramData(uint32_t addr); - uint8_t paramByte(uint32_t addr); - uint16_t paramWord(uint32_t addr); - uint32_t paramInt(uint32_t addr); - GroupObject& getGroupObject(uint16_t goNr); - void restart(uint16_t individualAddress); + void ledPinActiveOn(uint32_t value) + { + _ledPinActiveOn = value; + } + + uint32_t ledPin() + { + return _ledPin; + } + + void ledPin(uint32_t value) + { + _ledPin = value; + } + + uint32_t buttonPin() + { + return _buttonPin; + } + + void buttonPin(uint32_t value) + { + _buttonPin = value; + } + + void readMemory() + { + _bau.readMemory(); + } + + void writeMemory() + { + _bau.writeMemory(); + } + + uint16_t induvidualAddress() + { + return _bau.deviceObject().induvidualAddress(); + } + + void loop() + { + if (progMode() != _progLedState) + { + _progLedState = progMode(); + if (_progLedState) + { + println("progmode on"); + digitalWrite(ledPin(), _ledPinActiveOn); + } + else + { + println("progmode off"); + digitalWrite(ledPin(), HIGH - _ledPinActiveOn); + } + } + if (_toogleProgMode) + { + progMode(!progMode()); + _toogleProgMode = false; + } + _bau.loop(); + } + + void manufacturerId(uint16_t value) + { + _bau.deviceObject().manufacturerId(value); + } + + void bauNumber(uint32_t value) + { + _bau.deviceObject().bauNumber(value); + } + + void orderNumber(const char* value) + { + _bau.deviceObject().orderNumber(value); + } + + void hardwareType(uint8_t* value) + { + _bau.deviceObject().hardwareType(value); + } + + void version(uint16_t value) + { + _bau.deviceObject().version(value); + } + + void start() + { + pinMode(_ledPin, OUTPUT); + + digitalWrite(_ledPin, HIGH - _ledPinActiveOn); + + pinMode(_buttonPin, INPUT_PULLUP); + + attachInterrupt(_buttonPin, buttonUp, RISING); + enabled(true); + } + + void setSaveCallback(saveRestoreCallback func) + { + _saveCallback = func; + } + + void setRestoreCallback(saveRestoreCallback func) + { + _restoreCallback = func; + } + + uint8_t* paramData(uint32_t addr) + { + if (!_bau.configured()) + return nullptr; + + return _bau.parameters().data(addr); + } + + uint8_t paramByte(uint32_t addr) + { + if (!_bau.configured()) + return 0; + + return _bau.parameters().getByte(addr); + } + + uint16_t paramWord(uint32_t addr) + { + if (!_bau.configured()) + return 0; + + return _bau.parameters().getWord(addr); + } + + uint32_t paramInt(uint32_t addr) + { + if (!_bau.configured()) + return 0; + + return _bau.parameters().getInt(addr); + } + + GroupObject& getGroupObject(uint16_t goNr) + { + return _bau.groupObjectTable().get(goNr); + } + + void restart(uint16_t individualAddress) + { + _bau.restartRequest(individualAddress); + } private: - BauSystemB& _bau; + P* _platformPtr = 0; + B* _bauPtr = 0; + B& _bau; uint32_t _ledPinActiveOn = LOW; uint32_t _ledPin = LED_BUILTIN; uint32_t _buttonPin = 0; saveRestoreCallback _saveCallback = 0; saveRestoreCallback _restoreCallback = 0; + bool _toogleProgMode = false; + bool _progLedState = false; - uint8_t* save(uint8_t* buffer); - uint8_t* restore(uint8_t* buffer); + uint8_t* save(uint8_t* buffer) + { + if (_saveCallback != 0) + return _saveCallback(buffer); + + return buffer; + } + + uint8_t* restore(uint8_t* buffer) + { + if (_restoreCallback != 0) + return _restoreCallback(buffer); + + return buffer; + } }; -#ifndef __linux__ -extern KnxFacade knx; +#ifdef ARDUINO_ARCH_SAMD +extern KnxFacade knx; +#elif ARDUINO_ARCH_ESP8266 +extern KnxFacade knx; +#elif __linux__ +// no predefined global instance #endif \ No newline at end of file diff --git a/src/linux_platform.cpp b/src/linux_platform.cpp index 80bf42e..3f48a18 100644 --- a/src/linux_platform.cpp +++ b/src/linux_platform.cpp @@ -29,13 +29,10 @@ #define MAX_MEM 4096 -LinuxPlatform::LinuxPlatform(int argc, char** argv) +LinuxPlatform::LinuxPlatform() { Platform::_memoryReference = (uint8_t*)malloc(MAX_MEM); _currentMaxMem = Platform::_memoryReference; - _args = new char*[argc + 1]; - memcpy(_args, argv, argc * sizeof(char*)); - _args[argc] = 0; } LinuxPlatform::~LinuxPlatform() @@ -500,4 +497,26 @@ void println(void) printf("\n"); } -#endif \ No newline at end of file +void pinMode(uint32_t dwPin, uint32_t dwMode) +{ +} + +void digitalWrite(uint32_t dwPin, uint32_t dwVal) +{ +} + +typedef void (*voidFuncPtr)(void); +void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) +{ +} +#endif + +void LinuxPlatform::cmdLineArgs(int argc, char** argv) +{ + if (_args) + delete[] _args; + + _args = new char*[argc + 1]; + memcpy(_args, argv, argc * sizeof(char*)); + _args[argc] = 0; +} diff --git a/src/linux_platform.h b/src/linux_platform.h index 6fa91d5..722c537 100644 --- a/src/linux_platform.h +++ b/src/linux_platform.h @@ -10,9 +10,11 @@ class LinuxPlatform: public Platform using Platform::_memoryReference; using Platform::memoryReference; public: - LinuxPlatform(int argc, char** argv); + LinuxPlatform(); virtual ~LinuxPlatform(); + void cmdLineArgs(int argc, char** argv); + std::string flashFilePath(); void flashFilePath(const std::string path); From 2b7e24cab06d2051792ca47119976d94e2623a44 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 23 Aug 2019 10:56:02 +0200 Subject: [PATCH 05/13] fix build --- src/linux_platform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linux_platform.cpp b/src/linux_platform.cpp index 3f48a18..8445381 100644 --- a/src/linux_platform.cpp +++ b/src/linux_platform.cpp @@ -509,7 +509,6 @@ typedef void (*voidFuncPtr)(void); void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) { } -#endif void LinuxPlatform::cmdLineArgs(int argc, char** argv) { @@ -520,3 +519,4 @@ void LinuxPlatform::cmdLineArgs(int argc, char** argv) memcpy(_args, argv, argc * sizeof(char*)); _args[argc] = 0; } +#endif \ No newline at end of file From 14d2da82f17a918488968b0e6d71740a4b1f528e Mon Sep 17 00:00:00 2001 From: Fabian Schmieder Date: Mon, 26 Aug 2019 13:45:14 +0200 Subject: [PATCH 06/13] added ESP32 platform (#30) * added ESP32 platform * fixed typo in comments --- examples/knx-demo/knx-demo.ino | 2 +- src/esp32_platform.cpp | 331 +++++++++++++++++++++++++++++++++ src/esp32_platform.h | 48 +++++ src/knx/bits.h | 3 + src/knx_facade.cpp | 4 +- src/knx_facade.h | 6 + 6 files changed, 392 insertions(+), 2 deletions(-) create mode 100644 src/esp32_platform.cpp create mode 100644 src/esp32_platform.h diff --git a/examples/knx-demo/knx-demo.ino b/examples/knx-demo/knx-demo.ino index a4ee3f4..34cc8fd 100644 --- a/examples/knx-demo/knx-demo.ino +++ b/examples/knx-demo/knx-demo.ino @@ -84,7 +84,7 @@ void setup() SerialDBG.println(knx.paramByte(4)); } - // pin or GPIO the programming led is connected to. Default is LED_BUILDIN + // pin or GPIO the programming led is connected to. Default is LED_BUILTIN // knx.ledPin(LED_BUILTIN); // is the led active on HIGH or low? Default is LOW // knx.ledPinActiveOn(HIGH); diff --git a/src/esp32_platform.cpp b/src/esp32_platform.cpp new file mode 100644 index 0000000..3560900 --- /dev/null +++ b/src/esp32_platform.cpp @@ -0,0 +1,331 @@ +#include "esp32_platform.h" + +#ifdef ARDUINO_ARCH_ESP32 +#include +#include + +#include "knx/bits.h" + +#define SerialDBG Serial + +Esp32Platform::Esp32Platform() +{ +} + +uint32_t Esp32Platform::currentIpAddress() +{ + return WiFi.localIP(); +} + +uint32_t Esp32Platform::currentSubnetMask() +{ + return WiFi.subnetMask(); +} + +uint32_t Esp32Platform::currentDefaultGateway() +{ + return WiFi.gatewayIP(); +} + +void Esp32Platform::macAddress(uint8_t * addr) +{ + esp_wifi_get_mac(WIFI_IF_STA, addr); +} + +void Esp32Platform::restart() +{ + Serial.println("restart"); + ESP.restart(); +} + +void Esp32Platform::fatalError() +{ + Serial.println("GURU MEDITATION - fatal error!"); + const int period = 200; + while (true) + { +#ifdef LED_BUILTIN + if ((millis() % period) > (period / 2)) + digitalWrite(LED_BUILTIN, HIGH); + else + digitalWrite(LED_BUILTIN, LOW); +#endif + } +} + +void Esp32Platform::setupMultiCast(uint32_t addr, uint16_t port) +{ + _mulitcastAddr = htonl(addr); + _mulitcastPort = port; + IPAddress mcastaddr(_mulitcastAddr); + + Serial.printf("setup multicast addr: %s port: %d ip: %s\n", mcastaddr.toString().c_str(), port, + WiFi.localIP().toString().c_str()); + uint8_t result = _udp.beginMulticast(mcastaddr, port); + Serial.printf("result %d\n", result); +} + +void Esp32Platform::closeMultiCast() +{ + _udp.stop(); +} + +bool Esp32Platform::sendBytes(uint8_t * buffer, uint16_t len) +{ + //printHex("<- ",buffer, len); + int result = 0; + result = _udp.beginMulticastPacket(); + result = _udp.write(buffer, len); + result = _udp.endPacket(); + return true; +} + +int Esp32Platform::readBytes(uint8_t * buffer, uint16_t maxLen) +{ + int len = _udp.parsePacket(); + if (len == 0) + return 0; + + if (len > maxLen) + { + Serial.printf("udp buffer to small. was %d, needed %d\n", maxLen, len); + fatalError(); + } + + _udp.read(buffer, len); + //printHex("-> ", buffer, len); + return len; +} + +uint8_t * Esp32Platform::getEepromBuffer(uint16_t size) +{ + EEPROM.begin(size); + return EEPROM.getDataPtr(); +} + +void Esp32Platform::commitToEeprom() +{ + EEPROM.commit(); +} + +void Esp32Platform::setupUart() +{ + Serial.begin(19200, SERIAL_8E1); + while (!Serial) ; +} + + +void Esp32Platform::closeUart() +{ + Serial.end(); +} + + +int Esp32Platform::uartAvailable() +{ + return Serial.available(); +} + + +size_t Esp32Platform::writeUart(const uint8_t data) +{ + printHex(" 0) + printHex("p>", (uint8_t*)&val, 1); + return val; +} + + +size_t Esp32Platform::readBytesUart(uint8_t *buffer, size_t length) +{ + size_t toRead = length; + uint8_t* pos = buffer; + while (toRead > 0) + { + size_t val = Serial.readBytes(pos, toRead); + pos += val; + toRead -= val; + } + + + printHex("p>", buffer, length); + return length; +} + +void print(const char* s) +{ + Serial.printf("%s", s); +} +void print(char c) +{ + Serial.printf("%c", c); +} + +void print(unsigned char num) +{ + print(num, DEC); +} + +void print(unsigned char num, int base) +{ + if (base == HEX) + Serial.printf("%X", num); + else + Serial.printf("%d", num); +} + +void print(int num) +{ + print(num, DEC); +} + +void print(int num, int base) +{ + if (base == HEX) + Serial.printf("%X", num); + else + Serial.printf("%d", num); +} + +void print(unsigned int num) +{ + print(num, DEC); +} + +void print(unsigned int num, int base) +{ + if (base == HEX) + Serial.printf("%X", num); + else + Serial.printf("%d", num); +} + +void print(long num) +{ + print(num, DEC); +} + +void print(long num, int base) +{ + if (base == HEX) + Serial.printf("%lX", num); + else + Serial.printf("%ld", num); +} + +void print(unsigned long num) +{ + print(num, DEC); +} + +void print(unsigned long num, int base) +{ + if (base == HEX) + Serial.printf("%lX", num); + else + Serial.printf("%ld", num); +} + +void print(double num) +{ + Serial.printf("%f", num); +} + +void println(const char* s) +{ + Serial.printf("%s\n", s); +} +void println(char c) +{ + Serial.printf("%c\n", c); +} + +void println(unsigned char num) +{ + println(num, DEC); +} + +void println(unsigned char num, int base) +{ + if (base == HEX) + Serial.printf("%X\n", num); + else + Serial.printf("%d\n", num); +} + +void println(int num) +{ + println(num, DEC); +} + +void println(int num, int base) +{ + if (base == HEX) + Serial.printf("%X\n", num); + else + Serial.printf("%d\n", num); +} + +void println(unsigned int num) +{ + println(num, DEC); +} + +void println(unsigned int num, int base) +{ + if (base == HEX) + Serial.printf("%X\n", num); + else + Serial.printf("%d\n", num); +} + +void println(long num) +{ + println(num, DEC); +} + +void println(long num, int base) +{ + if (base == HEX) + Serial.printf("%lX\n", num); + else + Serial.printf("%ld\n", num); +} + +void println(unsigned long num) +{ + println(num, DEC); +} + +void println(unsigned long num, int base) +{ + if (base == HEX) + Serial.printf("%lX\n", num); + else + Serial.printf("%ld\n", num); +} + +void println(double num) +{ + Serial.printf("%f\n", num); +} + +void println(void) +{ + Serial.printf("\n"); +} +#endif diff --git a/src/esp32_platform.h b/src/esp32_platform.h new file mode 100644 index 0000000..4f89656 --- /dev/null +++ b/src/esp32_platform.h @@ -0,0 +1,48 @@ +#ifdef ARDUINO_ARCH_ESP32 +#include "knx/platform.h" +#include "knx/platform.h" +#include +#include + +#define SerialDBG Serial + +class Esp32Platform : public Platform +{ +public: + Esp32Platform(); + + // ip stuff + uint32_t currentIpAddress(); + uint32_t currentSubnetMask(); + uint32_t currentDefaultGateway(); + void macAddress(uint8_t* addr); + + // basic stuff + void restart(); + void fatalError(); + + //multicast + void setupMultiCast(uint32_t addr, uint16_t port); + void closeMultiCast(); + bool sendBytes(uint8_t* buffer, uint16_t len); + int readBytes(uint8_t* buffer, uint16_t maxLen); + + //uart + void setupUart(); + void closeUart(); + int uartAvailable(); + size_t writeUart(const uint8_t data); + size_t writeUart(const uint8_t *buffer, size_t size); + int readUart(); + size_t readBytesUart(uint8_t *buffer, size_t length); + + //memory + uint8_t* getEepromBuffer(uint16_t size); + void commitToEeprom(); +private: + uint32_t _mulitcastAddr; + uint16_t _mulitcastPort; + WiFiUDP _udp; +}; + +#endif \ No newline at end of file diff --git a/src/knx/bits.h b/src/knx/bits.h index 49f20e8..fbe8d90 100644 --- a/src/knx/bits.h +++ b/src/knx/bits.h @@ -44,6 +44,9 @@ void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode); #elif ARDUINO_ARCH_ESP8266 #include #include +#elif ARDUINO_ARCH_ESP32 +#include +#include #endif void print(const char[]); diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 63feeb0..9f32b9b 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -7,6 +7,8 @@ KnxFacade knx; #define ICACHE_RAM_ATTR #elif ARDUINO_ARCH_ESP8266 KnxFacade knx; +#elif ARDUINO_ARCH_ESP32 +KnxFacade knx; #elif __linux__ #define ICACHE_RAM_ATTR #endif @@ -15,5 +17,5 @@ ICACHE_RAM_ATTR void buttonUp() { #ifndef __linux__ knx._toogleProgMode = true; - #endif + #endif } \ No newline at end of file diff --git a/src/knx_facade.h b/src/knx_facade.h index 469c4d3..bf1368d 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -8,6 +8,10 @@ #elif ARDUINO_ARCH_ESP8266 #include "esp_platform.h" #include "knx/bau57B0.h" +#elif ARDUINO_ARCH_ESP32 +#define LED_BUILTIN 13 +#include "esp32_platform.h" +#include "knx/bau57B0.h" #else #include "linux_platform.h" #include "knx/bau57B0.h" @@ -274,6 +278,8 @@ template class KnxFacade : private SaveRestore extern KnxFacade knx; #elif ARDUINO_ARCH_ESP8266 extern KnxFacade knx; +#elif ARDUINO_ARCH_ESP32 +extern KnxFacade knx; #elif __linux__ // no predefined global instance #endif \ No newline at end of file From 5a93bbc91c6618d2179244685b260cf4f77193fc Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 26 Aug 2019 21:26:55 +0200 Subject: [PATCH 07/13] create ArduinoPlatform to reduce code duplication --- examples/knx-bme680/knx-bme680.ino | 35 +-- examples/knx-demo/knx-demo.ino | 1 + examples/knx-hdc1008/knx-hdc1008.ino | 1 + examples/knx-sonoffS20/knx-sonoffS20.ino | 1 + src/arduino_platform.cpp | 260 +++++++++++++++++++++++ src/arduino_platform.h | 42 ++++ src/esp32_platform.cpp | 240 +-------------------- src/esp32_platform.h | 35 ++- src/esp_platform.cpp | 235 +------------------- src/esp_platform.h | 39 ++-- src/samd_platform.cpp | 250 +--------------------- src/samd_platform.h | 33 +-- visualstudio/knx-demo.vgdbproj | 90 ++++++++ visualstudio/knx.sln | 42 ++++ 14 files changed, 489 insertions(+), 815 deletions(-) create mode 100644 src/arduino_platform.cpp create mode 100644 src/arduino_platform.h diff --git a/examples/knx-bme680/knx-bme680.ino b/examples/knx-bme680/knx-bme680.ino index 465f4cd..019c80c 100644 --- a/examples/knx-bme680/knx-bme680.ino +++ b/examples/knx-bme680/knx-bme680.ino @@ -42,9 +42,10 @@ bool trigger = false; // Entry point for the example void setup(void) { - Serial.begin(115200); + SerialDBG.begin(115200); + ArduinoPlatform::SerialDebug = SerialDBG; delay(5000); - Serial.println("start"); + SerialDBG.println("start"); #ifdef ARDUINO_ARCH_ESP8266 WiFiManager wifiManager; @@ -91,8 +92,8 @@ void setup(void) if (knx.configured()) { cyclSend = knx.paramInt(0); - Serial.print("Zykl. send:"); - Serial.println(cyclSend); + SerialDBG.print("Zykl. send:"); + SerialDBG.println(cyclSend); goRawTemperature.dataPointType(Dpt(9, 0)); goPressure.dataPointType(Dpt(9, 0)); goRawHumidity.dataPointType(Dpt(9, 0)); @@ -111,7 +112,7 @@ void setup(void) iaqSensor.updateSubscription(sensorList, sizeof(sensorList)/sizeof(bsec_virtual_sensor_t), BSEC_SAMPLE_RATE_LP); checkIaqSensorStatus(); String output = "Timestamp [ms], raw temperature [°C], pressure [hPa], raw relative humidity [%], gas [Ohm], IAQ, IAQ accuracy, temperature [°C], relative humidity [%], CO2"; - Serial.println(output); + SerialDBG.println(output); } // Function that is looped forever @@ -149,7 +150,7 @@ void loop(void) output += ", " + String(iaqSensor.runInStatus); output += ", " + String(iaqSensor.stabStatus); - Serial.println(output); + SerialDBG.println(output); updateState(); if (sendCounter++ == cyclSend || trigger) @@ -179,26 +180,26 @@ void checkIaqSensorStatus(void) if (iaqSensor.status != BSEC_OK) { if (iaqSensor.status < BSEC_OK) { String output = "BSEC error code : " + String(iaqSensor.status); - Serial.println(output); + SerialDBG.println(output); for (;;) errLeds(); /* Halt in case of failure */ } else { String output = "BSEC warning code : " + String(iaqSensor.status); - Serial.println(output); + SerialDBG.println(output); } } if (iaqSensor.bme680Status != BME680_OK) { if (iaqSensor.bme680Status < BME680_OK) { String output = "BME680 error code : " + String(iaqSensor.bme680Status); - Serial.println(output); + SerialDBG.println(output); for (;;) errLeds(); /* Halt in case of failure */ } else { String output = "BME680 warning code : " + String(iaqSensor.bme680Status); - Serial.println(output); + SerialDBG.println(output); } } } @@ -215,10 +216,10 @@ void errLeds(void) uint8_t* loadBme680State(uint8_t* buffer) { // Existing state in EEPROM - Serial.println("Reading state from EEPROM"); + SerialDBG.println("Reading state from EEPROM"); for (uint8_t i = 0; i < BSEC_MAX_STATE_BLOB_SIZE; i++) { - Serial.println(buffer[i], HEX); + SerialDBG.println(buffer[i], HEX); } iaqSensor.setState(buffer); @@ -231,10 +232,10 @@ uint8_t* saveBme680State(uint8_t* buffer) iaqSensor.getState(buffer); checkIaqSensorStatus(); - Serial.println("Writing state to EEPROM"); + SerialDBG.println("Writing state to EEPROM"); for (uint8_t i = 0; i < BSEC_MAX_STATE_BLOB_SIZE; i++) { - Serial.println(buffer[i], HEX); + SerialDBG.println(buffer[i], HEX); } return buffer + BSEC_MAX_STATE_BLOB_SIZE; } @@ -265,8 +266,8 @@ void updateState(void) // callback from trigger-GO void triggerCallback(GroupObject& go) { - Serial.println("trigger"); - Serial.println((bool)go.value()); + SerialDBG.println("trigger"); + SerialDBG.println((bool)go.value()); if (!go.value()) return; @@ -274,7 +275,7 @@ void triggerCallback(GroupObject& go) /* We call bsec_update_subscription() in order to instruct BSEC to perform an extra measurement at the next possible time slot */ - Serial.println("Triggering ULP plus."); + SerialDBG.println("Triggering ULP plus."); bsec_virtual_sensor_t sensorList[] = { BSEC_OUTPUT_IAQ, BSEC_OUTPUT_CO2_EQUIVALENT }; diff --git a/examples/knx-demo/knx-demo.ino b/examples/knx-demo/knx-demo.ino index 34cc8fd..1354af0 100644 --- a/examples/knx-demo/knx-demo.ino +++ b/examples/knx-demo/knx-demo.ino @@ -55,6 +55,7 @@ void resetCallback(GroupObject& go) void setup() { SerialDBG.begin(115200); + ArduinoPlatform::SerialDebug = SerialDBG; randomSeed(millis()); diff --git a/examples/knx-hdc1008/knx-hdc1008.ino b/examples/knx-hdc1008/knx-hdc1008.ino index c5abe7d..bb7bebe 100644 --- a/examples/knx-hdc1008/knx-hdc1008.ino +++ b/examples/knx-hdc1008/knx-hdc1008.ino @@ -22,6 +22,7 @@ uint32_t cyclSend = 0; void setup(void) { SerialDBG.begin(115200); + ArduinoPlatform::SerialDebug = SerialDBG; delay(5000); SerialDBG.println("start"); diff --git a/examples/knx-sonoffS20/knx-sonoffS20.ino b/examples/knx-sonoffS20/knx-sonoffS20.ino index ef97950..c69c0bd 100644 --- a/examples/knx-sonoffS20/knx-sonoffS20.ino +++ b/examples/knx-sonoffS20/knx-sonoffS20.ino @@ -25,6 +25,7 @@ void switchCallback(GroupObject& go) void setup() { SerialDBG.begin(115200); + ArduinoPlatform::SerialDebug = SerialDBG; #ifdef ARDUINO_ARCH_ESP8266 WiFiManager wifiManager; diff --git a/src/arduino_platform.cpp b/src/arduino_platform.cpp new file mode 100644 index 0000000..a12c5b6 --- /dev/null +++ b/src/arduino_platform.cpp @@ -0,0 +1,260 @@ +#include "arduino_platform.h" +#include + +#include + +Stream& ArduinoPlatform::SerialDebug = Serial; + +ArduinoPlatform::ArduinoPlatform(HardwareSerial& knxSerial) : _knxSerial(knxSerial) +{ +} + +uint32_t ArduinoPlatform::currentIpAddress() +{ + // not needed + return 0; +} + +uint32_t ArduinoPlatform::currentSubnetMask() +{ + // not needed + return 0; +} + +uint32_t ArduinoPlatform::currentDefaultGateway() +{ + // not needed + return 0; +} + +void ArduinoPlatform::macAddress(uint8_t * addr) +{ + // not needed +} + + +void ArduinoPlatform::fatalError() +{ + const int period = 200; + while (true) + { +#ifdef LED_BUILTIN + if ((millis() % period) > (period / 2)) + digitalWrite(LED_BUILTIN, HIGH); + else + digitalWrite(LED_BUILTIN, LOW); +#endif + } +} + +void ArduinoPlatform::setupMultiCast(uint32_t addr, uint16_t port) +{ + //not needed +} + +void ArduinoPlatform::closeMultiCast() +{ + //not needed +} + +bool ArduinoPlatform::sendBytes(uint8_t * buffer, uint16_t len) +{ + //not needed +} + +int ArduinoPlatform::readBytes(uint8_t * buffer, uint16_t maxLen) +{ + //not needed + return 0; +} + +void ArduinoPlatform::setupUart() +{ + _knxSerial.begin(19200, SERIAL_8E1); + while (!_knxSerial) + ; +} + + +void ArduinoPlatform::closeUart() +{ + _knxSerial.end(); +} + + +int ArduinoPlatform::uartAvailable() +{ + return _knxSerial.available(); +} + + +size_t ArduinoPlatform::writeUart(const uint8_t data) +{ + //printHex(" 0) + // printHex("p>", (uint8_t*)&val, 1); + return val; +} + + +size_t ArduinoPlatform::readBytesUart(uint8_t *buffer, size_t length) +{ + size_t toRead = length; + uint8_t* pos = buffer; + while (toRead > 0) + { + size_t val = _knxSerial.readBytes(pos, toRead); + pos += val; + toRead -= val; + } + //printHex("p>", buffer, length); + return length; +} + +void print(const char* s) +{ + ArduinoPlatform::SerialDebug.print(s); +} +void print(char c) +{ + ArduinoPlatform::SerialDebug.print(c); +} + +void print(unsigned char num) +{ + ArduinoPlatform::SerialDebug.print(num); +} + +void print(unsigned char num, int base) +{ + ArduinoPlatform::SerialDebug.print(num, base); +} + +void print(int num) +{ + ArduinoPlatform::SerialDebug.print(num); +} + +void print(int num, int base) +{ + ArduinoPlatform::SerialDebug.print(num, base); +} + +void print(unsigned int num) +{ + ArduinoPlatform::SerialDebug.print(num); +} + +void print(unsigned int num, int base) +{ + ArduinoPlatform::SerialDebug.print(num, base); +} + +void print(long num) +{ + ArduinoPlatform::SerialDebug.print(num); +} + +void print(long num, int base) +{ + ArduinoPlatform::SerialDebug.print(num, base); +} + +void print(unsigned long num) +{ + ArduinoPlatform::SerialDebug.print(num); +} + +void print(unsigned long num, int base) +{ + ArduinoPlatform::SerialDebug.print(num, base); +} + +void print(double num) +{ + ArduinoPlatform::SerialDebug.print(num); +} + +void println(const char* s) +{ + ArduinoPlatform::SerialDebug.println(s); +} + +void println(char c) +{ + ArduinoPlatform::SerialDebug.println(c); +} + +void println(unsigned char num) +{ + ArduinoPlatform::SerialDebug.println(num); +} + +void println(unsigned char num, int base) +{ + ArduinoPlatform::SerialDebug.println(num, base); +} + +void println(int num) +{ + ArduinoPlatform::SerialDebug.println(num); +} + +void println(int num, int base) +{ + ArduinoPlatform::SerialDebug.println(num, base); +} + +void println(unsigned int num) +{ + ArduinoPlatform::SerialDebug.println(num); +} + +void println(unsigned int num, int base) +{ + ArduinoPlatform::SerialDebug.println(num, base); +} + +void println(long num) +{ + ArduinoPlatform::SerialDebug.println(num); +} + +void println(long num, int base) +{ + ArduinoPlatform::SerialDebug.println(num, base); +} + +void println(unsigned long num) +{ + ArduinoPlatform::SerialDebug.println(num); +} + +void println(unsigned long num, int base) +{ + ArduinoPlatform::SerialDebug.println(num, base); +} + +void println(double num) +{ + ArduinoPlatform::SerialDebug.println(num); +} + +void println(void) +{ + ArduinoPlatform::SerialDebug.println(); +} \ No newline at end of file diff --git a/src/arduino_platform.h b/src/arduino_platform.h new file mode 100644 index 0000000..b5207fa --- /dev/null +++ b/src/arduino_platform.h @@ -0,0 +1,42 @@ +#include "knx/platform.h" + +#include "Arduino.h" + +extern Stream& _serialDBG; + +class ArduinoPlatform : public Platform +{ + public: + ArduinoPlatform(HardwareSerial& knxSerial); + + // ip stuff + uint32_t currentIpAddress(); + uint32_t currentSubnetMask(); + uint32_t currentDefaultGateway(); + void macAddress(uint8_t* addr); + + // basic stuff + void fatalError(); + + //multicast + void setupMultiCast(uint32_t addr, uint16_t port); + void closeMultiCast(); + bool sendBytes(uint8_t* buffer, uint16_t len); + int readBytes(uint8_t* buffer, uint16_t maxLen); + + //uart + virtual void setupUart(); + virtual void closeUart(); + virtual int uartAvailable(); + virtual size_t writeUart(const uint8_t data); + virtual size_t writeUart(const uint8_t* buffer, size_t size); + virtual int readUart(); + virtual size_t readBytesUart(uint8_t* buffer, size_t length); + + static Stream& SerialDebug; + + protected: + uint32_t _mulitcastAddr; + uint16_t _mulitcastPort; + HardwareSerial& _knxSerial; +}; diff --git a/src/esp32_platform.cpp b/src/esp32_platform.cpp index 3560900..88b9add 100644 --- a/src/esp32_platform.cpp +++ b/src/esp32_platform.cpp @@ -6,9 +6,8 @@ #include "knx/bits.h" -#define SerialDBG Serial -Esp32Platform::Esp32Platform() +Esp32Platform::Esp32Platform() : ArduinoPlatform(Serial) { } @@ -38,21 +37,6 @@ void Esp32Platform::restart() ESP.restart(); } -void Esp32Platform::fatalError() -{ - Serial.println("GURU MEDITATION - fatal error!"); - const int period = 200; - while (true) - { -#ifdef LED_BUILTIN - if ((millis() % period) > (period / 2)) - digitalWrite(LED_BUILTIN, HIGH); - else - digitalWrite(LED_BUILTIN, LOW); -#endif - } -} - void Esp32Platform::setupMultiCast(uint32_t addr, uint16_t port) { _mulitcastAddr = htonl(addr); @@ -108,224 +92,4 @@ void Esp32Platform::commitToEeprom() EEPROM.commit(); } -void Esp32Platform::setupUart() -{ - Serial.begin(19200, SERIAL_8E1); - while (!Serial) ; -} - - -void Esp32Platform::closeUart() -{ - Serial.end(); -} - - -int Esp32Platform::uartAvailable() -{ - return Serial.available(); -} - - -size_t Esp32Platform::writeUart(const uint8_t data) -{ - printHex(" 0) - printHex("p>", (uint8_t*)&val, 1); - return val; -} - - -size_t Esp32Platform::readBytesUart(uint8_t *buffer, size_t length) -{ - size_t toRead = length; - uint8_t* pos = buffer; - while (toRead > 0) - { - size_t val = Serial.readBytes(pos, toRead); - pos += val; - toRead -= val; - } - - - printHex("p>", buffer, length); - return length; -} - -void print(const char* s) -{ - Serial.printf("%s", s); -} -void print(char c) -{ - Serial.printf("%c", c); -} - -void print(unsigned char num) -{ - print(num, DEC); -} - -void print(unsigned char num, int base) -{ - if (base == HEX) - Serial.printf("%X", num); - else - Serial.printf("%d", num); -} - -void print(int num) -{ - print(num, DEC); -} - -void print(int num, int base) -{ - if (base == HEX) - Serial.printf("%X", num); - else - Serial.printf("%d", num); -} - -void print(unsigned int num) -{ - print(num, DEC); -} - -void print(unsigned int num, int base) -{ - if (base == HEX) - Serial.printf("%X", num); - else - Serial.printf("%d", num); -} - -void print(long num) -{ - print(num, DEC); -} - -void print(long num, int base) -{ - if (base == HEX) - Serial.printf("%lX", num); - else - Serial.printf("%ld", num); -} - -void print(unsigned long num) -{ - print(num, DEC); -} - -void print(unsigned long num, int base) -{ - if (base == HEX) - Serial.printf("%lX", num); - else - Serial.printf("%ld", num); -} - -void print(double num) -{ - Serial.printf("%f", num); -} - -void println(const char* s) -{ - Serial.printf("%s\n", s); -} -void println(char c) -{ - Serial.printf("%c\n", c); -} - -void println(unsigned char num) -{ - println(num, DEC); -} - -void println(unsigned char num, int base) -{ - if (base == HEX) - Serial.printf("%X\n", num); - else - Serial.printf("%d\n", num); -} - -void println(int num) -{ - println(num, DEC); -} - -void println(int num, int base) -{ - if (base == HEX) - Serial.printf("%X\n", num); - else - Serial.printf("%d\n", num); -} - -void println(unsigned int num) -{ - println(num, DEC); -} - -void println(unsigned int num, int base) -{ - if (base == HEX) - Serial.printf("%X\n", num); - else - Serial.printf("%d\n", num); -} - -void println(long num) -{ - println(num, DEC); -} - -void println(long num, int base) -{ - if (base == HEX) - Serial.printf("%lX\n", num); - else - Serial.printf("%ld\n", num); -} - -void println(unsigned long num) -{ - println(num, DEC); -} - -void println(unsigned long num, int base) -{ - if (base == HEX) - Serial.printf("%lX\n", num); - else - Serial.printf("%ld\n", num); -} - -void println(double num) -{ - Serial.printf("%f\n", num); -} - -void println(void) -{ - Serial.printf("\n"); -} -#endif +#endif \ No newline at end of file diff --git a/src/esp32_platform.h b/src/esp32_platform.h index 4f89656..3ecafba 100644 --- a/src/esp32_platform.h +++ b/src/esp32_platform.h @@ -1,47 +1,36 @@ #ifdef ARDUINO_ARCH_ESP32 -#include "knx/platform.h" -#include "knx/platform.h" +#include "arduino_platform.h" #include #include #define SerialDBG Serial -class Esp32Platform : public Platform +class Esp32Platform : public ArduinoPlatform { + using ArduinoPlatform::_mulitcastAddr; + using ArduinoPlatform::_mulitcastPort; public: Esp32Platform(); // ip stuff - uint32_t currentIpAddress(); - uint32_t currentSubnetMask(); - uint32_t currentDefaultGateway(); - void macAddress(uint8_t* addr); + uint32_t currentIpAddress() override; + uint32_t currentSubnetMask() override; + uint32_t currentDefaultGateway() override; + void macAddress(uint8_t* addr) override; // basic stuff void restart(); - void fatalError(); //multicast - void setupMultiCast(uint32_t addr, uint16_t port); - void closeMultiCast(); - bool sendBytes(uint8_t* buffer, uint16_t len); - int readBytes(uint8_t* buffer, uint16_t maxLen); - - //uart - void setupUart(); - void closeUart(); - int uartAvailable(); - size_t writeUart(const uint8_t data); - size_t writeUart(const uint8_t *buffer, size_t size); - int readUart(); - size_t readBytesUart(uint8_t *buffer, size_t length); + void setupMultiCast(uint32_t addr, uint16_t port) override; + void closeMultiCast() override; + bool sendBytes(uint8_t* buffer, uint16_t len) override; + int readBytes(uint8_t* buffer, uint16_t maxLen) override; //memory uint8_t* getEepromBuffer(uint16_t size); void commitToEeprom(); private: - uint32_t _mulitcastAddr; - uint16_t _mulitcastPort; WiFiUDP _udp; }; diff --git a/src/esp_platform.cpp b/src/esp_platform.cpp index 626804f..71a121a 100644 --- a/src/esp_platform.cpp +++ b/src/esp_platform.cpp @@ -7,7 +7,7 @@ #include "knx/bits.h" -EspPlatform::EspPlatform() +EspPlatform::EspPlatform() : ArduinoPlatform(Serial) { } @@ -37,18 +37,6 @@ void EspPlatform::restart() ESP.reset(); } -void EspPlatform::fatalError() -{ - const int period = 200; - while (true) - { - if ((millis() % period) > (period / 2)) - digitalWrite(LED_BUILTIN, HIGH); - else - digitalWrite(LED_BUILTIN, LOW); - } -} - void EspPlatform::setupMultiCast(uint32_t addr, uint16_t port) { _mulitcastAddr = htonl(addr); @@ -103,225 +91,4 @@ void EspPlatform::commitToEeprom() { EEPROM.commit(); } - -void EspPlatform::setupUart() -{ - Serial.begin(19200, SERIAL_8E1); - while (!Serial) ; -} - - -void EspPlatform::closeUart() -{ - Serial.end(); -} - - -int EspPlatform::uartAvailable() -{ - return Serial.available(); -} - - -size_t EspPlatform::writeUart(const uint8_t data) -{ - printHex(" 0) - printHex("p>", (uint8_t*)&val, 1); - return val; -} - - -size_t EspPlatform::readBytesUart(uint8_t *buffer, size_t length) -{ - size_t toRead = length; - uint8_t* pos = buffer; - while (toRead > 0) - { - size_t val = Serial.readBytes(pos, toRead); - pos += val; - toRead -= val; - } - - - printHex("p>", buffer, length); - return length; -} - -void print(const char* s) -{ - Serial.printf("%s", s); -} -void print(char c) -{ - Serial.printf("%c", c); -} - -void print(unsigned char num) -{ - print(num, DEC); -} - -void print(unsigned char num, int base) -{ - if (base == HEX) - Serial.printf("%X", num); - else - Serial.printf("%d", num); -} - -void print(int num) -{ - print(num, DEC); -} - -void print(int num, int base) -{ - if (base == HEX) - Serial.printf("%X", num); - else - Serial.printf("%d", num); -} - -void print(unsigned int num) -{ - print(num, DEC); -} - -void print(unsigned int num, int base) -{ - if (base == HEX) - Serial.printf("%X", num); - else - Serial.printf("%d", num); -} - -void print(long num) -{ - print(num, DEC); -} - -void print(long num, int base) -{ - if (base == HEX) - Serial.printf("%lX", num); - else - Serial.printf("%ld", num); -} - -void print(unsigned long num) -{ - print(num, DEC); -} - -void print(unsigned long num, int base) -{ - if (base == HEX) - Serial.printf("%lX", num); - else - Serial.printf("%ld", num); -} - -void print(double num) -{ - Serial.printf("%f", num); -} - -void println(const char* s) -{ - Serial.printf("%s\n", s); -} -void println(char c) -{ - Serial.printf("%c\n", c); -} - -void println(unsigned char num) -{ - println(num, DEC); -} - -void println(unsigned char num, int base) -{ - if (base == HEX) - Serial.printf("%X\n", num); - else - Serial.printf("%d\n", num); -} - -void println(int num) -{ - println(num, DEC); -} - -void println(int num, int base) -{ - if (base == HEX) - Serial.printf("%X\n", num); - else - Serial.printf("%d\n", num); -} - -void println(unsigned int num) -{ - println(num, DEC); -} - -void println(unsigned int num, int base) -{ - if (base == HEX) - Serial.printf("%X\n", num); - else - Serial.printf("%d\n", num); -} - -void println(long num) -{ - println(num, DEC); -} - -void println(long num, int base) -{ - if (base == HEX) - Serial.printf("%lX\n", num); - else - Serial.printf("%ld\n", num); -} - -void println(unsigned long num) -{ - println(num, DEC); -} - -void println(unsigned long num, int base) -{ - if (base == HEX) - Serial.printf("%lX\n", num); - else - Serial.printf("%ld\n", num); -} - -void println(double num) -{ - Serial.printf("%f\n", num); -} - -void println(void) -{ - Serial.printf("\n"); -} #endif diff --git a/src/esp_platform.h b/src/esp_platform.h index 2be3e2d..75b2b21 100644 --- a/src/esp_platform.h +++ b/src/esp_platform.h @@ -1,46 +1,37 @@ #ifdef ARDUINO_ARCH_ESP8266 -#include "knx/platform.h" +#include "arduino_platform.h" #include #include #define SerialDBG Serial -class EspPlatform : public Platform +class EspPlatform : public ArduinoPlatform { -public: + using ArduinoPlatform::_mulitcastAddr; + using ArduinoPlatform::_mulitcastPort; + + public: EspPlatform(); // ip stuff - uint32_t currentIpAddress(); - uint32_t currentSubnetMask(); - uint32_t currentDefaultGateway(); - void macAddress(uint8_t* addr); + uint32_t currentIpAddress() override; + uint32_t currentSubnetMask() override; + uint32_t currentDefaultGateway() override; + void macAddress(uint8_t* addr) override; // basic stuff void restart(); - void fatalError(); //multicast - void setupMultiCast(uint32_t addr, uint16_t port); - void closeMultiCast(); - bool sendBytes(uint8_t* buffer, uint16_t len); - int readBytes(uint8_t* buffer, uint16_t maxLen); - - //uart - void setupUart(); - void closeUart(); - int uartAvailable(); - size_t writeUart(const uint8_t data); - size_t writeUart(const uint8_t *buffer, size_t size); - int readUart(); - size_t readBytesUart(uint8_t *buffer, size_t length); - + void setupMultiCast(uint32_t addr, uint16_t port) override; + void closeMultiCast() override; + bool sendBytes(uint8_t* buffer, uint16_t len) override; + int readBytes(uint8_t* buffer, uint16_t maxLen) override; + //memory uint8_t* getEepromBuffer(uint16_t size); void commitToEeprom(); private: - uint32_t _mulitcastAddr; - uint16_t _mulitcastPort; WiFiUDP _udp; }; diff --git a/src/samd_platform.cpp b/src/samd_platform.cpp index 01214cf..5fb8e42 100644 --- a/src/samd_platform.cpp +++ b/src/samd_platform.cpp @@ -6,72 +6,16 @@ #include #include -SamdPlatform::SamdPlatform() +SamdPlatform::SamdPlatform() : ArduinoPlatform(Serial1) { } -uint32_t SamdPlatform::currentIpAddress() -{ - // not needed - return 0; -} - -uint32_t SamdPlatform::currentSubnetMask() -{ - // not needed - return 0; -} - -uint32_t SamdPlatform::currentDefaultGateway() -{ - // not needed - return 0; -} - -void SamdPlatform::macAddress(uint8_t * addr) -{ - // not needed -} - void SamdPlatform::restart() { SerialDBG.println("restart"); NVIC_SystemReset(); } -void SamdPlatform::fatalError() -{ - const int period = 200; - while (true) - { - if ((millis() % period) > (period / 2)) - digitalWrite(LED_BUILTIN, HIGH); - else - digitalWrite(LED_BUILTIN, LOW); - } -} - -void SamdPlatform::setupMultiCast(uint32_t addr, uint16_t port) -{ - //not needed -} - -void SamdPlatform::closeMultiCast() -{ - //not needed -} - -bool SamdPlatform::sendBytes(uint8_t * buffer, uint16_t len) -{ - //not needed -} - -int SamdPlatform::readBytes(uint8_t * buffer, uint16_t maxLen) -{ - //not needed - return 0; -} - uint8_t * SamdPlatform::getEepromBuffer(uint16_t size) { //EEPROM.begin(size); @@ -85,196 +29,6 @@ void SamdPlatform::commitToEeprom() { EEPROM.commit(); } +#endif -void SamdPlatform::setupUart() -{ - SerialKNX.begin(19200, SERIAL_8E1); - while (!SerialKNX) - ; -} - - -void SamdPlatform::closeUart() -{ - SerialKNX.end(); -} - - -int SamdPlatform::uartAvailable() -{ - return SerialKNX.available(); -} - - -size_t SamdPlatform::writeUart(const uint8_t data) -{ - //printHex(" 0) - // printHex("p>", (uint8_t*)&val, 1); - return val; -} - - -size_t SamdPlatform::readBytesUart(uint8_t *buffer, size_t length) -{ - size_t toRead = length; - uint8_t* pos = buffer; - while (toRead > 0) - { - size_t val = SerialKNX.readBytes(pos, toRead); - pos += val; - toRead -= val; - } - //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/src/samd_platform.h b/src/samd_platform.h index 92af8ed..4214e2d 100644 --- a/src/samd_platform.h +++ b/src/samd_platform.h @@ -1,48 +1,19 @@ -#include "knx/platform.h" +#include "arduino_platform.h" #include "Arduino.h" #ifdef ARDUINO_ARCH_SAMD #define SerialDBG SerialUSB -#define SerialKNX Serial1 -class SamdPlatform : public Platform +class SamdPlatform : public ArduinoPlatform { public: SamdPlatform(); - // ip stuff - uint32_t currentIpAddress(); - uint32_t currentSubnetMask(); - uint32_t currentDefaultGateway(); - void macAddress(uint8_t* addr); - - // basic stuff void restart(); - void fatalError(); - - //multicast - void setupMultiCast(uint32_t addr, uint16_t port); - void closeMultiCast(); - bool sendBytes(uint8_t* buffer, uint16_t len); - int readBytes(uint8_t* buffer, uint16_t maxLen); - - //uart - virtual void setupUart(); - virtual void closeUart(); - virtual int uartAvailable(); - virtual size_t writeUart(const uint8_t data); - virtual size_t writeUart(const uint8_t *buffer, size_t size); - virtual int readUart(); - virtual size_t readBytesUart(uint8_t *buffer, size_t length); - - //memory uint8_t* getEepromBuffer(uint16_t size); void commitToEeprom(); -private: - uint32_t _mulitcastAddr; - uint16_t _mulitcastPort; }; #endif \ No newline at end of file diff --git a/visualstudio/knx-demo.vgdbproj b/visualstudio/knx-demo.vgdbproj index 56b2942..8430762 100644 --- a/visualstudio/knx-demo.vgdbproj +++ b/visualstudio/knx-demo.vgdbproj @@ -328,6 +328,96 @@ Sketch + + ESP32_Dev_Module + + + + + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + true + false + None + false + false + main + true + false + false + false + 0 + + + true + Auto + 0 + false + false + true + false + false + + _estack + 0 + false + true + + + esp32:esp32:esp32 + + + + PSRAM + disabled + + + PartitionScheme + default + + + CPUFreq + 240 + + + FlashMode + qio + + + FlashFreq + 80 + + + FlashSize + 4M + + + UploadSpeed + 921600 + + + DebugLevel + none + + + + Sketch + + \ No newline at end of file diff --git a/visualstudio/knx.sln b/visualstudio/knx.sln index 166482e..ce42f6b 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|ESP32_Dev_Module = Debug|ESP32_Dev_Module Debug|Mixed = Debug|Mixed 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|ESP32_Dev_Module = MinSizeRel|ESP32_Dev_Module MinSizeRel|Mixed = MinSizeRel|Mixed 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|ESP32_Dev_Module = Release|ESP32_Dev_Module Release|Mixed = Release|Mixed 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|ESP32_Dev_Module = RelWithDebInfo|ESP32_Dev_Module RelWithDebInfo|Mixed = RelWithDebInfo|Mixed RelWithDebInfo|VisualGDB = RelWithDebInfo|VisualGDB RelWithDebInfo|x64 = RelWithDebInfo|x64 @@ -39,12 +43,15 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Mixed.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x64.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -54,12 +61,15 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -70,6 +80,8 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {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|ESP32_Dev_Module.ActiveCfg = Debug|ESP32_Dev_Module + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|ESP32_Dev_Module.Build.0 = Debug|ESP32_Dev_Module {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -79,6 +91,8 @@ Global {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {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|ESP32_Dev_Module.ActiveCfg = Release|ESP32_Dev_Module + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|ESP32_Dev_Module {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|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -89,12 +103,16 @@ Global {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {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|ESP32_Dev_Module.ActiveCfg = Release|ESP32_Dev_Module + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|ESP32_Dev_Module.Build.0 = Release|ESP32_Dev_Module {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Mixed.ActiveCfg = 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}.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|ESP32_Dev_Module.ActiveCfg = Release|ESP32_Dev_Module + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|ESP32_Dev_Module {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|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -104,6 +122,7 @@ Global {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) {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|ESP32_Dev_Module.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|VisualGDB.ActiveCfg = Debug|Win32 @@ -111,6 +130,8 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x86.ActiveCfg = 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|ESP32_Dev_Module.ActiveCfg = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|ESP32_Dev_Module.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|VisualGDB.ActiveCfg = Release|Win32 @@ -120,6 +141,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|ESP32_Dev_Module.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|Mixed.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|VisualGDB.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x64.ActiveCfg = Release|Win32 @@ -127,6 +149,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|ESP32_Dev_Module.ActiveCfg = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|ESP32_Dev_Module.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|VisualGDB.ActiveCfg = Release|Win32 @@ -136,6 +160,7 @@ 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|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {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|VisualGDB.ActiveCfg = Debug|Generic ESP8266 Module @@ -143,6 +168,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|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {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|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module @@ -152,12 +179,15 @@ Global {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x86.ActiveCfg = Release|Generic ESP8266 Module {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|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Mixed.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|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {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|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module @@ -167,12 +197,15 @@ Global {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x86.ActiveCfg = Release|Generic ESP8266 Module {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x86.Build.0 = Release|Generic ESP8266 Module {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Win32 + {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|Mixed.ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|VisualGDB.ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|x64.ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|x86.ActiveCfg = Debug|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Win32 + {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|Win32 + {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Mixed.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Mixed.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|VisualGDB.ActiveCfg = Release|Win32 @@ -182,6 +215,7 @@ Global {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|x86.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|x86.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32 + {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|ESP32_Dev_Module.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|Mixed.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|VisualGDB.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|x64.ActiveCfg = Release|Win32 @@ -189,6 +223,8 @@ Global {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|x86.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Win32 + {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|Win32 + {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Mixed.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Mixed.Build.0 = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Win32 @@ -198,12 +234,15 @@ Global {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|x86.ActiveCfg = Release|Win32 {456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|x86.Build.0 = Release|Win32 {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) + {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|Mixed.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|x64.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) + {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -213,12 +252,15 @@ Global {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) + {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) + {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) From cdcfbb4e8338665645797980bfe72f9fb656d51e Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sat, 31 Aug 2019 03:00:35 +0200 Subject: [PATCH 08/13] fix connect --- src/knx/application_layer.cpp | 5 ++++- src/knx/transport_layer.cpp | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/knx/application_layer.cpp b/src/knx/application_layer.cpp index 3d96559..321942a 100644 --- a/src/knx/application_layer.cpp +++ b/src/knx/application_layer.cpp @@ -175,7 +175,10 @@ void ApplicationLayer::connectIndication(uint16_t tsap) void ApplicationLayer::connectConfirm(uint16_t destination, uint16_t tsap, bool status) { - + if (status) + _connectedTsap = tsap; + else + _connectedTsap = -1; } void ApplicationLayer::disconnectIndication(uint16_t tsap) diff --git a/src/knx/transport_layer.cpp b/src/knx/transport_layer.cpp index eb00d64..e63f624 100644 --- a/src/knx/transport_layer.cpp +++ b/src/knx/transport_layer.cpp @@ -666,6 +666,7 @@ void TransportLayer::A12(uint16_t destination, Priority priority) CemiFrame frame(0); TPDU& tpdu = frame.tpdu(); tpdu.type(Connect); + _networkLayer->dataIndividualRequest(AckRequested, destination, NetworkLayerParameter, priority, tpdu); _seqNoRecv = 0; _seqNoSend = 0; enableConnectionTimeout(); From 8d5dc5bf73582df121fead1f35285d2a542146fc Mon Sep 17 00:00:00 2001 From: Fabian Schmieder Date: Sun, 1 Sep 2019 20:49:28 +0200 Subject: [PATCH 09/13] setter/getter & overloaded constructor (ArduinoPlatform) for HardwareSerial-object (#31) * added overload to platform constructors for custom HardwareSerial-object * added setter/getter setUart & getUart * set Serial1 as default UART for ESP32 --- src/arduino_platform.cpp | 10 ++++++++++ src/arduino_platform.h | 2 ++ src/esp32_platform.cpp | 5 ++++- src/esp32_platform.h | 1 + src/esp_platform.cpp | 4 ++++ src/esp_platform.h | 1 + src/knx_facade.cpp | 3 ++- src/samd_platform.cpp | 4 ++++ src/samd_platform.h | 1 + 9 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/arduino_platform.cpp b/src/arduino_platform.cpp index a12c5b6..29309c7 100644 --- a/src/arduino_platform.cpp +++ b/src/arduino_platform.cpp @@ -68,6 +68,16 @@ int ArduinoPlatform::readBytes(uint8_t * buffer, uint16_t maxLen) return 0; } +void ArduinoPlatform::setUart( HardwareSerial& serial ) +{ + _knxSerial = serial; +} + +HardwareSerial& ArduinoPlatform::getUart() +{ + return _knxSerial; +} + void ArduinoPlatform::setupUart() { _knxSerial.begin(19200, SERIAL_8E1); diff --git a/src/arduino_platform.h b/src/arduino_platform.h index b5207fa..ce7fa54 100644 --- a/src/arduino_platform.h +++ b/src/arduino_platform.h @@ -25,6 +25,8 @@ class ArduinoPlatform : public Platform int readBytes(uint8_t* buffer, uint16_t maxLen); //uart + virtual void setUart( HardwareSerial& serial ); + virtual HardwareSerial& getUart(); virtual void setupUart(); virtual void closeUart(); virtual int uartAvailable(); diff --git a/src/esp32_platform.cpp b/src/esp32_platform.cpp index 88b9add..fc8cc1d 100644 --- a/src/esp32_platform.cpp +++ b/src/esp32_platform.cpp @@ -6,8 +6,11 @@ #include "knx/bits.h" +Esp32Platform::Esp32Platform() : ArduinoPlatform(Serial1) +{ +} -Esp32Platform::Esp32Platform() : ArduinoPlatform(Serial) +Esp32Platform::Esp32Platform( HardwareSerial& s) : ArduinoPlatform(s) { } diff --git a/src/esp32_platform.h b/src/esp32_platform.h index 3ecafba..79c0f96 100644 --- a/src/esp32_platform.h +++ b/src/esp32_platform.h @@ -11,6 +11,7 @@ class Esp32Platform : public ArduinoPlatform using ArduinoPlatform::_mulitcastPort; public: Esp32Platform(); + Esp32Platform( HardwareSerial& s); // ip stuff uint32_t currentIpAddress() override; diff --git a/src/esp_platform.cpp b/src/esp_platform.cpp index 71a121a..2ca2c5e 100644 --- a/src/esp_platform.cpp +++ b/src/esp_platform.cpp @@ -11,6 +11,10 @@ EspPlatform::EspPlatform() : ArduinoPlatform(Serial) { } +EspPlatform::EspPlatform( HardwareSerial& s) : ArduinoPlatform(s) +{ +} + uint32_t EspPlatform::currentIpAddress() { return WiFi.localIP(); diff --git a/src/esp_platform.h b/src/esp_platform.h index 75b2b21..a9b4670 100644 --- a/src/esp_platform.h +++ b/src/esp_platform.h @@ -12,6 +12,7 @@ class EspPlatform : public ArduinoPlatform public: EspPlatform(); + EspPlatform( HardwareSerial& s); // ip stuff uint32_t currentIpAddress() override; diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 9f32b9b..82c4473 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -8,12 +8,13 @@ KnxFacade knx; #elif ARDUINO_ARCH_ESP8266 KnxFacade knx; #elif ARDUINO_ARCH_ESP32 +//KnxFacade knx; KnxFacade knx; #elif __linux__ #define ICACHE_RAM_ATTR #endif -ICACHE_RAM_ATTR void buttonUp() +ICACHE_RAM_ATTR void buttonUp() { #ifndef __linux__ knx._toogleProgMode = true; diff --git a/src/samd_platform.cpp b/src/samd_platform.cpp index 5fb8e42..31b1f03 100644 --- a/src/samd_platform.cpp +++ b/src/samd_platform.cpp @@ -10,6 +10,10 @@ SamdPlatform::SamdPlatform() : ArduinoPlatform(Serial1) { } +SamdPlatform::SamdPlatform( HardwareSerial& s) : ArduinoPlatform(s) +{ +} + void SamdPlatform::restart() { SerialDBG.println("restart"); diff --git a/src/samd_platform.h b/src/samd_platform.h index 4214e2d..7dbc70a 100644 --- a/src/samd_platform.h +++ b/src/samd_platform.h @@ -10,6 +10,7 @@ class SamdPlatform : public ArduinoPlatform { public: SamdPlatform(); + SamdPlatform( HardwareSerial& s); void restart(); uint8_t* getEepromBuffer(uint16_t size); From 607e386578d8458b4df7b0a61bf1b77e029dc6db Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 2 Sep 2019 21:16:51 +0200 Subject: [PATCH 10/13] rename getter/setter --- src/arduino_platform.cpp | 4 ++-- src/arduino_platform.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/arduino_platform.cpp b/src/arduino_platform.cpp index 29309c7..a8ccfad 100644 --- a/src/arduino_platform.cpp +++ b/src/arduino_platform.cpp @@ -68,12 +68,12 @@ int ArduinoPlatform::readBytes(uint8_t * buffer, uint16_t maxLen) return 0; } -void ArduinoPlatform::setUart( HardwareSerial& serial ) +void ArduinoPlatform::knxUart( HardwareSerial& serial ) { _knxSerial = serial; } -HardwareSerial& ArduinoPlatform::getUart() +HardwareSerial& ArduinoPlatform::knxUart() { return _knxSerial; } diff --git a/src/arduino_platform.h b/src/arduino_platform.h index ce7fa54..ab2ba29 100644 --- a/src/arduino_platform.h +++ b/src/arduino_platform.h @@ -25,8 +25,8 @@ class ArduinoPlatform : public Platform int readBytes(uint8_t* buffer, uint16_t maxLen); //uart - virtual void setUart( HardwareSerial& serial ); - virtual HardwareSerial& getUart(); + virtual void knxUart( HardwareSerial& serial ); + virtual HardwareSerial& knxUart(); virtual void setupUart(); virtual void closeUart(); virtual int uartAvailable(); From 923e50bf9c700c262bcdee973c9921501c0db7e8 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 2 Sep 2019 22:00:45 +0200 Subject: [PATCH 11/13] fix bme680 example --- examples/knx-bme680/knx-bme680.ino | 20 ++-- src/knx/bits.h | 4 +- src/knx/dptconvert.cpp | 173 +++++++++++++++-------------- src/knx/dptconvert.h | 170 ++++++++++++++-------------- visualstudio/knx-bme680.vgdbproj | 2 +- visualstudio/knx.sln | 4 +- 6 files changed, 188 insertions(+), 185 deletions(-) diff --git a/examples/knx-bme680/knx-bme680.ino b/examples/knx-bme680/knx-bme680.ino index 019c80c..ff74c24 100644 --- a/examples/knx-bme680/knx-bme680.ino +++ b/examples/knx-bme680/knx-bme680.ino @@ -94,16 +94,16 @@ void setup(void) cyclSend = knx.paramInt(0); SerialDBG.print("Zykl. send:"); SerialDBG.println(cyclSend); - goRawTemperature.dataPointType(Dpt(9, 0)); - goPressure.dataPointType(Dpt(9, 0)); - goRawHumidity.dataPointType(Dpt(9, 0)); - goGasResistance.dataPointType(Dpt(9, 0)); - goIaqEstimate.dataPointType(Dpt(9, 0)); - goIaqAccurace.dataPointType(Dpt(9, 0)); - goTemperature.dataPointType(Dpt(9, 0)); - goHumidity.dataPointType(Dpt(9, 0)); - goCo2Ppm.dataPointType(Dpt(9, 0)); - goTriggerSample.dataPointType(Dpt(1, 0)); + goRawTemperature.dataPointType(Dpt(9, 1)); + goPressure.dataPointType(Dpt(9, 1)); + goRawHumidity.dataPointType(Dpt(9, 1)); + goGasResistance.dataPointType(Dpt(9, 1)); + goIaqEstimate.dataPointType(Dpt(9, 1)); + goIaqAccurace.dataPointType(Dpt(9, 1)); + goTemperature.dataPointType(Dpt(9, 1)); + goHumidity.dataPointType(Dpt(9, 1)); + goCo2Ppm.dataPointType(Dpt(9, 1)); + goTriggerSample.dataPointType(Dpt(1, 1)); } // start the framework. diff --git a/src/knx/bits.h b/src/knx/bits.h index fbe8d90..de25682 100644 --- a/src/knx/bits.h +++ b/src/knx/bits.h @@ -56,7 +56,7 @@ void print(int, int = DEC); void print(unsigned int, int = DEC); void print(long, int = DEC); void print(unsigned long, int = DEC); -void print(double, int = 2); +void print(double); void println(const char[]); void println(char); @@ -65,7 +65,7 @@ void println(int, int = DEC); void println(unsigned int, int = DEC); void println(long, int = DEC); void println(unsigned long, int = DEC); -void println(double, int = 2); +void println(double); void println(void); diff --git a/src/knx/dptconvert.cpp b/src/knx/dptconvert.cpp index f4a30c9..bf8cfcc 100644 --- a/src/knx/dptconvert.cpp +++ b/src/knx/dptconvert.cpp @@ -1,4 +1,5 @@ #include "dptconvert.h" +#include "bits.h" #include #include #include @@ -11,7 +12,7 @@ // for (int pi = 0; pi < (x); ++pi) \ // payload[pi] = 0 -int KNX_Decode_Value(uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int KNX_Decode_Value(uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { if (payload_length > 0) { @@ -238,7 +239,7 @@ int KNX_Decode_Value(uint8_t* payload, int payload_length, const Dpt& datatype, return false; } -int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if (datatype.mainGroup == 1 && datatype.subGroup >= 1 && datatype.subGroup <= 23 && datatype.subGroup != 20 && !datatype.index) @@ -354,14 +355,14 @@ int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, int payload_length return false; } -int busValueToBinary(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToBinary(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); value = bitFromPayload(payload, 7); return true; } -int busValueToBinaryControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToBinaryControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); switch (datatype.index) @@ -377,7 +378,7 @@ int busValueToBinaryControl(const uint8_t* payload, int payload_length, const Dp return false; } -int busValueToStepControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToStepControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); switch (datatype.index) @@ -395,7 +396,7 @@ int busValueToStepControl(const uint8_t* payload, int payload_length, const Dpt& return false; } -int busValueToCharacter(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToCharacter(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); int8_t charValue = signed8FromPayload(payload, 0); @@ -411,7 +412,7 @@ int busValueToCharacter(const uint8_t* payload, int payload_length, const Dpt& d return true; } -int busValueToUnsigned8(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToUnsigned8(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); switch (datatype.subGroup) @@ -438,14 +439,14 @@ int busValueToUnsigned8(const uint8_t* payload, int payload_length, const Dpt& d return true; } -int busValueToSigned8(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToSigned8(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); value = (uint8_t)(unsigned8FromPayload(payload, 0)); return true; } -int busValueToStatusAndMode(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToStatusAndMode(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); if (datatype.index < 5) @@ -461,14 +462,14 @@ int busValueToStatusAndMode(const uint8_t* payload, int payload_length, const Dp return false; } -int busValueToUnsigned16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToUnsigned16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(2); value = unsigned16FromPayload(payload, 0); return true; } -int busValueToTimePeriod(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToTimePeriod(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(2); @@ -477,7 +478,7 @@ int busValueToTimePeriod(const uint8_t* payload, int payload_length, const Dpt& return true; } -int busValueToSigned16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToSigned16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(2); if (datatype.subGroup == 10) @@ -489,7 +490,7 @@ int busValueToSigned16(const uint8_t* payload, int payload_length, const Dpt& da return true; } -int busValueToTimeDelta(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToTimeDelta(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(2); @@ -498,7 +499,7 @@ int busValueToTimeDelta(const uint8_t* payload, int payload_length, const Dpt& d return true; } -int busValueToFloat16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToFloat16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(2); if (unsigned16FromPayload(payload, 0) == 0x7FFF) @@ -508,7 +509,7 @@ int busValueToFloat16(const uint8_t* payload, int payload_length, const Dpt& dat return true; } -int busValueToTime(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToTime(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(3); switch (datatype.index) @@ -536,7 +537,7 @@ int busValueToTime(const uint8_t* payload, int payload_length, const Dpt& dataty return false; } -int busValueToDate(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToDate(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(3); unsigned short year = unsigned8FromPayload(payload, 2) & 0x7F; @@ -555,35 +556,35 @@ int busValueToDate(const uint8_t* payload, int payload_length, const Dpt& dataty return true; } -int busValueToUnsigned32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToUnsigned32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(4); value = unsigned32FromPayload(payload, 0); return true; } -int busValueToSigned32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToSigned32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(4); value = signed32FromPayload(payload, 0); return true; } -int busValueToLongTimePeriod(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToLongTimePeriod(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(4); value = signed32FromPayload(payload, 0); return true; } -int busValueToFloat32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToFloat32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(4); value = float32FromPayload(payload, 0); return true; } -int busValueToAccess(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToAccess(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(4); switch (datatype.index) @@ -615,7 +616,7 @@ int busValueToAccess(const uint8_t* payload, int payload_length, const Dpt& data return false; } -int busValueToString(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToString(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(14); char strValue[15]; @@ -630,14 +631,14 @@ int busValueToString(const uint8_t* payload, int payload_length, const Dpt& data return true; } -int busValueToScene(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToScene(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); value = (uint8_t)(unsigned8FromPayload(payload, 0) & 0x3F); return true; } -int busValueToSceneControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToSceneControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); switch (datatype.index) @@ -657,7 +658,7 @@ int busValueToSceneControl(const uint8_t* payload, int payload_length, const Dpt return false; } -int busValueToSceneInfo(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToSceneInfo(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); switch (datatype.index) @@ -677,7 +678,7 @@ int busValueToSceneInfo(const uint8_t* payload, int payload_length, const Dpt& d return false; } -int busValueToSceneConfig(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToSceneConfig(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(1); switch (datatype.index) @@ -698,7 +699,7 @@ int busValueToSceneConfig(const uint8_t* payload, int payload_length, const Dpt& return false; } -int busValueToDateTime(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToDateTime(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(8); if (datatype.index == 3) @@ -770,20 +771,20 @@ int busValueToDateTime(const uint8_t* payload, int payload_length, const Dpt& da return false; } -int busValueToUnicode(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToUnicode(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { //TODO return false; } -int busValueToSigned64(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToSigned64(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(8); value = signed64FromPayload(payload, 0); return true; } -int busValueToAlarmInfo(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToAlarmInfo(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(6); switch (datatype.index) @@ -816,7 +817,7 @@ int busValueToAlarmInfo(const uint8_t* payload, int payload_length, const Dpt& d return false; } -int busValueToSerialNumber(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToSerialNumber(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(6); switch (datatype.index) @@ -831,7 +832,7 @@ int busValueToSerialNumber(const uint8_t* payload, int payload_length, const Dpt return false; } -int busValueToVersion(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToVersion(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(2); switch (datatype.index) @@ -850,7 +851,7 @@ int busValueToVersion(const uint8_t* payload, int payload_length, const Dpt& dat return false; } -int busValueToScaling(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(3); switch (datatype.index) @@ -866,7 +867,7 @@ int busValueToScaling(const uint8_t* payload, int payload_length, const Dpt& dat return false; } -int busValueToTariff(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToTariff(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(3); switch (datatype.index) @@ -887,7 +888,7 @@ int busValueToTariff(const uint8_t* payload, int payload_length, const Dpt& data return false; } -int busValueToLocale(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToLocale(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(datatype.mainGroup == 231 ? 4 : 2); if (!datatype.index || (datatype.mainGroup == 231 && datatype.index == 1)) @@ -901,7 +902,7 @@ int busValueToLocale(const uint8_t* payload, int payload_length, const Dpt& data return false; } -int busValueToRGB(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToRGB(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(3); uint32_t rgb = unsigned16FromPayload(payload, 0) * 256 + unsigned8FromPayload(payload, 2); @@ -911,7 +912,7 @@ int busValueToRGB(const uint8_t* payload, int payload_length, const Dpt& datatyp return true; } -int busValueToFlaggedScaling(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToFlaggedScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(2); switch (datatype.index) @@ -926,7 +927,7 @@ int busValueToFlaggedScaling(const uint8_t* payload, int payload_length, const D return false; } -int busValueToActiveEnergy(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value) +int busValueToActiveEnergy(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value) { ASSERT_PAYLOAD(6); switch (datatype.index) @@ -948,13 +949,13 @@ int busValueToActiveEnergy(const uint8_t* payload, int payload_length, const Dpt //------------------------------------------------------------------------------------------------------------------------------------- -int valueToBusValueBinary(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueBinary(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { bitToPayload(payload, payload_length, 7, value); return true; } -int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -971,7 +972,7 @@ int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, int pa return true; } -int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -992,7 +993,7 @@ int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, int payl return true; } -int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((uint64_t)value < INT64_C(0) || (uint64_t)value > INT64_C(255) || (datatype.subGroup == 1 && (uint64_t)value > INT64_C(127))) return false; @@ -1000,7 +1001,7 @@ int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, int payloa return true; } -int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(0)) return false; @@ -1039,7 +1040,7 @@ int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, int payloa return true; } -int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(-128) || (int64_t)value > INT64_C(127)) return false; @@ -1048,7 +1049,7 @@ int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, int payload_ return true; } -int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if (datatype.index < 5) bitToPayload(payload, payload_length, datatype.index, value); @@ -1064,7 +1065,7 @@ int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, int pa return true; } -int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(65535)) return false; @@ -1073,7 +1074,7 @@ int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, int paylo return true; } -int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { struct tm tmp = value; time_t timeSinceEpoch = mktime(&tmp); @@ -1085,7 +1086,7 @@ int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, int paylo return true; } -int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(-32768) || (int64_t)value > INT64_C(32767)) return false; @@ -1102,7 +1103,7 @@ int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, int payload return true; } -int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { struct tm tmp = value; time_t timeSinceEpoch = mktime(&tmp); @@ -1114,7 +1115,7 @@ int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, int payloa return true; } -int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { double numValue = value; @@ -1164,7 +1165,7 @@ int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, int payload_ return true; } -int valueToBusValueTime(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueTime(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1191,7 +1192,7 @@ int valueToBusValueTime(const KNXValue& value, uint8_t* payload, int payload_len return true; } -int valueToBusValueDate(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueDate(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { struct tm tmp = value; if (tmp.tm_year < 1990 || tmp.tm_year > 2089) @@ -1203,7 +1204,7 @@ int valueToBusValueDate(const KNXValue& value, uint8_t* payload, int payload_len return true; } -int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(4294967295)) return false; @@ -1212,7 +1213,7 @@ int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, int paylo return true; } -int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(-2147483648) || (int64_t)value > INT64_C(2147483647)) return false; @@ -1221,7 +1222,7 @@ int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, int payload return true; } -int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(-2147483648) || (int64_t)value > INT64_C(2147483647)) return false; @@ -1230,7 +1231,7 @@ int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, int p return true; } -int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { double numValue = value; if (numValue < (-8388608.0 * pow(2, 255)) || numValue > (8388607.0 * pow(2, 255))) @@ -1240,7 +1241,7 @@ int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, int payload_ return true; } -int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1273,7 +1274,7 @@ int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, int payload_l return true; } -int valueToBusValueString(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueString(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { const char* strValue = value; uint8_t val = strValue[0]; @@ -1284,7 +1285,7 @@ int valueToBusValueString(const KNXValue& value, uint8_t* payload, int payload_l return true; } -int valueToBusValueScene(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueScene(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(63)) return false; @@ -1293,7 +1294,7 @@ int valueToBusValueScene(const KNXValue& value, uint8_t* payload, int payload_le return true; } -int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1314,7 +1315,7 @@ int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, int pay return true; } -int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1335,7 +1336,7 @@ int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, int payloa return true; } -int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1357,7 +1358,7 @@ int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, int payl return true; } -int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1426,19 +1427,19 @@ int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, int payload return true; } -int valueToBusValueUnicode(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueUnicode(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { //TODO return false; } -int valueToBusValueSigned64(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueSigned64(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { signed64ToPayload(payload, payload_length, 0, (int64_t)value, UINT64_C(0xFFFFFFFFFFFFFFFF)); return true; } -int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1484,7 +1485,7 @@ int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, int payloa return true; } -int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1511,7 +1512,7 @@ int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, int pay return true; } -int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1544,7 +1545,7 @@ int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, int payload_ return true; } -int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1571,7 +1572,7 @@ int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, int payload_ return true; } -int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1598,7 +1599,7 @@ int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, int payload_l return true; } -int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { int strl = strlen(value); if (strl != 2) @@ -1615,7 +1616,7 @@ int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, int payload_l return false; } -int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(16777215)) return false; @@ -1627,7 +1628,7 @@ int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, int payload_leng return true; } -int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1649,7 +1650,7 @@ int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, int p return true; } -int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype) +int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype) { switch (datatype.index) { @@ -1745,34 +1746,34 @@ uint8_t bcdFromPayload(const uint8_t* payload, int index) return (uint8_t)((payload[index / 2] >> 4) & 0x0F); } -void bitToPayload(uint8_t* payload, int payload_length, int index, bool value) +void bitToPayload(uint8_t* payload, size_t payload_length, int index, bool value) { ENSURE_PAYLOAD(index / 8 + 1); payload[index / 8] = (payload[index / 8] & ~(1 << (7 - (index % 8)))) | (value ? (1 << (7 - (index % 8))) : 0); } -void unsigned8ToPayload(uint8_t* payload, int payload_length, int index, uint8_t value, uint8_t mask) +void unsigned8ToPayload(uint8_t* payload, size_t payload_length, int index, uint8_t value, uint8_t mask) { ENSURE_PAYLOAD(index + 1); payload[index] = (payload[index] & ~mask) | (value & mask); } -void signed8ToPayload(uint8_t* payload, int payload_length, int index, int8_t value, uint8_t mask) +void signed8ToPayload(uint8_t* payload, size_t payload_length, int index, int8_t value, uint8_t mask) { ENSURE_PAYLOAD(index + 1); payload[index] = (payload[index] & ~mask) | (value & mask); } -void unsigned16ToPayload(uint8_t* payload, int payload_length, int index, uint16_t value, uint16_t mask) +void unsigned16ToPayload(uint8_t* payload, size_t payload_length, int index, uint16_t value, uint16_t mask) { ENSURE_PAYLOAD(index + 2); payload[index] = (payload[index] & (~mask >> 8)) | ((value >> 8) & (mask >> 8)); payload[index + 1] = (payload[index + 1] & ~mask) | (value & mask); } -void signed16ToPayload(uint8_t* payload, int payload_length, int index, int16_t value, uint16_t mask) +void signed16ToPayload(uint8_t* payload, size_t payload_length, int index, int16_t value, uint16_t mask) { ENSURE_PAYLOAD(index + 2); payload[index] = (payload[index] & (~mask >> 8)) | ((value >> 8) & (mask >> 8)); payload[index + 1] = (payload[index + 1] & ~mask) | (value & mask); } -void unsigned32ToPayload(uint8_t* payload, int payload_length, int index, uint32_t value, uint32_t mask) +void unsigned32ToPayload(uint8_t* payload, size_t payload_length, int index, uint32_t value, uint32_t mask) { ENSURE_PAYLOAD(index + 4); payload[index] = (payload[index] & (~mask >> 24)) | ((value >> 24) & (mask >> 24)); @@ -1780,7 +1781,7 @@ void unsigned32ToPayload(uint8_t* payload, int payload_length, int index, uint32 payload[index + 2] = (payload[index + 2] & (~mask >> 8)) | ((value >> 8) & (mask >> 8)); payload[index + 3] = (payload[index + 3] & ~mask) | (value & mask); } -void signed32ToPayload(uint8_t* payload, int payload_length, int index, int32_t value, uint32_t mask) +void signed32ToPayload(uint8_t* payload, size_t payload_length, int index, int32_t value, uint32_t mask) { ENSURE_PAYLOAD(index + 4); payload[index] = (payload[index] & (~mask >> 24)) | ((value >> 24) & (mask >> 24)); @@ -1789,7 +1790,7 @@ void signed32ToPayload(uint8_t* payload, int payload_length, int index, int32_t payload[index + 3] = (payload[index + 3] & ~mask) | (value & mask); } -void float16ToPayload(uint8_t* payload, int payload_length, int index, double value, uint16_t mask) +void float16ToPayload(uint8_t* payload, size_t payload_length, int index, double value, uint16_t mask) { bool wasNegative = false; if (value < 0) @@ -1809,15 +1810,17 @@ void float16ToPayload(uint8_t* payload, int payload_length, int index, double va if (wasNegative) mantissa *= -1; + println(mantissa); + signed16ToPayload(payload, payload_length, index, mantissa, mask); unsigned8ToPayload(payload, payload_length, index, exponent << 3, 0x78 & (mask >> 8)); } -void float32ToPayload(uint8_t* payload, int payload_length, int index, double value, uint32_t mask) +void float32ToPayload(uint8_t* payload, size_t payload_length, int index, double value, uint32_t mask) { float num = value; unsigned32ToPayload(payload, payload_length, index, *((uint32_t*)&num), mask); } -void signed64ToPayload(uint8_t* payload, int payload_length, int index, int64_t value, uint64_t mask) +void signed64ToPayload(uint8_t* payload, size_t payload_length, int index, int64_t value, uint64_t mask) { ENSURE_PAYLOAD(index + 8); payload[index] = (payload[index] & (~mask >> 56)) | ((value >> 56) & (mask >> 56)); @@ -1829,7 +1832,7 @@ void signed64ToPayload(uint8_t* payload, int payload_length, int index, int64_t payload[index + 6] = (payload[index + 6] & (~mask >> 8)) | ((value >> 8) & (mask >> 8)); payload[index + 7] = (payload[index + 7] & ~mask) | (value & mask); } -void bcdToPayload(uint8_t* payload, int payload_length, int index, uint8_t value) +void bcdToPayload(uint8_t* payload, size_t payload_length, int index, uint8_t value) { ENSURE_PAYLOAD(index / 2 + 1); if (index % 2) diff --git a/src/knx/dptconvert.h b/src/knx/dptconvert.h index 37df062..c7bb308 100644 --- a/src/knx/dptconvert.h +++ b/src/knx/dptconvert.h @@ -36,88 +36,88 @@ /** * Converts the KNX Payload given by the specific DPT and puts the value in the KNXValue struc */ -int KNX_Decode_Value(uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); +int KNX_Decode_Value(uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); /** * Converts the KNXValue struct to the KNX Payload as the specific DPT */ -int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); +int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); //KNX to internal -int busValueToBinary(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToBinaryControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToStepControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToCharacter(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToUnsigned8(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToSigned8(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToStatusAndMode(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToUnsigned16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToTimePeriod(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToSigned16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToTimeDelta(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToFloat16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToTime(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToDate(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToUnsigned32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToSigned32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToLongTimePeriod(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToFloat32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToAccess(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToString(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToScene(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToSceneControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToSceneInfo(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToSceneConfig(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToDateTime(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToUnicode(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToSigned64(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToAlarmInfo(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToSerialNumber(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToVersion(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToScaling(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToTariff(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToLocale(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToRGB(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToFlaggedScaling(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); -int busValueToActiveEnergy(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value); +int busValueToBinary(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToBinaryControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToStepControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToCharacter(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToUnsigned8(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToSigned8(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToStatusAndMode(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToUnsigned16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToTimePeriod(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToSigned16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToTimeDelta(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToFloat16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToTime(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToDate(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToUnsigned32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToSigned32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToLongTimePeriod(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToFloat32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToAccess(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToString(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToScene(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToSceneControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToSceneInfo(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToSceneConfig(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToDateTime(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToUnicode(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToSigned64(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToAlarmInfo(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToSerialNumber(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToVersion(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToTariff(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToLocale(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToRGB(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToFlaggedScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); +int busValueToActiveEnergy(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value); //Internal to KNX -int valueToBusValueBinary(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueTime(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueDate(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueString(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueScene(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueUnicode(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueSigned64(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); -int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype); +int valueToBusValueBinary(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueTime(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueDate(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueString(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueScene(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueUnicode(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueSigned64(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); +int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype); //Payload manipulation bool bitFromPayload(const uint8_t* payload, int index); @@ -132,14 +132,14 @@ float float32FromPayload(const uint8_t* payload, int index); int64_t signed64FromPayload(const uint8_t* payload, int index); uint8_t bcdFromPayload(const uint8_t* payload, int index); -void bitToPayload(uint8_t* payload, int payload_length, int index, bool value); -void unsigned8ToPayload(uint8_t* payload, int payload_length, int index, uint8_t value, uint8_t mask); //mask 0xFF -void signed8ToPayload(uint8_t* payload, int payload_length, int index, int8_t value, uint8_t mask); //mask 0xFF -void unsigned16ToPayload(uint8_t* payload, int payload_length, int index, uint16_t value, uint16_t mask); //mask 0xFFFF -void signed16ToPayload(uint8_t* payload, int payload_length, int index, int16_t value, uint16_t mask); //mask 0xFFFF -void unsigned32ToPayload(uint8_t* payload, int payload_length, int index, uint32_t value, uint32_t mask); //mask = 0xFFFFFFFF -void signed32ToPayload(uint8_t* payload, int payload_length, int index, int32_t value, uint32_t mask); //mask = 0xFFFFFFFF -void float16ToPayload(uint8_t* payload, int payload_length, int index, double value, uint16_t mask); //mask = 0xFFFF -void float32ToPayload(uint8_t* payload, int payload_length, int index, double value, uint32_t mask); //mask = 0xFFFFFFFF -void signed64ToPayload(uint8_t* payload, int payload_length, int index, int64_t value, uint64_t mask); //mask = UINT64_C(0xFFFFFFFFFFFFFFFF) -void bcdToPayload(uint8_t* payload, int payload_length, int index, uint8_t value); \ No newline at end of file +void bitToPayload(uint8_t* payload, size_t payload_length, int index, bool value); +void unsigned8ToPayload(uint8_t* payload, size_t payload_length, int index, uint8_t value, uint8_t mask); //mask 0xFF +void signed8ToPayload(uint8_t* payload, size_t payload_length, int index, int8_t value, uint8_t mask); //mask 0xFF +void unsigned16ToPayload(uint8_t* payload, size_t payload_length, int index, uint16_t value, uint16_t mask); //mask 0xFFFF +void signed16ToPayload(uint8_t* payload, size_t payload_length, int index, int16_t value, uint16_t mask); //mask 0xFFFF +void unsigned32ToPayload(uint8_t* payload, size_t payload_length, int index, uint32_t value, uint32_t mask); //mask = 0xFFFFFFFF +void signed32ToPayload(uint8_t* payload, size_t payload_length, int index, int32_t value, uint32_t mask); //mask = 0xFFFFFFFF +void float16ToPayload(uint8_t* payload, size_t payload_length, int index, double value, uint16_t mask); //mask = 0xFFFF +void float32ToPayload(uint8_t* payload, size_t payload_length, int index, double value, uint32_t mask); //mask = 0xFFFFFFFF +void signed64ToPayload(uint8_t* payload, size_t payload_length, int index, int64_t value, uint64_t mask); //mask = UINT64_C(0xFFFFFFFFFFFFFFFF) +void bcdToPayload(uint8_t* payload, size_t payload_length, int index, uint8_t value); \ No newline at end of file diff --git a/visualstudio/knx-bme680.vgdbproj b/visualstudio/knx-bme680.vgdbproj index e9a2452..40fcf75 100644 --- a/visualstudio/knx-bme680.vgdbproj +++ b/visualstudio/knx-bme680.vgdbproj @@ -45,7 +45,7 @@ - COM5 + COM4 115200 8 diff --git a/visualstudio/knx.sln b/visualstudio/knx.sln index ce42f6b..4df1643 100644 --- a/visualstudio/knx.sln +++ b/visualstudio/knx.sln @@ -46,6 +46,7 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Mixed.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|VisualGDB.Build.0 = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x64.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) @@ -84,8 +85,7 @@ Global {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|ESP32_Dev_Module.Build.0 = Debug|ESP32_Dev_Module {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module) - {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.Build.0 = Release|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 = Release|NodeMCU_1 0_(ESP-12E_Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x64.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module) From 5577774ef93818fef5ef4527232b7a80a701c557 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 2 Sep 2019 22:04:07 +0200 Subject: [PATCH 12/13] print warning on DPT *.0 --- src/knx/dpt.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/knx/dpt.cpp b/src/knx/dpt.cpp index 6128f5c..9af00c2 100644 --- a/src/knx/dpt.cpp +++ b/src/knx/dpt.cpp @@ -1,11 +1,16 @@ #include "dpt.h" +#include "bits.h" + Dpt::Dpt() {} Dpt::Dpt(short mainGroup, short subGroup, short index /* = 0 */) : mainGroup(mainGroup), subGroup(subGroup), index(index) -{} +{ + if (subGroup == 0) + println("WARNING: You used and invalid Dpt *.0"); +} bool Dpt::operator==(const Dpt& other) const { From f2d45b233a123a0432fde9dbed4385336dee289b Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 2 Sep 2019 22:55:23 +0200 Subject: [PATCH 13/13] add defines for datapoint types --- examples/knx-demo/knx-demo.ino | 4 + src/knx/dpt.h | 358 +++++++++++++++++++++++++++++++++ 2 files changed, 362 insertions(+) diff --git a/examples/knx-demo/knx-demo.ino b/examples/knx-demo/knx-demo.ino index 1354af0..f9b1b7b 100644 --- a/examples/knx-demo/knx-demo.ino +++ b/examples/knx-demo/knx-demo.ino @@ -72,6 +72,10 @@ void setup() { // register callback for reset GO goReset.callback(resetCallback); + goReset.dataPointType(DPT_Trigger); + goCurrent.dataPointType(DPT_Value_Temp); + goMin.dataPointType(DPT_Value_Temp); + goMax.dataPointType(DPT_Value_Temp); SerialDBG.print("Timeout: "); SerialDBG.println(knx.paramByte(0)); diff --git a/src/knx/dpt.h b/src/knx/dpt.h index 596aff6..3a18c27 100644 --- a/src/knx/dpt.h +++ b/src/knx/dpt.h @@ -1,5 +1,363 @@ #pragma once +#define DPT_Switch Dpt(1, 1) +#define DPT_Bool Dpt(1, 2) +#define DPT_Enable Dpt(1, 3) +#define DPT_Ramp Dpt(1, 4) +#define DPT_Alarm Dpt(1, 5) +#define DPT_BinaryValue Dpt(1, 6) +#define DPT_Step Dpt(1, 7) +#define DPT_UpDown Dpt(1, 8) +#define DPT_OpenClose Dpt(1, 9) +#define DPT_Start Dpt(1, 10) +#define DPT_State Dpt(1, 11) +#define DPT_Invert Dpt(1, 12) +#define DPT_DimSendStyle Dpt(1, 13) +#define DPT_InputSource Dpt(1, 14) +#define DPT_Reset Dpt(1, 15) +#define DPT_Ack Dpt(1, 16) +#define DPT_Trigger Dpt(1, 17) +#define DPT_Occupancy Dpt(1, 18) +#define DPT_Window_Door Dpt(1, 19) +#define DPT_LogicalFunction Dpt(1, 21) +#define DPT_Scene_AB Dpt(1, 22) +#define DPT_ShutterBlinds_Mode Dpt(1, 23) +#define DPT_Heat_Cool Dpt(1, 100) +#define DPT_Switch_Control Dpt(2, 1) +#define DPT_Bool_Control Dpt(2, 2) +#define DPT_Enable_Control Dpt(2, 3) +#define DPT_Ramp_Control Dpt(2, 4) +#define DPT_Alarm_Control Dpt(2, 5) +#define DPT_BinaryValue_Control Dpt(2, 6) +#define DPT_Step_Control Dpt(2, 7) +#define DPT_Direction1_Control Dpt(2, 8) +#define DPT_Direction2_Control Dpt(2, 9) +#define DPT_Start_Control Dpt(2, 10) +#define DPT_State_Control Dpt(2, 11) +#define DPT_Invert_Control Dpt(2, 12) +#define DPT_Control_Dimming Dpt(3, 7) +#define DPT_Control_Blinds Dpt(3, 8) +#define DPT_Char_ASCII Dpt(4, 1) +#define DPT_Char_8859_1 Dpt(4, 2) +#define DPT_Scaling Dpt(5, 1) +#define DPT_Angle Dpt(5, 3) +#define DPT_Percent_U8 Dpt(5, 4) +#define DPT_DecimalFactor Dpt(5, 5) +#define DPT_Tariff Dpt(5, 6) +#define DPT_Value_1_Ucount Dpt(5, 10) +#define DPT_Percent_V8 Dpt(6, 1) +#define DPT_Value_1_Count Dpt(6, 10) +#define DPT_Status_Mode3 Dpt(6, 20) +#define DPT_Value_2_Ucount Dpt(7, 1) +#define DPT_TimePeriodMsec Dpt(7, 2) +#define DPT_TimePeriod10MSec Dpt(7, 3) +#define DPT_TimePeriod100MSec Dpt(7, 4) +#define DPT_TimePeriodSec Dpt(7, 5) +#define DPT_TimePeriodMin Dpt(7, 6) +#define DPT_TimePeriodHrs Dpt(7, 7) +#define DPT_PropDataType Dpt(7, 10) +#define DPT_Length_mm Dpt(7, 11) +#define DPT_UElCurrentmA Dpt(7, 12) +#define DPT_Brightness Dpt(7, 13) +#define DPT_Value_2_Count Dpt(8, 1) +#define DPT_DeltaTimeMsec Dpt(8, 2) +#define DPT_DeltaTime10MSec Dpt(8, 3) +#define DPT_DeltaTime100MSec Dpt(8, 4) +#define DPT_DeltaTimeSec Dpt(8, 5) +#define DPT_DeltaTimeMin Dpt(8, 6) +#define DPT_DeltaTimeHrs Dpt(8, 7) +#define DPT_Percent_V16 Dpt(8, 10) +#define DPT_Rotation_Angle Dpt(8, 11) +#define DPT_Value_Temp Dpt(9, 1) +#define DPT_Value_Tempd Dpt(9, 2) +#define DPT_Value_Tempa Dpt(9, 3) +#define DPT_Value_Lux Dpt(9, 4) +#define DPT_Value_Wsp Dpt(9, 5) +#define DPT_Value_Pres Dpt(9, 6) +#define DPT_Value_Humidity Dpt(9, 7) +#define DPT_Value_AirQuality Dpt(9, 8) +#define DPT_Value_Time1 Dpt(9, 10) +#define DPT_Value_Time2 Dpt(9, 11) +#define DPT_Value_Volt Dpt(9, 20) +#define DPT_Value_Curr Dpt(9, 21) +#define DPT_PowerDensity Dpt(9, 22) +#define DPT_KelvinPerPercent Dpt(9, 23) +#define DPT_Power Dpt(9, 24) +#define DPT_Value_Volume_Flow Dpt(9, 25) +#define DPT_Rain_Amount Dpt(9, 26) +#define DPT_Value_Temp_F Dpt(9, 27) +#define DPT_Value_Wsp_kmh Dpt(9, 28) +#define DPT_TimeOfDay Dpt(10, 1) +#define DPT_Date Dpt(11, 1) +#define DPT_Value_4_Ucount Dpt(12, 1) +#define DPT_Value_4_Count Dpt(13, 1) +#define DPT_FlowRate_m3 Dpt(13, 2) / h +#define DPT_ActiveEnergy Dpt(13, 10) +#define DPT_ApparantEnergy Dpt(13, 11) +#define DPT_ReactiveEnergy Dpt(13, 12) +#define DPT_ActiveEnergy_kWh Dpt(13, 13) +#define DPT_ApparantEnergy_kVAh Dpt(13, 14) +#define DPT_ReactiveEnergy_kVARh Dpt(13, 15) +#define DPT_LongDeltaTimeSec Dpt(13, 100) +#define DPT_Value_Acceleration Dpt(14, 0) +#define DPT_Value_Acceleration_Angular Dpt(14, 1) +#define DPT_Value_Activation_Energy Dpt(14, 2) +#define DPT_Value_Activity Dpt(14, 3) +#define DPT_Value_Mol Dpt(14, 4) +#define DPT_Value_Amplitude Dpt(14, 5) +#define DPT_Value_AngleRad Dpt(14, 6) +#define DPT_Value_AngleDeg Dpt(14, 7) +#define DPT_Value_Angular_Momentum Dpt(14, 8) +#define DPT_Value_Angular_Velocity Dpt(14, 9) +#define DPT_Value_Area Dpt(14, 10) +#define DPT_Value_Capacitance Dpt(14, 11) +#define DPT_Value_Charge_DensitySurface Dpt(14, 12) +#define DPT_Value_Charge_DensityVolume Dpt(14, 13) +#define DPT_Value_Compressibility Dpt(14, 14) +#define DPT_Value_Conductance Dpt(14, 15) +#define DPT_Value_Electrical_Conductivity Dpt(14, 16) +#define DPT_Value_Density Dpt(14, 17) +#define DPT_Value_Electric_Charge Dpt(14, 18) +#define DPT_Value_Electric_Current Dpt(14, 19) +#define DPT_Value_Electric_CurrentDensity Dpt(14, 20) +#define DPT_Value_Electric_DipoleMoment Dpt(14, 21) +#define DPT_Value_Electric_Displacement Dpt(14, 22) +#define DPT_Value_Electric_FieldStrength Dpt(14, 23) +#define DPT_Value_Electric_Flux Dpt(14, 24) +#define DPT_Value_Electric_FluxDensity Dpt(14, 25) +#define DPT_Value_Electric_Polarization Dpt(14, 26) +#define DPT_Value_Electric_Potential Dpt(14, 27) +#define DPT_Value_Electric_PotentialDifference Dpt(14, 28) +#define DPT_Value_ElectromagneticMoment Dpt(14, 29) +#define DPT_Value_Electromotive_Force Dpt(14, 30) +#define DPT_Value_Energy Dpt(14, 31) +#define DPT_Value_Force Dpt(14, 32) +#define DPT_Value_Frequency Dpt(14, 33) +#define DPT_Value_Angular_Frequency Dpt(14, 34) +#define DPT_Value_Heat_Capacity Dpt(14, 35) +#define DPT_Value_Heat_FlowRate Dpt(14, 36) +#define DPT_Value_Heat_Quantity Dpt(14, 37) +#define DPT_Value_Impedance Dpt(14, 38) +#define DPT_Value_Length Dpt(14, 39) +#define DPT_Value_Light_Quantity Dpt(14, 40) +#define DPT_Value_Luminance Dpt(14, 41) +#define DPT_Value_Luminous_Flux Dpt(14, 42) +#define DPT_Value_Luminous_Intensity Dpt(14, 43) +#define DPT_Value_Magnetic_FieldStrength Dpt(14, 44) +#define DPT_Value_Magnetic_Flux Dpt(14, 45) +#define DPT_Value_Magnetic_FluxDensity Dpt(14, 46) +#define DPT_Value_Magnetic_Moment Dpt(14, 47) +#define DPT_Value_Magnetic_Polarization Dpt(14, 48) +#define DPT_Value_Magnetization Dpt(14, 49) +#define DPT_Value_MagnetomotiveForce Dpt(14, 50) +#define DPT_Value_Mass Dpt(14, 51) +#define DPT_Value_MassFlux Dpt(14, 52) +#define DPT_Value_Momentum Dpt(14, 53) +#define DPT_Value_Phase_AngleRad Dpt(14, 54) +#define DPT_Value_Phase_AngleDeg Dpt(14, 55) +#define DPT_Value_Power Dpt(14, 56) +#define DPT_Value_Power_Factor Dpt(14, 57) +#define DPT_Value_Pressure Dpt(14, 58) +#define DPT_Value_Reactance Dpt(14, 59) +#define DPT_Value_Resistance Dpt(14, 60) +#define DPT_Value_Resistivity Dpt(14, 61) +#define DPT_Value_SelfInductance Dpt(14, 62) +#define DPT_Value_SolidAngle Dpt(14, 63) +#define DPT_Value_Sound_Intensity Dpt(14, 64) +#define DPT_Value_Speed Dpt(14, 65) +#define DPT_Value_Stress Dpt(14, 66) +#define DPT_Value_Surface_Tension Dpt(14, 67) +#define DPT_Value_Common_Temperature Dpt(14, 68) +#define DPT_Value_Absolute_Temperature Dpt(14, 69) +#define DPT_Value_TemperatureDifference Dpt(14, 70) +#define DPT_Value_Thermal_Capacity Dpt(14, 71) +#define DPT_Value_Thermal_Conductivity Dpt(14, 72) +#define DPT_Value_ThermoelectricPower Dpt(14, 73) +#define DPT_Value_Time Dpt(14, 74) +#define DPT_Value_Torque Dpt(14, 75) +#define DPT_Value_Volume Dpt(14, 76) +#define DPT_Value_Volume_Flux Dpt(14, 77) +#define DPT_Value_Weight Dpt(14, 78) +#define DPT_Value_Work Dpt(14, 79) +#define DPT_Access_Data Dpt(15, 0) +#define DPT_String_ASCII Dpt(16, 0) +#define DPT_String_8859_1 Dpt(16, 1) +#define DPT_SceneNumber Dpt(17, 1) +#define DPT_SceneControl Dpt(18, 1) +#define DPT_DateTime Dpt(19, 1) +#define DPT_SCLOMode Dpt(20, 1) +#define DPT_BuildingMode Dpt(20, 2) +#define DPT_OccMode Dpt(20, 3) +#define DPT_Priority Dpt(20, 4) +#define DPT_LightApplicationMode Dpt(20, 5) +#define DPT_ApplicationArea Dpt(20, 6) +#define DPT_AlarmClassType Dpt(20, 7) +#define DPT_PSUMode Dpt(20, 8) +#define DPT_ErrorClass_System Dpt(20, 11) +#define DPT_ErrorClass_HVAC Dpt(20, 12) +#define DPT_Time_Delay Dpt(20, 13) +#define DPT_Beaufort_Wind_Force_Scale Dpt(20, 14) +#define DPT_SensorSelect Dpt(20, 17) +#define DPT_ActuatorConnectType Dpt(20, 20) +#define DPT_FuelType Dpt(20, 100) +#define DPT_BurnerType Dpt(20, 101) +#define DPT_HVACMode Dpt(20, 102) +#define DPT_DHWMode Dpt(20, 103) +#define DPT_LoadPriority Dpt(20, 104) +#define DPT_HVACContrMode Dpt(20, 105) +#define DPT_HVACEmergMode Dpt(20, 106) +#define DPT_ChangeoverMode Dpt(20, 107) +#define DPT_ValveMode Dpt(20, 108) +#define DPT_DamperMode Dpt(20, 109) +#define DPT_HeaterMode Dpt(20, 110) +#define DPT_FanMode Dpt(20, 111) +#define DPT_MasterSlaveMode Dpt(20, 112) +#define DPT_StatusRoomSetp Dpt(20, 113) +#define DPT_ADAType Dpt(20, 120) +#define DPT_BackupMode Dpt(20, 121) +#define DPT_StartSynchronization Dpt(20, 122) +#define DPT_Behaviour_Lock_Unlock Dpt(20, 600) +#define DPT_Behaviour_Bus_Power_Up_Down Dpt(20, 601) +#define DPT_DALI_Fade_Time Dpt(20, 602) +#define DPT_BlinkingMode Dpt(20, 603) +#define DPT_LightControlMode Dpt(20, 604) +#define DPT_SwitchPBModel Dpt(20, 605) +#define DPT_PBAction Dpt(20, 606) +#define DPT_DimmPBModel Dpt(20, 607) +#define DPT_SwitchOnMode Dpt(20, 608) +#define DPT_LoadTypeSet Dpt(20, 609) +#define DPT_LoadTypeDetected Dpt(20, 610) +#define DPT_SABExceptBehaviour Dpt(20, 801) +#define DPT_SABBehaviour_Lock_Unlock Dpt(20, 802) +#define DPT_SSSBMode Dpt(20, 803) +#define DPT_BlindsControlMode Dpt(20, 804) +#define DPT_CommMode Dpt(20, 1000) +#define DPT_AddInfoTypes Dpt(20, 1001) +#define DPT_RF_ModeSelect Dpt(20, 1002) +#define DPT_RF_FilterSelect Dpt(20, 1003) +#define DPT_StatusGen Dpt(21, 1) +#define DPT_Device_Control Dpt(21, 2) +#define DPT_ForceSign Dpt(21, 100) +#define DPT_ForceSignCool Dpt(21, 101) +#define DPT_StatusRHC Dpt(21, 102) +#define DPT_StatusSDHWC Dpt(21, 103) +#define DPT_FuelTypeSet Dpt(21, 104) +#define DPT_StatusRCC Dpt(21, 105) +#define DPT_StatusAHU Dpt(21, 106) +#define DPT_LightActuatorErrorInfo Dpt(21, 601) +#define DPT_RF_ModeInfo Dpt(21, 1000) +#define DPT_RF_FilterInfo Dpt(21, 1001) +#define DPT_Channel_Activation_8 Dpt(21, 1010) +#define DPT_StatusDHWC Dpt(22, 100) +#define DPT_StatusRHCC Dpt(22, 101) +#define DPT_Media Dpt(22, 1000) +#define DPT_Channel_Activation_16 Dpt(22, 1010) +#define DPT_OnOff_Action Dpt(23, 1) +#define DPT_Alarm_Reaction Dpt(23, 2) +#define DPT_UpDown_Action Dpt(23, 3) +#define DPT_HVAC_PB_Action Dpt(23, 102) +#define DPT_VarString_8859_1 Dpt(24, 1) +#define DPT_DoubleNibble Dpt(25, 1000) +#define DPT_SceneInfo Dpt(26, 1) +#define DPT_CombinedInfoOnOff Dpt(27, 1) +#define DPT_UTF_8 Dpt(28, 1) +#define DPT_ActiveEnergy_V64 Dpt(29, 10) +#define DPT_ApparantEnergy_V64 Dpt(29, 11) +#define DPT_ReactiveEnergy_V64 Dpt(29, 12) +#define DPT_Channel_Activation_24 Dpt(30, 1010) +#define DPT_PB_Action_HVAC_Extended Dpt(31, 101) +#define DPT_Heat_Cool_Z Dpt(200, 100) +#define DPT_BinaryValue_Z Dpt(200, 101) +#define DPT_HVACMode_Z Dpt(201, 100) +#define DPT_DHWMode_Z Dpt(201, 102) +#define DPT_HVACContrMode_Z Dpt(201, 104) +#define DPT_EnablH_Cstage_Z Dpt(201, 105) +#define DPT_BuildingMode_Z Dpt(201, 107) +#define DPT_OccMode_Z Dpt(201, 108) +#define DPT_HVACEmergMode_Z Dpt(201, 109) +#define DPT_RelValue_Z Dpt(202, 1) +#define DPT_UCountValue8_Z Dpt(202, 2) +#define DPT_TimePeriodMsec_Z Dpt(203, 2) +#define DPT_TimePeriod10Msec_Z Dpt(203, 3) +#define DPT_TimePeriod100Msec_Z Dpt(203, 4) +#define DPT_TimePeriodSec_Z Dpt(203, 5) +#define DPT_TimePeriodMin_Z Dpt(203, 6) +#define DPT_TimePeriodHrs_Z Dpt(203, 7) +#define DPT_UFlowRateLiter_per_h_Z Dpt(203, 11) +#define DPT_UCountValue16_Z Dpt(203, 12) +#define DPT_UElCurrent?A_Z Dpt(203, 13) +#define DPT_PowerKW_Z Dpt(203, 14) +#define DPT_AtmPressureAbs_Z Dpt(203, 15) +#define DPT_PercentU16_Z Dpt(203, 17) +#define DPT_HVACAirQual_Z Dpt(203, 100) +#define DPT_WindSpeed_Z Dpt(203, 101) +#define DPT_SunIntensity_Z Dpt(203, 102) +#define DPT_HVACAirFlowAbs_Z Dpt(203, 104) +#define DPT_RelSignedValue_Z Dpt(204, 1) +#define DPT_DeltaTimeMsec_Z Dpt(205, 2) +#define DPT_DeltaTime10Msec_Z Dpt(205, 3) +#define DPT_DeltaTime100Msec_Z Dpt(205, 4) +#define DPT_DeltaTimeSec_Z Dpt(205, 5) +#define DPT_DeltaTimeMin_Z Dpt(205, 6) +#define DPT_DeltaTimeHrs_Z Dpt(205, 7) +#define DPT_Percent_V16_Z Dpt(205, 17) +#define DPT_TempHVACAbs_Z Dpt(205, 100) +#define DPT_TempHVACRel_Z Dpt(205, 101) +#define DPT_HVACAirFlowRel_Z Dpt(205, 102) +#define DPT_HVACModeNext Dpt(206, 100) +#define DPT_DHWModeNext Dpt(206, 102) +#define DPT_OccModeNext Dpt(206, 104) +#define DPT_BuildingModeNext Dpt(206, 105) +#define DPT_StatusBUC Dpt(207, 100) +#define DPT_LockSign Dpt(207, 101) +#define DPT_ValueDemBOC Dpt(207, 102) +#define DPT_ActPosDemAbs Dpt(207, 104) +#define DPT_StatusAct Dpt(207, 105) +#define DPT_StatusLightingActuator Dpt(207, 600) +#define DPT_StatusHPM Dpt(209, 100) +#define DPT_TempRoomDemAbs Dpt(209, 101) +#define DPT_StatusCPM Dpt(209, 102) +#define DPT_StatusWTC Dpt(209, 103) +#define DPT_TempFlowWaterDemAbs Dpt(210, 100) +#define DPT_EnergyDemWater Dpt(211, 100) +#define DPT_TempRoomSetpSetShift_3 Dpt(212, 100) +#define DPT_TempRoomSetpSet_3 Dpt(212, 101) +#define DPT_TempRoomSetpSet_4 Dpt(213, 100) +#define DPT_TempDHWSetpSet_4 Dpt(213, 101) +#define DPT_TempRoomSetpSetShift_4 Dpt(213, 102) +#define DPT_PowerFlowWaterDemHPM Dpt(214, 100) +#define DPT_PowerFlowWaterDemCPM Dpt(214, 101) +#define DPT_StatusBOC Dpt(215, 100) +#define DPT_StatusCC Dpt(215, 101) +#define DPT_SpecHeatProd Dpt(216, 100) +#define DPT_Version Dpt(217, 1) +#define DPT_VolumeLiter_Z Dpt(218, 1) +#define DPT_FlowRate_m3_per_h_Z Dpt(218, 2) +#define DPT_AlarmInfo Dpt(219, 1) +#define DPT_TempHVACAbsNext Dpt(220, 100) +#define DPT_SerNum Dpt(221, 1) +#define DPT_TempRoomSetpSetF16_3 Dpt(222, 100) +#define DPT_TempRoomSetpSetShiftF16_3 Dpt(222, 101) +#define DPT_EnergyDemAir Dpt(223, 100) +#define DPT_TempSupplyAirSetpSet Dpt(224, 100) +#define DPT_ScalingSpeed Dpt(225, 1) +#define DPT_Scaling_Step_Time Dpt(225, 2) +#define DPT_TariffNext Dpt(225, 3) +#define DPT_MeteringValue Dpt(229, 1) +#define DPT_MBus_Address Dpt(230, 1000) +#define DPT_Locale_ASCII Dpt(231, 1) +#define DPT_Colour_RGB Dpt(232, 600) +#define DPT_LanguageCodeAlpha2_ASCII Dpt(234, 1) +#define DPT_RegionCodeAlpha2_ASCII Dpt(234, 2) +#define DPT_Tariff_ActiveEnergy Dpt(235, 1) +#define DPT_Prioritised_Mode_Control Dpt(236, 1) +#define DPT_DALI_Control_Gear_Diagnostic Dpt(237, 600) +#define DPT_SceneConfig Dpt(238, 1) +#define DPT_DALI_Diagnostics Dpt(238, 600) +#define DPT_FlaggedScaling Dpt(239, 1) +#define DPT_CombinedPosition Dpt(240, 800) +#define DPT_StatusSAB Dpt(241, 800) + class Dpt { public: