1
1
/*
2
- * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
2
+ * SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
3
3
*
4
4
* SPDX-License-Identifier: Apache-2.0
5
5
*/
18
18
#include "esp_timer.h"
19
19
#include "esp_ieee802154_ack.h"
20
20
#include "esp_ieee802154_dev.h"
21
+ #include "esp_ieee802154_event.h"
21
22
#include "esp_ieee802154_frame.h"
22
23
#include "esp_ieee802154_pib.h"
23
24
#include "esp_ieee802154_sec.h"
@@ -93,7 +94,7 @@ static void ieee802154_receive_done(uint8_t *data, esp_ieee802154_frame_info_t *
93
94
// Ignore bit8 for the frame length, due to the max frame length is 127 based 802.15.4 spec.
94
95
data [0 ] = data [0 ] & 0x7f ;
95
96
frame_info -> process = true;
96
- esp_ieee802154_receive_done (data , frame_info );
97
+ ieee802154_inner_receive_done (data , frame_info );
97
98
}
98
99
}
99
100
@@ -102,13 +103,13 @@ static void ieee802154_transmit_done(const uint8_t *frame, const uint8_t *ack, e
102
103
if (ack && ack_frame_info ) {
103
104
IEEE802154_RX_BUFFER_STAT_IS_FREE (false);
104
105
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 );
106
107
} else {
107
108
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 );
109
110
}
110
111
} else {
111
- esp_ieee802154_transmit_done (frame , ack , ack_frame_info );
112
+ ieee802154_inner_transmit_done (frame , ack , ack_frame_info );
112
113
}
113
114
}
114
115
@@ -240,7 +241,7 @@ IEEE802154_NOINLINE static bool stop_tx(void)
240
241
// if the tx is already done, and the frame is not ack request OR auto ack rx is disabled.
241
242
ieee802154_transmit_done (s_tx_frame , NULL , NULL );
242
243
} 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 );
244
245
}
245
246
246
247
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)
276
277
if (events & IEEE802154_EVENT_ACK_RX_DONE ) {
277
278
ieee802154_transmit_done (s_tx_frame , (uint8_t * )& s_rx_frame [s_rx_index ], & s_rx_frame_info [s_rx_index ]);
278
279
} 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 );
280
281
}
281
282
282
283
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)
397
398
{
398
399
#if !CONFIG_IEEE802154_TEST
399
400
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 );
401
402
NEEDS_NEXT_OPT (true);
402
403
}
403
404
#else
@@ -451,7 +452,7 @@ static IRAM_ATTR void isr_handle_rx_done(void)
451
452
&& ieee802154_ll_get_tx_enhance_ack ()) {
452
453
s_rx_frame_info [s_rx_index ].pending = ieee802154_ack_config_pending_bit (s_rx_frame [s_rx_index ]);
453
454
// 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 ) {
455
456
extcoex_tx_stage_start ();
456
457
#if !CONFIG_IEEE802154_TEST
457
458
// 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
590
591
case IEEE802154_TX_ABORT_BY_RX_ACK_TYPE_NOT_ACK :
591
592
case IEEE802154_TX_ABORT_BY_RX_ACK_RESTART :
592
593
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 );
594
595
NEEDS_NEXT_OPT (false);
595
596
break ;
596
597
// The above events are only used in test mode.
597
598
case IEEE802154_TX_ABORT_BY_RX_ACK_TIMEOUT :
598
599
IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_RX_ACK );
599
600
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 );
601
602
NEEDS_NEXT_OPT (true);
602
603
break ;
603
604
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
606
607
#endif
607
608
IEEE802154_ASSERT (s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA );
608
609
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 );
610
611
NEEDS_NEXT_OPT (true);
611
612
break ;
612
613
case IEEE802154_TX_ABORT_BY_TX_SECURITY_ERROR :
613
614
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 );
615
616
NEEDS_NEXT_OPT (true);
616
617
break ;
617
618
case IEEE802154_TX_ABORT_BY_CCA_FAILED :
618
619
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 );
620
621
NEEDS_NEXT_OPT (true);
621
622
break ;
622
623
case IEEE802154_TX_ABORT_BY_CCA_BUSY :
623
624
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 );
625
626
NEEDS_NEXT_OPT (true);
626
627
break ;
627
628
default :
@@ -635,18 +636,18 @@ static IRAM_ATTR void isr_handle_ed_done(void)
635
636
if (s_ieee802154_state == IEEE802154_STATE_CCA ) {
636
637
esp_ieee802154_cca_done (ieee802154_ll_is_cca_busy ());
637
638
} 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 ());
639
640
}
640
641
641
642
NEEDS_NEXT_OPT (true);
642
643
}
643
644
644
- IEEE802154_STATIC IRAM_ATTR void ieee802154_enter_critical (void )
645
+ IRAM_ATTR void ieee802154_enter_critical (void )
645
646
{
646
647
portENTER_CRITICAL (& s_ieee802154_spinlock );
647
648
}
648
649
649
- IEEE802154_STATIC IRAM_ATTR void ieee802154_exit_critical (void )
650
+ IRAM_ATTR void ieee802154_exit_critical (void )
650
651
{
651
652
portEXIT_CRITICAL (& s_ieee802154_spinlock );
652
653
}
@@ -672,7 +673,7 @@ IEEE802154_NOINLINE static void ieee802154_isr(void *arg)
672
673
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 );
673
674
674
675
s_rx_frame_info [s_rx_index ].timestamp = esp_timer_get_time ();
675
- esp_ieee802154_receive_sfd_done ();
676
+ ieee802154_inner_receive_sfd_done ();
676
677
677
678
events &= (uint16_t )(~IEEE802154_EVENT_RX_SFD_DONE );
678
679
}
@@ -681,7 +682,7 @@ IEEE802154_NOINLINE static void ieee802154_isr(void *arg)
681
682
// ZB-81: IEEE802154_STATE_TX_ACK is also a possible state
682
683
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 );
683
684
684
- esp_ieee802154_transmit_sfd_done (s_tx_frame );
685
+ ieee802154_inner_transmit_sfd_done (s_tx_frame );
685
686
686
687
events &= (uint16_t )(~IEEE802154_EVENT_TX_SFD_DONE );
687
688
}
@@ -832,6 +833,11 @@ esp_err_t ieee802154_mac_deinit(void)
832
833
return ret ;
833
834
}
834
835
836
+ bool ieee802154_mac_is_inited (void )
837
+ {
838
+ return s_ieee802154_isr_handle != NULL ;
839
+ }
840
+
835
841
IEEE802154_STATIC void start_ed (uint32_t duration )
836
842
{
837
843
ieee802154_ll_enable_events (IEEE802154_EVENT_ED_DONE );
0 commit comments