knx/src/rp2040_arduino_platform.h

137 lines
3.5 KiB
C
Raw Normal View History

this adds IP (WiFi and wired Ethernet) support to the rp2040 platform. It includes also some optimizations for KNX-IP in general. Squashed commit of the following: commit 14bf9bef25ccc2c9bddefe7c8f1e0f6b1d63b3bc Author: Ing-Dom <dom@ing-dom.de> Date: Sun Dec 24 10:17:05 2023 +0100 clean up, remove KNX_LOG_IP commit 57223e46e414010662772989c2520cf1960ed268 Merge: 2911448 a870dd8 Author: Ing-Dom <dom@ing-dom.de> Date: Sun Dec 24 10:10:19 2023 +0100 Merge remote-tracking branch 'remotes/origin/master' into rp2040_ip commit 2911448d22a454aacae472762677381acce6a159 Merge: 8ac6aec 3c29d16 Author: Dom <dom@ing-dom.de> Date: Wed Dec 20 10:04:32 2023 +0100 Merge pull request #13 from OpenKNX/fix_serialnumber Fix serialnumber commit 8ac6aeccce20a9e5e1bbf5300008a72383f7ee71 Author: Ing-Dom <dom@ing-dom.de> Date: Thu Dec 14 12:28:02 2023 +0100 fix macAddress reading for Wifi commit 9db2cd58708e9d7bbfd485ada2ff38c829447c42 Author: Ing-Dom <dom@ing-dom.de> Date: Tue Dec 12 13:08:53 2023 +0100 remove LARGE_BUFFERS and clean up header files of ETHERNET_GENERIC commit 2f229ae90c6f72e01c2a9b9efe134f75fc85547c Author: Ing-Dom <dom@ing-dom.de> Date: Tue Dec 12 00:56:32 2023 +0100 temporary fix, solution needed for tunneling commit f6e7e619a454f43db10e644b41c58b43a1a2b453 Author: Ing-Dom <dom@ing-dom.de> Date: Mon Dec 11 13:54:26 2023 +0100 unified approach for different ip stacks with rp2040 plattform commit 4723edab84986bca6d31ea7b3083b1b7b8ef907e Author: Marco Scholl <develop@marco-scholl.de> Date: Mon Dec 11 08:34:25 2023 +0100 wip commit 5bf3e615c8649dd9c34be7b1fe6ad4062ce96c34 Author: Ing-Dom <dom@ing-dom.de> Date: Thu Dec 7 14:53:42 2023 +0100 ip and not ip in one rp2040 plattform commit aaca34a237686c5389888b7bd040b860331bdbff Merge: fd97f59 d44606d Author: Dom <dom@ing-dom.de> Date: Wed Dec 6 15:30:17 2023 +0100 Merge branch 'thelsing:master' into rp2040_lwip commit fd97f5920ef486ca955f5425cbcaec062e3ef977 Author: Marco Scholl <develop@marco-scholl.de> Date: Thu Nov 30 23:19:13 2023 +0100 dd sime ifdef to allow build without ip interface commit c665a79db9cee7063dd77a155108633db81ef8e8 Author: Ing-Dom <dom@ing-dom.de> Date: Tue Nov 14 10:03:48 2023 +0100 stub for handling SearchRequestExt to prevent console messages commit 50745be66681616681f67d7bdf17008f5d19640d Author: Ing-Dom <dom@ing-dom.de> Date: Tue Nov 14 00:02:49 2023 +0100 adding ip support for rp2040 plattform
2023-12-24 10:20:23 +01:00
#pragma once
#include "arduino_platform.h"
#include "Arduino.h"
#ifdef ARDUINO_ARCH_RP2040
#ifndef USE_RP2040_EEPROM_EMULATION
#ifndef KNX_FLASH_OFFSET
#define KNX_FLASH_OFFSET 0x180000 // 1.5MiB
#pragma warning "KNX_FLASH_OFFSET not defined, using 0x180000"
#endif
#endif
#ifdef USE_RP2040_LARGE_EEPROM_EMULATION
#define USE_RP2040_EEPROM_EMULATION
#endif
this adds IP (WiFi and wired Ethernet) support to the rp2040 platform. It includes also some optimizations for KNX-IP in general. Squashed commit of the following: commit 14bf9bef25ccc2c9bddefe7c8f1e0f6b1d63b3bc Author: Ing-Dom <dom@ing-dom.de> Date: Sun Dec 24 10:17:05 2023 +0100 clean up, remove KNX_LOG_IP commit 57223e46e414010662772989c2520cf1960ed268 Merge: 2911448 a870dd8 Author: Ing-Dom <dom@ing-dom.de> Date: Sun Dec 24 10:10:19 2023 +0100 Merge remote-tracking branch 'remotes/origin/master' into rp2040_ip commit 2911448d22a454aacae472762677381acce6a159 Merge: 8ac6aec 3c29d16 Author: Dom <dom@ing-dom.de> Date: Wed Dec 20 10:04:32 2023 +0100 Merge pull request #13 from OpenKNX/fix_serialnumber Fix serialnumber commit 8ac6aeccce20a9e5e1bbf5300008a72383f7ee71 Author: Ing-Dom <dom@ing-dom.de> Date: Thu Dec 14 12:28:02 2023 +0100 fix macAddress reading for Wifi commit 9db2cd58708e9d7bbfd485ada2ff38c829447c42 Author: Ing-Dom <dom@ing-dom.de> Date: Tue Dec 12 13:08:53 2023 +0100 remove LARGE_BUFFERS and clean up header files of ETHERNET_GENERIC commit 2f229ae90c6f72e01c2a9b9efe134f75fc85547c Author: Ing-Dom <dom@ing-dom.de> Date: Tue Dec 12 00:56:32 2023 +0100 temporary fix, solution needed for tunneling commit f6e7e619a454f43db10e644b41c58b43a1a2b453 Author: Ing-Dom <dom@ing-dom.de> Date: Mon Dec 11 13:54:26 2023 +0100 unified approach for different ip stacks with rp2040 plattform commit 4723edab84986bca6d31ea7b3083b1b7b8ef907e Author: Marco Scholl <develop@marco-scholl.de> Date: Mon Dec 11 08:34:25 2023 +0100 wip commit 5bf3e615c8649dd9c34be7b1fe6ad4062ce96c34 Author: Ing-Dom <dom@ing-dom.de> Date: Thu Dec 7 14:53:42 2023 +0100 ip and not ip in one rp2040 plattform commit aaca34a237686c5389888b7bd040b860331bdbff Merge: fd97f59 d44606d Author: Dom <dom@ing-dom.de> Date: Wed Dec 6 15:30:17 2023 +0100 Merge branch 'thelsing:master' into rp2040_lwip commit fd97f5920ef486ca955f5425cbcaec062e3ef977 Author: Marco Scholl <develop@marco-scholl.de> Date: Thu Nov 30 23:19:13 2023 +0100 dd sime ifdef to allow build without ip interface commit c665a79db9cee7063dd77a155108633db81ef8e8 Author: Ing-Dom <dom@ing-dom.de> Date: Tue Nov 14 10:03:48 2023 +0100 stub for handling SearchRequestExt to prevent console messages commit 50745be66681616681f67d7bdf17008f5d19640d Author: Ing-Dom <dom@ing-dom.de> Date: Tue Nov 14 00:02:49 2023 +0100 adding ip support for rp2040 plattform
2023-12-24 10:20:23 +01:00
#ifndef KNX_SERIAL
#pragma warn "KNX_SERIAL not defined, using Serial1"
#define KNX_SERIAL Serial1
#endif
#ifdef KNX_IP_W5500
#if ARDUINO_PICO_MAJOR * 10000 + ARDUINO_PICO_MINOR * 100 + ARDUINO_PICO_REVISION < 30600
#pragma error "arduino-pico >= 3.6.0 needed"
#endif
#define KNX_NETIF Eth
#include "SPI.h"
#include <W5500lwIP.h>
#elif defined(KNX_IP_WIFI)
#define KNX_NETIF WiFi
#include <WiFi.h>
#elif defined(KNX_IP_GENERIC)
#include <SPI.h>
#ifndef DEBUG_ETHERNET_GENERIC_PORT
#define DEBUG_ETHERNET_GENERIC_PORT Serial
#endif
#ifndef _ETG_LOGLEVEL_
#define _ETG_LOGLEVEL_ 1
#endif
#define ETHERNET_USE_RPIPICO true
#include <Ethernet_Generic.hpp> // https://github.com/khoih-prog/Ethernet_Generic
#define KNX_NETIF Ethernet
#endif
class RP2040ArduinoPlatform : public ArduinoPlatform
{
public:
RP2040ArduinoPlatform();
RP2040ArduinoPlatform( HardwareSerial* s);
// uart
void knxUartPins(pin_size_t rxPin, pin_size_t txPin);
void setupUart();
// unique serial number
uint32_t uniqueSerialNumber() override;
void restart();
#ifdef USE_RP2040_EEPROM_EMULATION
uint8_t* getEepromBuffer(uint32_t size);
void commitToEeprom();
#ifdef USE_RP2040_LARGE_EEPROM_EMULATION
uint8_t _rambuff[KNX_FLASH_SIZE];
bool _rambuff_initialized = false;
#endif
#else
// size of one EraseBlock in pages
virtual size_t flashEraseBlockSize();
// size of one flash page in bytes
virtual size_t flashPageSize();
// start of user flash aligned to start of an erase block
virtual uint8_t* userFlashStart();
// size of the user flash in EraseBlocks
virtual size_t userFlashSizeEraseBlocks();
//relativ to userFlashStart
virtual void flashErase(uint16_t eraseBlockNum);
//write a single page to flash (pageNumber relative to userFashStart
virtual void flashWritePage(uint16_t pageNumber, uint8_t* data);
// writes _eraseblockBuffer to flash - overrides Plattform::writeBufferedEraseBlock() for performance optimization only
void writeBufferedEraseBlock();
#endif
this adds IP (WiFi and wired Ethernet) support to the rp2040 platform. It includes also some optimizations for KNX-IP in general. Squashed commit of the following: commit 14bf9bef25ccc2c9bddefe7c8f1e0f6b1d63b3bc Author: Ing-Dom <dom@ing-dom.de> Date: Sun Dec 24 10:17:05 2023 +0100 clean up, remove KNX_LOG_IP commit 57223e46e414010662772989c2520cf1960ed268 Merge: 2911448 a870dd8 Author: Ing-Dom <dom@ing-dom.de> Date: Sun Dec 24 10:10:19 2023 +0100 Merge remote-tracking branch 'remotes/origin/master' into rp2040_ip commit 2911448d22a454aacae472762677381acce6a159 Merge: 8ac6aec 3c29d16 Author: Dom <dom@ing-dom.de> Date: Wed Dec 20 10:04:32 2023 +0100 Merge pull request #13 from OpenKNX/fix_serialnumber Fix serialnumber commit 8ac6aeccce20a9e5e1bbf5300008a72383f7ee71 Author: Ing-Dom <dom@ing-dom.de> Date: Thu Dec 14 12:28:02 2023 +0100 fix macAddress reading for Wifi commit 9db2cd58708e9d7bbfd485ada2ff38c829447c42 Author: Ing-Dom <dom@ing-dom.de> Date: Tue Dec 12 13:08:53 2023 +0100 remove LARGE_BUFFERS and clean up header files of ETHERNET_GENERIC commit 2f229ae90c6f72e01c2a9b9efe134f75fc85547c Author: Ing-Dom <dom@ing-dom.de> Date: Tue Dec 12 00:56:32 2023 +0100 temporary fix, solution needed for tunneling commit f6e7e619a454f43db10e644b41c58b43a1a2b453 Author: Ing-Dom <dom@ing-dom.de> Date: Mon Dec 11 13:54:26 2023 +0100 unified approach for different ip stacks with rp2040 plattform commit 4723edab84986bca6d31ea7b3083b1b7b8ef907e Author: Marco Scholl <develop@marco-scholl.de> Date: Mon Dec 11 08:34:25 2023 +0100 wip commit 5bf3e615c8649dd9c34be7b1fe6ad4062ce96c34 Author: Ing-Dom <dom@ing-dom.de> Date: Thu Dec 7 14:53:42 2023 +0100 ip and not ip in one rp2040 plattform commit aaca34a237686c5389888b7bd040b860331bdbff Merge: fd97f59 d44606d Author: Dom <dom@ing-dom.de> Date: Wed Dec 6 15:30:17 2023 +0100 Merge branch 'thelsing:master' into rp2040_lwip commit fd97f5920ef486ca955f5425cbcaec062e3ef977 Author: Marco Scholl <develop@marco-scholl.de> Date: Thu Nov 30 23:19:13 2023 +0100 dd sime ifdef to allow build without ip interface commit c665a79db9cee7063dd77a155108633db81ef8e8 Author: Ing-Dom <dom@ing-dom.de> Date: Tue Nov 14 10:03:48 2023 +0100 stub for handling SearchRequestExt to prevent console messages commit 50745be66681616681f67d7bdf17008f5d19640d Author: Ing-Dom <dom@ing-dom.de> Date: Tue Nov 14 00:02:49 2023 +0100 adding ip support for rp2040 plattform
2023-12-24 10:20:23 +01:00
#if defined(KNX_NETIF)
uint32_t currentIpAddress() override;
uint32_t currentSubnetMask() override;
uint32_t currentDefaultGateway() override;
void macAddress(uint8_t* addr) override;
// multicast
void setupMultiCast(uint32_t addr, uint16_t port) override;
void closeMultiCast() override;
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;
#if defined(KNX_IP_W5500) || defined(KNX_IP_WIFI)
#define UDP_UNICAST _udp
protected: WiFiUDP _udp;
#elif defined(KNX_IP_GENERIC)
#define UDP_UNICAST _udp_uni
protected: bool _unicast_socket_setup = false;
protected: EthernetUDP _udp;
protected: EthernetUDP UDP_UNICAST;
#endif
protected: IPAddress mcastaddr;
protected: uint16_t _port;
#endif
protected: pin_size_t _rxPin = UART_PIN_NOT_DEFINED;
protected: pin_size_t _txPin = UART_PIN_NOT_DEFINED;
};
#endif