3#if defined(USE_ESP32) || defined(USE_ESP8266)
17static const uint8_t ESPNOW_BROADCAST_ADDR[ESP_NOW_ETH_ALEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
18static const uint8_t ESPNOW_MULTICAST_ADDR[ESP_NOW_ETH_ALEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE};
25#ifndef USE_ESPNOW_MAX_PAYLOAD_SIZE
26#define USE_ESPNOW_MAX_PAYLOAD_SIZE ESP_NOW_MAX_DATA_LEN
28static constexpr uint16_t ESPNOW_MAX_DATA_LEN = USE_ESPNOW_MAX_PAYLOAD_SIZE;
29#ifdef ESP_NOW_MAX_DATA_LEN_V2
30static_assert(ESPNOW_MAX_DATA_LEN <= ESP_NOW_MAX_DATA_LEN_V2,
31 "espnow max_payload_size cannot exceed the ESP-NOW v2 frame limit");
33static_assert(ESPNOW_MAX_DATA_LEN <= ESP_NOW_MAX_DATA_LEN,
34 "espnow max_payload_size beyond 250 bytes requires an ESP-IDF with ESP-NOW v2 support (5.4+)");
61 memcpy(this->
packet_.receive.info.src_addr, src_addr, ESP_NOW_ETH_ALEN);
62 memcpy(this->
packet_.receive.info.des_addr, des_addr, ESP_NOW_ETH_ALEN);
66 this->
packet_.receive.rx_ctrl.rssi = rssi;
73 memcpy(this->
packet_.sent.address, mac_addr, ESP_NOW_ETH_ALEN);
83 struct received_data {
85 uint8_t data[ESPNOW_MAX_DATA_LEN];
107 this->init_data_(peer_address, payload,
size);
110 this->init_data_(peer_address, payload,
size);
123 this->init_data_(peer_address, payload,
size);
127 void load_data(
const uint8_t *peer_address,
const uint8_t *payload,
size_t size) {
128 this->init_data_(peer_address, payload,
size);
133 uint8_t
data_[ESPNOW_MAX_DATA_LEN]{0};
138 void init_data_(
const uint8_t *peer_address,
const uint8_t *payload,
size_t size) {
139 memcpy(this->
address_, peer_address, ESP_NOW_ETH_ALEN);
140 if (
size > ESPNOW_MAX_DATA_LEN) {
ESPNowPacket(const ESPNowPacket &)=delete
uint8_t data[ESPNOW_MAX_DATA_LEN]
esp_now_send_status_t status
void load_sent_data(const uint8_t *mac_addr, esp_now_send_status_t status)
ESPNowPacket & operator=(const ESPNowPacket &)=delete
union esphome::espnow::ESPNowPacket::@88 packet_
struct esphome::espnow::ESPNowPacket::@88::sent_data sent
esp_now_packet_type_t type_
esp_now_packet_type_t type() const
const ESPNowRecvInfo & get_receive_info() const
struct esphome::espnow::ESPNowPacket::@88::received_data receive
WifiPacketRxControl rx_ctrl
void load_received_data(const uint8_t *src_addr, const uint8_t *des_addr, const uint8_t *data, uint16_t size, int8_t rssi, uint32_t timestamp)
uint8_t data_[ESPNOW_MAX_DATA_LEN]
ESPNowSendPacket & operator=(const ESPNowSendPacket &)=delete
send_callback_t callback_
void load_data(const uint8_t *peer_address, const uint8_t *payload, size_t size)
ESPNowSendPacket(const ESPNowSendPacket &)=delete
void load_data(const uint8_t *peer_address, const uint8_t *payload, size_t size, send_callback_t &&callback)
uint8_t address_[ESP_NOW_ETH_ALEN]
ESPNowSendPacket(const uint8_t *peer_address, const uint8_t *payload, size_t size, const send_callback_t &&callback)
ESPNowSendPacket(const uint8_t *peer_address, const uint8_t *payload, size_t size)
wifi_pkt_rx_ctrl_t rx_ctrl_t
std::function< void(esp_err_t)> send_callback_t
rx_ctrl_t * rx_ctrl
Rx control info of ESPNOW packet.
uint8_t des_addr[ESP_NOW_ETH_ALEN]
Destination address of ESPNOW packet.
uint8_t src_addr[ESP_NOW_ETH_ALEN]
Source address of ESPNOW packet.