Files
ESP-Nodes/ESP-IDF_Robot/main/espnow_config.h
2025-04-20 23:12:16 -04:00

111 lines
4.2 KiB
C

#ifndef ESPNOW_CONFIG_H
#define ESPNOW_CONFIG_H
/* ESPNOW can work in both station and softap mode. It is configured in menuconfig. */
#if CONFIG_ESPNOW_WIFI_MODE_STATION
#define ESPNOW_WIFI_MODE WIFI_MODE_STA
#define ESPNOW_WIFI_IF ESP_IF_WIFI_STA
#else
#define ESPNOW_WIFI_MODE WIFI_MODE_AP
#define ESPNOW_WIFI_IF ESP_IF_WIFI_AP
#endif
#define ESPNOW_QUEUE_SIZE 6
#define IS_BROADCAST_ADDR(addr) (memcmp(addr, broadcast_mac, ESP_NOW_ETH_ALEN) == 0)
typedef enum {
ESPNOW_SEND_CB,
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;
/* When ESPNOW sending or receiving callback function is called, post event to ESPNOW task. */
typedef struct {
espnow_event_id_t id;
espnow_event_info_t info;
} espnow_event_t;
enum {
ESPNOW_DATA_BROADCAST,
ESPNOW_DATA_UNICAST,
ESPNOW_DATA_MAX,
};
/* User defined fields of ESPNOW data struct. */
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 payload[2]; // Real payload of ESPNOW data.
uint8_t mtr_a_pwm;
uint8_t mtr_b_pwm;
//float chip_temp; // ESP32-C3 chip temperature
bool lights; // Lights ON/OFF
uint8_t projection_x;
uint8_t projection_y;
} __attribute__((packed)) espnow_data_t;
/* Parameters of sending ESPNOW data. */
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.
uint8_t priority; // ESP-NOW device priority #
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 struct.
uint8_t dest_mac[ESP_NOW_ETH_ALEN]; //MAC address of destination device.
} espnow_send_param_t;
/*typedef struct {
uint8_t type; // Broadcast or unicast ESPNOW data.s
uint16_t seq_num; // Sequence number of ESPNOW data.
uint16_t crc; // CRC16 value of ESPNOW data.
uint8_t x_axis;
uint8_t y_axis;
bool nav_bttn;
uint8_t motor1_rpm_pcm;
uint8_t motor2_rpm_pcm;
uint8_t motor3_rpm_pcm;
uint8_t motor4_rpm_pcm;
} __attribute__((packed)) sensors_data_t;*/
// Struct holding sensors values
typedef struct {
uint16_t crc; // CRC16 value of ESPNOW data
int x_axis; // Joystick x-position
int y_axis; // Joystick y-position
bool nav_bttn; // Joystick push button
uint8_t motor1_rpm_pcm; // PCMs for 4 motors
uint8_t motor2_rpm_pcm;
uint8_t motor3_rpm_pcm;
uint8_t motor4_rpm_pcm;
} __attribute__((packed)) sensors_data_t;
typedef struct {
int len; // Length of ESPNOW data to be sent, unit: byte.
uint8_t *buffer; // Buffer; pointer to the data struct.
uint8_t dest_mac[ESP_NOW_ETH_ALEN]; // MAC address of destination device.
} espnow_data_packet_t;
#endif