knx
ETS configurable knx-stack
esp32_idf_platform.h
Go to the documentation of this file.
1 #ifndef ARDUINO
2 #ifdef ESP_PLATFORM
3 // esp_idf_platform.h
4 #pragma once
5 
6 #include "driver/uart.h"
7 #include "esp_netif.h"
8 #include "esp_system.h"
9 #include "lwip/sockets.h"
10 #include "nvs_flash.h"
11 #include "knx/platform.h"// Include the provided base class
12 
13 class Esp32IdfPlatform : public Platform
14 {
15  public:
16  Esp32IdfPlatform(uart_port_t uart_num = UART_NUM_1);
18 
19  // uart
20  void knxUartPins(int8_t rxPin, int8_t txPin);
21  void knxUartBaudRate(uint32_t baudRate); // Add baud rate configuration
22 
23  // Call this after WiFi/Ethernet has started and received an IP.
24  void setNetif(esp_netif_t* netif);
25 
26  // --- Overridden Virtual Functions ---
27 
28  // ip stuff
29  uint32_t currentIpAddress() override;
30  uint32_t currentSubnetMask() override;
31  uint32_t currentDefaultGateway() override;
32  void macAddress(uint8_t* addr) override;
33 
34  // unique serial number
35  uint32_t uniqueSerialNumber() override;
36 
37  // basic stuff (pure virtual in base)
38  void restart() override;
39  void fatalError() override;
40 
41  // multicast
42  void setupMultiCast(uint32_t addr, uint16_t port) override;
43  void closeMultiCast() override;
44  bool sendBytesMultiCast(uint8_t* buffer, uint16_t len) override;
45  int readBytesMultiCast(uint8_t* buffer, uint16_t maxLen, uint32_t& src_addr, uint16_t& src_port) override;
46 
47  // unicast
48  bool sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t* buffer, uint16_t len) override;
49 
50  // UART
51  void setupUart() override;
52  void closeUart() override;
53  int uartAvailable() override;
54  size_t writeUart(const uint8_t data) override;
55  size_t writeUart(const uint8_t* buffer, size_t size) override;
56  int readUart() override;
57  size_t readBytesUart(uint8_t* buffer, size_t length) override;
58  void flushUart() override;
59 
60  // Memory (EEPROM emulation via NVS)
61  // We override these two functions to provide the low-level storage mechanism.
62  // The base Platform class will use them when _memoryType is Eeprom.
63  uint8_t* getEepromBuffer(uint32_t size) override;
64  void commitToEeprom() override;
65 
66  private:
67  // Network
68  esp_netif_t* _netif = nullptr;
69  int _sock = -1;
70  struct sockaddr_in _remote_addr;
71  uint32_t _multicast_addr = 0;
72  uint16_t _multicast_port = 0;
73 
74  // UART
75  uart_port_t _uart_num;
76  int8_t _rxPin = -1;
77  int8_t _txPin = -1;
78  uint32_t _baudRate = 19200; // Default baud rate, can be changed
79  bool _uart_installed = false;
80 
81  // NVS (for EEPROM emulation)
82  nvs_handle_t _nvs_handle;
83  uint8_t* _eeprom_buffer = nullptr;
84  uint32_t _eeprom_size = 0;
85  const char* _nvs_namespace = "eeprom";
86  const char* _nvs_key = "eeprom";
87 };
88 #endif
89 #endif
uint8_t * getEepromBuffer(uint32_t size) override
size_t writeUart(const uint8_t data) override
void macAddress(uint8_t *addr) override
void flushUart() override
uint32_t currentIpAddress() override
bool sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t *buffer, uint16_t len) override
uint32_t uniqueSerialNumber() override
uint32_t currentSubnetMask() override
void knxUartBaudRate(uint32_t baudRate)
int readUart() override
bool sendBytesMultiCast(uint8_t *buffer, uint16_t len) override
void setupMultiCast(uint32_t addr, uint16_t port) override
size_t readBytesUart(uint8_t *buffer, size_t length) override
int readBytesMultiCast(uint8_t *buffer, uint16_t maxLen, uint32_t &src_addr, uint16_t &src_port) override
uint32_t currentDefaultGateway() override
void setNetif(esp_netif_t *netif)
void restart() override
int uartAvailable() override
void commitToEeprom() override
void closeMultiCast() override
void knxUartPins(int8_t rxPin, int8_t txPin)
void setupUart() override
void fatalError() override
void closeUart() override
Esp32IdfPlatform(uart_port_t uart_num=UART_NUM_1)