11/*
2- * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
2+ * SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
33 *
44 * SPDX-License-Identifier: Apache-2.0
55 */
1818#include "esp_timer.h"
1919#include "esp_ieee802154_ack.h"
2020#include "esp_ieee802154_dev.h"
21+ #include "esp_ieee802154_event.h"
2122#include "esp_ieee802154_frame.h"
2223#include "esp_ieee802154_pib.h"
2324#include "esp_ieee802154_sec.h"
@@ -93,7 +94,7 @@ static void ieee802154_receive_done(uint8_t *data, esp_ieee802154_frame_info_t *
9394 // Ignore bit8 for the frame length, due to the max frame length is 127 based 802.15.4 spec.
9495 data [0 ] = data [0 ] & 0x7f ;
9596 frame_info -> process = true;
96- esp_ieee802154_receive_done (data , frame_info );
97+ ieee802154_inner_receive_done (data , frame_info );
9798 }
9899}
99100
@@ -102,13 +103,13 @@ static void ieee802154_transmit_done(const uint8_t *frame, const uint8_t *ack, e
102103 if (ack && ack_frame_info ) {
103104 IEEE802154_RX_BUFFER_STAT_IS_FREE (false);
104105 if (s_rx_index == CONFIG_IEEE802154_RX_BUFFER_SIZE ) {
105- esp_ieee802154_transmit_failed (frame , ESP_IEEE802154_TX_ERR_NO_ACK );
106+ ieee802154_inner_transmit_failed (frame , ESP_IEEE802154_TX_ERR_NO_ACK );
106107 } else {
107108 ack_frame_info -> process = true;
108- esp_ieee802154_transmit_done (frame , ack , ack_frame_info );
109+ ieee802154_inner_transmit_done (frame , ack , ack_frame_info );
109110 }
110111 } else {
111- esp_ieee802154_transmit_done (frame , ack , ack_frame_info );
112+ ieee802154_inner_transmit_done (frame , ack , ack_frame_info );
112113 }
113114}
114115
@@ -240,7 +241,7 @@ IEEE802154_NOINLINE static bool stop_tx(void)
240241 // if the tx is already done, and the frame is not ack request OR auto ack rx is disabled.
241242 ieee802154_transmit_done (s_tx_frame , NULL , NULL );
242243 } else {
243- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_ABORT );
244+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_ABORT );
244245 }
245246
246247 ieee802154_ll_clear_events (IEEE802154_EVENT_TX_DONE | IEEE802154_EVENT_TX_ABORT | IEEE802154_EVENT_TX_SFD_DONE );
@@ -276,7 +277,7 @@ IEEE802154_NOINLINE static bool stop_rx_ack(void)
276277 if (events & IEEE802154_EVENT_ACK_RX_DONE ) {
277278 ieee802154_transmit_done (s_tx_frame , (uint8_t * )& s_rx_frame [s_rx_index ], & s_rx_frame_info [s_rx_index ]);
278279 } else {
279- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_NO_ACK );
280+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_NO_ACK );
280281 }
281282
282283 ieee802154_ll_clear_events (IEEE802154_EVENT_ACK_RX_DONE | IEEE802154_EVENT_RX_SFD_DONE | IEEE802154_EVENT_TX_ABORT );
@@ -397,7 +398,7 @@ static void isr_handle_timer0_done(void)
397398{
398399#if !CONFIG_IEEE802154_TEST
399400 if (s_ieee802154_state == IEEE802154_STATE_RX_ACK ) {
400- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_NO_ACK );
401+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_NO_ACK );
401402 NEEDS_NEXT_OPT (true);
402403 }
403404#else
@@ -451,7 +452,7 @@ static IRAM_ATTR void isr_handle_rx_done(void)
451452 && ieee802154_ll_get_tx_enhance_ack ()) {
452453 s_rx_frame_info [s_rx_index ].pending = ieee802154_ack_config_pending_bit (s_rx_frame [s_rx_index ]);
453454 // For 2015 enh-ack, SW should generate an enh-ack then send it manually
454- if (esp_ieee802154_enh_ack_generator (s_rx_frame [s_rx_index ], & s_rx_frame_info [s_rx_index ], s_enh_ack_frame ) == ESP_OK ) {
455+ if (ieee802154_inner_enh_ack_generator (s_rx_frame [s_rx_index ], & s_rx_frame_info [s_rx_index ], s_enh_ack_frame ) == ESP_OK ) {
455456 extcoex_tx_stage_start ();
456457#if !CONFIG_IEEE802154_TEST
457458 // Send the Enh-Ack frame if generator succeeds.
@@ -590,14 +591,14 @@ static IRAM_ATTR void isr_handle_tx_abort(ieee802154_ll_tx_abort_reason_t tx_abo
590591 case IEEE802154_TX_ABORT_BY_RX_ACK_TYPE_NOT_ACK :
591592 case IEEE802154_TX_ABORT_BY_RX_ACK_RESTART :
592593 IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_RX_ACK );
593- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_INVALID_ACK );
594+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_INVALID_ACK );
594595 NEEDS_NEXT_OPT (false);
595596 break ;
596597 // The above events are only used in test mode.
597598 case IEEE802154_TX_ABORT_BY_RX_ACK_TIMEOUT :
598599 IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_RX_ACK );
599600 ieee802154_ll_disable_events (IEEE802154_EVENT_TIMER0_OVERFLOW );
600- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_NO_ACK );
601+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_NO_ACK );
601602 NEEDS_NEXT_OPT (true);
602603 break ;
603604 case IEEE802154_TX_ABORT_BY_TX_COEX_BREAK :
@@ -606,22 +607,22 @@ static IRAM_ATTR void isr_handle_tx_abort(ieee802154_ll_tx_abort_reason_t tx_abo
606607#endif
607608 IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA );
608609 IEEE802154_TX_BREAK_COEX_NUMS_UPDATE ();
609- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_COEXIST );
610+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_COEXIST );
610611 NEEDS_NEXT_OPT (true);
611612 break ;
612613 case IEEE802154_TX_ABORT_BY_TX_SECURITY_ERROR :
613614 IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA );
614- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_SECURITY );
615+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_SECURITY );
615616 NEEDS_NEXT_OPT (true);
616617 break ;
617618 case IEEE802154_TX_ABORT_BY_CCA_FAILED :
618619 IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_TX_CCA );
619- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_ABORT );
620+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_ABORT );
620621 NEEDS_NEXT_OPT (true);
621622 break ;
622623 case IEEE802154_TX_ABORT_BY_CCA_BUSY :
623624 IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_TX_CCA );
624- esp_ieee802154_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_CCA_BUSY );
625+ ieee802154_inner_transmit_failed (s_tx_frame , ESP_IEEE802154_TX_ERR_CCA_BUSY );
625626 NEEDS_NEXT_OPT (true);
626627 break ;
627628 default :
@@ -635,18 +636,18 @@ static IRAM_ATTR void isr_handle_ed_done(void)
635636 if (s_ieee802154_state == IEEE802154_STATE_CCA ) {
636637 esp_ieee802154_cca_done (ieee802154_ll_is_cca_busy ());
637638 } else if (s_ieee802154_state == IEEE802154_STATE_ED ) {
638- esp_ieee802154_energy_detect_done (ieee802154_ll_get_ed_rss ());
639+ ieee802154_inner_energy_detect_done (ieee802154_ll_get_ed_rss ());
639640 }
640641
641642 NEEDS_NEXT_OPT (true);
642643}
643644
644- IEEE802154_STATIC IRAM_ATTR void ieee802154_enter_critical (void )
645+ IRAM_ATTR void ieee802154_enter_critical (void )
645646{
646647 portENTER_CRITICAL (& s_ieee802154_spinlock );
647648}
648649
649- IEEE802154_STATIC IRAM_ATTR void ieee802154_exit_critical (void )
650+ IRAM_ATTR void ieee802154_exit_critical (void )
650651{
651652 portEXIT_CRITICAL (& s_ieee802154_spinlock );
652653}
@@ -672,7 +673,7 @@ IEEE802154_NOINLINE static void ieee802154_isr(void *arg)
672673 IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_RX || s_ieee802154_state == IEEE802154_STATE_RX_ACK || s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA || s_ieee802154_state == IEEE802154_STATE_TX_ENH_ACK );
673674
674675 s_rx_frame_info [s_rx_index ].timestamp = esp_timer_get_time ();
675- esp_ieee802154_receive_sfd_done ();
676+ ieee802154_inner_receive_sfd_done ();
676677
677678 events &= (uint16_t )(~IEEE802154_EVENT_RX_SFD_DONE );
678679 }
@@ -681,7 +682,7 @@ IEEE802154_NOINLINE static void ieee802154_isr(void *arg)
681682 // ZB-81: IEEE802154_STATE_TX_ACK is also a possible state
682683 IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA || s_ieee802154_state == IEEE802154_STATE_TEST_TX || s_ieee802154_state == IEEE802154_STATE_TX_ENH_ACK || s_ieee802154_state == IEEE802154_STATE_TX_ACK );
683684
684- esp_ieee802154_transmit_sfd_done (s_tx_frame );
685+ ieee802154_inner_transmit_sfd_done (s_tx_frame );
685686
686687 events &= (uint16_t )(~IEEE802154_EVENT_TX_SFD_DONE );
687688 }
@@ -833,6 +834,11 @@ esp_err_t ieee802154_mac_deinit(void)
833834 return ret ;
834835}
835836
837+ bool ieee802154_mac_is_inited (void )
838+ {
839+ return s_ieee802154_isr_handle != NULL ;
840+ }
841+
836842IEEE802154_STATIC void start_ed (uint32_t duration )
837843{
838844 ieee802154_ll_enable_events (IEEE802154_EVENT_ED_DONE );
0 commit comments