From 04aa61717cda77b8e84d1a8417273d905d3d3888 Mon Sep 17 00:00:00 2001 From: xiaqilin Date: Wed, 29 Nov 2023 22:03:10 +0800 Subject: [PATCH] fix(ieee802154): fix ieee802154 mac deinit and config ieee802154_enable --- components/ieee802154/Kconfig | 11 +++++++++-- components/ieee802154/driver/esp_ieee802154_dev.c | 11 ++++++++++- components/ieee802154/esp_ieee802154.c | 4 +++- .../ieee802154/private_include/esp_ieee802154_dev.h | 10 ++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/components/ieee802154/Kconfig b/components/ieee802154/Kconfig index 062e76f85c..cfb51714e3 100644 --- a/components/ieee802154/Kconfig +++ b/components/ieee802154/Kconfig @@ -2,7 +2,7 @@ menu "IEEE 802.15.4" visible if SOC_IEEE802154_SUPPORTED config IEEE802154_ENABLED - bool + bool "IEEE802154 Enable" default "y" if SOC_IEEE802154_SUPPORTED config IEEE802154_RX_BUFFER_SIZE @@ -14,6 +14,7 @@ menu "IEEE 802.15.4" The number of 802.15.4 receive buffers choice IEEE802154_CCA_MODE + depends on IEEE802154_ENABLED prompt "Clear Channel Assessment (CCA) mode" default IEEE802154_CCA_ED help @@ -41,6 +42,7 @@ menu "IEEE 802.15.4" endchoice config IEEE802154_CCA_MODE + depends on IEEE802154_ENABLED int default 0 if IEEE802154_CCA_CARRIER default 1 if IEEE802154_CCA_ED @@ -49,6 +51,7 @@ menu "IEEE 802.15.4" config IEEE802154_CCA_THRESHOLD int "CCA detection threshold" + depends on IEEE802154_ENABLED range -120 0 default -60 help @@ -56,6 +59,7 @@ menu "IEEE 802.15.4" config IEEE802154_PENDING_TABLE_SIZE int "Pending table size" + depends on IEEE802154_ENABLED range 1 100 default 20 help @@ -63,12 +67,14 @@ menu "IEEE 802.15.4" config IEEE802154_MULTI_PAN_ENABLE bool "Enable multi-pan feature for frame filter" + depends on IEEE802154_ENABLED default n help Enable IEEE802154 multi-pan config IEEE802154_TIMING_OPTIMIZATION bool "Enable throughput optimization" + depends on IEEE802154_ENABLED default n help Enabling this option increases throughput by ~5% at the expense of ~2.1k @@ -77,7 +83,7 @@ menu "IEEE 802.15.4" config IEEE802154_SLEEP_ENABLE # Todo: Remove when support safe power-down of the power domain (IDF-7317) bool "Enable IEEE802154 light sleep" - depends on PM_ENABLE + depends on PM_ENABLE && IEEE802154_ENABLED default n help Enabling this option allows the IEEE802.15.4 module to be powered down during automatic light sleep, @@ -85,6 +91,7 @@ menu "IEEE 802.15.4" menuconfig IEEE802154_DEBUG bool "Enable IEEE802154 Debug" + depends on IEEE802154_ENABLED default n help Enabling this option allows different kinds of IEEE802154 debug output. diff --git a/components/ieee802154/driver/esp_ieee802154_dev.c b/components/ieee802154/driver/esp_ieee802154_dev.c index 4ba5dbd867..625b4ab704 100644 --- a/components/ieee802154/driver/esp_ieee802154_dev.c +++ b/components/ieee802154/driver/esp_ieee802154_dev.c @@ -51,6 +51,7 @@ static uint8_t s_rx_index = 0; static uint8_t s_enh_ack_frame[128]; static uint8_t s_recent_rx_frame_info_index; static portMUX_TYPE s_ieee802154_spinlock = portMUX_INITIALIZER_UNLOCKED; +static intr_handle_t ieee802154_isr_handle = NULL; static esp_err_t ieee802154_sleep_init(void); static void ieee802154_rf_enable(void); @@ -655,7 +656,7 @@ esp_err_t ieee802154_mac_init(void) ieee802154_set_state(IEEE802154_STATE_IDLE); // TODO: Add flags for IEEE802154 ISR allocating. TZ-102 - ret = esp_intr_alloc(ieee802154_periph.irq_id, 0, ieee802154_isr, NULL, NULL); + ret = esp_intr_alloc(ieee802154_periph.irq_id, 0, ieee802154_isr, NULL, &ieee802154_isr_handle); ESP_RETURN_ON_FALSE(ret == ESP_OK, ESP_FAIL, IEEE802154_TAG, "IEEE802154 MAC init failed"); ESP_RETURN_ON_FALSE(ieee802154_sleep_init() == ESP_OK, ESP_FAIL, IEEE802154_TAG, "IEEE802154 MAC sleep init failed"); @@ -663,6 +664,14 @@ esp_err_t ieee802154_mac_init(void) return ret; } +esp_err_t ieee802154_mac_deinit(void) +{ + esp_err_t ret = ESP_OK; + ret = esp_intr_free(ieee802154_isr_handle); + ieee802154_isr_handle = NULL; + return ret; +} + IEEE802154_STATIC void start_ed(uint32_t duration) { ieee802154_ll_enable_events(IEEE802154_EVENT_ED_DONE); diff --git a/components/ieee802154/esp_ieee802154.c b/components/ieee802154/esp_ieee802154.c index 83900d2b02..bd8e41be4b 100644 --- a/components/ieee802154/esp_ieee802154.c +++ b/components/ieee802154/esp_ieee802154.c @@ -29,8 +29,10 @@ esp_err_t esp_ieee802154_enable(void) esp_err_t esp_ieee802154_disable(void) { + esp_btbb_disable(); + esp_phy_disable(PHY_MODEM_IEEE802154); ieee802154_disable(); - return ESP_OK; + return ieee802154_mac_deinit(); } uint8_t esp_ieee802154_get_channel(void) diff --git a/components/ieee802154/private_include/esp_ieee802154_dev.h b/components/ieee802154/private_include/esp_ieee802154_dev.h index 7fc5756134..f8145cc673 100644 --- a/components/ieee802154/private_include/esp_ieee802154_dev.h +++ b/components/ieee802154/private_include/esp_ieee802154_dev.h @@ -65,6 +65,16 @@ void ieee802154_disable(void); */ esp_err_t ieee802154_mac_init(void); +/** + * @brief Deinitialize the IEEE 802.15.4 MAC. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + * + */ +esp_err_t ieee802154_mac_deinit(void); + /** * @brief Transmit the given frame. *