From 59d1b67d6ccdd89e43b404bb85166a4902c77a9d Mon Sep 17 00:00:00 2001 From: croghostrider Date: Fri, 4 Jun 2021 17:23:23 +0200 Subject: [PATCH] add KNX IP discovery support (#141) for ESP8266 and ESP32 --- src/esp32_platform.cpp | 12 ++++++++++++ src/esp32_platform.h | 3 +++ src/esp_platform.cpp | 12 ++++++++++++ src/esp_platform.h | 3 +++ 4 files changed, 30 insertions(+) diff --git a/src/esp32_platform.cpp b/src/esp32_platform.cpp index 9268cf0..6f49934 100644 --- a/src/esp32_platform.cpp +++ b/src/esp32_platform.cpp @@ -92,6 +92,18 @@ int Esp32Platform::readBytesMultiCast(uint8_t * buffer, uint16_t maxLen) return len; } +bool Esp32Platform::sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t* buffer, uint16_t len) +{ + IPAddress ucastaddr(htonl(addr)); + println("sendBytesUniCast endPacket fail"); + if(_udp.beginPacket(ucastaddr, port) == 1) { + _udp.write(buffer, len); + if(_udp.endPacket() == 0) println("sendBytesUniCast endPacket fail"); + } + else println("sendBytesUniCast beginPacket fail"); + return true; +} + uint8_t * Esp32Platform::getEepromBuffer(uint16_t size) { EEPROM.begin(size); diff --git a/src/esp32_platform.h b/src/esp32_platform.h index ff06179..07b0d75 100644 --- a/src/esp32_platform.h +++ b/src/esp32_platform.h @@ -28,6 +28,9 @@ public: bool sendBytesMultiCast(uint8_t* buffer, uint16_t len) override; int readBytesMultiCast(uint8_t* buffer, uint16_t maxLen) override; + //unicast + bool sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t* buffer, uint16_t len) override; + //memory uint8_t* getEepromBuffer(uint16_t size); void commitToEeprom(); diff --git a/src/esp_platform.cpp b/src/esp_platform.cpp index 28d0b5a..14a7c58 100644 --- a/src/esp_platform.cpp +++ b/src/esp_platform.cpp @@ -92,6 +92,18 @@ int EspPlatform::readBytesMultiCast(uint8_t * buffer, uint16_t maxLen) return len; } +bool EspPlatform::sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t* buffer, uint16_t len) +{ + IPAddress ucastaddr(htonl(addr)); + println("sendBytesUniCast endPacket fail"); + if(_udp.beginPacket(ucastaddr, port) == 1) { + _udp.write(buffer, len); + if(_udp.endPacket() == 0) println("sendBytesUniCast endPacket fail"); + } + else println("sendBytesUniCast beginPacket fail"); + return true; +} + uint8_t * EspPlatform::getEepromBuffer(uint16_t size) { EEPROM.begin(size); diff --git a/src/esp_platform.h b/src/esp_platform.h index 80c0ad1..c535bae 100644 --- a/src/esp_platform.h +++ b/src/esp_platform.h @@ -28,6 +28,9 @@ class EspPlatform : public ArduinoPlatform bool sendBytesMultiCast(uint8_t* buffer, uint16_t len) override; int readBytesMultiCast(uint8_t* buffer, uint16_t maxLen) override; + //unicast + bool sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t* buffer, uint16_t len) override; + //memory uint8_t* getEepromBuffer(uint16_t size); void commitToEeprom();