7#include <esp_ieee802154.h>
13#include "esp_ieee802154.h"
14#include "freertos/FreeRTOS.h"
15#include "freertos/task.h"
21class ESP32TransceiverIEEE802_15_4;
55 Frame& frame, esp_ieee802154_frame_info_t& frame_info,
void* user_data);
67 const uint8_t* frame,
const uint8_t* ack,
68 esp_ieee802154_frame_info_t* ack_frame_info,
void* user_data);
78 const uint8_t* frame, esp_ieee802154_tx_error_t error,
void* user_data);
112 friend void ::esp_ieee802154_receive_done(
113 uint8_t*
frame, esp_ieee802154_frame_info_t* frame_info);
114 friend void ::esp_ieee802154_transmit_done(
115 const uint8_t*
frame,
const uint8_t* ack,
116 esp_ieee802154_frame_info_t* ack_frame_info);
117 friend void ::esp_ieee802154_transmit_failed(
const uint8_t*
frame,
118 esp_ieee802154_tx_error_t error);
119 friend void ::esp_ieee802154_receive_sfd_done(
void);
120 friend void ::esp_ieee802154_transmit_sfd_done(uint8_t*
frame);
222 bool send(uint8_t* data,
size_t len);
256 return ::esp_ieee802154_get_pending_mode();
263 int8_t
getTxPower() { return ::esp_ieee802154_get_txpower(); }
455 void onRxDone(uint8_t*
frame, esp_ieee802154_frame_info_t* frame_info);
457 esp_ieee802154_frame_info_t* ack_frame_info);
#define MAX_FRAME_LEN
Definition Frame.h:20
IEEE 802.15.4 Address abstraction.
Definition Frame.h:77
Class to manage an IEEE 802.15.4 transceiver using the ESP-IDF API. On the sending side we support br...
Definition ESP32TransceiverIEEE802_15_4.h:109
Frame & getFrame()
Definition ESP32TransceiverIEEE802_15_4.h:348
bool is_rx_when_idle
Definition ESP32TransceiverIEEE802_15_4.h:424
bool is_active
Definition ESP32TransceiverIEEE802_15_4.h:425
int16_t panID
Definition ESP32TransceiverIEEE802_15_4.h:429
void incrementSequenceNumber(int n=1)
Increment the sequence number in the current frame by a specified value.
Definition ESP32TransceiverIEEE802_15_4.h:377
ieee802154_transceiver_tx_done_callback_t tx_done_callback_
Definition ESP32TransceiverIEEE802_15_4.h:439
bool is_coordinator
Definition ESP32TransceiverIEEE802_15_4.h:423
esp_err_t transmit_frame(Frame *frame)
Definition ESP32TransceiverIEEE802_15_4.cpp:192
bool isCCAActive() const
Check if CCA (Clear Channel Assessment) is enabled.
Definition ESP32TransceiverIEEE802_15_4.h:419
int receive_msg_buffer_size
Definition ESP32TransceiverIEEE802_15_4.h:449
bool radio_enabled
Definition ESP32TransceiverIEEE802_15_4.h:436
bool setRxWhenIdleActive(bool rx_when_idle)
Set RX when idle mode for the transceiver.
Definition ESP32TransceiverIEEE802_15_4.cpp:451
void setReceiveBufferSize(int size)
Definition ESP32TransceiverIEEE802_15_4.cpp:288
channel_t channel
Definition ESP32TransceiverIEEE802_15_4.h:428
uint8_t transmit_buffer[MAX_FRAME_LEN]
Definition ESP32TransceiverIEEE802_15_4.h:433
void onStartFrameDelimiterReceived()
Definition ESP32TransceiverIEEE802_15_4.cpp:378
void setReceiveTask(void(*task)(void *pvParameters))
Set a custom FreeRTOS task function for processing received packets.
Definition ESP32TransceiverIEEE802_15_4.h:354
bool setRxCallback(ieee802154_transceiver_rx_callback_t callback, void *user_data)
Set the callback function for received frames.
Definition ESP32TransceiverIEEE802_15_4.cpp:183
void onTransmitFailed(const uint8_t *frame, esp_ieee802154_tx_error_t error)
Definition ESP32TransceiverIEEE802_15_4.cpp:371
int8_t getTxPower()
Get the current transmit power of the transceiver.
Definition ESP32TransceiverIEEE802_15_4.h:263
bool setChannel(channel_t channel)
Change the IEEE 802.15.4 channel.
Definition ESP32TransceiverIEEE802_15_4.cpp:256
FrameControlField frame_control_field
Definition ESP32TransceiverIEEE802_15_4.h:432
Address destination_address
Definition ESP32TransceiverIEEE802_15_4.h:431
ESP32TransceiverIEEE802_15_4(channel_t channel, int16_t panID, Address localAddress)
Construct a new ESP32TransceiverIEEE802_15_4 object.
Definition ESP32TransceiverIEEE802_15_4.h:129
uint32_t ack_timeout_us
Definition ESP32TransceiverIEEE802_15_4.h:450
uint32_t getAckTimeoutUs() const
Get the current acknowledgment timeout in microseconds.
Definition ESP32TransceiverIEEE802_15_4.h:406
bool setPromiscuousModeActive(bool promiscuous)
Set promiscuous mode for the transceiver.
Definition ESP32TransceiverIEEE802_15_4.cpp:441
void * sfd_callback_user_data_
Definition ESP32TransceiverIEEE802_15_4.h:444
bool isCoordinatorActive() const
Check if the transceiver is currently set as coordinator.
Definition ESP32TransceiverIEEE802_15_4.h:276
bool setTxFailedCallback(ieee802154_transceiver_tx_failed_callback_t callback, void *user_data)
Set the callback function for failed frame transmission.
Definition ESP32TransceiverIEEE802_15_4.cpp:340
void setFrameControlField(const FrameControlField &fcf)
Set the Frame Control Field (FCF) for outgoing frames.
Definition ESP32TransceiverIEEE802_15_4.h:331
void onStartFrameDelimiterTransmitDone(uint8_t *frame)
Definition ESP32TransceiverIEEE802_15_4.cpp:384
void setCCAActive(bool cca_enabled)
Enable or disable CCA (Clear Channel Assessment).
Definition ESP32TransceiverIEEE802_15_4.h:413
friend void receive_packet_task(void *)
Forward declarations.
void onRxDone(uint8_t *frame, esp_ieee802154_frame_info_t *frame_info)
Definition ESP32TransceiverIEEE802_15_4.cpp:299
void setDestinationAddress(const Address &address)
Set the destination address for outgoing frames.
Definition ESP32TransceiverIEEE802_15_4.h:317
bool begin(FrameControlField fcf)
Initialize the IEEE 802.15.4 transceiver with a specified channel.
Definition ESP32TransceiverIEEE802_15_4.h:151
Frame frame
Definition ESP32TransceiverIEEE802_15_4.h:427
ieee802154_transceiver_sfd_tx_callback_t sfd_tx_callback_
Definition ESP32TransceiverIEEE802_15_4.h:445
void(* receive_packet_task)(void *pvParameters)=default_receive_packet_task
Definition ESP32TransceiverIEEE802_15_4.h:448
esp_ieee802154_pending_mode_t getPendingMode()
Get the current pending mode of the transceiver.
Definition ESP32TransceiverIEEE802_15_4.h:255
bool end(void)
Deinitialize the IEEE 802.15.4 transceiver.
Definition ESP32TransceiverIEEE802_15_4.cpp:154
bool send(uint8_t *data, size_t len)
Transmit an IEEE 802.15.4 frame on the current channel.
Definition ESP32TransceiverIEEE802_15_4.cpp:227
bool setCoordinatorActive(bool coordinator)
Set the coordinator mode for the transceiver.
Definition ESP32TransceiverIEEE802_15_4.cpp:432
void setBroadcast()
Set the destination address to the broadcast address (0xFFFF).
Definition ESP32TransceiverIEEE802_15_4.h:324
bool setSfdCallback(ieee802154_transceiver_sfd_callback_t callback, void *user_data)
Set the callback function for SFD (Start Frame Delimiter) received event.
Definition ESP32TransceiverIEEE802_15_4.cpp:347
bool is_promiscuous_mode
Definition ESP32TransceiverIEEE802_15_4.h:422
Address local_address
Definition ESP32TransceiverIEEE802_15_4.h:430
static void default_receive_packet_task(void *pvParameters)
Definition ESP32TransceiverIEEE802_15_4.cpp:391
void setAutoIncrementSequenceNumber(bool auto_increment)
Enable or disable automatic incrementing of the sequence number after each successful transmission.
Definition ESP32TransceiverIEEE802_15_4.h:388
TaskHandle_t rx_task_handle
Definition ESP32TransceiverIEEE802_15_4.h:435
bool isRxWhenIdleActive() const
Check if RX when idle mode is active.
Definition ESP32TransceiverIEEE802_15_4.h:304
ieee802154_transceiver_tx_failed_callback_t tx_failed_callback_
Definition ESP32TransceiverIEEE802_15_4.h:441
ieee802154_transceiver_sfd_callback_t sfd_callback_
Definition ESP32TransceiverIEEE802_15_4.h:443
StreamBufferHandle_t getMessageBuffer() const
Get the FreeRTOS message buffer handle for received frames.
Definition ESP32TransceiverIEEE802_15_4.h:368
StreamBufferHandle_t message_buffer
Definition ESP32TransceiverIEEE802_15_4.h:434
void * rx_callback_user_data_
Definition ESP32TransceiverIEEE802_15_4.h:438
void * tx_done_callback_user_data_
Definition ESP32TransceiverIEEE802_15_4.h:440
ieee802154_transceiver_rx_callback_t rx_callback_
Definition ESP32TransceiverIEEE802_15_4.h:437
bool begin()
Initialize the IEEE 802.15.4 transceiver with a specified channel.
Definition ESP32TransceiverIEEE802_15_4.cpp:23
bool setTxDoneCallback(ieee802154_transceiver_tx_done_callback_t callback, void *user_data)
Set the callback function for successful frame transmission.
Definition ESP32TransceiverIEEE802_15_4.cpp:333
bool auto_increment_sequence_number
Definition ESP32TransceiverIEEE802_15_4.h:451
channel_t getChannel() const
Get the current channel of the transceiver.
Definition ESP32TransceiverIEEE802_15_4.h:249
void onTransmitDone(const uint8_t *frame, const uint8_t *ack, esp_ieee802154_frame_info_t *ack_frame_info)
Definition ESP32TransceiverIEEE802_15_4.cpp:361
void * sfd_tx_callback_user_data_
Definition ESP32TransceiverIEEE802_15_4.h:446
bool isPromiscuousModeActive() const
Check if promiscuous mode is active.
Definition ESP32TransceiverIEEE802_15_4.h:290
bool setSfdTxCallback(ieee802154_transceiver_sfd_tx_callback_t callback, void *user_data)
Set the callback function for SFD transmitted event.
Definition ESP32TransceiverIEEE802_15_4.cpp:354
bool setTxPower(int power)
Set the transmit power of the transceiver.
Definition ESP32TransceiverIEEE802_15_4.cpp:460
bool cca_enabled
Definition ESP32TransceiverIEEE802_15_4.h:452
void * tx_failed_callback_user_data_
Definition ESP32TransceiverIEEE802_15_4.h:442
FrameControlField & getFrameControlField()
Get a reference to the Frame Control Field (FCF) for outgoing frames.
Definition ESP32TransceiverIEEE802_15_4.h:341
void setAckTimeoutUs(uint32_t timeout_us)
Set the time in us to wait for the ack frame.
Definition ESP32TransceiverIEEE802_15_4.h:398
Definition ESP32TransceiverIEEE802_15_4.cpp:15
void(* ieee802154_transceiver_tx_done_callback_t)(const uint8_t *frame, const uint8_t *ack, esp_ieee802154_frame_info_t *ack_frame_info, void *user_data)
Callback function type for successful IEEE 802.15.4 frame transmission.
Definition ESP32TransceiverIEEE802_15_4.h:66
void(* ieee802154_transceiver_tx_failed_callback_t)(const uint8_t *frame, esp_ieee802154_tx_error_t error, void *user_data)
Callback function type for failed IEEE 802.15.4 frame transmission.
Definition ESP32TransceiverIEEE802_15_4.h:77
channel_t
Enum for IEEE 802.15.4 channel numbers (11-26).
Definition ESP32TransceiverIEEE802_15_4.h:27
ESP32TransceiverIEEE802_15_4 * pt_transceiver
accessible by global callback functions
Definition ESP32TransceiverIEEE802_15_4.cpp:18
void(* ieee802154_transceiver_sfd_callback_t)(void *user_data)
Callback function type for SFD (Start Frame Delimiter) received event.
Definition ESP32TransceiverIEEE802_15_4.h:85
void(* ieee802154_transceiver_rx_callback_t)(Frame &frame, esp_ieee802154_frame_info_t &frame_info, void *user_data)
Callback function type for received IEEE 802.15.4 frames.
Definition ESP32TransceiverIEEE802_15_4.h:54
Address BROADCAST_ADDRESS((uint8_t[2]){0xFF, 0xFF})
Broadcast address constant.
void(* ieee802154_transceiver_sfd_tx_callback_t)(uint8_t *frame, void *user_data)
Callback function type for SFD transmitted event.
Definition ESP32TransceiverIEEE802_15_4.h:93
IEEE 802.15.4 Frame Control Field (FCF) structure Bit fields are ordered LSB to MSB to match IEEE 802...
Definition Frame.h:53
IEEE 802.15.4 MAC frame structure.
Definition Frame.h:183
uint8_t sequenceNumber
Definition Frame.h:185
Structure to hold frame data and frame info.
Definition Frame.h:243