feat(802.15.4): introduced a feature for registering 802.15.4 ISR callbacks

This commit is contained in:
zwx
2025-01-10 13:51:30 +08:00
parent 098ecb1cf1
commit 699af05b57
9 changed files with 334 additions and 21 deletions
@@ -678,6 +678,32 @@ void esp_ieee802154_set_coex_config(esp_ieee802154_coex_config_t config);
esp_ieee802154_coex_config_t esp_ieee802154_get_coex_config(void);
#endif
/**
* @brief Register process callbacks for events generated by the IEEE 802.15.4 subsystem.
*
* @param[in] cb_list The event process callback list, please refer to `esp_ieee802154_event_cb_list_t`.
*
* @note This API should be called only when IEEE 802.15.4 subsystem is not enabled
* or after IEEE 802.15.4 subsystem is disabled (refer to `esp_ieee802154_disable`).
*
* @return
* - ESP_OK on success.
* - ESP_FAIL on failure.
*/
esp_err_t esp_ieee802154_event_callback_list_register(esp_ieee802154_event_cb_list_t cb_list);
/**
* @brief Unregister process callbacks for events generated by the IEEE 802.15.4 subsystem.
*
* @note This API should be called only when IEEE 802.15.4 subsystem is not enabled
* or after IEEE 802.15.4 subsystem is disabled (refer to `esp_ieee802154_disable`).
*
* @return
* - ESP_OK on success.
* - ESP_FAIL on failure.
*/
esp_err_t esp_ieee802154_event_callback_list_unregister(void);
#ifdef __cplusplus
}
#endif
@@ -8,6 +8,7 @@
#include <stdint.h>
#include <stdbool.h>
#include "esp_err.h"
#define US_PER_SYMBLE 16
@@ -83,6 +84,73 @@ typedef struct {
uint64_t timestamp; /*!< The timestamp when the frame's SFD field was received */
} esp_ieee802154_frame_info_t;
/**
* @brief The O-QPSK PHY transmission power table for 2.4 GHz channels as defined by the IEEE 802.15.4 specification.
*
*/
typedef struct {
int8_t channel[16]; /*!< Index 0 -> Channel 11, Index 1 -> Channel 12 ... Index 15 -> Channel 26 */
} esp_ieee802154_txpower_table_t;
// These callbacks will be processed in ISR context, please locate them in IRAM, see `IRAM_ATTR`.
/**
* @brief The callback to process Rx Done event, refer to `esp_ieee802154_receive_done`.
*
*/
typedef void (*esp_ieee802154_receive_done_cb_t)(uint8_t *data, esp_ieee802154_frame_info_t *frame_info);
/**
* @brief The callback to process Rx SFD Done event, refer to `esp_ieee802154_receive_sfd_done`.
*
*/
typedef void (*esp_ieee802154_receive_sfd_done_cb_t)(void);
/**
* @brief The callback to process Tx Done event, refer to `esp_ieee802154_transmit_done`.
*
*/
typedef void (*esp_ieee802154_transmit_done_cb_t)(const uint8_t *frame, const uint8_t *ack, esp_ieee802154_frame_info_t *ack_frame_info);
/**
* @brief The callback to process Tx Failed event, refer to `esp_ieee802154_transmit_failed`.
*
*/
typedef void (*esp_ieee802154_transmit_failed_cb_t)(const uint8_t *frame, esp_ieee802154_tx_error_t error);
/**
* @brief The callback to process Tx SFD Done event, refer to `esp_ieee802154_transmit_sfd_done`.
*
*/
typedef void (*esp_ieee802154_transmit_sfd_done_cb_t)(uint8_t *frame);
/**
* @brief The callback to process ED Done event, refer to `esp_ieee802154_energy_detect_done`.
*
*/
typedef void (*esp_ieee802154_energy_detect_done_cb_t)(int8_t power);
/**
* @brief The callback to process enh-ack generating, refer to `esp_ieee802154_enh_ack_generator`.
*
*/
typedef esp_err_t (*esp_ieee802154_enh_ack_generator_cb_t)(uint8_t *frame, esp_ieee802154_frame_info_t *frame_info, uint8_t* enhack_frame);
/**
* @brief The callback list for event process.
*
* @note These callbacks might be called in ISR context.
*
*/
typedef struct {
esp_ieee802154_receive_done_cb_t rx_done_cb; /*!<The callback to process Rx Done event */
esp_ieee802154_receive_sfd_done_cb_t rx_sfd_done_cb; /*!<The callback to process Rx SFD Done event */
esp_ieee802154_transmit_done_cb_t tx_done_cb; /*!<The callback to process Tx Done event */
esp_ieee802154_transmit_failed_cb_t tx_failed_cb; /*!<The callback to process Tx Failed event */
esp_ieee802154_transmit_sfd_done_cb_t tx_sfd_done_cb; /*!<The callback to process Tx SFD Done event */
esp_ieee802154_energy_detect_done_cb_t ed_done_cb; /*!<The callback to process ED Done event */
esp_ieee802154_enh_ack_generator_cb_t enh_ack_generator_cb; /*!<The callback to process enh-ack generating */
} esp_ieee802154_event_cb_list_t;
#ifdef __cplusplus
}
#endif