- Cut of 1 Byte for Pagination - Now we can send 256 Datapackages without chaning any logic from sending and receiving - We have 250 Bytes from ESP NOW - We use 10 Byte for Meta Data, 1 for Pagination - We have 239 Bytes for Real Payload
94 lines
2.6 KiB
C
94 lines
2.6 KiB
C
#ifndef MAIN_H
|
|
#define MAIN_H
|
|
|
|
#include <stdint.h>
|
|
#define Master_SlavePin 23
|
|
#define MAX_PAYLOAD_SIZE 250
|
|
|
|
#define ESPNOW_QUEUE_SIZE 6
|
|
#define IS_BROADCAST_ADDR(addr) \
|
|
(memcmp(addr, s_broadcast_mac, ESP_NOW_ETH_ALEN) == 0)
|
|
|
|
static bool isMaster;
|
|
|
|
typedef enum {
|
|
EXAMPLE_ESPNOW_SEND_CB,
|
|
EXAMPLE_ESPNOW_RECV_CB,
|
|
} espnow_event_id_t;
|
|
|
|
typedef struct {
|
|
uint8_t mac_addr[ESP_NOW_ETH_ALEN];
|
|
esp_now_send_status_t status;
|
|
} espnow_event_send_cb_t;
|
|
|
|
typedef struct {
|
|
uint8_t mac_addr[ESP_NOW_ETH_ALEN];
|
|
uint8_t *data;
|
|
int data_len;
|
|
} espnow_event_recv_cb_t;
|
|
|
|
typedef union {
|
|
espnow_event_send_cb_t send_cb;
|
|
espnow_event_recv_cb_t recv_cb;
|
|
} espnow_event_info_t;
|
|
|
|
typedef struct {
|
|
espnow_event_id_t id;
|
|
espnow_event_info_t info;
|
|
} espnow_event_t;
|
|
|
|
enum {
|
|
EXAMPLE_ESPNOW_DATA_BROADCAST,
|
|
EXAMPLE_ESPNOW_DATA_UNICAST,
|
|
EXAMPLE_ESPNOW_DATA_MAX,
|
|
};
|
|
|
|
enum {
|
|
UNION_STATUS,
|
|
UNION_SENSORDATA,
|
|
};
|
|
|
|
typedef struct {
|
|
bool isMaster;
|
|
} __attribute__((packed)) payloadStatus;
|
|
|
|
typedef struct {
|
|
uint8_t dataPoint;
|
|
} __attribute__((packed)) payloadSensorData;
|
|
|
|
union realPayload {
|
|
payloadStatus status;
|
|
payloadSensorData sensorData;
|
|
};
|
|
|
|
/* User defined field of ESPNOW data in this example. */
|
|
typedef struct {
|
|
uint8_t type; // Broadcast or unicast ESPNOW data.
|
|
uint8_t state; // Indicate that if has received broadcast ESPNOW data or not.
|
|
uint16_t seq_num; // Sequence number of ESPNOW data.
|
|
uint16_t crc; // CRC16 value of ESPNOW data.
|
|
uint32_t magic; // Magic number which is used to determine which device to
|
|
// send unicast ESPNOW data.
|
|
uint8_t unionPage;
|
|
union realPayload realPayload; // Real payload of ESPNOW data.
|
|
} __attribute__((packed)) espnow_data_t;
|
|
|
|
static_assert(sizeof(espnow_data_t) <= MAX_PAYLOAD_SIZE,
|
|
"payloadData struct is too big to be sent in one part, keep it "
|
|
"under 250 Bytes!");
|
|
|
|
typedef struct {
|
|
bool unicast; // Send unicast ESPNOW data.
|
|
bool broadcast; // Send broadcast ESPNOW data.
|
|
uint8_t state; // Indicate that if has received broadcast ESPNOW data or not.
|
|
uint32_t magic; // Magic number which is used to determine which device to
|
|
// send unicast ESPNOW data.
|
|
uint16_t count; // Total count of unicast ESPNOW data to be sent.
|
|
uint16_t delay; // Delay between sending two ESPNOW data, unit: ms.
|
|
int len; // Length of ESPNOW data to be sent, unit: byte.
|
|
uint8_t *buffer; // Buffer pointing to ESPNOW data.
|
|
uint8_t dest_mac[ESP_NOW_ETH_ALEN]; // MAC address of destination device.
|
|
} espnow_send_param_t;
|
|
|
|
#endif
|