From 19735da180c877524e41a1e503d58899803f3ea0 Mon Sep 17 00:00:00 2001 From: Ing-Dom Date: Sat, 20 Jul 2024 16:24:45 +0200 Subject: [PATCH] ip optimazations from rp2040 to ESP --- src/esp32_platform.cpp | 34 +++++++++++++++++++++++++--------- src/esp32_platform.h | 4 ++++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/esp32_platform.cpp b/src/esp32_platform.cpp index 2571b680..b0d5b03e 100644 --- a/src/esp32_platform.cpp +++ b/src/esp32_platform.cpp @@ -102,31 +102,47 @@ bool Esp32Platform::sendBytesMultiCast(uint8_t * buffer, uint16_t len) int Esp32Platform::readBytesMultiCast(uint8_t * buffer, uint16_t maxLen, uint32_t& src_addr, uint16_t& src_port) { int len = _udp.parsePacket(); - src_addr = htonl(_udp.remoteIP()); - src_port = _udp.remotePort(); if (len == 0) return 0; - + if (len > maxLen) { - KNX_DEBUG_SERIAL.printf("udp buffer to small. was %d, needed %d\n", maxLen, len); - fatalError(); + println("Unexpected UDP data packet length - drop packet"); + for (size_t i = 0; i < len; i++) + _udp.read(); + return 0; } _udp.read(buffer, len); - //printHex("-> ", buffer, len); + _remoteIP = _udp.remoteIP(); + _remotePort = _udp.remotePort(); + src_addr = htonl(_remoteIP); + src_port = _remotePort; + + // print("Remote IP: "); + // print(_udp.remoteIP().toString().c_str()); + // printHex("-> ", buffer, len); + 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) { + + if(!addr) + ucastaddr = _remoteIP; + + if(!port) + port = _remotePort; + + if(_udp.beginPacket(ucastaddr, port) == 1) + { _udp.write(buffer, len); if(_udp.endPacket() == 0) println("sendBytesUniCast endPacket fail"); } - else println("sendBytesUniCast beginPacket fail"); + else + println("sendBytesUniCast beginPacket fail"); return true; } diff --git a/src/esp32_platform.h b/src/esp32_platform.h index b30c5d55..4318fa41 100644 --- a/src/esp32_platform.h +++ b/src/esp32_platform.h @@ -38,6 +38,10 @@ class Esp32Platform : public ArduinoPlatform //memory uint8_t* getEepromBuffer(uint32_t size); void commitToEeprom(); + + protected: IPAddress _remoteIP; + protected: uint16_t _remotePort; + private: WiFiUDP _udp; int8_t _rxPin = -1;