diff --git a/components/esp_wifi/include/esp_wifi.h b/components/esp_wifi/include/esp_wifi.h index 6801aa9497..cd43eb1eb0 100644 --- a/components/esp_wifi/include/esp_wifi.h +++ b/components/esp_wifi/include/esp_wifi.h @@ -1198,6 +1198,27 @@ esp_err_t esp_wifi_get_event_mask(uint32_t *mask); esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq); +/** + * @brief Callback function of 80211 tx data + * + * @param tx_info TX information of 80211 tx. The information can only be used in the callback context. + */ +typedef void (*esp_wifi_80211_tx_done_cb_t)(const esp_80211_tx_info_t *tx_info); + +/** + * @brief Register the TX callback function of 80211 tx data. + * + * @attention This callback will be executed in WiFi task, so avoid doing any time consuming activity in the callback. + * Doing heavy work here can affect the WiFi performance. + * + * @param cb callback function. If the cb is NULL, then unregister the tx cb. + * + * @return + * - ESP_OK: succeed + * - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init + */ +esp_err_t esp_wifi_register_80211_tx_cb(esp_wifi_80211_tx_done_cb_t cb); + /** * @brief The RX callback function of Channel State Information(CSI) data. * diff --git a/components/esp_wifi/include/esp_wifi_types_generic.h b/components/esp_wifi/include/esp_wifi_types_generic.h index b0c24eec6d..ea2f2aabe2 100644 --- a/components/esp_wifi/include/esp_wifi_types_generic.h +++ b/components/esp_wifi/include/esp_wifi_types_generic.h @@ -1486,6 +1486,29 @@ typedef struct { uint8_t regulatory_type; /**< regulatory type of country */ } wifi_regdomain_t; +/** + * @brief Status of wifi sending data + */ +typedef enum { + WIFI_SEND_SUCCESS = 0, /**< Sending Wi-Fi data successfully */ + WIFI_SEND_FAIL, /**< Sending Wi-Fi data fail */ +} wifi_tx_status_t; + +/** + * @brief Information of wifi sending data + */ +typedef struct { + uint8_t *des_addr; /**< The address of the receive device */ + uint8_t *src_addr; /**< The address of the sending device */ + wifi_interface_t ifidx; /**< Interface of sending 80211 tx data */ + uint8_t *data; /**< The data for 80211 tx, start from the MAC header */ + uint8_t data_len; /**< The frame body length for 80211 tx, excluding the MAC header */ + wifi_phy_rate_t rate; /**< Data rate */ + wifi_tx_status_t tx_status; /**< Status of sending 80211 tx data */ +} wifi_tx_info_t; + +typedef wifi_tx_info_t esp_80211_tx_info_t; + #ifdef __cplusplus } #endif