From 257ee55c466d632882aa80f87169bde9076c4ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20J=C3=A4ger?= Date: Mon, 9 Dec 2024 17:06:00 +0100 Subject: [PATCH 1/2] ieee802154: copy component from ESP-IDF MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit hash in ESP-IDF: a2f420a36ecf8cd19b443adde1d75e5eaecc6309 Signed-off-by: Martin Jäger --- components/ieee802154/CMakeLists.txt | 39 + components/ieee802154/Kconfig | 176 +++ .../ieee802154/driver/esp_ieee802154_ack.c | 167 +++ .../ieee802154/driver/esp_ieee802154_debug.c | 373 ++++++ .../ieee802154/driver/esp_ieee802154_dev.c | 1096 +++++++++++++++++ .../ieee802154/driver/esp_ieee802154_frame.c | 417 +++++++ .../ieee802154/driver/esp_ieee802154_pib.c | 220 ++++ .../ieee802154/driver/esp_ieee802154_sec.c | 28 + .../ieee802154/driver/esp_ieee802154_timer.c | 59 + .../ieee802154/driver/esp_ieee802154_util.c | 63 + components/ieee802154/esp_ieee802154.c | 418 +++++++ .../ieee802154/include/esp_ieee802154.h | 628 ++++++++++ .../ieee802154/include/esp_ieee802154_types.h | 88 ++ components/ieee802154/lib/.gitlab-ci.yml | 31 + components/ieee802154/lib/LICENSE | 202 +++ components/ieee802154/lib/README.rst | 10 + components/ieee802154/lib/esp32c6/lib802154.a | Bin 0 -> 589954 bytes components/ieee802154/lib/esp32h2/lib802154.a | Bin 0 -> 591786 bytes .../ieee802154/lib/esp32h2/rev1/lib802154.a | Bin 0 -> 130510 bytes .../ieee802154/lib/esp32h2/rev2/lib802154.a | Bin 0 -> 180462 bytes components/ieee802154/linker.lf | 62 + .../private_include/esp_ieee802154_ack.h | 79 ++ .../private_include/esp_ieee802154_dev.h | 254 ++++ .../private_include/esp_ieee802154_frame.h | 199 +++ .../private_include/esp_ieee802154_pib.h | 234 ++++ .../private_include/esp_ieee802154_sec.h | 36 + .../private_include/esp_ieee802154_timer.h | 84 ++ .../private_include/esp_ieee802154_util.h | 330 +++++ 28 files changed, 5293 insertions(+) create mode 100644 components/ieee802154/CMakeLists.txt create mode 100644 components/ieee802154/Kconfig create mode 100644 components/ieee802154/driver/esp_ieee802154_ack.c create mode 100644 components/ieee802154/driver/esp_ieee802154_debug.c create mode 100644 components/ieee802154/driver/esp_ieee802154_dev.c create mode 100644 components/ieee802154/driver/esp_ieee802154_frame.c create mode 100644 components/ieee802154/driver/esp_ieee802154_pib.c create mode 100644 components/ieee802154/driver/esp_ieee802154_sec.c create mode 100644 components/ieee802154/driver/esp_ieee802154_timer.c create mode 100644 components/ieee802154/driver/esp_ieee802154_util.c create mode 100644 components/ieee802154/esp_ieee802154.c create mode 100644 components/ieee802154/include/esp_ieee802154.h create mode 100644 components/ieee802154/include/esp_ieee802154_types.h create mode 100755 components/ieee802154/lib/.gitlab-ci.yml create mode 100644 components/ieee802154/lib/LICENSE create mode 100644 components/ieee802154/lib/README.rst create mode 100644 components/ieee802154/lib/esp32c6/lib802154.a create mode 100644 components/ieee802154/lib/esp32h2/lib802154.a create mode 100644 components/ieee802154/lib/esp32h2/rev1/lib802154.a create mode 100644 components/ieee802154/lib/esp32h2/rev2/lib802154.a create mode 100644 components/ieee802154/linker.lf create mode 100644 components/ieee802154/private_include/esp_ieee802154_ack.h create mode 100644 components/ieee802154/private_include/esp_ieee802154_dev.h create mode 100644 components/ieee802154/private_include/esp_ieee802154_frame.h create mode 100644 components/ieee802154/private_include/esp_ieee802154_pib.h create mode 100644 components/ieee802154/private_include/esp_ieee802154_sec.h create mode 100644 components/ieee802154/private_include/esp_ieee802154_timer.h create mode 100644 components/ieee802154/private_include/esp_ieee802154_util.h diff --git a/components/ieee802154/CMakeLists.txt b/components/ieee802154/CMakeLists.txt new file mode 100644 index 0000000000..901db1b534 --- /dev/null +++ b/components/ieee802154/CMakeLists.txt @@ -0,0 +1,39 @@ +idf_build_get_property(target IDF_TARGET) + +if(${target} STREQUAL "linux") + return() # This component is not supported by the POSIX/Linux simulator +endif() + +set(srcs "") +set(include "include") +set(private_include "") + +if(CONFIG_IEEE802154_ENABLED) + list(APPEND srcs "esp_ieee802154.c" + "driver/esp_ieee802154_ack.c" + "driver/esp_ieee802154_dev.c" + "driver/esp_ieee802154_frame.c" + "driver/esp_ieee802154_pib.c" + "driver/esp_ieee802154_util.c" + "driver/esp_ieee802154_sec.c" + "driver/esp_ieee802154_timer.c") + list(APPEND private_include "private_include") + + if(CONFIG_IEEE802154_TEST) + list(REMOVE_ITEM private_include "private_include") + list(APPEND include "private_include") + endif() + +endif() + +if(CONFIG_IEEE802154_DEBUG) + list(APPEND srcs "driver/esp_ieee802154_debug.c") +endif() + +idf_component_register( + SRCS "${srcs}" + INCLUDE_DIRS "${include}" + PRIV_INCLUDE_DIRS "${private_include}" + LDFRAGMENTS linker.lf + PRIV_REQUIRES esp_phy esp_timer esp_coex soc hal esp_pm +) diff --git a/components/ieee802154/Kconfig b/components/ieee802154/Kconfig new file mode 100644 index 0000000000..9c5d18e237 --- /dev/null +++ b/components/ieee802154/Kconfig @@ -0,0 +1,176 @@ +menu "IEEE 802.15.4" + visible if SOC_IEEE802154_SUPPORTED + + config IEEE802154_ENABLED + bool "IEEE802154 Enable" + default "y" if SOC_IEEE802154_SUPPORTED + + config IEEE802154_RX_BUFFER_SIZE + int "The number of 802.15.4 receive buffers" + depends on IEEE802154_ENABLED + default 20 + range 2 100 + help + 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 + configure the CCA mode + + config IEEE802154_CCA_CARRIER + bool "Carrier sense only" + help + configure the CCA mode to Energy above threshold + + config IEEE802154_CCA_ED + bool "Energy above threshold" + help + configure the CCA mode to Energy above threshold + + config IEEE802154_CCA_CARRIER_OR_ED + bool "Carrier sense OR energy above threshold" + help + configure the CCA mode to Carrier sense OR energy above threshold + + config IEEE802154_CCA_CARRIER_AND_ED + bool "Carrier sense AND energy above threshold" + help + configure the CCA mode to Carrier sense AND energy above threshold + endchoice + + config IEEE802154_CCA_MODE + depends on IEEE802154_ENABLED + int + default 0 if IEEE802154_CCA_CARRIER + default 1 if IEEE802154_CCA_ED + default 2 if IEEE802154_CCA_CARRIER_OR_ED + default 3 if IEEE802154_CCA_CARRIER_AND_ED + + config IEEE802154_CCA_THRESHOLD + int "CCA detection threshold" + depends on IEEE802154_ENABLED + range -120 0 + default -60 + help + set the CCA threshold, in dB + + config IEEE802154_PENDING_TABLE_SIZE + int "Pending table size" + depends on IEEE802154_ENABLED + range 1 100 + default 20 + help + set the pending table size + + 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 + IRAM code size increase. + + 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 && IEEE802154_ENABLED + default n + help + Enabling this option allows the IEEE802.15.4 module to be powered down during automatic light sleep, + which reduces current consumption. + + menuconfig IEEE802154_DEBUG + bool "Enable IEEE802154 Debug" + depends on IEEE802154_ENABLED + default n + help + Enabling this option allows different kinds of IEEE802154 debug output. + All IEEE802154 debug features increase the size of the final binary. + + config IEEE802154_ASSERT + bool "Enrich the assert information with IEEE802154 state and event" + depends on IEEE802154_DEBUG + default n + help + Enabling this option to add some probe codes in the driver, and these informations + will be printed when assert. + + config IEEE802154_RECORD_EVENT + bool "Enable record event information for debugging" + depends on IEEE802154_DEBUG + default n + help + Enabling this option to record event, when assert, the recorded event will be printed. + + config IEEE802154_RECORD_EVENT_SIZE + int "Record event table size" + depends on IEEE802154_RECORD_EVENT + range 1 50 + default 30 + help + set the record event table size + + config IEEE802154_RECORD_STATE + bool "Enable record state information for debugging" + depends on IEEE802154_DEBUG + default n + help + Enabling this option to record state, when assert, the recorded state will be printed. + + config IEEE802154_RECORD_STATE_SIZE + int "Record state table size" + depends on IEEE802154_RECORD_STATE + range 1 50 + default 10 + help + set the record state table size + + config IEEE802154_RECORD_CMD + bool "Enable record command information for debugging" + depends on IEEE802154_DEBUG + default n + help + Enabling this option to record the command, when assert, the recorded + command will be printed. + + config IEEE802154_RECORD_CMD_SIZE + int "Record command table size" + depends on IEEE802154_RECORD_CMD + range 1 50 + default 10 + help + set the record command table size + + config IEEE802154_RECORD_ABORT + bool "Enable record abort information for debugging" + depends on IEEE802154_DEBUG + default n + help + Enabling this option to record the abort, when assert, the recorded + abort will be printed. + + config IEEE802154_RECORD_ABORT_SIZE + int "Record abort table size" + depends on IEEE802154_RECORD_ABORT + range 1 50 + default 10 + help + set the record abort table size + + config IEEE802154_TXRX_STATISTIC + bool "Enable record tx/rx packets information for debugging" + depends on IEEE802154_DEBUG + default n + help + Enabling this option to record the tx and rx +endmenu # IEEE 802.15.4 diff --git a/components/ieee802154/driver/esp_ieee802154_ack.c b/components/ieee802154/driver/esp_ieee802154_ack.c new file mode 100644 index 0000000000..cb21dd72a0 --- /dev/null +++ b/components/ieee802154/driver/esp_ieee802154_ack.c @@ -0,0 +1,167 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "hal/ieee802154_ll.h" +#include "esp_attr.h" +#include "esp_err.h" +#include "esp_ieee802154_ack.h" +#include "esp_ieee802154_dev.h" +#include "esp_ieee802154_frame.h" +#include "esp_ieee802154_pib.h" +#include "esp_ieee802154_types.h" +#include "esp_ieee802154_util.h" + +static ieee802154_pending_table_t ieee802154_pending_table; + +#define GET_MASK_ITEM_FROM_TABLE(mask, pos) (mask[(pos) / IEEE802154_PENDING_TABLE_MASK_BITS]) + +#define BIT_SET(mask, pos) (GET_MASK_ITEM_FROM_TABLE(mask, pos) |= (1UL << (pos % IEEE802154_PENDING_TABLE_MASK_BITS))) +#define BIT_CLR(mask, pos) (GET_MASK_ITEM_FROM_TABLE(mask, pos) &= ~(1UL << (pos % IEEE802154_PENDING_TABLE_MASK_BITS))) +#define BIT_IST(mask, pos) (GET_MASK_ITEM_FROM_TABLE(mask, pos) & (1UL << (pos % IEEE802154_PENDING_TABLE_MASK_BITS))) + +static IRAM_ATTR bool ieee802154_addr_in_pending_table(const uint8_t *addr, bool is_short) +{ + bool ret = false; + if (is_short) { + for (uint8_t index = 0; index < CONFIG_IEEE802154_PENDING_TABLE_SIZE; index++) { + if (BIT_IST(ieee802154_pending_table.short_addr_mask, index) && + memcmp(addr, ieee802154_pending_table.short_addr[index], IEEE802154_FRAME_SHORT_ADDR_SIZE) == 0) { + ret = true; + break; + } + } + } else { + for (uint8_t index = 0; index < CONFIG_IEEE802154_PENDING_TABLE_SIZE; index++) { + if (BIT_IST(ieee802154_pending_table.ext_addr_mask, index) && + memcmp(addr, ieee802154_pending_table.ext_addr[index], IEEE802154_FRAME_EXT_ADDR_SIZE) == 0) { + ret = true; + break; + } + } + } + return ret; +} + +esp_err_t ieee802154_add_pending_addr(const uint8_t *addr, bool is_short) +{ + esp_err_t ret = ESP_FAIL; + int8_t first_empty_index = -1; + if (is_short) { + for (uint8_t index = 0; index < CONFIG_IEEE802154_PENDING_TABLE_SIZE; index++) { + if (!BIT_IST(ieee802154_pending_table.short_addr_mask, index)) { + // record the first empty index + first_empty_index = (first_empty_index == -1 ? index : first_empty_index); + } else if (memcmp(addr, ieee802154_pending_table.short_addr[index], IEEE802154_FRAME_SHORT_ADDR_SIZE) == 0) { + // The address is in the table already. + ret = ESP_OK; + return ret; + } + } + if (first_empty_index != -1) { + memcpy(ieee802154_pending_table.short_addr[first_empty_index], addr, IEEE802154_FRAME_SHORT_ADDR_SIZE); + BIT_SET(ieee802154_pending_table.short_addr_mask, first_empty_index); + ret = ESP_OK; + } + } else { + for (uint8_t index = 0; index < CONFIG_IEEE802154_PENDING_TABLE_SIZE; index++) { + if (!BIT_IST(ieee802154_pending_table.ext_addr_mask, index)) { + first_empty_index = (first_empty_index == -1 ? index : first_empty_index); + } else if (memcmp(addr, ieee802154_pending_table.ext_addr[index], IEEE802154_FRAME_EXT_ADDR_SIZE) == 0) { + // The address is already in the pending table. + ret = ESP_OK; + return ret; + } + } + if (first_empty_index != -1) { + memcpy(ieee802154_pending_table.ext_addr[first_empty_index], addr, IEEE802154_FRAME_EXT_ADDR_SIZE); + BIT_SET(ieee802154_pending_table.ext_addr_mask, first_empty_index); + ret = ESP_OK; + } + } + return ret; +} + +esp_err_t ieee802154_clear_pending_addr(const uint8_t *addr, bool is_short) +{ + esp_err_t ret = ESP_FAIL; + // Consider this function may be called in ISR, only clear the mask bits for finishing the process quickly. + if (is_short) { + for (uint8_t index = 0; index < CONFIG_IEEE802154_PENDING_TABLE_SIZE; index++) { + if (BIT_IST(ieee802154_pending_table.short_addr_mask, index) && + memcmp(addr, ieee802154_pending_table.short_addr[index], IEEE802154_FRAME_SHORT_ADDR_SIZE) == 0) { + BIT_CLR(ieee802154_pending_table.short_addr_mask, index); + ret = ESP_OK; + break; + } + } + } else { + for (uint8_t index = 0; index < CONFIG_IEEE802154_PENDING_TABLE_SIZE; index++) { + if (BIT_IST(ieee802154_pending_table.ext_addr_mask, index) && + memcmp(addr, ieee802154_pending_table.ext_addr[index], IEEE802154_FRAME_EXT_ADDR_SIZE) == 0) { + BIT_CLR(ieee802154_pending_table.ext_addr_mask, index); + ret = ESP_OK; + break; + } + } + } + + return ret; +} + +void ieee802154_reset_pending_table(bool is_short) +{ + // Consider this function may be called in ISR, only clear the mask bits for finishing the process quickly. + if (is_short) { + memset(ieee802154_pending_table.short_addr_mask, 0, IEEE802154_PENDING_TABLE_MASK_SIZE); + } else { + memset(ieee802154_pending_table.ext_addr_mask, 0, IEEE802154_PENDING_TABLE_MASK_SIZE); + } +} + +bool ieee802154_ack_config_pending_bit(const uint8_t *frame) +{ + bool pending_bit = false; + uint8_t addr[IEEE802154_FRAME_EXT_ADDR_SIZE] = {0}; + uint8_t src_mode = 0; + // Only set the HW pending bit for the frames with version 0b00 or 0b01. + bool set_to_hw = (ieee802154_frame_get_version(frame) <= IEEE802154_FRAME_VERSION_1); + + ieee802154_ll_pending_mode_t pending_mode = ieee802154_pib_get_pending_mode(); + + switch (pending_mode) { + case IEEE802154_AUTO_PENDING_DISABLE: + // HW will check whether the frame is data request or not + pending_bit = true; + break; + case IEEE802154_AUTO_PENDING_ENABLE: + case IEEE802154_AUTO_PENDING_ENHANCED: + src_mode = ieee802154_frame_get_src_addr(frame, addr); + + if (src_mode == IEEE802154_FRAME_SRC_MODE_SHORT || src_mode == IEEE802154_FRAME_SRC_MODE_EXT) { + if (ieee802154_addr_in_pending_table(addr, src_mode == IEEE802154_FRAME_SRC_MODE_SHORT)) { + pending_bit = true; + } + } + break; + case IEEE802154_AUTO_PENDING_ZIGBEE: + // If the address type is short and in pending table, set 'pending_bit' false, otherwise set true. + src_mode = ieee802154_frame_get_src_addr(frame, addr); + pending_bit = true; + if (src_mode == IEEE802154_FRAME_SRC_MODE_SHORT && ieee802154_addr_in_pending_table(addr, src_mode == IEEE802154_FRAME_SRC_MODE_SHORT)) { + pending_bit = false; + } + break; + default: + IEEE802154_ASSERT(false); + } + + if (set_to_hw) { + ieee802154_ll_set_pending_bit(pending_bit); + } + + return pending_bit; +} diff --git a/components/ieee802154/driver/esp_ieee802154_debug.c b/components/ieee802154/driver/esp_ieee802154_debug.c new file mode 100644 index 0000000000..0dbfd4bc59 --- /dev/null +++ b/components/ieee802154/driver/esp_ieee802154_debug.c @@ -0,0 +1,373 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include "hal/ieee802154_ll.h" +#include "esp_ieee802154_util.h" +#include "esp_log.h" + +#if CONFIG_IEEE802154_DEBUG +ieee802154_probe_info_t g_ieee802154_probe; + +#if CONFIG_IEEE802154_RECORD_EVENT +static char *ieee802154_get_event_string(ieee802154_ll_event_t events) +{ + char *event_string = ""; + switch (events) { + case IEEE802154_EVENT_TX_DONE: + event_string = "TX_DONE"; + break; + case IEEE802154_EVENT_RX_DONE: + event_string = "RX_DONE"; + break; + case IEEE802154_EVENT_ACK_TX_DONE: + event_string = "ACK_TX_DONE"; + break; + case IEEE802154_EVENT_ACK_RX_DONE: + event_string = "ACK_RX_DONE"; + break; + case IEEE802154_EVENT_RX_ABORT: + event_string = "RX_ABORT"; + break; + case IEEE802154_EVENT_TX_ABORT: + event_string = "TX_ABORT"; + break; + case IEEE802154_EVENT_ED_DONE: + event_string = "ED_DONE"; + break; + case IEEE802154_EVENT_TIMER0_OVERFLOW: + event_string = "TIMER0_OVERFLOW"; + break; + case IEEE802154_EVENT_TIMER1_OVERFLOW: + event_string = "TIMER1_OVERFLOW"; + break; + case IEEE802154_EVENT_CLOCK_COUNT_MATCH: + event_string = "CLOCK_COUNT_MATCH"; + break; + case IEEE802154_EVENT_TX_SFD_DONE: + event_string = "TX_SFD_DONE"; + break; + case IEEE802154_EVENT_RX_SFD_DONE: + event_string = "RX_SFD_DONE"; + break; + default: + event_string = "Multi events"; + break; + } + return event_string; +} +#endif // CONFIG_IEEE802154_RECORD_EVENT + +#if CONFIG_IEEE802154_RECORD_STATE || CONFIG_IEEE802154_RECORD_EVENT +static char *ieee802154_state_string[] = { + "DISABLE", + "IDLE", + "SLEEP", + "RX", + "TX_ACK", + "TX_ENH_ACK", + "TX_CCA", + "TX", + "DTM_TX", + "RX_ACK", + "ED", + "CCA", +}; +#endif // CONFIG_IEEE802154_RECORD_STATE + +#if CONFIG_IEEE802154_RECORD_CMD +static char *ieee802154_get_cmd_string(ieee802154_ll_cmd_t cmd) +{ + char *cmd_string = ""; + switch (cmd) { + case IEEE802154_CMD_TX_START: + cmd_string = "tx"; + break; + case IEEE802154_CMD_RX_START: + cmd_string = "rx"; + break; + case IEEE802154_CMD_CCA_TX_START: + cmd_string = "tx cca"; + break; + case IEEE802154_CMD_ED_START: + cmd_string = "ed"; + break; + case IEEE802154_CMD_STOP: + cmd_string = "stop"; + break; + case IEEE802154_CMD_TEST_TX_START: + cmd_string = "test tx"; + break; + case IEEE802154_CMD_TEST_RX_START: + cmd_string = "test rx"; + break; + case IEEE802154_CMD_TEST_STOP: + cmd_string = "test stop"; + break; + case IEEE802154_CMD_TIMER0_START: + cmd_string = "timer0 start"; + break; + case IEEE802154_CMD_TIMER0_STOP: + cmd_string = "timer0 stop"; + break; + case IEEE802154_CMD_TIMER1_START: + cmd_string = "timer1 start"; + break; + case IEEE802154_CMD_TIMER1_STOP: + cmd_string = "timer1 stop"; + break; + } + return cmd_string; +} +#endif // CONFIG_IEEE802154_RECORD_CMD + +#if CONFIG_IEEE802154_RECORD_EVENT || CONFIG_IEEE802154_RECORD_ABORT +static char *ieee80154_rx_abort_reason_string[] = { + "RSVD", // = 0, + "RX_STOP", // = 1, + "SFD_TIMEOUT", // = 2, + "CRC_ERROR ", // = 3, + "INVALID_LEN", // = 4, + "FILTER_FAIL", // = 5, + "NO_RSS ", // = 6, + "COEX_BREAK ", // = 7, + "UNEXPECTED_ACK", // = 8, + "RX_RESTART", // = 9, + "RSVD", "RSVD", "RSVD", "RSVD", "RSVD", "RSVD", // = 10~15, + "TX_ACK_TIMEOUT", // = 16, + "TX_ACK_STOP", // = 17, + "TX_ACK_COEX_BREAK", // = 18, + "ENHACK_SECURITY_ERROR", // = 19, + "RSVD", "RSVD", "RSVD", "RSVD", // = 20~23 + "ED_ABORT", // = 24, + "ED_STOP", // = 25, + "ED_COEX_REJECT", // = 26, +}; + +static char *ieee80154_tx_abort_reason_string[] = { + "RSVD", // = 0, + "RX_ACK_STOP", // = 1, + "RX_ACK_SFD_TIMEOUT", // = 2, + "RX_ACK_CRC_ERROR", // = 3, + "RX_ACK_INVALID_LEN", // = 4, + "RX_ACK_FILTER_FAIL", // = 5, + "RX_ACK_NO_RSS", // = 6, + "RX_ACK_COEX_BREAK", // = 7, + "RX_ACK_TYPE_NOT_ACK", // = 8, + "RX_ACK_RESTART", // = 9, + "RSVD", "RSVD", "RSVD", "RSVD", "RSVD", "RSVD", // = 10~15, + "RX_ACK_TIMEOUT", // = 16, + "TX_STOP", // = 17, + "TX_COEX_BREAK", // = 18, + "TX_SECURITY_ERROR", // = 19, + "RSVD", "RSVD", "RSVD", "RSVD", // = 20~23 + "CCA_FAILED", // = 24, + "CCA_BUSY", // = 25, +}; + +#endif // CONFIG_IEEE802154_RECORD_EVENT + +#if CONFIG_IEEE802154_ASSERT +void ieee802154_assert_print(void) +{ +#if CONFIG_IEEE802154_RECORD_EVENT + ESP_EARLY_LOGW(IEEE802154_TAG, "Print the record event, current event index: %d", g_ieee802154_probe.event_index); + for (uint8_t i = 0; i < IEEE802154_ASSERT_RECORD_EVENT_SIZE; i++) { + char event_log[200] = { 0 }; + char abort_log[100] = { 0 }; + snprintf(event_log, 200,"index %2d: event: 0x%4x, %15s, state:%10s, timestamp: %lld", i, g_ieee802154_probe.event[i].event, + ieee802154_get_event_string(g_ieee802154_probe.event[i].event), + ieee802154_state_string[g_ieee802154_probe.event[i].state], + g_ieee802154_probe.event[i].timestamp); + if (g_ieee802154_probe.event[i].event == IEEE802154_EVENT_RX_ABORT) { + snprintf(abort_log, 100, "rx abort reason: %4x, %20s", g_ieee802154_probe.event[i].abort_reason.rx, + ieee80154_rx_abort_reason_string[g_ieee802154_probe.event[i].abort_reason.rx]); + } else if (g_ieee802154_probe.event[i].event == IEEE802154_EVENT_TX_ABORT) { + snprintf(abort_log, 100, "tx abort reason: %4x, %20s", g_ieee802154_probe.event[i].abort_reason.tx, + ieee80154_tx_abort_reason_string[g_ieee802154_probe.event[i].abort_reason.tx]); + } + ESP_EARLY_LOGW(IEEE802154_TAG, "%s %s", event_log, abort_log); + } + ESP_EARLY_LOGW(IEEE802154_TAG,"Print the record event done."); +#endif // CONFIG_IEEE802154_RECORD_EVENT + +#if CONFIG_IEEE802154_RECORD_STATE + ESP_EARLY_LOGW(IEEE802154_TAG, "Print the record state, current state index: %d", g_ieee802154_probe.state_index); + for (uint8_t i = 0; i < IEEE802154_ASSERT_RECORD_STATE_SIZE; i++) { + ESP_EARLY_LOGW(IEEE802154_TAG, "index %2d: line:%5s, state:%10s, timestamp: %lld", + i, g_ieee802154_probe.state[i].line_str, + ieee802154_state_string[g_ieee802154_probe.state[i].state], + g_ieee802154_probe.state[i].timestamp); + } + ESP_EARLY_LOGW(IEEE802154_TAG,"Print the record state done."); +#endif // CONFIG_IEEE802154_RECORD_STATE + +#if CONFIG_IEEE802154_RECORD_CMD + ESP_EARLY_LOGW(IEEE802154_TAG, "Print the record cmd, current cmd index: %d", g_ieee802154_probe.cmd_index); + for (uint8_t i = 0; i < IEEE802154_ASSERT_RECORD_CMD_SIZE; i++) { + ESP_EARLY_LOGW(IEEE802154_TAG, "index %2d: line:%5s, cmd:%10s, timestamp: %lld", + i, g_ieee802154_probe.cmd[i].line_str, + ieee802154_get_cmd_string(g_ieee802154_probe.cmd[i].cmd), + g_ieee802154_probe.cmd[i].timestamp); + } + ESP_EARLY_LOGW(IEEE802154_TAG,"Print the record cmd done."); +#endif // CONFIG_IEEE802154_RECORD_CMD + +#if CONFIG_IEEE802154_RECORD_ABORT + ESP_EARLY_LOGW(IEEE802154_TAG, "Print the record abort, current abort index: %d", g_ieee802154_probe.abort_index); + for (uint8_t i = 0; i < IEEE802154_ASSERT_RECORD_ABORT_SIZE; i++) { + if (g_ieee802154_probe.abort[i].is_tx_abort) { + ESP_EARLY_LOGW(IEEE802154_TAG, "index %2d: tx abort: %4x, %15s, timestamp: %lld", + i, g_ieee802154_probe.abort[i].abort_reason.tx, + ieee80154_tx_abort_reason_string[g_ieee802154_probe.abort[i].abort_reason.tx], + g_ieee802154_probe.abort[i].timestamp); + } else { + ESP_EARLY_LOGW(IEEE802154_TAG, "index %2d: rx abort: %4x, %15s, timestamp: %lld", + i, g_ieee802154_probe.abort[i].abort_reason.rx, + ieee80154_rx_abort_reason_string[g_ieee802154_probe.abort[i].abort_reason.rx], + g_ieee802154_probe.abort[i].timestamp); + } + } + ESP_EARLY_LOGW(IEEE802154_TAG,"Print the record abort done."); +#endif // CONFIG_IEEE802154_RECORD_ABORT +} +#endif // CONFIG_IEEE802154_ASSERT + +#if CONFIG_IEEE802154_TXRX_STATISTIC +static ieee802154_txrx_statistic_t s_ieee802154_txrx_statistic; + +void ieee802154_txrx_statistic_clear(void) +{ + memset(&s_ieee802154_txrx_statistic, 0, sizeof(ieee802154_txrx_statistic_t)); +} + +void ieee802154_txrx_statistic(ieee802154_ll_events events) +{ + if (events == IEEE802154_EVENT_TX_DONE) { + s_ieee802154_txrx_statistic.tx.done_nums++; + } else if (events == IEEE802154_EVENT_RX_DONE) { + s_ieee802154_txrx_statistic.rx.done_nums++; + } + s_ieee802154_txrx_statistic.tx.abort.cca_busy_nums += ieee802154_ll_get_cca_busy_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_CCA_BUSY_CNT_CLEAR); + s_ieee802154_txrx_statistic.tx.abort.tx_security_error_nums += ieee802154_ll_get_tx_security_error_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_TX_SECURITY_ERROR_CNT_CLEAR); + + // Do not record TX_BREAK_COEX_ERR due to ZB-105. + + s_ieee802154_txrx_statistic.tx.abort.rx_ack_timeout_nums += ieee802154_ll_get_rx_ack_timeout_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_RX_ACK_TIMEOUT_CNT_CLEAR); + s_ieee802154_txrx_statistic.tx.abort.rx_ack_coex_break_nums += ieee802154_ll_get_rx_ack_abort_coex_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_RX_ACK_ABORT_COEX_CNT_CLEAR); + s_ieee802154_txrx_statistic.tx.abort.cca_failed_nums += ieee802154_ll_get_cca_fail_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_CCA_FAIL_CNT_CLEAR); + s_ieee802154_txrx_statistic.rx.abort.tx_ack_coex_break_nums += ieee802154_ll_get_tx_ack_abort_coex_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_TX_ACK_ABORT_COEX_CNT_CLEAR); + s_ieee802154_txrx_statistic.rx.abort.rx_restart_nums += ieee802154_ll_get_rx_restart_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_RX_RESTART_CNT_CLEAR); + s_ieee802154_txrx_statistic.rx.abort.rx_coex_break_nums += ieee802154_ll_get_rx_abort_coex_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_RX_ABORT_COEX_CNT_CLEAR); + s_ieee802154_txrx_statistic.rx.abort.no_rss_nums += ieee802154_ll_get_no_rss_detect_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_NO_RSS_DETECT_CNT_CLEAR); + s_ieee802154_txrx_statistic.rx.abort.filter_fail_nums += ieee802154_ll_get_rx_fliter_fail_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_RX_FILTER_FAIL_CNT_CLEAR); + s_ieee802154_txrx_statistic.rx.abort.ed_abort_nums += ieee802154_ll_get_ed_abort_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_ED_ABORT_CNT_CLEAR); + s_ieee802154_txrx_statistic.rx.abort.crc_error_nums += ieee802154_ll_get_crc_error_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_CRC_ERROR_CNT_CLEAR); + s_ieee802154_txrx_statistic.rx.abort.sfd_timeout_nums += ieee802154_ll_get_sfd_timeout_cnt(); + ieee802154_ll_clear_debug_cnt(IEEE802154_SFD_TIMEOUT_CNT_CLEAR); +} + +void ieee802154_tx_nums_update(void) +{ + s_ieee802154_txrx_statistic.tx.nums++; +} + +void ieee802154_tx_deferred_nums_update(void) +{ + s_ieee802154_txrx_statistic.tx.deferred_nums++; +} + +void ieee802154_tx_break_coex_nums_update(void) +{ + s_ieee802154_txrx_statistic.tx.abort.tx_coex_break_nums++; +} + +void ieee802154_txrx_statistic_print(void) +{ + uint64_t tx_success_nums = s_ieee802154_txrx_statistic.tx.done_nums - s_ieee802154_txrx_statistic.tx.abort.rx_ack_coex_break_nums - s_ieee802154_txrx_statistic.tx.abort.rx_ack_timeout_nums; + uint64_t tx_abort_nums = s_ieee802154_txrx_statistic.tx.abort.rx_ack_coex_break_nums + s_ieee802154_txrx_statistic.tx.abort.rx_ack_timeout_nums + + s_ieee802154_txrx_statistic.tx.abort.tx_coex_break_nums + s_ieee802154_txrx_statistic.tx.abort.tx_security_error_nums + + s_ieee802154_txrx_statistic.tx.abort.cca_failed_nums + s_ieee802154_txrx_statistic.tx.abort.cca_busy_nums; + + uint64_t tx_nums = s_ieee802154_txrx_statistic.tx.nums; + uint64_t tx_direct_num = tx_nums - s_ieee802154_txrx_statistic.tx.deferred_nums; + + float tx_success_ratio = (tx_nums > 0 ? ((float)tx_success_nums / tx_nums) : 0); + float tx_done_ratio = (tx_nums > 0 ? ((float)s_ieee802154_txrx_statistic.tx.done_nums / tx_nums) : 0); + float tx_abort_ratio = (tx_nums > 0 ? ((float)tx_abort_nums / tx_nums) : 0); + + float tx_direct_num_ratio = (tx_nums > 0 ? ((float)tx_direct_num / tx_nums) : 0); + float tx_deferred_num_ratio = (tx_nums > 0 ? ((float)s_ieee802154_txrx_statistic.tx.deferred_nums / tx_nums) : 0); + + float tx_abort_rx_ack_coex_break_ratio = (tx_nums > 0 ? ((float)s_ieee802154_txrx_statistic.tx.abort.rx_ack_coex_break_nums / tx_nums) : 0); + float tx_abort_rx_ack_timeout_ratio = (tx_nums > 0 ? ((float)s_ieee802154_txrx_statistic.tx.abort.rx_ack_timeout_nums / tx_nums) : 0); + float tx_abort_tx_coex_break_ratio = (tx_nums > 0 ? ((float)s_ieee802154_txrx_statistic.tx.abort.tx_coex_break_nums / tx_nums) : 0); + float tx_abort_tx_security_error_ratio = (tx_nums > 0 ? ((float)s_ieee802154_txrx_statistic.tx.abort.tx_security_error_nums / tx_nums) : 0); + float tx_abort_cca_failed_ratio = (tx_nums > 0 ? ((float)s_ieee802154_txrx_statistic.tx.abort.cca_failed_nums / tx_nums) : 0); + float tx_abort_cca_busy_ratio = (tx_nums > 0 ? ((float)s_ieee802154_txrx_statistic.tx.abort.cca_busy_nums / tx_nums) : 0); + + uint64_t rx_abort_nums = s_ieee802154_txrx_statistic.rx.abort.tx_ack_coex_break_nums + s_ieee802154_txrx_statistic.rx.abort.sfd_timeout_nums + + s_ieee802154_txrx_statistic.rx.abort.crc_error_nums + s_ieee802154_txrx_statistic.rx.abort.filter_fail_nums + + s_ieee802154_txrx_statistic.rx.abort.no_rss_nums + s_ieee802154_txrx_statistic.rx.abort.rx_coex_break_nums + + s_ieee802154_txrx_statistic.rx.abort.rx_restart_nums + s_ieee802154_txrx_statistic.rx.abort.ed_abort_nums; + uint64_t rx_success_nums = s_ieee802154_txrx_statistic.rx.done_nums - s_ieee802154_txrx_statistic.rx.abort.tx_ack_coex_break_nums; + + + ESP_LOGW(IEEE802154_TAG, "+--------------------+-----------------------------------+--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-10s%-15llu%9.2f%%|%-25s%-15llu%9.2f%%|", "", "Done:", s_ieee802154_txrx_statistic.tx.done_nums, tx_done_ratio*100, "Success:", tx_success_nums, tx_success_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-15llu%9.2f%%|", "", "", "tx_direct_num:", tx_direct_num, tx_direct_num_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-15llu%9.2f%%|", "", "", "tx_deferred_num:", s_ieee802154_txrx_statistic.tx.deferred_nums, tx_deferred_num_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+ +-----------------------------------+--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-15llu%9.2f%%|", "", "", "rx_ack_coex_break:", s_ieee802154_txrx_statistic.tx.abort.rx_ack_coex_break_nums, tx_abort_rx_ack_coex_break_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-15llu%9.2f%%|", "", "", "rx_ack_timeout:", s_ieee802154_txrx_statistic.tx.abort.rx_ack_timeout_nums, tx_abort_rx_ack_timeout_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-5s%-15llu|%-10s%-15llu%9.2f%%|%-25s%-15llu%9.2f%%|", "TX:", s_ieee802154_txrx_statistic.tx.nums, "Abort", tx_abort_nums, tx_abort_ratio*100, "tx_coex_break:", s_ieee802154_txrx_statistic.tx.abort.tx_coex_break_nums, tx_abort_tx_coex_break_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-15llu%9.2f%%|", "", "", "tx_security_error:", s_ieee802154_txrx_statistic.tx.abort.tx_security_error_nums, tx_abort_tx_security_error_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-15llu%9.2f%%|", "", "", "cca_failed:", s_ieee802154_txrx_statistic.tx.abort.cca_failed_nums, tx_abort_cca_failed_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-15llu%9.2f%%|", "", "", "cca_busy:", s_ieee802154_txrx_statistic.tx.abort.cca_busy_nums, tx_abort_cca_busy_ratio*100); + ESP_LOGW(IEEE802154_TAG, "+--------------------+-----------------------------------+--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-10s%-25llu|%-25s%-25llu|", "", "Done:", s_ieee802154_txrx_statistic.rx.done_nums, "Success:", rx_success_nums); + ESP_LOGW(IEEE802154_TAG, "+ +-----------------------------------+--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-25llu|", "", "", "tx_ack_coex_break:", s_ieee802154_txrx_statistic.rx.abort.tx_ack_coex_break_nums); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-25llu|", "", "", "sfd_timeout:", s_ieee802154_txrx_statistic.rx.abort.sfd_timeout_nums); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-25llu|", "", "", "crc_error:", s_ieee802154_txrx_statistic.rx.abort.crc_error_nums); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-10s%-25llu|%-25s%-25llu|", "RX", "Abort", rx_abort_nums, "filter_fail:", s_ieee802154_txrx_statistic.rx.abort.filter_fail_nums); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-25llu|", "", "", "no_rss:", s_ieee802154_txrx_statistic.rx.abort.no_rss_nums); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-25llu|", "", "", "rx_coex_break:", s_ieee802154_txrx_statistic.rx.abort.rx_coex_break_nums); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-25llu|", "", "", "rx_restart:", s_ieee802154_txrx_statistic.rx.abort.rx_restart_nums); + ESP_LOGW(IEEE802154_TAG, "+ + +--------------------------------------------------+"); + ESP_LOGW(IEEE802154_TAG, "|%-20s|%-35s|%-25s%-25llu|", "", "", "ed_abort:", s_ieee802154_txrx_statistic.rx.abort.ed_abort_nums); + ESP_LOGW(IEEE802154_TAG, "+--------------------+-----------------------------------+--------------------------------------------------+"); +} + +#endif // CONFIG_IEEE802154_TXRX_STATISTIC + +#endif // CONFIG_IEEE802154_DEBUG diff --git a/components/ieee802154/driver/esp_ieee802154_dev.c b/components/ieee802154/driver/esp_ieee802154_dev.c new file mode 100644 index 0000000000..b91eb11a89 --- /dev/null +++ b/components/ieee802154/driver/esp_ieee802154_dev.c @@ -0,0 +1,1096 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "sdkconfig.h" +#include "freertos/portmacro.h" +#include "soc/periph_defs.h" +#include "soc/soc.h" +#include "soc/ieee802154_periph.h" +#include "esp_private/esp_modem_clock.h" +#include "esp_check.h" +#include "esp_coex_i154.h" +#include "esp_err.h" +#include "esp_log.h" +#include "esp_timer.h" +#include "esp_ieee802154_ack.h" +#include "esp_ieee802154_dev.h" +#include "esp_ieee802154_frame.h" +#include "esp_ieee802154_pib.h" +#include "esp_ieee802154_sec.h" +#include "esp_ieee802154_util.h" +#include "esp_ieee802154_timer.h" +#include "hal/ieee802154_ll.h" +#include "esp_attr.h" +#include "esp_phy_init.h" + +#if CONFIG_PM_ENABLE +#include "esp_pm.h" +#include "esp_private/esp_clk.h" +#include "esp_private/sleep_retention.h" +#include "esp_private/sleep_modem.h" +#if SOC_PM_RETENTION_HAS_CLOCK_BUG +#define IEEE802154_LINK_OWNER ENTRY(3) +#else +#define IEEE802154_LINK_OWNER ENTRY(0) | ENTRY(2) +#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG +#endif // CONFIG_PM_ENABLE + +static bool s_rf_closed = true; +#define CCA_DETECTION_TIME 8 + +extern void bt_bb_set_zb_tx_on_delay(uint16_t time); + +IEEE802154_STATIC volatile ieee802154_state_t s_ieee802154_state; +static uint8_t *s_tx_frame = NULL; +#define IEEE802154_RX_FRAME_SIZE (127 + 1 + 1) // +1: len, +1: for dma test + +// +1: for the stub buffer when the valid buffers are full. +// +// |--------------------VB[0]--------------------| +// |--------------------VB[1]--------------------| +// |--------------------VB[2]--------------------| +// |--------------------VB[3]--------------------| +// |--------------------.....--------------------| +// |-----VB[CONFIG_IEEE802154_RX_BUFFER_SIZE]----| +// |---------------------STUB--------------------| +// +// VB: Valid buffer, used for storing the frame received by HW. +// STUB : Stub buffer, used when all valid buffers are under processing, the received frame will be dropped. +static uint8_t s_rx_frame[CONFIG_IEEE802154_RX_BUFFER_SIZE + 1][IEEE802154_RX_FRAME_SIZE]; +static esp_ieee802154_frame_info_t s_rx_frame_info[CONFIG_IEEE802154_RX_BUFFER_SIZE + 1]; + +static bool s_needs_next_operation = false; + +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 s_ieee802154_isr_handle = NULL; + +static esp_err_t ieee802154_sleep_init(void); +static esp_err_t ieee802154_sleep_deinit(void); +#define NEEDS_NEXT_OPT(a) do {s_needs_next_operation = a;} while(0) +static esp_err_t ieee802154_transmit_internal(const uint8_t *frame, bool cca); + +#if !CONFIG_IEEE802154_TEST +typedef struct { + const uint8_t *frame; + bool cca; +} pending_tx_t; +static pending_tx_t s_pending_tx = { 0 }; +#endif + +static void ieee802154_receive_done(uint8_t *data, esp_ieee802154_frame_info_t *frame_info) +{ + // If the RX done packet is written in the stub buffer, drop it silently. + if (s_rx_index != CONFIG_IEEE802154_RX_BUFFER_SIZE) { + // Otherwise, post it to the upper layer. + // Ignore bit8 for the frame length, due to the max frame length is 127 based 802.15.4 spec. + data[0] = data[0] & 0x7f; + frame_info->process = true; + esp_ieee802154_receive_done(data, frame_info); + } +} + +static void ieee802154_transmit_done(const uint8_t *frame, const uint8_t *ack, esp_ieee802154_frame_info_t *ack_frame_info) +{ + if (ack && ack_frame_info) { + if (s_rx_index == CONFIG_IEEE802154_RX_BUFFER_SIZE) { + esp_ieee802154_transmit_failed(frame, ESP_IEEE802154_TX_ERR_NO_ACK); + } else { + ack_frame_info->process = true; + esp_ieee802154_transmit_done(frame, ack, ack_frame_info); + } + } else { + esp_ieee802154_transmit_done(frame, ack, ack_frame_info); + } +} + +esp_err_t ieee802154_receive_handle_done(const uint8_t *data) +{ + uint16_t size = data - &s_rx_frame[0][0]; + if ((size % IEEE802154_RX_FRAME_SIZE) != 0 + || (size / IEEE802154_RX_FRAME_SIZE) >= CONFIG_IEEE802154_RX_BUFFER_SIZE) { + return ESP_FAIL; + } + s_rx_frame_info[size / IEEE802154_RX_FRAME_SIZE].process = false; + return ESP_OK; +} + +static IRAM_ATTR void event_end_process(void) +{ + ieee802154_etm_channel_clear(IEEE802154_ETM_CHANNEL0); + ieee802154_etm_channel_clear(IEEE802154_ETM_CHANNEL1); + ieee802154_ll_set_transmit_security(false); + ieee802154_timer0_stop(); +} + +#if !CONFIG_IEEE802154_TEST +static IRAM_ATTR void receive_ack_timeout_timer_start(uint32_t duration) +{ + ieee802154_ll_enable_events(IEEE802154_EVENT_TIMER0_OVERFLOW); + ieee802154_timer0_set_threshold(duration); + ieee802154_timer0_start(); +} +#endif + +static IEEE802154_NOINLINE void ieee802154_rx_frame_info_update(void) +{ + uint8_t len = s_rx_frame[s_rx_index][0]; + int8_t rssi = s_rx_frame[s_rx_index][len - 1]; // crc is not written to rx buffer + uint8_t lqi = s_rx_frame[s_rx_index][len]; + + s_rx_frame_info[s_rx_index].channel = ieee802154_freq_to_channel(ieee802154_ll_get_freq()); + s_rx_frame_info[s_rx_index].rssi = rssi + IEEE802154_RSSI_COMPENSATION_VALUE; + s_rx_frame_info[s_rx_index].lqi = lqi; + + s_recent_rx_frame_info_index = s_rx_index; +} + +int8_t ieee802154_get_recent_rssi(void) +{ + return s_rx_frame_info[s_recent_rx_frame_info_index].rssi; +} + +uint8_t ieee802154_get_recent_lqi(void) +{ + return s_rx_frame_info[s_recent_rx_frame_info_index].lqi; +} + +IEEE802154_STATIC IEEE802154_NOINLINE void set_next_rx_buffer(void) +{ + uint8_t* next_rx_buffer = NULL; + uint8_t index = 0; + if (s_rx_index != CONFIG_IEEE802154_RX_BUFFER_SIZE && s_rx_frame_info[s_rx_index].process == false) { + // If buffer is not full, and current index is empty, set it to hardware. + next_rx_buffer = s_rx_frame[s_rx_index]; + } else { + // Otherwise, trave the buffer to find an empty one. + // Notice, the s_rx_index + 1 is more like an empty one, so check it first. + for (uint8_t i = 1; i <= CONFIG_IEEE802154_RX_BUFFER_SIZE; i++) { + index = (i + s_rx_index) % CONFIG_IEEE802154_RX_BUFFER_SIZE; + if (s_rx_frame_info[index].process == true) { + continue; + } else { + s_rx_index = index; + next_rx_buffer = s_rx_frame[s_rx_index]; + break; + } + } + } + // If all buffer is under processing by the upper layer, we set the stub buffer, and + // will not post the received frame to the upper layer. + if (!next_rx_buffer) { + s_rx_index = CONFIG_IEEE802154_RX_BUFFER_SIZE; + next_rx_buffer = s_rx_frame[CONFIG_IEEE802154_RX_BUFFER_SIZE]; +#if CONFIG_IEEE802154_DEBUG + ESP_EARLY_LOGW(IEEE802154_TAG, "Rx buffer full."); +#endif + } + ieee802154_ll_set_rx_addr(next_rx_buffer); +} + +IEEE802154_NOINLINE static bool stop_rx(void) +{ + ieee802154_ll_events events; + + ieee802154_set_cmd(IEEE802154_CMD_STOP); + + events = ieee802154_ll_get_events(); + if (events & IEEE802154_EVENT_RX_DONE) { + ieee802154_receive_done((uint8_t *)s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); + } + + ieee802154_ll_clear_events(IEEE802154_EVENT_RX_DONE | IEEE802154_EVENT_RX_ABORT | IEEE802154_EVENT_RX_SFD_DONE); + + return true; +} + +IEEE802154_NOINLINE static bool stop_tx_ack(void) +{ + ieee802154_set_cmd(IEEE802154_CMD_STOP); + + ieee802154_receive_done((uint8_t *)s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); + + ieee802154_ll_clear_events(IEEE802154_EVENT_ACK_TX_DONE | IEEE802154_EVENT_RX_ABORT | IEEE802154_EVENT_TX_SFD_DONE); // ZB-81: clear TX_SFD_DONE event + + return true; +} + +IEEE802154_NOINLINE static bool stop_tx(void) +{ + ieee802154_ll_events events; + + ieee802154_set_cmd(IEEE802154_CMD_STOP); + + events = ieee802154_ll_get_events(); + + if (s_ieee802154_state == IEEE802154_STATE_TX_ENH_ACK) { + // if current operation is sending 2015 Enh-ack, SW should create the receive-done event. + ieee802154_receive_done((uint8_t *)s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); + ieee802154_ll_clear_events(IEEE802154_EVENT_ACK_TX_DONE); + } else if ((events & IEEE802154_EVENT_TX_DONE) && (!ieee802154_frame_is_ack_required(s_tx_frame) || !ieee802154_ll_get_rx_auto_ack())) { + // if the tx is already done, and the frame is not ack request OR auto ack rx is disabled. + ieee802154_transmit_done(s_tx_frame, NULL, NULL); + } else { + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_ABORT); + } + + ieee802154_ll_clear_events(IEEE802154_EVENT_TX_DONE | IEEE802154_EVENT_TX_ABORT | IEEE802154_EVENT_TX_SFD_DONE); + + return true; +} + +IEEE802154_NOINLINE static bool stop_cca(void) +{ + ieee802154_set_cmd(IEEE802154_CMD_STOP); + ieee802154_ll_clear_events(IEEE802154_EVENT_ED_DONE | IEEE802154_EVENT_RX_ABORT); + return true; +} + +IEEE802154_NOINLINE static bool stop_tx_cca(void) +{ + stop_tx(); // in case the transmission already started + ieee802154_ll_clear_events(IEEE802154_EVENT_TX_ABORT); + return true; +} + +IEEE802154_NOINLINE static bool stop_rx_ack(void) +{ + ieee802154_ll_events events; + + ieee802154_set_cmd(IEEE802154_CMD_STOP); + + events = ieee802154_ll_get_events(); + + ieee802154_timer0_stop(); + ieee802154_ll_disable_events(IEEE802154_EVENT_TIMER0_OVERFLOW); + + if (events & IEEE802154_EVENT_ACK_RX_DONE) { + ieee802154_transmit_done(s_tx_frame, (uint8_t *)&s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); + } else { + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_NO_ACK); + } + + ieee802154_ll_clear_events(IEEE802154_EVENT_ACK_RX_DONE | IEEE802154_EVENT_RX_SFD_DONE | IEEE802154_EVENT_TX_ABORT); + + return true; +} + +IEEE802154_NOINLINE static bool stop_ed(void) +{ + ieee802154_set_cmd(IEEE802154_CMD_STOP); + + ieee802154_ll_clear_events(IEEE802154_EVENT_ED_DONE | IEEE802154_EVENT_RX_ABORT); + + return true; +} + +IEEE802154_NOINLINE IEEE802154_STATIC bool stop_current_operation(void) +{ + event_end_process(); + switch (s_ieee802154_state) { + case IEEE802154_STATE_DISABLE: + break; + + case IEEE802154_STATE_IDLE: + ieee802154_ll_set_cmd(IEEE802154_CMD_STOP); + break; + + case IEEE802154_STATE_SLEEP: + // Do nothing + break; + + case IEEE802154_STATE_RX: + stop_rx(); + break; + + case IEEE802154_STATE_TX_ACK: + stop_tx_ack(); + break; + + case IEEE802154_STATE_TX_CCA: + stop_tx_cca(); + break; + case IEEE802154_STATE_CCA: + stop_cca(); + break; + + case IEEE802154_STATE_TX: + case IEEE802154_STATE_TX_ENH_ACK: + stop_tx(); + break; + + case IEEE802154_STATE_RX_ACK: + stop_rx_ack(); + break; + + case IEEE802154_STATE_ED: + stop_ed(); + break; + + default: + IEEE802154_ASSERT(false); + break; + } + + return true; +} + +FORCE_INLINE_ATTR void extcoex_tx_stage_start(void) +{ +#if CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE + esp_coex_ieee802154_extcoex_tx_stage(); +#endif +} + +FORCE_INLINE_ATTR void extcoex_rx_stage_start(void) +{ +#if CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE + esp_coex_ieee802154_extcoex_rx_stage(); +#endif +} + +static void enable_rx(void) +{ + extcoex_rx_stage_start(); + set_next_rx_buffer(); + IEEE802154_SET_TXRX_PTI(IEEE802154_SCENE_RX); + + ieee802154_set_cmd(IEEE802154_CMD_RX_START); + + ieee802154_set_state(IEEE802154_STATE_RX); +} + +static IRAM_ATTR void next_operation(void) +{ +#if !CONFIG_IEEE802154_TEST + if (s_pending_tx.frame) { + // Here the driver needs to recover the setting of rx aborts, see function `ieee802154_transmit`. + ieee802154_ll_enable_rx_abort_events(BIT(IEEE802154_RX_ABORT_BY_TX_ACK_TIMEOUT - 1) | BIT(IEEE802154_RX_ABORT_BY_TX_ACK_COEX_BREAK - 1)); + // Clear the RX abort event again for avoiding the risk if there are still some rx abort events created after last isr process. + ieee802154_ll_clear_events(IEEE802154_EVENT_RX_ABORT); + ieee802154_transmit_internal(s_pending_tx.frame, s_pending_tx.cca); + s_pending_tx.frame = NULL; + } else +#endif + { + if (ieee802154_pib_get_rx_when_idle()) { + enable_rx(); + } else { + ieee802154_set_state(IEEE802154_STATE_IDLE); +#if !CONFIG_IEEE802154_TEST + ieee802154_sleep(); +#endif + } + } +} + +static void isr_handle_timer0_done(void) +{ +#if !CONFIG_IEEE802154_TEST + if (s_ieee802154_state == IEEE802154_STATE_RX_ACK) { + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_NO_ACK); + NEEDS_NEXT_OPT(true); + } +#else + esp_ieee802154_timer0_done(); +#endif +} + +static void isr_handle_timer1_done(void) +{ + // timer 1 is now unused. +#if CONFIG_IEEE802154_TEST + esp_ieee802154_timer1_done(); +#endif +} + +static IRAM_ATTR void isr_handle_tx_done(void) +{ + event_end_process(); + if (s_ieee802154_state == IEEE802154_STATE_TEST_TX) { + ieee802154_transmit_done(s_tx_frame, NULL, NULL); + NEEDS_NEXT_OPT(true); + } else if (s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA) { + if (ieee802154_frame_is_ack_required(s_tx_frame) && ieee802154_ll_get_rx_auto_ack()) { + extcoex_rx_stage_start(); + ieee802154_set_state(IEEE802154_STATE_RX_ACK); +#if !CONFIG_IEEE802154_TEST + receive_ack_timeout_timer_start(200000); // 200ms for receive ack timeout +#endif + NEEDS_NEXT_OPT(false); + } else { + ieee802154_transmit_done(s_tx_frame, NULL, NULL); + NEEDS_NEXT_OPT(true); + } + } +} + +static IRAM_ATTR void isr_handle_rx_done(void) +{ + event_end_process(); + ieee802154_rx_frame_info_update(); + + if (s_ieee802154_state == IEEE802154_STATE_RX) { + if (ieee802154_frame_is_ack_required(s_rx_frame[s_rx_index]) && ieee802154_frame_get_version(s_rx_frame[s_rx_index]) <= IEEE802154_FRAME_VERSION_1 + && ieee802154_ll_get_tx_auto_ack()) { + extcoex_tx_stage_start(); + // auto tx ack only works for the frame with version 0b00 and 0b01 + s_rx_frame_info[s_rx_index].pending = ieee802154_ack_config_pending_bit(s_rx_frame[s_rx_index]); + ieee802154_set_state(IEEE802154_STATE_TX_ACK); + NEEDS_NEXT_OPT(false); + } else if (ieee802154_frame_is_ack_required(s_rx_frame[s_rx_index]) && ieee802154_frame_get_version(s_rx_frame[s_rx_index]) == IEEE802154_FRAME_VERSION_2 + && ieee802154_ll_get_tx_enhance_ack()) { + s_rx_frame_info[s_rx_index].pending = ieee802154_ack_config_pending_bit(s_rx_frame[s_rx_index]); + // For 2015 enh-ack, SW should generate an enh-ack then send it manually + 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) { + extcoex_tx_stage_start(); +#if !CONFIG_IEEE802154_TEST + // Send the Enh-Ack frame if generator succeeds. + ieee802154_ll_set_tx_addr(s_enh_ack_frame); + s_tx_frame = s_enh_ack_frame; + ieee802154_sec_update(); + ieee802154_ll_enhack_generate_done_notify(); + ieee802154_set_state(IEEE802154_STATE_TX_ENH_ACK); +#endif + NEEDS_NEXT_OPT(false); + } else { + // Stop current process if generator returns errors. + ieee802154_set_cmd(IEEE802154_CMD_STOP); + ieee802154_receive_done((uint8_t *)s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); + NEEDS_NEXT_OPT(true); + } + } else { + ieee802154_receive_done((uint8_t *)s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); + NEEDS_NEXT_OPT(true); + } + } +} + +static IRAM_ATTR void isr_handle_ack_tx_done(void) +{ + extcoex_rx_stage_start(); + ieee802154_receive_done((uint8_t *)s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); + NEEDS_NEXT_OPT(true); +} + +static IRAM_ATTR void isr_handle_ack_rx_done(void) +{ + ieee802154_timer0_stop(); + ieee802154_ll_disable_events(IEEE802154_EVENT_TIMER0_OVERFLOW); + ieee802154_rx_frame_info_update(); + ieee802154_transmit_done(s_tx_frame, (uint8_t *)&s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); + NEEDS_NEXT_OPT(true); +} + +static IRAM_ATTR void isr_handle_rx_phase_rx_abort(ieee802154_ll_rx_abort_reason_t rx_abort_reason) +{ + event_end_process(); + uint32_t rx_status = ieee802154_ll_get_rx_status(); + switch (rx_abort_reason) { + case IEEE802154_RX_ABORT_BY_RX_STOP: + case IEEE802154_RX_ABORT_BY_TX_ACK_STOP: + case IEEE802154_RX_ABORT_BY_ED_STOP: + // do nothing + break; + case IEEE802154_RX_ABORT_BY_SFD_TIMEOUT: + case IEEE802154_RX_ABORT_BY_CRC_ERROR: + case IEEE802154_RX_ABORT_BY_INVALID_LEN: + case IEEE802154_RX_ABORT_BY_FILTER_FAIL: + case IEEE802154_RX_ABORT_BY_NO_RSS: + case IEEE802154_RX_ABORT_BY_UNEXPECTED_ACK: + case IEEE802154_RX_ABORT_BY_RX_RESTART: + case IEEE802154_RX_ABORT_BY_COEX_BREAK: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_RX); +#if CONFIG_IEEE802154_TEST + esp_ieee802154_receive_failed(rx_status); +#endif + break; + case IEEE802154_RX_ABORT_BY_ED_ABORT: + case IEEE802154_RX_ABORT_BY_ED_COEX_REJECT: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_ED || s_ieee802154_state == IEEE802154_STATE_CCA); + esp_ieee802154_ed_failed(rx_status); + break; + case IEEE802154_RX_ABORT_BY_TX_ACK_TIMEOUT: + case IEEE802154_RX_ABORT_BY_TX_ACK_COEX_BREAK: + case IEEE802154_RX_ABORT_BY_ENHACK_SECURITY_ERROR: + return; + default: + IEEE802154_ASSERT(false); + } + NEEDS_NEXT_OPT(true); +} + +static IRAM_ATTR void isr_handle_tx_ack_phase_rx_abort(ieee802154_ll_rx_abort_reason_t rx_abort_reason) +{ + event_end_process(); +#if CONFIG_IEEE802154_TEST + uint32_t rx_status = ieee802154_ll_get_rx_status(); +#endif + switch (rx_abort_reason) { + case IEEE802154_RX_ABORT_BY_RX_STOP: + case IEEE802154_RX_ABORT_BY_TX_ACK_STOP: + case IEEE802154_RX_ABORT_BY_ED_STOP: + case IEEE802154_RX_ABORT_BY_SFD_TIMEOUT: + case IEEE802154_RX_ABORT_BY_CRC_ERROR: + case IEEE802154_RX_ABORT_BY_INVALID_LEN: + case IEEE802154_RX_ABORT_BY_FILTER_FAIL: + case IEEE802154_RX_ABORT_BY_NO_RSS: + case IEEE802154_RX_ABORT_BY_UNEXPECTED_ACK: + case IEEE802154_RX_ABORT_BY_RX_RESTART: + case IEEE802154_RX_ABORT_BY_COEX_BREAK: + case IEEE802154_RX_ABORT_BY_ED_ABORT: + case IEEE802154_RX_ABORT_BY_ED_COEX_REJECT: + return; + case IEEE802154_RX_ABORT_BY_TX_ACK_TIMEOUT: + case IEEE802154_RX_ABORT_BY_TX_ACK_COEX_BREAK: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_TX_ACK || s_ieee802154_state == IEEE802154_STATE_TX_ENH_ACK); +#if !CONFIG_IEEE802154_TEST + ieee802154_receive_done((uint8_t *)s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); +#else + esp_ieee802154_receive_failed(rx_status); +#endif + break; + case IEEE802154_RX_ABORT_BY_ENHACK_SECURITY_ERROR: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_TX_ENH_ACK); +#if !CONFIG_IEEE802154_TEST + ieee802154_receive_done((uint8_t *)s_rx_frame[s_rx_index], &s_rx_frame_info[s_rx_index]); +#else + esp_ieee802154_receive_failed(rx_status); +#endif + break; + default: + IEEE802154_ASSERT(false); + } + NEEDS_NEXT_OPT(true); +} + +static IRAM_ATTR void isr_handle_tx_abort(ieee802154_ll_tx_abort_reason_t tx_abort_reason) +{ + event_end_process(); + switch (tx_abort_reason) { + case IEEE802154_TX_ABORT_BY_RX_ACK_STOP: + case IEEE802154_TX_ABORT_BY_TX_STOP: + // do nothing + break; + case IEEE802154_TX_ABORT_BY_RX_ACK_SFD_TIMEOUT: + case IEEE802154_TX_ABORT_BY_RX_ACK_CRC_ERROR: + case IEEE802154_TX_ABORT_BY_RX_ACK_INVALID_LEN: + case IEEE802154_TX_ABORT_BY_RX_ACK_FILTER_FAIL: + case IEEE802154_TX_ABORT_BY_RX_ACK_NO_RSS: + case IEEE802154_TX_ABORT_BY_RX_ACK_COEX_BREAK: + case IEEE802154_TX_ABORT_BY_RX_ACK_TYPE_NOT_ACK: + case IEEE802154_TX_ABORT_BY_RX_ACK_RESTART: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_RX_ACK); + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_INVALID_ACK); + NEEDS_NEXT_OPT(false); + break; + // The above events are only used in test mode. + case IEEE802154_TX_ABORT_BY_RX_ACK_TIMEOUT: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_RX_ACK); + ieee802154_ll_disable_events(IEEE802154_EVENT_TIMER0_OVERFLOW); + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_NO_ACK); + NEEDS_NEXT_OPT(true); + break; + case IEEE802154_TX_ABORT_BY_TX_COEX_BREAK: +#if CONFIG_ESP_COEX_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + esp_coex_ieee802154_coex_break_notify(); +#endif + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA); + IEEE802154_TX_BREAK_COEX_NUMS_UPDATE(); + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_COEXIST); + NEEDS_NEXT_OPT(true); + break; + case IEEE802154_TX_ABORT_BY_TX_SECURITY_ERROR: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA); + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_SECURITY); + NEEDS_NEXT_OPT(true); + break; + case IEEE802154_TX_ABORT_BY_CCA_FAILED: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_TX_CCA); + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_ABORT); + NEEDS_NEXT_OPT(true); + break; + case IEEE802154_TX_ABORT_BY_CCA_BUSY: + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_TX_CCA); + esp_ieee802154_transmit_failed(s_tx_frame, ESP_IEEE802154_TX_ERR_CCA_BUSY); + NEEDS_NEXT_OPT(true); + break; + default: + IEEE802154_ASSERT(false); + break; + } +} + +static IRAM_ATTR void isr_handle_ed_done(void) +{ + if (s_ieee802154_state == IEEE802154_STATE_CCA) { + esp_ieee802154_cca_done(ieee802154_ll_is_cca_busy()); + } else if (s_ieee802154_state == IEEE802154_STATE_ED) { + esp_ieee802154_energy_detect_done(ieee802154_ll_get_ed_rss()); + } + + NEEDS_NEXT_OPT(true); +} + +IEEE802154_STATIC IRAM_ATTR void ieee802154_enter_critical(void) +{ + portENTER_CRITICAL(&s_ieee802154_spinlock); +} + +IEEE802154_STATIC IRAM_ATTR void ieee802154_exit_critical(void) +{ + portEXIT_CRITICAL(&s_ieee802154_spinlock); +} + +IEEE802154_NOINLINE static void ieee802154_isr(void *arg) +{ + ieee802154_enter_critical(); + ieee802154_ll_events events = ieee802154_ll_get_events(); + ieee802154_ll_rx_abort_reason_t rx_abort_reason = ieee802154_ll_get_rx_abort_reason(); + ieee802154_ll_tx_abort_reason_t tx_abort_reason = ieee802154_ll_get_tx_abort_reason(); + + IEEE802154_PROBE(events); + + ieee802154_ll_clear_events(events); + + if (events & IEEE802154_EVENT_RX_ABORT) { + // First phase rx abort process, will clear RX_ABORT event in second. + isr_handle_rx_phase_rx_abort(rx_abort_reason); + } + + if (events & IEEE802154_EVENT_RX_SFD_DONE) { + // IEEE802154_STATE_TX && IEEE802154_STATE_TX_CCA && IEEE802154_STATE_TX_ENH_ACK for isr processing delay + 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); + + s_rx_frame_info[s_rx_index].timestamp = esp_timer_get_time(); + esp_ieee802154_receive_sfd_done(); + + events &= (uint16_t)(~IEEE802154_EVENT_RX_SFD_DONE); + } + + if (events & IEEE802154_EVENT_TX_SFD_DONE) { + // ZB-81: IEEE802154_STATE_TX_ACK is also a possible state + 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); + + esp_ieee802154_transmit_sfd_done(s_tx_frame); + + events &= (uint16_t)(~IEEE802154_EVENT_TX_SFD_DONE); + } + + if (events & IEEE802154_EVENT_TX_DONE) { + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_TX || s_ieee802154_state == IEEE802154_STATE_TX_CCA || s_ieee802154_state == IEEE802154_STATE_TEST_TX); + + isr_handle_tx_done(); + + events &= (uint16_t)(~IEEE802154_EVENT_TX_DONE); + } + + if (events & IEEE802154_EVENT_RX_DONE) { + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_RX); + + isr_handle_rx_done(); + + events &= (uint16_t)(~IEEE802154_EVENT_RX_DONE); + } + + if (events & IEEE802154_EVENT_ACK_TX_DONE) { + // IEEE802154_STATE_RX for isr processing delay + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_TX_ACK || s_ieee802154_state == IEEE802154_STATE_RX || s_ieee802154_state == IEEE802154_STATE_TX_ENH_ACK); + + isr_handle_ack_tx_done(); + + events &= (uint16_t)(~IEEE802154_EVENT_ACK_TX_DONE); + } + + if (events & IEEE802154_EVENT_ACK_RX_DONE) { + // IEEE802154_STATE_TX && IEEE802154_STATE_TX_CCA && IEEE802154_STATE_TX_ENH_ACK for isr processing delay + IEEE802154_ASSERT(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); + + isr_handle_ack_rx_done(); + + events &= (uint16_t)(~IEEE802154_EVENT_ACK_RX_DONE); + } + + if (events & IEEE802154_EVENT_RX_ABORT) { + // Second phase rx abort process, clears RX_ABORT event. + isr_handle_tx_ack_phase_rx_abort(rx_abort_reason); + events &= (uint16_t)(~IEEE802154_EVENT_RX_ABORT); + } + + if (events & IEEE802154_EVENT_TX_ABORT) { + isr_handle_tx_abort(tx_abort_reason); + + events &= (uint16_t)(~IEEE802154_EVENT_TX_ABORT); + } + + if (events & IEEE802154_EVENT_ED_DONE) { + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_ED || s_ieee802154_state == IEEE802154_STATE_CCA); + + isr_handle_ed_done(); + + events &= (uint16_t)(~IEEE802154_EVENT_ED_DONE); + } + + if (events & IEEE802154_EVENT_TIMER0_OVERFLOW) { +#if !CONFIG_IEEE802154_TEST + IEEE802154_ASSERT(s_ieee802154_state == IEEE802154_STATE_RX_ACK); +#else + extern bool ieee802154_timer0_test; + IEEE802154_ASSERT(ieee802154_timer0_test || s_ieee802154_state == IEEE802154_STATE_RX_ACK); +#endif + isr_handle_timer0_done(); + + events &= (uint16_t)(~IEEE802154_EVENT_TIMER0_OVERFLOW); + } + + if (events & IEEE802154_EVENT_TIMER1_OVERFLOW) { + isr_handle_timer1_done(); + + events &= (uint16_t)(~IEEE802154_EVENT_TIMER1_OVERFLOW); + } + if (s_needs_next_operation) { + next_operation(); + s_needs_next_operation = false; + } + + // all events should be handled + IEEE802154_ASSERT(events == 0); + ieee802154_exit_critical(); +} + +void ieee802154_enable(void) +{ + modem_clock_module_enable(ieee802154_periph.module); + s_ieee802154_state = IEEE802154_STATE_IDLE; +} + +void ieee802154_disable(void) +{ + modem_clock_module_disable(ieee802154_periph.module); + ieee802154_set_state(IEEE802154_STATE_DISABLE); +} + +esp_err_t ieee802154_mac_init(void) +{ + esp_err_t ret = ESP_OK; + modem_clock_module_mac_reset(PERIPH_IEEE802154_MODULE); // reset ieee802154 MAC + ieee802154_pib_init(); + IEEE802154_TXRX_STATISTIC_CLEAR(); + + ieee802154_ll_enable_events(IEEE802154_EVENT_MASK); +#if !CONFIG_IEEE802154_TEST + ieee802154_ll_disable_events((IEEE802154_EVENT_TIMER0_OVERFLOW) | (IEEE802154_EVENT_TIMER1_OVERFLOW)); +#endif + ieee802154_ll_enable_tx_abort_events(BIT(IEEE802154_TX_ABORT_BY_RX_ACK_TIMEOUT - 1) | BIT(IEEE802154_TX_ABORT_BY_TX_COEX_BREAK - 1) | BIT(IEEE802154_TX_ABORT_BY_TX_SECURITY_ERROR - 1) | BIT(IEEE802154_TX_ABORT_BY_CCA_FAILED - 1) | BIT(IEEE802154_TX_ABORT_BY_CCA_BUSY - 1)); + ieee802154_ll_enable_rx_abort_events(BIT(IEEE802154_RX_ABORT_BY_TX_ACK_TIMEOUT - 1) | BIT(IEEE802154_RX_ABORT_BY_TX_ACK_COEX_BREAK - 1)); + + ieee802154_ll_set_ed_sample_mode(IEEE802154_ED_SAMPLE_AVG); +#if !CONFIG_IEEE802154_TEST && (CONFIG_ESP_COEX_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE) + esp_coex_ieee802154_ack_pti_set(IEEE802154_MIDDLE); + IEEE802154_SET_TXRX_PTI(IEEE802154_SCENE_IDLE); +#else + ieee802154_ll_disable_coex(); +#endif + +#if CONFIG_IDF_ENV_FPGA + bt_bb_set_zb_tx_on_delay(80); +#else + bt_bb_set_zb_tx_on_delay(50); + REG_WRITE(IEEE802154_RXON_DELAY_REG, 50); +#endif + + memset(s_rx_frame, 0, sizeof(s_rx_frame)); + + 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, &s_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"); + + return ret; +} + +esp_err_t ieee802154_mac_deinit(void) +{ + esp_err_t ret = ESP_OK; + if (s_ieee802154_isr_handle) { + ret = esp_intr_free(s_ieee802154_isr_handle); + s_ieee802154_isr_handle = NULL; + ESP_RETURN_ON_FALSE(ret == ESP_OK, ESP_FAIL, IEEE802154_TAG, "IEEE802154 MAC ISR deinit failed"); + } + ESP_RETURN_ON_FALSE(ieee802154_sleep_deinit() == ESP_OK, ESP_FAIL, IEEE802154_TAG, "IEEE802154 MAC sleep deinit failed"); + return ret; +} + +IEEE802154_STATIC void start_ed(uint32_t duration) +{ + ieee802154_ll_enable_events(IEEE802154_EVENT_ED_DONE); + ieee802154_ll_set_ed_duration(duration); + ieee802154_set_cmd(IEEE802154_CMD_ED_START); +} + +IEEE802154_STATIC void tx_init(const uint8_t *frame) +{ + IEEE802154_TX_NUMS_UPDATE(); + s_tx_frame = (uint8_t *)frame; + stop_current_operation(); + ieee802154_pib_update(); + ieee802154_sec_update(); + + ieee802154_ll_set_tx_addr(s_tx_frame); + + if (ieee802154_frame_is_ack_required(frame)) { + // set rx pointer for ack frame + set_next_rx_buffer(); + } + extcoex_tx_stage_start(); +} + +static inline esp_err_t ieee802154_transmit_internal(const uint8_t *frame, bool cca) +{ + IEEE802154_RF_ENABLE(); + ieee802154_enter_critical(); + tx_init(frame); + + IEEE802154_SET_TXRX_PTI(IEEE802154_SCENE_TX); + + if (cca) { + ieee802154_set_cmd(IEEE802154_CMD_CCA_TX_START); + ieee802154_set_state(IEEE802154_STATE_TX_CCA); + } else { + ieee802154_set_cmd(IEEE802154_CMD_TX_START); + ieee802154_set_state(IEEE802154_STATE_TX); + } + + ieee802154_exit_critical(); + return ESP_OK; +} + +esp_err_t ieee802154_transmit(const uint8_t *frame, bool cca) +{ + ESP_RETURN_ON_FALSE(frame[0] <= 127, ESP_ERR_INVALID_ARG, IEEE802154_TAG, "Invalid frame length."); +#if !CONFIG_IEEE802154_TEST + ieee802154_enter_critical(); + if ((s_ieee802154_state == IEEE802154_STATE_RX && ieee802154_ll_is_current_rx_frame()) + || s_ieee802154_state == IEEE802154_STATE_TX_ACK || s_ieee802154_state == IEEE802154_STATE_TX_ENH_ACK) { + // If the current radio is processing an RX frame or sending an ACK, do not shut down the ongoing process. + // Instead, defer the transmission of the pending TX frame. + // Once the current process is completed, the pending transmit frame will be initiated. + s_pending_tx.frame = frame; + s_pending_tx.cca = cca; + IEEE802154_TX_DEFERRED_NUMS_UPDATE(); + // Here we enable all rx interrupts due to the driver needs to know when the current RX has finished. + // Will recover the setting of rx abort in function `next_operation`. + ieee802154_ll_enable_rx_abort_events(IEEE802154_RX_ABORT_ALL); + ieee802154_exit_critical(); + return ESP_OK; + } + ieee802154_exit_critical(); +#endif + return ieee802154_transmit_internal(frame, cca); +} + +IEEE802154_NOINLINE static bool is_target_time_expired(uint32_t target, uint32_t now) +{ + return (((now - target) & (1 << 31)) == 0); +} + +esp_err_t ieee802154_transmit_at(const uint8_t *frame, bool cca, uint32_t time) +{ + ESP_RETURN_ON_FALSE(frame[0] <= 127, ESP_ERR_INVALID_ARG, IEEE802154_TAG, "Invalid frame length."); + uint32_t tx_target_time; + uint32_t current_time; + IEEE802154_RF_ENABLE(); + tx_init(frame); + IEEE802154_SET_TXRX_PTI(IEEE802154_SCENE_TX_AT); + if (cca) { + tx_target_time = time - IEEE802154_ED_TRIG_TX_RAMPUP_TIME_US; + ieee802154_set_state(IEEE802154_STATE_TX_CCA); + ieee802154_enter_critical(); + ieee802154_etm_set_event_task(IEEE802154_ETM_CHANNEL0, ETM_EVENT_TIMER0_OVERFLOW, ETM_TASK_ED_TRIG_TX); + current_time = (uint32_t)esp_timer_get_time(); + ieee802154_timer0_set_threshold((is_target_time_expired(tx_target_time, current_time) ? 0 : (tx_target_time - current_time))); //uint: 1us + ieee802154_timer0_start(); + ieee802154_exit_critical(); + } else { + tx_target_time = time - IEEE802154_TX_RAMPUP_TIME_US; + if (ieee802154_frame_get_type(frame) == IEEE802154_FRAME_TYPE_ACK && ieee802154_frame_get_version(frame) == IEEE802154_FRAME_VERSION_2) { + ieee802154_set_state(IEEE802154_STATE_TX_ENH_ACK); + } else { + ieee802154_set_state(IEEE802154_STATE_TX); + } + ieee802154_enter_critical(); + ieee802154_etm_set_event_task(IEEE802154_ETM_CHANNEL0, ETM_EVENT_TIMER0_OVERFLOW, ETM_TASK_TX_START); + current_time = (uint32_t)esp_timer_get_time(); + ieee802154_timer0_set_threshold((is_target_time_expired(tx_target_time, current_time) ? 0 : (tx_target_time - current_time))); //uint: 1us + ieee802154_timer0_start(); + ieee802154_exit_critical(); + } + + return ESP_OK; +} + +IEEE802154_STATIC void rx_init(void) +{ + stop_current_operation(); + ieee802154_pib_update(); +} + +esp_err_t ieee802154_receive(void) +{ + if (((s_ieee802154_state == IEEE802154_STATE_RX) || (s_ieee802154_state == IEEE802154_STATE_TX_ACK)) && (!ieee802154_pib_is_pending())) { + // already in rx state, don't abort current rx operation + return ESP_OK; + } + IEEE802154_RF_ENABLE(); + + ieee802154_enter_critical(); + rx_init(); + enable_rx(); + ieee802154_exit_critical(); + return ESP_OK; +} + +esp_err_t ieee802154_receive_at(uint32_t time) +{ + uint32_t rx_target_time = time - IEEE802154_RX_RAMPUP_TIME_US; + uint32_t current_time; + IEEE802154_RF_ENABLE(); + ieee802154_enter_critical(); + rx_init(); + IEEE802154_SET_TXRX_PTI(IEEE802154_SCENE_RX_AT); + set_next_rx_buffer(); + ieee802154_set_state(IEEE802154_STATE_RX); + ieee802154_etm_set_event_task(IEEE802154_ETM_CHANNEL1, ETM_EVENT_TIMER0_OVERFLOW, ETM_TASK_RX_START); + current_time = (uint32_t)esp_timer_get_time(); + ieee802154_timer0_set_threshold((is_target_time_expired(rx_target_time, current_time) ? 0 : (rx_target_time - current_time))); //uint: 1us + ieee802154_timer0_start(); + ieee802154_exit_critical(); + return ESP_OK; +} + +#if CONFIG_PM_ENABLE +static esp_err_t ieee802154_sleep_retention_init(void *arg) +{ + esp_err_t err = ESP_OK; +#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE + #define N_REGS_IEEE802154() (((IEEE802154_MAC_DATE_REG - IEEE802154_REG_BASE) / 4) + 1) + const static sleep_retention_entries_config_t ieee802154_mac_regs_retention[] = { + [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_IEEE802154_LINK(0x00), IEEE802154_REG_BASE, IEEE802154_REG_BASE, N_REGS_IEEE802154(), 0, 0), .owner = IEEE802154_LINK_OWNER }, + }; + err = sleep_retention_entries_create(ieee802154_mac_regs_retention, ARRAY_SIZE(ieee802154_mac_regs_retention), REGDMA_LINK_PRI_IEEE802154, SLEEP_RETENTION_MODULE_802154_MAC); + ESP_RETURN_ON_ERROR(err, IEEE802154_TAG, "failed to allocate memory for ieee802154 mac retention"); + ESP_LOGD(IEEE802154_TAG, "ieee802154 mac sleep retention initialization"); +#endif + return err; +} +#endif // CONFIG_PM_ENABLE + +static esp_err_t ieee802154_sleep_init(void) +{ + esp_err_t err = ESP_OK; +#if CONFIG_PM_ENABLE + sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = ieee802154_sleep_retention_init, .arg = NULL } } }; + init_param.depends.bitmap[SLEEP_RETENTION_MODULE_BT_BB >> 5] |= BIT(SLEEP_RETENTION_MODULE_BT_BB % 32); + init_param.depends.bitmap[SLEEP_RETENTION_MODULE_CLOCK_MODEM >> 5] |= BIT(SLEEP_RETENTION_MODULE_CLOCK_MODEM % 32); + err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_802154_MAC, &init_param); + if (err == ESP_OK) { + err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_802154_MAC); + } + ESP_RETURN_ON_ERROR(err, IEEE802154_TAG, "failed to create sleep retention linked list for ieee802154 mac retention"); +#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD + sleep_modem_register_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare, + sleep_modem_mac_bb_power_up_prepare); +#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD +#endif // CONFIG_PM_ENABLE + return err; +} + +static esp_err_t ieee802154_sleep_deinit(void) +{ + esp_err_t err = ESP_OK; +#if CONFIG_PM_ENABLE + err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_802154_MAC); + if (err == ESP_OK) { + err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_802154_MAC); + } +#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD + sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare, + sleep_modem_mac_bb_power_up_prepare); +#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD +#endif // CONFIG_PM_ENABLE + return err; +} + +IRAM_ATTR void ieee802154_rf_disable(void) +{ + if (s_rf_closed == false) { + esp_phy_disable(PHY_MODEM_IEEE802154); + s_rf_closed = true; + } +} + +IRAM_ATTR void ieee802154_rf_enable(void) +{ + if (s_rf_closed) { + esp_phy_enable(PHY_MODEM_IEEE802154); + s_rf_closed = false; + } +} + +esp_err_t ieee802154_sleep(void) +{ + if (ieee802154_get_state() != IEEE802154_STATE_SLEEP) { + ieee802154_enter_critical(); + stop_current_operation(); + ieee802154_set_state(IEEE802154_STATE_SLEEP); + ieee802154_exit_critical(); + IEEE802154_RF_DISABLE(); + } + return ESP_OK; +} + +esp_err_t ieee802154_energy_detect(uint32_t duration) +{ + IEEE802154_RF_ENABLE(); + ieee802154_enter_critical(); + + stop_current_operation(); + + ieee802154_pib_update(); + + start_ed(duration); + ieee802154_set_state(IEEE802154_STATE_ED); + + ieee802154_exit_critical(); + return ESP_OK; +} + +esp_err_t ieee802154_cca(void) +{ + IEEE802154_RF_ENABLE(); + ieee802154_enter_critical(); + + stop_current_operation(); + + ieee802154_pib_update(); + + start_ed(CCA_DETECTION_TIME); + ieee802154_set_state(IEEE802154_STATE_CCA); + + ieee802154_exit_critical(); + return ESP_OK; +} + +ieee802154_state_t ieee802154_get_state(void) +{ + return s_ieee802154_state; +} diff --git a/components/ieee802154/driver/esp_ieee802154_frame.c b/components/ieee802154/driver/esp_ieee802154_frame.c new file mode 100644 index 0000000000..6a55909e2d --- /dev/null +++ b/components/ieee802154/driver/esp_ieee802154_frame.c @@ -0,0 +1,417 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "esp_check.h" +#include "esp_attr.h" +#include "esp_ieee802154_dev.h" +#include "esp_ieee802154_frame.h" +#include "esp_ieee802154_util.h" + +IEEE802154_STATIC IEEE802154_INLINE bool is_security_enabled(const uint8_t *frame) +{ + return frame[IEEE802154_FRAME_SECURITY_OFFSET] & IEEE802154_FRAME_SECURITY_BIT; +} + +IEEE802154_STATIC IEEE802154_INLINE bool is_ie_present(const uint8_t *frame) +{ + return frame[IEEE802154_FRAME_IE_OFFSET] & IEEE802154_FRAME_IE_BIT; +} + +IEEE802154_STATIC IEEE802154_INLINE bool is_dsn_present(const uint8_t *frame) +{ + return ((ieee802154_frame_get_version(frame) != IEEE802154_FRAME_VERSION_2) || + !(frame[IEEE802154_FRAME_DSN_OFFSET] & IEEE802154_FRAME_DSN_BIT)); +} + +IEEE802154_STATIC IEEE802154_INLINE uint8_t dst_addr_mode(const uint8_t *frame) +{ + return frame[IEEE802154_FRAME_DST_MODE_OFFSET] & IEEE802154_FRAME_DST_MODE_MASK; +} + +IEEE802154_STATIC IEEE802154_INLINE uint8_t src_addr_mode(const uint8_t *frame) +{ + return frame[IEEE802154_FRAME_SRC_MODE_OFFSET] & IEEE802154_FRAME_SRC_MODE_MASK; +} + +IEEE802154_STATIC IEEE802154_INLINE bool is_panid_compression(const uint8_t *frame) +{ + return frame[IEEE802154_FRAME_PANID_COMP_OFFSET] & IEEE802154_FRAME_PANID_COMP_BIT; +} + +IEEE802154_STATIC IEEE802154_INLINE bool is_suported_frame_type(uint8_t frame_type) +{ + // HW supports 4 kinds of frame type: Beacon, Ack, Data, Command. + return (frame_type == IEEE802154_FRAME_TYPE_BEACON || frame_type == IEEE802154_FRAME_TYPE_DATA || + frame_type == IEEE802154_FRAME_TYPE_ACK || frame_type == IEEE802154_FRAME_TYPE_COMMAND); +} + +IEEE802154_STATIC IEEE802154_NOINLINE bool is_dst_panid_present(const uint8_t *frame) +{ + uint8_t dst_mode = dst_addr_mode(frame); + bool dst_panid_present = false; + + if (ieee802154_frame_get_version(frame) == IEEE802154_FRAME_VERSION_2) { + uint8_t src_mode = src_addr_mode(frame); + bool panid_compression = is_panid_compression(frame); + + if (dst_mode != IEEE802154_FRAME_DST_MODE_NONE) { // dest address is present/short/extended + if ((src_mode == IEEE802154_FRAME_SRC_MODE_NONE && panid_compression) || + (dst_mode == IEEE802154_FRAME_DST_MODE_EXT && src_mode == IEEE802154_FRAME_SRC_MODE_EXT && panid_compression)) { + dst_panid_present = false; + } else { + dst_panid_present = true; + } + } else { // dest address is not present + if (src_mode == IEEE802154_FRAME_SRC_MODE_NONE && panid_compression) { + dst_panid_present = true; + } else { + dst_panid_present = false; + } + } + } else { // frame version: 0b00, 0b01 + dst_panid_present = (dst_mode != IEEE802154_FRAME_DST_MODE_NONE); + } + + return dst_panid_present; +} + +IEEE802154_STATIC IEEE802154_NOINLINE bool is_src_panid_present(const uint8_t *frame) +{ + uint8_t src_mode = src_addr_mode(frame); + bool panid_compression = is_panid_compression(frame); + bool src_panid_present = false; + + if (ieee802154_frame_get_version(frame) == IEEE802154_FRAME_VERSION_2) { + uint8_t dst_mode = dst_addr_mode(frame); + + if (src_mode != IEEE802154_FRAME_SRC_MODE_NONE) { + if (dst_mode == IEEE802154_FRAME_DST_MODE_EXT && src_mode == IEEE802154_FRAME_SRC_MODE_EXT && !panid_compression) { + src_panid_present = false; + } else { + src_panid_present = !panid_compression; + } + } else { + src_panid_present = false; + } + } else { // frame version: 0b00, 0b01 + if (src_mode != IEEE802154_FRAME_SRC_MODE_NONE) { + src_panid_present = !panid_compression; + } else { + src_panid_present = false; + } + } + + return src_panid_present; +} + +IEEE802154_STATIC uint8_t IEEE802154_INLINE ieee802154_frame_address_offset(const uint8_t *frame) +{ + return IEEE802154_FRAME_PHR_SIZE + IEEE802154_FRAME_FCF_SIZE + (is_dsn_present(frame) ? IEEE802154_FRAME_DSN_SIZE : 0); +} + +IEEE802154_STATIC IRAM_ATTR uint8_t ieee802154_frame_address_size(const uint8_t *frame) +{ + uint8_t address_size = 0; + + if (is_dst_panid_present(frame)) { + address_size += IEEE802154_FRAME_PANID_SIZE; + } + + switch (dst_addr_mode(frame)) { + case IEEE802154_FRAME_DST_MODE_NONE: + break; + + case IEEE802154_FRAME_DST_MODE_SHORT: + address_size += IEEE802154_FRAME_SHORT_ADDR_SIZE; + break; + + case IEEE802154_FRAME_DST_MODE_EXT: + address_size += IEEE802154_FRAME_EXT_ADDR_SIZE; + break; + + default: + return IEEE802154_FRAME_INVALID_OFFSET; + } + + if (is_src_panid_present(frame)) { + address_size += IEEE802154_FRAME_PANID_SIZE; + } + + switch (src_addr_mode(frame)) { + case IEEE802154_FRAME_SRC_MODE_NONE: + break; + + case IEEE802154_FRAME_SRC_MODE_SHORT: + address_size += IEEE802154_FRAME_SHORT_ADDR_SIZE; + break; + + case IEEE802154_FRAME_SRC_MODE_EXT: + address_size += IEEE802154_FRAME_EXT_ADDR_SIZE; + break; + + default: + return IEEE802154_FRAME_INVALID_OFFSET; + } + + return address_size; +} + +IEEE802154_STATIC IEEE802154_NOINLINE uint8_t ieee802154_frame_security_header_offset(const uint8_t *frame) +{ + ESP_RETURN_ON_FALSE_ISR(is_suported_frame_type(ieee802154_frame_get_type(frame)), IEEE802154_FRAME_INVALID_ADDR_MODE, IEEE802154_TAG, "invalid frame type"); + uint8_t offset = ieee802154_frame_address_offset(frame); + uint8_t address_size = ieee802154_frame_address_size(frame); + + ESP_RETURN_ON_FALSE_ISR(offset != IEEE802154_FRAME_INVALID_OFFSET, IEEE802154_FRAME_INVALID_OFFSET, IEEE802154_TAG, "invalid offset"); + ESP_RETURN_ON_FALSE_ISR(address_size != IEEE802154_FRAME_INVALID_OFFSET, IEEE802154_FRAME_INVALID_OFFSET, IEEE802154_TAG, "invalid offset"); + + offset += address_size; + + return offset; +} + +IEEE802154_STATIC IEEE802154_NOINLINE uint8_t ieee802154_frame_get_security_field_len(const uint8_t *frame) +{ + ESP_RETURN_ON_FALSE_ISR(is_suported_frame_type(ieee802154_frame_get_type(frame)), IEEE802154_FRAME_INVALID_OFFSET, IEEE802154_TAG, "invalid frame type"); + + uint8_t security_field_len = 0; + uint8_t offset = ieee802154_frame_security_header_offset(frame); + + ESP_RETURN_ON_FALSE_ISR(offset != IEEE802154_FRAME_INVALID_OFFSET, IEEE802154_FRAME_INVALID_OFFSET, IEEE802154_TAG, "invalid offset"); + + security_field_len += IEEE802154_FRAME_SE_HEAD_SIZE; + uint8_t security_header = frame[offset]; + + if (security_header & IEEE802154_FRAME_COUNTER_SUPPRESS_BIT) { + security_field_len += 0; + } else { + security_field_len += IEEE802154_FRAME_COUNTER_SIZE; + } + + switch (security_header & IEEE802154_FRAME_KEY_ID_MODE_MASK) { + case IEEE802154_FRAME_KEY_ID_MODE_1: + security_field_len += IEEE802154_FRAME_KEY_ID_MODE_1_SIZE; + break; + case IEEE802154_FRAME_KEY_ID_MODE_2: + security_field_len += IEEE802154_FRAME_KEY_ID_MODE_2_SIZE; + break; + case IEEE802154_FRAME_KEY_ID_MODE_3: + security_field_len += IEEE802154_FRAME_KEY_ID_MODE_3_SIZE; + break; + default: + security_field_len += 0; + break; + } + + return security_field_len; +} + +IEEE802154_STATIC uint8_t ieee802154_frame_ie_header_offset(const uint8_t *frame) +{ + uint8_t offset = ieee802154_frame_security_header_offset(frame); + uint8_t security_field_len = ieee802154_frame_get_security_field_len(frame); + + offset += security_field_len; + + return offset; +} + +IEEE802154_STATIC uint8_t ieee802154_frame_get_mic_len(const uint8_t *frame) +{ + uint8_t offset = ieee802154_frame_security_header_offset(frame); + uint8_t mic_len = 0; + uint8_t security_header = frame[offset]; + + switch (security_header & IEEE802154_FRAME_SECURITY_MASK) { + case IEEE802154_FRAME_SECURITY_MIC_32: + case IEEE802154_FRAME_SECURITY_ENC_MIC_32: + mic_len = IEEE802154_FRAME_SECURITY_MIC_32_SIZE; + break; + case IEEE802154_FRAME_SECURITY_MIC_64: + case IEEE802154_FRAME_SECURITY_ENC_MIC_64: + mic_len = IEEE802154_FRAME_SECURITY_MIC_64_SIZE; + break; + case IEEE802154_FRAME_SECURITY_MIC_128: + case IEEE802154_FRAME_SECURITY_ENC_MIC_128: + mic_len = IEEE802154_FRAME_SECURITY_MIC_128_SIZE; + break; + default: + mic_len = 0; + break; + } + return mic_len; +} + +IEEE802154_STATIC uint8_t ieee802154_frame_get_ie_field_len(const uint8_t *frame) +{ + uint8_t offset = ieee802154_frame_ie_header_offset(frame); + uint8_t ie_field_len = 0; + uint8_t frame_footer_len = ieee802154_frame_get_mic_len(frame) + IEEE802154_FRAME_FCS_SIZE; + + /* If the `offset + frame_footer_len == frame_len`, we exit the `while()` + loop. This covers the case where frame contains one or more Header IEs + but no data payload. In this case, 2015-spec does not + require Header IE termination to be included (it is optional) + since the end of frame can be determined from frame length and + footer length. (for details, please reference 2015 - spec table 7 - 6 in page 169) */ + + while (frame[0] > offset + ie_field_len + frame_footer_len) { + uint16_t ie_header = frame[offset + ie_field_len + 1] << 8 | frame[offset + ie_field_len]; + // Header Termination IE 2 is used in to signal end of the MHR and beginning of the MAC Payload. + if ((ie_header & IEEE802154_FRAME_IE_HEAD_ID_MASK) == IEEE802154_IE_TYPE_HT2) { + ie_field_len += IEEE802154_FRAME_IE_HEAD_LEN; + break; + } else { + uint8_t ie_subfield_len = (ie_header & IEEE802154_FRAME_IE_SUBFIELD_LEN_MASK); + ie_field_len += IEEE802154_FRAME_IE_HEAD_LEN + ie_subfield_len; + } + } + return ie_field_len; +} + +IEEE802154_STATIC IRAM_ATTR uint8_t ieee802154_frame_payload_offset(const uint8_t *frame) +{ + uint8_t offset = ieee802154_frame_security_header_offset(frame); + if (is_security_enabled(frame)) { + // skip security field. + offset += ieee802154_frame_get_security_field_len(frame); + } + + if (ieee802154_frame_get_version(frame) == IEEE802154_FRAME_VERSION_2 && is_ie_present(frame)) { + // skip IE fields. + offset += ieee802154_frame_get_ie_field_len(frame); + } + if (ieee802154_frame_get_version(frame) == IEEE802154_FRAME_VERSION_0 || ieee802154_frame_get_version(frame) == IEEE802154_FRAME_VERSION_1) { + if (ieee802154_frame_get_type(frame) == IEEE802154_FRAME_TYPE_BEACON) { + // TODO: skip beacon payload. + } + if (ieee802154_frame_get_type(frame) == IEEE802154_FRAME_TYPE_COMMAND) { + offset += IEEE802154_FRAME_COMMAND_ID_LEN; + } + } + + return offset - 1; +} + +uint8_t IEEE802154_INLINE ieee802154_frame_get_type(const uint8_t *frame) +{ + return frame[IEEE802154_FRAME_TYPE_OFFSET] & IEEE802154_FRAME_TYPE_MASK; +} + +uint8_t IEEE802154_INLINE ieee802154_frame_get_version(const uint8_t *frame) +{ + return frame[IEEE802154_FRAME_VERSION_OFFSET] & IEEE802154_FRAME_VERSION_MASK; +} + +bool IEEE802154_INLINE ieee802154_frame_is_ack_required(const uint8_t *frame) +{ + return (is_suported_frame_type(ieee802154_frame_get_type(frame))) && (frame[IEEE802154_FRAME_AR_OFFSET] & IEEE802154_FRAME_AR_BIT); +} + +uint8_t ieee802154_frame_get_dst_addr(const uint8_t *frame, uint8_t *addr) +{ + ESP_RETURN_ON_FALSE_ISR(is_suported_frame_type(ieee802154_frame_get_type(frame)), IEEE802154_FRAME_INVALID_ADDR_MODE, IEEE802154_TAG, "invalid frame type"); + + uint8_t offset = ieee802154_frame_address_offset(frame); + uint8_t dst_mode = dst_addr_mode(frame); + uint8_t addr_size; + + ESP_RETURN_ON_FALSE_ISR(dst_mode == IEEE802154_FRAME_DST_MODE_SHORT || dst_mode == IEEE802154_FRAME_DST_MODE_EXT, dst_mode, IEEE802154_TAG, "invalid address mode"); + + addr_size = (dst_mode == IEEE802154_FRAME_DST_MODE_SHORT) ? IEEE802154_FRAME_SHORT_ADDR_SIZE : IEEE802154_FRAME_EXT_ADDR_SIZE; + + if (is_dst_panid_present(frame)) { + offset += IEEE802154_FRAME_PANID_SIZE; + } + + memcpy(addr, frame + offset, addr_size); + + return dst_mode; +} + +uint8_t ieee802154_frame_get_src_addr(const uint8_t *frame, uint8_t *addr) +{ + ESP_RETURN_ON_FALSE_ISR(is_suported_frame_type(ieee802154_frame_get_type(frame)), IEEE802154_FRAME_INVALID_ADDR_MODE, IEEE802154_TAG, "invalid frame type"); + + uint8_t offset = ieee802154_frame_address_offset(frame); + uint8_t dst_mode = dst_addr_mode(frame); + uint8_t src_mode = src_addr_mode(frame); + uint8_t addr_size; + + ESP_RETURN_ON_FALSE_ISR(src_mode == IEEE802154_FRAME_SRC_MODE_SHORT || src_mode == IEEE802154_FRAME_SRC_MODE_EXT, src_mode, IEEE802154_TAG, "invalid address mode"); + + addr_size = (src_mode == IEEE802154_FRAME_SRC_MODE_SHORT) ? IEEE802154_FRAME_SHORT_ADDR_SIZE : IEEE802154_FRAME_EXT_ADDR_SIZE; + + if (is_dst_panid_present(frame)) { + offset += IEEE802154_FRAME_PANID_SIZE; + } + + switch (dst_mode) { + case IEEE802154_FRAME_DST_MODE_SHORT: + offset += IEEE802154_FRAME_SHORT_ADDR_SIZE; + break; + + case IEEE802154_FRAME_DST_MODE_EXT: + offset += IEEE802154_FRAME_EXT_ADDR_SIZE; + break; + + default: + break; + } + + if (is_src_panid_present(frame)) { + offset += IEEE802154_FRAME_PANID_SIZE; + } + + memcpy(addr, frame + offset, addr_size); + + return src_mode; +} + +uint8_t ieee802154_frame_get_security_payload_offset(uint8_t *frame) +{ + return ieee802154_frame_payload_offset(frame); +} + +esp_err_t ieee802154_frame_get_dest_panid(const uint8_t *frame, uint8_t *panid) +{ + uint8_t offset = ieee802154_frame_address_offset(frame); + + if (is_dst_panid_present(frame)) { + memcpy(panid, frame + offset, IEEE802154_FRAME_PANID_SIZE); + return ESP_OK; + } + return ESP_FAIL; +} + +esp_err_t ieee802154_frame_get_src_panid(const uint8_t *frame, uint8_t *panid) +{ + uint8_t offset = ieee802154_frame_address_offset(frame); + uint8_t dst_mode = dst_addr_mode(frame); + + if (is_src_panid_present(frame)) { + if (is_dst_panid_present(frame)) { + offset += IEEE802154_FRAME_PANID_SIZE; + } + + switch (dst_mode) { + case IEEE802154_FRAME_DST_MODE_SHORT: + offset += IEEE802154_FRAME_SHORT_ADDR_SIZE; + break; + + case IEEE802154_FRAME_DST_MODE_EXT: + offset += IEEE802154_FRAME_EXT_ADDR_SIZE; + break; + + default: + break; + } + memcpy(panid, frame + offset, IEEE802154_FRAME_PANID_SIZE); + return ESP_OK; + } + return ESP_FAIL; +} diff --git a/components/ieee802154/driver/esp_ieee802154_pib.c b/components/ieee802154/driver/esp_ieee802154_pib.c new file mode 100644 index 0000000000..8654d5cef1 --- /dev/null +++ b/components/ieee802154/driver/esp_ieee802154_pib.c @@ -0,0 +1,220 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include "hal/ieee802154_ll.h" +#include "esp_ieee802154_pib.h" +#include "esp_ieee802154_util.h" + +static ieee802154_pib_t s_ieee802154_pib; +static bool is_pending = false; + +static inline void set_pending(void) +{ + is_pending = true; +} + +static inline void clr_pending(void) +{ + is_pending = false; +} + +bool inline ieee802154_pib_is_pending(void) +{ + return is_pending; +} + +void ieee802154_pib_init(void) +{ + memset(&s_ieee802154_pib, 0, sizeof(ieee802154_pib_t)); + s_ieee802154_pib.auto_ack_rx = true; + s_ieee802154_pib.auto_ack_tx = true; + s_ieee802154_pib.enhance_ack_tx = true; + s_ieee802154_pib.coordinator = false; + s_ieee802154_pib.promiscuous = true; + s_ieee802154_pib.rx_when_idle = false; + s_ieee802154_pib.channel = 11; + s_ieee802154_pib.cca_threshold = CONFIG_IEEE802154_CCA_THRESHOLD; + s_ieee802154_pib.cca_mode = CONFIG_IEEE802154_CCA_MODE; + s_ieee802154_pib.txpower = IEEE802154_TXPOWER_VALUE_MAX; + + set_pending(); +} + +IEEE802154_NOINLINE static uint8_t ieee802154_txpower_convert(int8_t txpower) +{ + uint8_t ieee820154_txpower_index = 0; + if (txpower >= IEEE802154_TXPOWER_VALUE_MAX) { + ieee820154_txpower_index = 15; + } else if (txpower <= IEEE802154_TXPOWER_VALUE_MIN) { + ieee820154_txpower_index = IEEE802154_TXPOWER_INDEX_MIN; + } else { + ieee820154_txpower_index = (uint8_t)((txpower - IEEE802154_TXPOWER_VALUE_MIN) / 3) + IEEE802154_TXPOWER_INDEX_MIN; + } + return ieee820154_txpower_index; +} + +void ieee802154_pib_update(void) +{ + if (ieee802154_pib_is_pending()) { + ieee802154_ll_set_freq(ieee802154_channel_to_freq(s_ieee802154_pib.channel)); + ieee802154_ll_set_power(ieee802154_txpower_convert(s_ieee802154_pib.txpower)); + + ieee802154_ll_set_cca_mode(s_ieee802154_pib.cca_mode); + ieee802154_ll_set_cca_threshold(s_ieee802154_pib.cca_threshold); + + ieee802154_ll_set_tx_auto_ack(s_ieee802154_pib.auto_ack_tx); + ieee802154_ll_set_rx_auto_ack(s_ieee802154_pib.auto_ack_rx); + ieee802154_ll_set_tx_enhance_ack(s_ieee802154_pib.enhance_ack_tx); + + ieee802154_ll_set_coordinator(s_ieee802154_pib.coordinator); + ieee802154_ll_set_promiscuous(s_ieee802154_pib.promiscuous); + ieee802154_ll_set_pending_mode(s_ieee802154_pib.pending_mode == IEEE802154_AUTO_PENDING_ENHANCED); + + clr_pending(); + } +} + +uint8_t ieee802154_pib_get_channel(void) +{ + return s_ieee802154_pib.channel; +} + +void ieee802154_pib_set_channel(uint8_t channel) +{ + if (s_ieee802154_pib.channel != channel) { + s_ieee802154_pib.channel = channel; + set_pending(); + } +} + +int8_t ieee802154_pib_get_power(void) +{ + return s_ieee802154_pib.txpower; +} + +void ieee802154_pib_set_power(int8_t power) +{ + if (s_ieee802154_pib.txpower != power) { + s_ieee802154_pib.txpower = power; + set_pending(); + } +} + +bool ieee802154_pib_get_promiscuous(void) +{ + return s_ieee802154_pib.promiscuous; +} + +void ieee802154_pib_set_promiscuous(bool enable) +{ + if (s_ieee802154_pib.promiscuous != enable) { + s_ieee802154_pib.promiscuous = enable; + set_pending(); + } +} + +int8_t ieee802154_pib_get_cca_threshold(void) +{ + return s_ieee802154_pib.cca_threshold; +} + +void ieee802154_pib_set_cca_threshold(int8_t cca_threshold) +{ + if (s_ieee802154_pib.cca_threshold != cca_threshold) { + s_ieee802154_pib.cca_threshold = cca_threshold; + set_pending(); + } +} + +ieee802154_ll_cca_mode_t ieee802154_pib_get_cca_mode(void) +{ + return s_ieee802154_pib.cca_mode; +} + +void ieee802154_pib_set_cca_mode(ieee802154_ll_cca_mode_t cca_mode) +{ + if (s_ieee802154_pib.cca_mode != cca_mode) { + s_ieee802154_pib.cca_mode = cca_mode; + set_pending(); + } +} + +bool ieee802154_pib_get_auto_ack_tx(void) +{ + return s_ieee802154_pib.auto_ack_tx; +} + +void ieee802154_pib_set_auto_ack_tx(bool enable) +{ + if (s_ieee802154_pib.auto_ack_tx != enable) { + s_ieee802154_pib.auto_ack_tx = enable; + set_pending(); + } +} + +bool ieee802154_pib_get_auto_ack_rx(void) +{ + return s_ieee802154_pib.auto_ack_rx; +} + +void ieee802154_pib_set_auto_ack_rx(bool enable) +{ + if (s_ieee802154_pib.auto_ack_rx != enable) { + s_ieee802154_pib.auto_ack_rx = enable; + set_pending(); + } +} + +bool ieee802154_pib_get_enhance_ack_tx(void) +{ + return s_ieee802154_pib.enhance_ack_tx; +} + +void ieee802154_pib_set_enhance_ack_tx(bool enable) +{ + if (s_ieee802154_pib.enhance_ack_tx != enable) { + s_ieee802154_pib.enhance_ack_tx = enable; + set_pending(); + } +} + +bool ieee802154_pib_get_coordinator(void) +{ + return s_ieee802154_pib.coordinator; +} + +void ieee802154_pib_set_coordinator(bool enable) +{ + if (s_ieee802154_pib.coordinator != enable) { + s_ieee802154_pib.coordinator = enable; + set_pending(); + } +} + +ieee802154_ll_pending_mode_t ieee802154_pib_get_pending_mode(void) +{ + return s_ieee802154_pib.pending_mode; +} + +void ieee802154_pib_set_pending_mode(ieee802154_ll_pending_mode_t pending_mode) +{ + if (s_ieee802154_pib.pending_mode != pending_mode) { + s_ieee802154_pib.pending_mode = pending_mode; + set_pending(); + } +} + +void ieee802154_pib_set_rx_when_idle(bool enable) +{ + s_ieee802154_pib.rx_when_idle = enable; +} + +bool ieee802154_pib_get_rx_when_idle(void) +{ + return s_ieee802154_pib.rx_when_idle; +} diff --git a/components/ieee802154/driver/esp_ieee802154_sec.c b/components/ieee802154/driver/esp_ieee802154_sec.c new file mode 100644 index 0000000000..2192550ab3 --- /dev/null +++ b/components/ieee802154/driver/esp_ieee802154_sec.c @@ -0,0 +1,28 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "esp_err.h" +#include "hal/ieee802154_ll.h" +#include "esp_ieee802154_frame.h" +#include "esp_ieee802154_sec.h" + +#include "esp_ieee802154.h" +static bool s_is_security = false; + +void ieee802154_transmit_security_config(uint8_t *frame, uint8_t *key, uint8_t *addr) +{ + ieee802154_ll_set_security_addr(addr); + ieee802154_ll_set_security_key(key); + ieee802154_ll_set_security_offset(ieee802154_frame_get_security_payload_offset(frame)); + s_is_security = true; +} + +void ieee802154_sec_update(void) +{ + ieee802154_ll_set_transmit_security(s_is_security); + s_is_security = false; +} diff --git a/components/ieee802154/driver/esp_ieee802154_timer.c b/components/ieee802154/driver/esp_ieee802154_timer.c new file mode 100644 index 0000000000..e2bff1a59b --- /dev/null +++ b/components/ieee802154/driver/esp_ieee802154_timer.c @@ -0,0 +1,59 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "soc/soc.h" +#include "hal/ieee802154_ll.h" +#include "esp_check.h" +#include "esp_ieee802154_timer.h" +#include "esp_ieee802154_util.h" + +void ieee802154_timer0_start(void) +{ + ieee802154_ll_set_cmd(IEEE802154_CMD_TIMER0_START); +} + +void ieee802154_timer0_stop(void) +{ + ieee802154_ll_set_cmd(IEEE802154_CMD_TIMER0_STOP); +} + +esp_err_t ieee802154_timer0_set_threshold(uint32_t value) +{ + ESP_RETURN_ON_FALSE((value < IEEE802154_TIMER0_THRESHOLD), ESP_ERR_INVALID_ARG, IEEE802154_TAG, "invalid timer0 threshold"); + + ieee802154_ll_timer0_set_threshold(value); + + return ESP_OK; +} + +uint32_t ieee802154_timer0_get_value(void) +{ + return ieee802154_ll_timer0_get_value(); +} + +void ieee802154_timer1_start(void) +{ + ieee802154_ll_set_cmd(IEEE802154_CMD_TIMER1_START); +} + +void ieee802154_timer1_stop(void) +{ + ieee802154_ll_set_cmd(IEEE802154_CMD_TIMER1_STOP); +} + +esp_err_t ieee802154_timer1_set_threshold(uint32_t value) +{ + ESP_RETURN_ON_FALSE((value < IEEE802154_TIMER1_THRESHOLD), ESP_ERR_INVALID_ARG, IEEE802154_TAG, "invalid timer1 threshold"); + + ieee802154_ll_timer1_set_threshold(value); + + return ESP_OK; +} + +uint32_t ieee802154_timer1_get_value(void) +{ + return ieee802154_ll_timer1_get_value(); +} diff --git a/components/ieee802154/driver/esp_ieee802154_util.c b/components/ieee802154/driver/esp_ieee802154_util.c new file mode 100644 index 0000000000..c3ffed0a94 --- /dev/null +++ b/components/ieee802154/driver/esp_ieee802154_util.c @@ -0,0 +1,63 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "esp_private/esp_modem_clock.h" +#include "soc/soc.h" +#include "soc/periph_defs.h" +#include "hal/ieee802154_ll.h" +#include "esp_coex_i154.h" +#include "esp_ieee802154_util.h" + +uint8_t ieee802154_freq_to_channel(uint8_t freq) +{ + return (freq - 3) / 5 + 11; +} + +uint8_t ieee802154_channel_to_freq(uint8_t channel) +{ + return (channel - 11) * 5 + 3; +} + +#if !CONFIG_IEEE802154_TEST && (CONFIG_ESP_COEX_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE) +void ieee802154_set_txrx_pti(ieee802154_txrx_scene_t txrx_scene) +{ + + switch (txrx_scene) { + case IEEE802154_SCENE_IDLE: + esp_coex_ieee802154_txrx_pti_set(IEEE802154_IDLE); + break; + case IEEE802154_SCENE_TX: + case IEEE802154_SCENE_RX: + esp_coex_ieee802154_txrx_pti_set(IEEE802154_LOW); + break; + case IEEE802154_SCENE_TX_AT: + case IEEE802154_SCENE_RX_AT: + esp_coex_ieee802154_txrx_pti_set(IEEE802154_MIDDLE); + break; + default: + assert(false); + break; + } +} +#endif // !CONFIG_IEEE802154_TEST && CONFIG_ESP_COEX_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + +// TZ-97: implement these two functions using ETM common interface +void ieee802154_etm_channel_clear(uint32_t channel) +{ + if (!(REG_READ(ETM_CHEN_AD0_REG) & (1 << channel))) { + REG_WRITE(ETM_CHENCLR_AD0_REG, (REG_READ(ETM_CHENCLR_AD0_REG)) | 1 << channel); + } +} + +void ieee802154_etm_set_event_task(uint32_t channel, uint32_t event, uint32_t task) +{ + ieee802154_etm_channel_clear(channel); + + REG_WRITE((ETM_CH0_EVT_ID_REG + ETM_CH_OFFSET * channel), event); + REG_WRITE((ETM_CH0_TASK_ID_REG + ETM_CH_OFFSET * channel), task); + + REG_WRITE(ETM_CHENSET_AD0_REG, (REG_READ(ETM_CHENSET_AD0_REG) | 1 << channel)); +} diff --git a/components/ieee802154/esp_ieee802154.c b/components/ieee802154/esp_ieee802154.c new file mode 100644 index 0000000000..db80ef8820 --- /dev/null +++ b/components/ieee802154/esp_ieee802154.c @@ -0,0 +1,418 @@ +/* + * SPDX-FileCopyrightText: 2020-2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include "sdkconfig.h" +#include "esp_ieee802154.h" +#include "esp_err.h" +#include "esp_phy_init.h" +#include "esp_ieee802154_ack.h" +#include "esp_ieee802154_dev.h" +#include "esp_ieee802154_frame.h" +#include "esp_ieee802154_pib.h" +#include "esp_ieee802154_sec.h" +#include "esp_ieee802154_util.h" +#include "esp_log.h" +#include "esp_coex_i154.h" +#include "hal/ieee802154_ll.h" +#include "hal/ieee802154_common_ll.h" + +esp_err_t esp_ieee802154_enable(void) +{ + ieee802154_enable(); + ieee802154_rf_enable(); + esp_btbb_enable(); + return ieee802154_mac_init(); +} + +esp_err_t esp_ieee802154_disable(void) +{ + esp_btbb_disable(); + ieee802154_rf_disable(); + ieee802154_disable(); + return ieee802154_mac_deinit(); +} + +uint8_t esp_ieee802154_get_channel(void) +{ + return ieee802154_pib_get_channel(); +} + +esp_err_t esp_ieee802154_set_channel(uint8_t channel) +{ + ieee802154_pib_set_channel(channel); + return ESP_OK; +} + +int8_t esp_ieee802154_get_txpower(void) +{ + return ieee802154_pib_get_power(); +} + +esp_err_t esp_ieee802154_set_txpower(int8_t power) +{ + ieee802154_pib_set_power(power); + return ESP_OK; +} + +bool esp_ieee802154_get_promiscuous(void) +{ + return ieee802154_pib_get_promiscuous(); +} + +esp_err_t esp_ieee802154_set_promiscuous(bool enable) +{ + ieee802154_pib_set_promiscuous(enable); + ieee802154_pib_set_auto_ack_rx(!enable); + ieee802154_pib_set_auto_ack_tx(!enable); + ieee802154_pib_set_enhance_ack_tx(!enable); + return ESP_OK; +} + +int8_t esp_ieee802154_get_cca_threshold(void) +{ + return ieee802154_pib_get_cca_threshold(); +} + +esp_err_t esp_ieee802154_set_cca_threshold(int8_t cca_threshold) +{ + ieee802154_pib_set_cca_threshold(cca_threshold); + return ESP_OK; +} + +esp_ieee802154_cca_mode_t esp_ieee802154_get_cca_mode(void) +{ + return ieee802154_pib_get_cca_mode(); +} + +esp_err_t esp_ieee802154_set_cca_mode(esp_ieee802154_cca_mode_t cca_mode) +{ + ieee802154_pib_set_cca_mode(cca_mode); + return ESP_OK; +} + +bool esp_ieee802154_get_auto_ack_tx(void) +{ + return ieee802154_pib_get_auto_ack_tx(); +} + +esp_err_t esp_ieee802154_set_auto_ack_tx(bool enable) +{ + ieee802154_pib_set_auto_ack_tx(enable); + return ESP_OK; +} + +bool esp_ieee802154_get_auto_ack_rx(void) +{ + return ieee802154_pib_get_auto_ack_rx(); +} + +esp_err_t esp_ieee802154_set_auto_ack_rx(bool enable) +{ + ieee802154_pib_set_auto_ack_rx(enable); + return ESP_OK; +} + +bool esp_ieee802154_get_coordinator(void) +{ + return ieee802154_pib_get_coordinator(); +} + +esp_err_t esp_ieee802154_set_coordinator(bool enable) +{ + ieee802154_pib_set_coordinator(enable); + return ESP_OK; +} + +#if CONFIG_IEEE802154_MULTI_PAN_ENABLE + +uint16_t esp_ieee802154_get_multipan_panid(esp_ieee802154_multipan_index_t index) +{ + assert(index < ESP_IEEE802154_MULTIPAN_MAX); + return ieee802154_ll_get_multipan_panid(index); +} + +esp_err_t esp_ieee802154_set_multipan_panid(esp_ieee802154_multipan_index_t index, uint16_t panid) +{ + assert(index < ESP_IEEE802154_MULTIPAN_MAX); + ieee802154_ll_set_multipan_panid(index, panid); + return ESP_OK; +} + +uint16_t esp_ieee802154_get_multipan_short_address(esp_ieee802154_multipan_index_t index) +{ + assert(index < ESP_IEEE802154_MULTIPAN_MAX); + return ieee802154_ll_get_multipan_short_addr(index); +} + +esp_err_t esp_ieee802154_set_multipan_short_address(esp_ieee802154_multipan_index_t index, uint16_t short_address) +{ + assert(index < ESP_IEEE802154_MULTIPAN_MAX); + ieee802154_ll_set_multipan_short_addr(index, short_address); + return ESP_OK; +} + +esp_err_t esp_ieee802154_get_multipan_extended_address(esp_ieee802154_multipan_index_t index, uint8_t *ext_addr) +{ + assert(index < ESP_IEEE802154_MULTIPAN_MAX); + ieee802154_ll_get_multipan_ext_addr(index, ext_addr); + return ESP_OK; +} + +esp_err_t esp_ieee802154_set_multipan_extended_address(esp_ieee802154_multipan_index_t index, const uint8_t *ext_addr) +{ + assert(index < ESP_IEEE802154_MULTIPAN_MAX); + ieee802154_ll_set_multipan_ext_addr(index, ext_addr); + return ESP_OK; +} + +uint8_t esp_ieee802154_get_multipan_enable(void) +{ + return ieee802154_ll_get_multipan_enable_mask(); +} + +esp_err_t esp_ieee802154_set_multipan_enable(uint8_t mask) +{ + assert(mask < (1 << ESP_IEEE802154_MULTIPAN_MAX)); + ieee802154_ll_set_multipan_enable_mask(mask); + return ESP_OK; +} + +#else + +uint16_t esp_ieee802154_get_panid(void) +{ + return ieee802154_ll_get_multipan_panid(ESP_IEEE802154_MULTIPAN_0); +} + +esp_err_t esp_ieee802154_set_panid(uint16_t panid) +{ + ieee802154_ll_set_multipan_panid(ESP_IEEE802154_MULTIPAN_0, panid); + return ESP_OK; +} + +uint16_t esp_ieee802154_get_short_address(void) +{ + return ieee802154_ll_get_multipan_short_addr(ESP_IEEE802154_MULTIPAN_0); +} + +esp_err_t esp_ieee802154_set_short_address(uint16_t short_address) +{ + ieee802154_ll_set_multipan_short_addr(ESP_IEEE802154_MULTIPAN_0, short_address); + return ESP_OK; +} + +esp_err_t esp_ieee802154_get_extended_address(uint8_t *ext_addr) +{ + ieee802154_ll_get_multipan_ext_addr(ESP_IEEE802154_MULTIPAN_0, ext_addr); + return ESP_OK; +} + +esp_err_t esp_ieee802154_set_extended_address(const uint8_t *ext_addr) +{ + ieee802154_ll_set_multipan_ext_addr(ESP_IEEE802154_MULTIPAN_0, ext_addr); + return ESP_OK; +} + +#endif // CONFIG_IEEE802154_MULTI_PAN_ENABLE + +esp_ieee802154_pending_mode_t esp_ieee802154_get_pending_mode(void) +{ + return ieee802154_pib_get_pending_mode(); +} + +esp_err_t esp_ieee802154_set_pending_mode(esp_ieee802154_pending_mode_t pending_mode) +{ + ieee802154_pib_set_pending_mode(pending_mode); + return ESP_OK; +} + +esp_err_t esp_ieee802154_set_rx_when_idle(bool enable) +{ + ieee802154_pib_set_rx_when_idle(enable); + return ESP_OK; +} + +bool esp_ieee802154_get_rx_when_idle(void) +{ + return ieee802154_pib_get_rx_when_idle(); +} + +esp_err_t esp_ieee802154_transmit(const uint8_t *frame, bool cca) +{ + return ieee802154_transmit(frame, cca); +} + +esp_err_t esp_ieee802154_transmit_at(const uint8_t *frame, bool cca, uint32_t time) +{ + return ieee802154_transmit_at(frame, cca, time); +} + +esp_err_t esp_ieee802154_sleep(void) +{ + return ieee802154_sleep(); +} + +esp_err_t esp_ieee802154_receive(void) +{ + return ieee802154_receive(); +} + +esp_err_t esp_ieee802154_receive_at(uint32_t time) +{ + return ieee802154_receive_at(time); +} + +esp_err_t esp_ieee802154_energy_detect(uint32_t duration) +{ + return ieee802154_energy_detect(duration); +} + +esp_err_t esp_ieee802154_cca(void) +{ + return ieee802154_cca(); +} + +esp_ieee802154_state_t esp_ieee802154_get_state(void) +{ + switch (ieee802154_get_state()) { + case IEEE802154_STATE_DISABLE: + return ESP_IEEE802154_RADIO_DISABLE; + + case IEEE802154_STATE_IDLE: + return ESP_IEEE802154_RADIO_IDLE; + + case IEEE802154_STATE_SLEEP: + return ESP_IEEE802154_RADIO_SLEEP; + + case IEEE802154_STATE_RX: + case IEEE802154_STATE_TX_ACK: + case IEEE802154_STATE_ED: + return ESP_IEEE802154_RADIO_RECEIVE; + + case IEEE802154_STATE_TX_CCA: + case IEEE802154_STATE_CCA: + case IEEE802154_STATE_TX: + case IEEE802154_STATE_RX_ACK: + case IEEE802154_STATE_TX_ENH_ACK: + return ESP_IEEE802154_RADIO_TRANSMIT; + + default: + assert(false); + return ESP_IEEE802154_RADIO_DISABLE; + } +} + +esp_err_t esp_ieee802154_set_transmit_security(uint8_t *frame, uint8_t *key, uint8_t *addr) +{ + ieee802154_transmit_security_config(frame, key, addr); + return ESP_OK; +} + +esp_err_t esp_ieee802154_add_pending_addr(const uint8_t *addr, bool is_short) +{ + return ieee802154_add_pending_addr(addr, is_short); +} + +esp_err_t esp_ieee802154_clear_pending_addr(const uint8_t *addr, bool is_short) +{ + return ieee802154_clear_pending_addr(addr, is_short); +} + +esp_err_t esp_ieee802154_reset_pending_table(bool is_short) +{ + ieee802154_reset_pending_table(is_short); + return ESP_OK; +} + +int8_t esp_ieee802154_get_recent_rssi(void) +{ + return ieee802154_get_recent_rssi(); +} + +uint8_t esp_ieee802154_get_recent_lqi(void) +{ + return ieee802154_get_recent_lqi(); +} + +esp_err_t esp_ieee802154_receive_handle_done(const uint8_t *frame) +{ + return ieee802154_receive_handle_done(frame); +} + +__attribute__((weak)) void esp_ieee802154_receive_done(uint8_t *data, esp_ieee802154_frame_info_t *frame_info) +{ + +} + +__attribute__((weak)) void esp_ieee802154_receive_sfd_done(void) +{ + +} + +__attribute__((weak)) void esp_ieee802154_receive_failed(uint16_t error) +{ + +} + +__attribute__((weak)) void esp_ieee802154_transmit_done(const uint8_t *frame, const uint8_t *ack, esp_ieee802154_frame_info_t *ack_frame_info) +{ + +} + +__attribute__((weak)) void esp_ieee802154_transmit_failed(const uint8_t *frame, esp_ieee802154_tx_error_t error) +{ + +} + +__attribute__((weak)) void esp_ieee802154_transmit_sfd_done(uint8_t *frame) +{ + +} + +__attribute__((weak)) void esp_ieee802154_cca_done(bool channel_free) +{ + +} + +__attribute__((weak)) void esp_ieee802154_energy_detect_done(int8_t power) +{ + +} + +__attribute__((weak)) void esp_ieee802154_ed_failed(uint16_t error) +{ + +} + +__attribute__((weak)) esp_err_t esp_ieee802154_enh_ack_generator(uint8_t *frame, esp_ieee802154_frame_info_t *frame_info, uint8_t* enhack_frame) +{ + ESP_EARLY_LOGE(IEEE802154_TAG, "Not implement for the enh-ack generating handler"); + return ESP_FAIL; +} + +__attribute__((weak)) void esp_ieee802154_timer0_done(void) +{ + +} + +__attribute__((weak)) void esp_ieee802154_timer1_done(void) +{ + +} + +#if CONFIG_IEEE802154_TXRX_STATISTIC +void esp_ieee802154_txrx_statistic_clear(void) +{ + ieee802154_txrx_statistic_clear(); +} + +void esp_ieee802154_txrx_statistic_print(void) +{ + ieee802154_txrx_statistic_print(); +} +#endif // CONFIG_IEEE802154_TXRX_STATISTIC diff --git a/components/ieee802154/include/esp_ieee802154.h b/components/ieee802154/include/esp_ieee802154.h new file mode 100644 index 0000000000..51adf6ce00 --- /dev/null +++ b/components/ieee802154/include/esp_ieee802154.h @@ -0,0 +1,628 @@ +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include +#include "sdkconfig.h" +#include "esp_err.h" +#include "esp_ieee802154_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Initialize the IEEE 802.15.4 subsystem. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + * + */ +esp_err_t esp_ieee802154_enable(void); + +/** + * @brief Deinitialize the IEEE 802.15.4 subsystem. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_disable(void); + +/** + * @brief Get the operational channel. + * + * @return The channel number (11~26). + * + */ +uint8_t esp_ieee802154_get_channel(void); + +/** + * @brief Set the operational channel. + * + * @param[in] channel The channel number (11-26). + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_channel(uint8_t channel); + +/** + * @brief Get the transmit power. + * + * @return The transmit power in dBm. + * + */ +int8_t esp_ieee802154_get_txpower(void); + +/** + * @brief Set the transmit power. + * + * @param[in] power The transmit power in dBm. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_txpower(int8_t power); + +/** + * @brief Get the promiscuous mode. + * + * @return + * - True The promiscuous mode is enabled. + * - False The promiscuous mode is disabled. + * + */ +bool esp_ieee802154_get_promiscuous(void); + +/** + * @brief Set the promiscuous mode. + * + * @param[in] enable The promiscuous mode to be set. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_promiscuous(bool enable); + +/** + * @brief Get the IEEE 802.15.4 Radio state. + * + * @return The IEEE 802.15.4 Radio state, refer to esp_ieee802154_state_t. + * + */ +esp_ieee802154_state_t esp_ieee802154_get_state(void); + +/** + * @brief Set the IEEE 802.15.4 Radio to sleep state. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t esp_ieee802154_sleep(void); + +/** + * @brief Set the IEEE 802.15.4 Radio to receive state. + * + * @note Radio will continue receiving until it receives a valid frame. + * Refer to `esp_ieee802154_receive_done()`. + * + * @return + * - ESP_OK on success + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t esp_ieee802154_receive(void); + +/** + * @brief Transmit the given frame. + * The transmit result will be reported via `esp_ieee802154_transmit_done()` + * or `esp_ieee802154_transmit_failed()`. + * + * @param[in] frame The pointer to the frame, the frame format: + * |-----------------------------------------------------------------------| + * | Len | MHR | MAC Payload | FCS | + * |-----------------------------------------------------------------------| + * @param[in] cca Perform CCA before transmission if it's true, otherwise transmit the frame directly. + * + * @note During transmission, the hardware calculates the FCS, and send it over the air right after the MAC payload, + * so you just need to prepare the length, mac header and mac payload content. + * + * @return + * - ESP_OK on success. + * - ESP_ERR_INVALID_ARG on an invalid frame. + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t esp_ieee802154_transmit(const uint8_t *frame, bool cca); + +/** + * @brief Set the time to wait for the ack frame. + * + * @param[in] timeout The time to wait for the ack frame, in symbol unit (16 us). + * Default: 0x006C, Range: 0x0000 - 0xFFFF. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_ack_timeout(uint32_t timeout); + +/** + * @brief Get the device PAN ID. + * + * @return The device PAN ID. + * + */ +uint16_t esp_ieee802154_get_panid(void); + +/** + * @brief Set the device PAN ID. + * + * @param[in] panid The device PAN ID. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_panid(uint16_t panid); + +/** + * @brief Get the device short address. + * + * @return The device short address. + * + */ +uint16_t esp_ieee802154_get_short_address(void); + +/** + * @brief Set the device short address. + * + * @param[in] short_address The device short address. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_short_address(uint16_t short_address); + +/** + * @brief Get the device extended address. + * + * @param[out] ext_addr The pointer to the device extended address. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_get_extended_address(uint8_t *ext_addr); + +/** + * @brief Set the device extended address. + * + * @param[in] ext_addr The pointer to the device extended address. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_extended_address(const uint8_t *ext_addr); + +/** + * @brief Get the device PAN ID for specific interface. + * + * @param[in] index The interface index. + * + * @return The device PAN ID. + * + */ +uint16_t esp_ieee802154_get_multipan_panid(esp_ieee802154_multipan_index_t index); + +/** + * @brief Set the device PAN ID for specific interface. + * + * @param[in] index The interface index. + * @param[in] panid The device PAN ID. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_multipan_panid(esp_ieee802154_multipan_index_t index, uint16_t panid); + +/** + * @brief Get the device short address for specific interface. + * + * @param[in] index The interface index. + * + * @return The device short address. + * + */ +uint16_t esp_ieee802154_get_multipan_short_address(esp_ieee802154_multipan_index_t index); + +/** + * @brief Set the device short address for specific interface. + * + * @param[in] index The interface index. + * @param[in] short_address The device short address. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_multipan_short_address(esp_ieee802154_multipan_index_t index, uint16_t short_address); + +/** + * @brief Get the device extended address for specific interface. + * + * @param[in] index The interface index. + * @param[out] ext_addr The pointer to the device extended address. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_get_multipan_extended_address(esp_ieee802154_multipan_index_t index, uint8_t *ext_addr); + +/** + * @brief Set the device extended address for specific interface. + * + * @param[in] index The interface index. + * @param[in] ext_addr The pointer to the device extended address. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_multipan_extended_address(esp_ieee802154_multipan_index_t index, const uint8_t *ext_addr); + +/** + * @brief Get the device current multipan interface enable mask. + * + * @return Current multipan interface enable mask. + * + */ +uint8_t esp_ieee802154_get_multipan_enable(void); + +/** + * @brief Enable specific interface for the device. + * + * As an example, call `esp_ieee802154_set_multipan_enable(BIT(ESP_IEEE802154_MULTIPAN_0) | BIT(ESP_IEEE802154_MULTIPAN_1));` + * to enable multipan interface 0 and 1. + * + * @param[in] mask The multipan interface bit mask. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_multipan_enable(uint8_t mask); + +/** + * @brief Get the device coordinator. + * + * @return + * - True The coordinator is enabled. + * - False The coordinator is disabled. + * + */ +bool esp_ieee802154_get_coordinator(void); + +/** + * @brief Set the device coordinator role. + * + * @param[in] enable The coordinator role to be set. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_coordinator(bool enable); + +/** + * @brief Get the auto frame pending mode. + * + * @return The auto frame pending mode, refer to esp_ieee802154_pending_mode_t. + * + */ +esp_ieee802154_pending_mode_t esp_ieee802154_get_pending_mode(void); + +/** + * @brief Set the auto frame pending mode. + * + * @param[in] pending_mode The auto frame pending mode, refer to esp_ieee802154_pending_mode_t. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_pending_mode(esp_ieee802154_pending_mode_t pending_mode); + +/** + * @brief Add address to the source matching table. + * + * @param[in] addr The pointer to the address. + * @param[in] is_short Short address or Extended address. + * + * @return + * - ESP_OK on success. + * - ESP_ERR_NO_MEM if the pending table is full. + * + */ +esp_err_t esp_ieee802154_add_pending_addr(const uint8_t *addr, bool is_short); + +/** + * @brief Remove address from the source matching table. + * + * @param[in] addr The pointer to the address. + * @param[in] is_short Short address or Extended address. + * + * @return + * - ESP_OK on success. + * - ESP_ERR_NOT_FOUND if the address was not found from the source matching table. + * + */ +esp_err_t esp_ieee802154_clear_pending_addr(const uint8_t *addr, bool is_short); + +/** + * @brief Clear the source matching table to empty. + * + * @param[in] is_short Clear Short address table or Extended address table. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_reset_pending_table(bool is_short); + +/** + * @brief Get the CCA threshold. + * + * @return The CCA threshold in dBm. + * + */ +int8_t esp_ieee802154_get_cca_threshold(void); + +/** + * @brief Set the CCA threshold. + * + * @param[in] cca_threshold The CCA threshold in dBm. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_cca_threshold(int8_t cca_threshold); + +/** + * @brief Get the CCA mode. + * + * @return The CCA mode, refer to esp_ieee802154_cca_mode_t. + * + */ +esp_ieee802154_cca_mode_t esp_ieee802154_get_cca_mode(void); + +/** + * @brief Set the CCA mode. + * + * @param[in] cca_mode The CCA mode, refer to esp_ieee802154_cca_mode_t. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_cca_mode(esp_ieee802154_cca_mode_t cca_mode); + +/** + * @brief Enable rx_on_when_idle mode, radio will receive during idle. + * + * @param[in] enable Enable/Disable rx_on_when_idle mode. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_rx_when_idle(bool enable); + +/** + * @brief Get the rx_on_when_idle mode. + * + * @return rx_on_when_idle mode. + * + */ +bool esp_ieee802154_get_rx_when_idle(void); + +/** + * @brief Perform energy detection. + * + * @param[in] duration The duration of energy detection, in symbol unit (16 us). + * The result will be reported via esp_ieee802154_energy_detect_done(). + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t esp_ieee802154_energy_detect(uint32_t duration); + +/** + * @brief Notify the IEEE 802.15.4 Radio that the frame is handled done by upper layer. + * + * @param[in] frame The pointer to the frame which was passed from the function `esp_ieee802154_receive_done()` + * or ack frame from `esp_ieee802154_transmit_done()`. + * + * @return + * - ESP_OK on success + * - ESP_FAIL if frame is invalid. + * + */ +esp_err_t esp_ieee802154_receive_handle_done(const uint8_t *frame); + +/** Below are the events generated by IEEE 802.15.4 subsystem, which are in ISR context **/ +/** + * @brief A Frame was received. + * + * @note User must call the function `esp_ieee802154_receive_handle_done()` to notify 802.15.4 driver after the received frame is handled. + * + * @param[in] frame The point to the received frame, frame format: + * |-----------------------------------------------------------------------| + * | Len | MHR | MAC Payload (no FCS) | + * |-----------------------------------------------------------------------| + * @param[in] frame_info More information of the received frame, refer to esp_ieee802154_frame_info_t. + * + * @note During receiving, the hardware calculates the FCS of the received frame, and may drop it if the FCS doesn't match, only the valid + * frames will be received and notified by esp_ieee802154_receive_done(). Please note that the FCS field is replaced by RSSI and LQI + * value of the received frame. + * + */ +extern void esp_ieee802154_receive_done(uint8_t *frame, esp_ieee802154_frame_info_t *frame_info); + +/** + * @brief The SFD field of the frame was received. + * + */ +extern void esp_ieee802154_receive_sfd_done(void); + +/** + * @brief The Frame Transmission succeeded. + * + * @note If the ack frame is not null, user must call the function `esp_ieee802154_receive_handle_done()` to notify 802.15.4 driver + * after the ack frame is handled. + * + * @param[in] frame The pointer to the transmitted frame. + * @param[in] ack The received ACK frame, it could be NULL if the transmitted frame's AR bit is not set. + * @param[in] ack_frame_info More information of the ACK frame, refer to esp_ieee802154_frame_info_t. + * + */ +extern void esp_ieee802154_transmit_done(const uint8_t *frame, const uint8_t *ack, esp_ieee802154_frame_info_t *ack_frame_info); + +/** + * @brief The Frame Transmission failed. Refer to `esp_ieee802154_transmit()`. + * + * @param[in] frame The pointer to the frame. + * @param[in] error The transmission failure reason, refer to esp_ieee802154_tx_error_t. + * + */ +extern void esp_ieee802154_transmit_failed(const uint8_t *frame, esp_ieee802154_tx_error_t error); + +/** + * @brief The SFD field of the frame was transmitted. + * + */ +extern void esp_ieee802154_transmit_sfd_done(uint8_t *frame); + +/** + * @brief The energy detection done. Refer to `esp_ieee802154_energy_detect()`. + * + * @param[in] power The detected power level, in dBm. + * + */ +extern void esp_ieee802154_energy_detect_done(int8_t power); + +/** + * @brief Set the IEEE 802.15.4 Radio to receive state at a specific time. + * + * @note Radio will start receiving after the timestamp, and continue receiving until it receives a valid frame. + * Refer to `esp_ieee802154_receive_done()`. + * + * @param[in] time A specific timestamp for starting receiving. + * @return + * - ESP_OK on success + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t esp_ieee802154_receive_at(uint32_t time); + +/** + * @brief Transmit the given frame at a specific time. + * The transmit result will be reported via `esp_ieee802154_transmit_done()` + * or `esp_ieee802154_transmit_failed()`. + * + * @param[in] frame The pointer to the frame. Refer to `esp_ieee802154_transmit()`. + * @param[in] cca Perform CCA before transmission if it's true, otherwise transmit the frame directly. + * @param[in] time A specific timestamp for starting transmission. + * + * @return + * - ESP_OK on success. + * - ESP_ERR_INVALID_ARG on an invalid frame. + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t esp_ieee802154_transmit_at(const uint8_t *frame, bool cca, uint32_t time); + +/** + * @brief Get the RSSI of the most recent received frame. + * + * @return The value of RSSI. + * + */ +int8_t esp_ieee802154_get_recent_rssi(void); + +/** + * @brief Get the LQI of the most recent received frame. + * + * @return The value of LQI. + * + */ +uint8_t esp_ieee802154_get_recent_lqi(void); + +/** + * @brief Set the key and addr for a frame needs to be encrypted by HW. + * + * @param[in] frame A frame needs to be encrypted. Refer to `esp_ieee802154_transmit()`. + * @param[in] key A 16-bytes key for encryption. + * @param[in] addr An 8-bytes addr for HW to generate nonce, in general, is the device extended address. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + */ +esp_err_t esp_ieee802154_set_transmit_security(uint8_t *frame, uint8_t *key, uint8_t *addr); + +/** + * @brief This function will be called when a received frame needs to be acked with Enh-Ack, the upper + * layer should generate the Enh-Ack frame in this callback function. + * + * @param[in] frame The received frame. + * @param[in] frame_info The frame information. Refer to `esp_ieee802154_frame_info_t`. + * @param[out] enhack_frame The Enh-ack frame need to be generated via this function, HW will send it back after AIFS. + * + * @return + * - ESP_OK if Enh-Ack generates done. + * - ESP_FAIL if Enh-Ack generates failed. + * + */ +esp_err_t esp_ieee802154_enh_ack_generator(uint8_t *frame, esp_ieee802154_frame_info_t *frame_info, uint8_t* enhack_frame); + +/** + * The configurable definitions via Kconfig + */ +#if CONFIG_IEEE802154_TXRX_STATISTIC + +/** + * @brief Clear the current IEEE802.15.4 statistic. + * + */ +void esp_ieee802154_txrx_statistic_clear(void); + +/** + * @brief Print the current IEEE802.15.4 statistic. + * + */ +void esp_ieee802154_txrx_statistic_print(void); +#endif // CONFIG_IEEE802154_TXRX_STATISTIC + +#ifdef __cplusplus +} +#endif diff --git a/components/ieee802154/include/esp_ieee802154_types.h b/components/ieee802154/include/esp_ieee802154_types.h new file mode 100644 index 0000000000..8c551f7552 --- /dev/null +++ b/components/ieee802154/include/esp_ieee802154_types.h @@ -0,0 +1,88 @@ +/* + * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include + +#define US_PER_SYMBLE 16 + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief The radio state types. + */ +typedef enum { + ESP_IEEE802154_RADIO_DISABLE, /*!< Radio not up */ + ESP_IEEE802154_RADIO_IDLE, /*!< Radio in the idle state */ + ESP_IEEE802154_RADIO_SLEEP, /*!< Radio in the sleep state */ + ESP_IEEE802154_RADIO_RECEIVE, /*!< Radio in the receive state */ + ESP_IEEE802154_RADIO_TRANSMIT, /*!< Radio in the transmit state */ +} esp_ieee802154_state_t; + +/** + * @brief The transmit error types. + */ +typedef enum { + ESP_IEEE802154_TX_ERR_NONE, /*!< No transmit error */ + ESP_IEEE802154_TX_ERR_CCA_BUSY, /*!< Channel is busy */ + ESP_IEEE802154_TX_ERR_ABORT, /*!< Transmit abort */ + ESP_IEEE802154_TX_ERR_NO_ACK, /*!< No Ack frame received until timeout */ + ESP_IEEE802154_TX_ERR_INVALID_ACK, /*!< Invalid Ack frame */ + ESP_IEEE802154_TX_ERR_COEXIST, /*!< Rejected by coexist system */ + ESP_IEEE802154_TX_ERR_SECURITY, /*!< Invalid security configuration */ +} esp_ieee802154_tx_error_t; + +/** + * @brief The CCA mode types. + */ +typedef enum { + ESP_IEEE802154_CCA_MODE_CARRIER, /*!< Carrier only */ + ESP_IEEE802154_CCA_MODE_ED, /*!< Energy Detect only */ + ESP_IEEE802154_CCA_MODE_CARRIER_OR_ED, /*!< Carrier or Energy Detect */ + ESP_IEEE802154_CCA_MODE_CARRIER_AND_ED, /*!< Carrier and Energy Detect */ +} esp_ieee802154_cca_mode_t; + +/** + * @brief The frame pending mode types. + */ +typedef enum { + ESP_IEEE802154_AUTO_PENDING_DISABLE, /*!< Frame pending bit always set to 1 in the ack to Data Request */ + ESP_IEEE802154_AUTO_PENDING_ENABLE, /*!< Frame pending bit set to 1 if src address matches, in the ack to Data Request */ + ESP_IEEE802154_AUTO_PENDING_ENHANCED, /*!< Frame pending bit set to 1 if src address matches, in all ack frames */ + ESP_IEEE802154_AUTO_PENDING_ZIGBEE, /*!< Frame pending bit set to 0 only if src address is short address and matches in table, in the ack to Data Request */ +} esp_ieee802154_pending_mode_t; + +/** +* @brief The four groups of mac filter interface index. +*/ +typedef enum { + ESP_IEEE802154_MULTIPAN_0 = 0, + ESP_IEEE802154_MULTIPAN_1 = 1, + ESP_IEEE802154_MULTIPAN_2 = 2, + ESP_IEEE802154_MULTIPAN_3 = 3, + ESP_IEEE802154_MULTIPAN_MAX +} esp_ieee802154_multipan_index_t; + +/** + * @brief The information of received 15.4 frame. + * + */ +typedef struct { + bool pending; /*!< The frame was acked with frame pending set */ + bool process; /*!< The frame needs to be processed by the upper layer */ + uint8_t channel; /*!< Channel */ + int8_t rssi; /*!< RSSI */ + uint8_t lqi; /*!< LQI */ + uint64_t timestamp; /*!< The timestamp when the frame's SFD field was received */ +} esp_ieee802154_frame_info_t; + +#ifdef __cplusplus +} +#endif diff --git a/components/ieee802154/lib/.gitlab-ci.yml b/components/ieee802154/lib/.gitlab-ci.yml new file mode 100755 index 0000000000..527ddb3a2a --- /dev/null +++ b/components/ieee802154/lib/.gitlab-ci.yml @@ -0,0 +1,31 @@ +stages: + - deploy + +push_master_to_github: + stage: deploy + tags: + - github_sync + only: + - master + - /^release\/v/ +# when: on_success + image: $CI_DOCKER_REGISTRY/esp32-ci-env + variables: + GIT_STRATEGY: clone + GITHUB_PUSH_REFS: refs/remotes/origin/release refs/remotes/origin/master + script: + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64 + - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config + - git remote add github git@github.com:espressif/esp-ieee802154-lib.git + # What the next line of script does: goes through the list of refs for all branches we push to github, + # generates a snippet of shell which is evaluated. The snippet checks CI_BUILD_REF against the SHA + # (aka objectname) at tip of each branch, and if any SHAs match then it checks out the local branch + # and then pushes that ref to a corresponding github branch + # + # NB: In gitlab 9.x, CI_BUILD_REF was deprecated. New name is CI_COMMIT_REF. If below command suddenly + # generates bash syntax errors, this is probably why. + - eval $(git for-each-ref --shell bash --format 'if [ $CI_BUILD_REF == %(objectname) ]; then git checkout -B %(refname:strip=3); git push --follow-tags github %(refname:strip=3); fi;' $GITHUB_PUSH_REFS) diff --git a/components/ieee802154/lib/LICENSE b/components/ieee802154/lib/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/components/ieee802154/lib/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/components/ieee802154/lib/README.rst b/components/ieee802154/lib/README.rst new file mode 100644 index 0000000000..a1f1cf824c --- /dev/null +++ b/components/ieee802154/lib/README.rst @@ -0,0 +1,10 @@ +ESP IEEE 802.15.4 Libraries +==================== + +This repository contains binary libraries supporting the IEEE 802.15.4 subsystem. It is used as a submodule within `Espressif IoT Development Framework`_ (ESP-IDF). + +Files in this repository are Copyright (C) 2015-2021 Espressif Systems. + +These binary libraries are provided under the same license as the parent esp-idf project - the Apache License 2.0 as provided in the file LICENSE. (The license text refers to this as "Object" form.) + +.. _Espressif IoT Development Framework: https://github.com/espressif/esp-idf diff --git a/components/ieee802154/lib/esp32c6/lib802154.a b/components/ieee802154/lib/esp32c6/lib802154.a new file mode 100644 index 0000000000000000000000000000000000000000..aba5317e1252c8bd915256d7040dd2ef409cc973 GIT binary patch literal 589954 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 z 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 A4*&oF literal 0 HcmV?d00001 diff --git a/components/ieee802154/lib/esp32h2/lib802154.a b/components/ieee802154/lib/esp32h2/lib802154.a new file mode 100644 index 0000000000000000000000000000000000000000..e8a72e9a958dce9c554bc0bc4807ad8509e0cb93 GIT binary patch literal 591786 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

xYm}a}!2O#uh=)6Y_^eHbUb)_q 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∾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

  • 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 literal 0 HcmV?d00001 diff --git a/components/ieee802154/lib/esp32h2/rev1/lib802154.a b/components/ieee802154/lib/esp32h2/rev1/lib802154.a new file mode 100644 index 0000000000000000000000000000000000000000..1a65abc94486d81674a0c7ab6f8aa678f0c620f6 GIT binary patch literal 130510 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 z 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
    t_q_6M_6A!1RfP5;GI{X@y8H4DbHkU2G3GP(e8O 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 fiMP>3n +#include +#include "sdkconfig.h" +#include "esp_err.h" +#include "esp_ieee802154_frame.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief The radio pending table, which is utilized to determine whether the received frame should be responded to with pending bit enabled. + */ + +#define IEEE802154_PENDING_TABLE_MASK_BITS (8) +#define IEEE802154_PENDING_TABLE_MASK_SIZE (((CONFIG_IEEE802154_PENDING_TABLE_SIZE - 1) / IEEE802154_PENDING_TABLE_MASK_BITS) + 1) +typedef struct { + uint8_t short_addr[CONFIG_IEEE802154_PENDING_TABLE_SIZE][IEEE802154_FRAME_SHORT_ADDR_SIZE]; /*!< Short address table */ + uint8_t ext_addr[CONFIG_IEEE802154_PENDING_TABLE_SIZE][IEEE802154_FRAME_EXT_ADDR_SIZE]; /*!< Extend address table */ + uint8_t short_addr_mask[IEEE802154_PENDING_TABLE_MASK_SIZE]; /*!< The mask which the index of short address table is used */ + uint8_t ext_addr_mask[IEEE802154_PENDING_TABLE_MASK_SIZE]; /*!< The mask which the index of extended address table is used */ +} ieee802154_pending_table_t; + +/** + * @brief Add an address to the pending table. + * + * @param[in] addr The pointer to the address needs to be added. + * @param[in] is_short The type of address, true for short address, false for extended. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure due to the table is full. + * + */ +esp_err_t ieee802154_add_pending_addr(const uint8_t *addr, bool is_short); + +/** + * @brief Remove an address in pending table. + * + * @param[in] addr The pointer to the address needs to be cleared. + * @param[in] is_short The type of address, true for short address, false for extended. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure if the given address is not present in the pending table. + * + */ +esp_err_t ieee802154_clear_pending_addr(const uint8_t *addr, bool is_short); + +/** + * @brief Reset the pending table, only clear the mask bits for finishing the process quickly. + * + * @param[in] is_short The type of address, true for resetting short address table, false for extended. + * + */ +void ieee802154_reset_pending_table(bool is_short); + +/** + * @brief Check whether the pending bit should be set or not in the ack frame. + * + * @param[in] frame The pointer to the received frame. + * + * @return + * - True The pending bit should be set, otherwise False. + * + */ +bool ieee802154_ack_config_pending_bit(const uint8_t *frame); + +#ifdef __cplusplus +} +#endif diff --git a/components/ieee802154/private_include/esp_ieee802154_dev.h b/components/ieee802154/private_include/esp_ieee802154_dev.h new file mode 100644 index 0000000000..04d6dc72ff --- /dev/null +++ b/components/ieee802154/private_include/esp_ieee802154_dev.h @@ -0,0 +1,254 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include +#include "sdkconfig.h" +#include "esp_log.h" +#include "esp_err.h" +#include "soc/soc.h" +#include "esp_ieee802154_frame.h" +#include "esp_ieee802154.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// These three macros are in microseconds, used for transmit_at +#define IEEE802154_ED_TRIG_TX_RAMPUP_TIME_US 256 +#define IEEE802154_TX_RAMPUP_TIME_US 98 +#define IEEE802154_RX_RAMPUP_TIME_US 146 + +/** + * @brief The state of IEEE802154 radio process. + */ +typedef enum { + IEEE802154_STATE_DISABLE, /*!< IEEE802154 radio state disable */ + IEEE802154_STATE_IDLE, /*!< IEEE802154 radio state idle */ + IEEE802154_STATE_SLEEP, /*!< IEEE802154 radio state sleep */ + IEEE802154_STATE_RX, /*!< IEEE802154 radio state rx */ + IEEE802154_STATE_TX_ACK, /*!< IEEE802154 radio state tx ack */ + IEEE802154_STATE_TX_ENH_ACK, /*!< IEEE802154 radio state tx enh-ack */ + IEEE802154_STATE_TX_CCA, /*!< IEEE802154 radio state cca trigger tx */ + IEEE802154_STATE_TX, /*!< IEEE802154 radio state tx */ + IEEE802154_STATE_TEST_TX, /*!< IEEE802154 radio state test mode tx */ + IEEE802154_STATE_RX_ACK, /*!< IEEE802154 radio state rx ack */ + IEEE802154_STATE_ED, /*!< IEEE802154 radio state ED */ + IEEE802154_STATE_CCA, /*!< IEEE802154 radio state CCA */ +} ieee802154_state_t; + +/** + * @brief Initialize the clock of IEEE 802.15.4 subsystem. + * + */ +void ieee802154_enable(void); + +/** + * @brief Deinitialize the clock of IEEE 802.15.4 subsystem. + * + */ +void ieee802154_disable(void); + +/** + * @brief Enable the RF. + * + */ +void ieee802154_rf_enable(void); + +/** + * @brief Disable the RF. + * + */ +void ieee802154_rf_disable(void); +/** + * @brief Initialize the IEEE 802.15.4 MAC. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure. + * + */ +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. + * + * @param[in] frame The pointer to the frame + * @param[in] cca Perform CCA before transmission if it's true, otherwise transmit the frame directly. + * + * @return + * - ESP_OK on success. + * - ESP_ERR_INVALID_ARG on an invalid frame. + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t ieee802154_transmit(const uint8_t *frame, bool cca); + +/** + * @brief Set the IEEE 802.15.4 Radio to receive state. + * + * @return + * - ESP_OK on success + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t ieee802154_receive(void); + +/** + * @brief Notify the IEEE 802.15.4 Radio that the frame is handled done by upper layer. + * + * @param[in] frame The pointer to the frame which was passed from the function esp_ieee802154_receive_done. + * or ack frame from esp_ieee802154_transmit_done. + * + * @return + * - ESP_OK on success + * - ESP_FAIL if frame is invalid. + * + */ +esp_err_t ieee802154_receive_handle_done(const uint8_t* frame); + +/** + * @brief Transmit the given frame at a specific time. + * + * @param[in] frame The pointer to the frame. Refer to `esp_ieee802154_transmit()`. + * @param[in] cca Perform CCA before transmission if it's true, otherwise transmit the frame directly. + * @param[in] time A specific timestamp for starting transmission. + * + * @return + * - ESP_OK on success. + * - ESP_ERR_INVALID_ARG on an invalid frame. + * - ESP_FAIL on failure due to invalid state. + * + * Note: The transmit result will be reported via esp_ieee802154_transmit_done() + * or esp_ieee802154_transmit_failed(). + * + */ +esp_err_t ieee802154_transmit_at(const uint8_t *frame, bool cca, uint32_t time); + +/** + * @brief Set the IEEE 802.15.4 Radio to receive state at a specific time. + * + * + * @param[in] time A specific timestamp for starting receiving. + * @return + * - ESP_OK on success + * - ESP_FAIL on failure due to invalid state. + * + * Note: Radio will start receiving after the timestamp, and continue receiving until it receives a valid frame. + * Ref to esp_ieee802154_receive_done(). + * + */ +esp_err_t ieee802154_receive_at(uint32_t time); + +/** + * @brief Set the IEEE 802.15.4 Radio to sleep state. + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t ieee802154_sleep(void); + +/** + * @brief Perform energy detection(ED). + * + * @param[in] duration The duration of energy detection, in symbol unit (16 us). + * The result will be reported via esp_ieee802154_energy_detect_done(). + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t ieee802154_energy_detect(uint32_t duration); + +/** + * @brief Perform clear channel assessment(CCA). + * + * @return + * - ESP_OK on success. + * - ESP_FAIL on failure due to invalid state. + * + */ +esp_err_t ieee802154_cca(void); + +/** + * @brief Get the RSSI of the most recent received frame. + * + * @return The value of RSSI. + * + */ +int8_t ieee802154_get_recent_rssi(void); + +/** + * @brief Get the LQI of the most recent received frame. + * + * @return The value of LQI. + * + */ +uint8_t ieee802154_get_recent_lqi(void); + +/** + * @brief Get the IEEE 802.15.4 Radio state. + * + * @return + * - Current state of IEEE 802.15.4 Radio. + * + */ +ieee802154_state_t ieee802154_get_state(void); + +/** The following three functions are only used for internal test. **/ +/** + * @brief The clear channel assessment done. + * + * @param[in] channel_free True if the channel is clear, otherwise false. + * + */ +extern void esp_ieee802154_cca_done(bool channel_free); + +/** + * @brief Current receiving process is failed due to some reasons. + * + * @param[in] error The specific received failed reason. + * + */ +extern void esp_ieee802154_receive_failed(uint16_t error); + +/** + * @brief Current energy detection(ED) is failed due to some reasons. + * + * @param[in] error The specific ED failed reason. + * + */ +extern void esp_ieee802154_ed_failed(uint16_t error); + +#if CONFIG_IEEE802154_TEST +#define IEEE802154_STATIC +#define IEEE802154_INLINE +extern void esp_ieee802154_timer0_done(void); +extern void esp_ieee802154_timer1_done(void); +#else +#define IEEE802154_STATIC static +#define IEEE802154_INLINE inline +#endif // CONFIG_IEEE802154_TEST +#define IEEE802154_NOINLINE __attribute__((noinline)) + +#ifdef __cplusplus +} +#endif diff --git a/components/ieee802154/private_include/esp_ieee802154_frame.h b/components/ieee802154/private_include/esp_ieee802154_frame.h new file mode 100644 index 0000000000..497c1f7ee7 --- /dev/null +++ b/components/ieee802154/private_include/esp_ieee802154_frame.h @@ -0,0 +1,199 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include +#include "esp_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define IEEE802154_FRAME_INVALID_OFFSET 0xff +#define IEEE802154_FRAME_INVALID_ADDR_MODE 0xff + +#define IEEE802154_FRAME_TYPE_OFFSET 1 +#define IEEE802154_FRAME_TYPE_MASK 0x07 +#define IEEE802154_FRAME_TYPE_BEACON 0x00 +#define IEEE802154_FRAME_TYPE_DATA 0x01 +#define IEEE802154_FRAME_TYPE_ACK 0x02 +#define IEEE802154_FRAME_TYPE_COMMAND 0x03 +#define IEEE802154_FRAME_TYPE_MULTIPURPOSE 0x05 +#define IEEE802154_FRAME_TYPE_FRAGMENT 0x06 +#define IEEE802154_FRAME_TYPE_EXTENDED 0x07 + +#define IEEE802154_FRAME_SECURITY_OFFSET 1 +#define IEEE802154_FRAME_SECURITY_BIT BIT(3) +#define IEEE802154_FRAME_SECURITY_MASK 0x07 +#define IEEE802154_FRAME_SECURITY_MIC_32 0x01 +#define IEEE802154_FRAME_SECURITY_MIC_64 0x02 +#define IEEE802154_FRAME_SECURITY_MIC_128 0x03 +#define IEEE802154_FRAME_SECURITY_ENC_MIC_32 0x05 +#define IEEE802154_FRAME_SECURITY_ENC_MIC_64 0x06 +#define IEEE802154_FRAME_SECURITY_ENC_MIC_128 0x07 +#define IEEE802154_FRAME_SECURITY_MIC_32_SIZE 4 +#define IEEE802154_FRAME_SECURITY_MIC_64_SIZE 8 +#define IEEE802154_FRAME_SECURITY_MIC_128_SIZE 16 + +#define IEEE802154_FRAME_KEY_ID_MODE_MASK 0x18 +#define IEEE802154_FRAME_KEY_ID_MODE_1 0x08 +#define IEEE802154_FRAME_KEY_ID_MODE_2 0x10 +#define IEEE802154_FRAME_KEY_ID_MODE_3 0x18 +#define IEEE802154_FRAME_KEY_ID_MODE_1_SIZE 1 +#define IEEE802154_FRAME_KEY_ID_MODE_2_SIZE 5 +#define IEEE802154_FRAME_KEY_ID_MODE_3_SIZE 9 + +#define IEEE802154_FRAME_COUNTER_SUPPRESS_BIT 0x20 +#define IEEE802154_FRAME_COUNTER_SIZE 4 + +#define IEEE802154_FRAME_AR_OFFSET 1 +#define IEEE802154_FRAME_AR_BIT BIT(5) + +#define IEEE802154_FRAME_PANID_COMP_OFFSET 1 +#define IEEE802154_FRAME_PANID_COMP_BIT BIT(6) + +#define IEEE802154_FRAME_VERSION_OFFSET 2 +#define IEEE802154_FRAME_VERSION_MASK 0x30 +#define IEEE802154_FRAME_VERSION_0 0x00 // IEEE 802.15.4 - 2003 +#define IEEE802154_FRAME_VERSION_1 0x10 // IEEE 802.15.4 - 2006 & 2011 +#define IEEE802154_FRAME_VERSION_2 0x20 // IEEE 802.15.4 - 2015 +#define IEEE802154_FRAME_VERSION_R 0x30 // Reserved + +#define IEEE802154_FRAME_DSN_OFFSET 2 +#define IEEE802154_FRAME_DSN_BIT BIT(0) +#define IEEE802154_FRAME_IE_OFFSET 2 +#define IEEE802154_FRAME_IE_BIT BIT(1) + +#define IEEE802154_FRAME_IE_HEAD_ID_MASK 0x3f80 +#define IEEE802154_IE_TYPE_HT2 0x3f80 +#define IEEE802154_FRAME_IE_SUBFIELD_LEN_MASK 0x007f +#define IEEE802154_FRAME_IE_HEAD_LEN 2 + +#define IEEE802154_FRAME_DST_MODE_OFFSET 2 +#define IEEE802154_FRAME_DST_MODE_MASK 0x0C +#define IEEE802154_FRAME_DST_MODE_NONE 0x00 +#define IEEE802154_FRAME_DST_MODE_SHORT 0x08 +#define IEEE802154_FRAME_DST_MODE_EXT 0x0C + +#define IEEE802154_FRAME_SRC_MODE_OFFSET 2 +#define IEEE802154_FRAME_SRC_MODE_MASK 0xC0 +#define IEEE802154_FRAME_SRC_MODE_NONE 0x00 +#define IEEE802154_FRAME_SRC_MODE_SHORT 0x80 +#define IEEE802154_FRAME_SRC_MODE_EXT 0xC0 + +#define IEEE802154_CMD_INVALID 0x00 +#define IEEE802154_CMD_DATA_REQ 0x04 + +#define IEEE802154_FRAME_PHR_SIZE 1 +#define IEEE802154_FRAME_FCF_SIZE 2 +#define IEEE802154_FRAME_FCS_SIZE 2 +#define IEEE802154_FRAME_DSN_SIZE 1 +#define IEEE802154_FRAME_PANID_SIZE 2 +#define IEEE802154_FRAME_SHORT_ADDR_SIZE 2 +#define IEEE802154_FRAME_EXT_ADDR_SIZE 8 +#define IEEE802154_FRAME_SE_HEAD_SIZE 1 +#define IEEE802154_FRAME_COMMAND_ID_LEN 1 + +/** + * @brief Get the frame type. + * + * @param[in] frame The pointer to the frame. + * + * @return + * - The type of the frame. + * + */ +uint8_t ieee802154_frame_get_type(const uint8_t *frame); + +/** + * @brief Get the frame version. + * + * @param[in] frame The pointer to the frame. + * + * @return + * - The version of the frame. + * + */ +uint8_t ieee802154_frame_get_version(const uint8_t *frame); + +/** + * @brief Is the frame ack required. + * + * @param[in] frame The pointer to the frame. + * + * @return + * - True if the frame is ack required, otherwise false. + * + */ +bool ieee802154_frame_is_ack_required(const uint8_t *frame); + +/** + * @brief Get the destination address of the frame. + * + * @param[in] frame The pointer to the frame. + * @param[out] addr The pointer to the address. + * + * @return + * - IEEE802154_FRAME_DST_MODE_NONE if destination adress mode is none. + * - IEEE802154_FRAME_DST_MODE_SHORT if destination adress mode is short. + * - IEEE802154_FRAME_DST_MODE_EXT if destination adress mode is extended. + * + */ +uint8_t ieee802154_frame_get_dst_addr(const uint8_t *frame, uint8_t *addr); + +/** + * @brief Get the source address of the frame. + * + * @param[in] frame The pointer to the frame. + * @param[out] addr The pointer to the address. + * + * @return + * - IEEE802154_FRAME_SRC_MODE_NONE if source adress mode is none. + * - IEEE802154_FRAME_SRC_MODE_SHORT if source adress mode is short. + * - IEEE802154_FRAME_SRC_MODE_EXT if source adress mode is extended. + * + */ +uint8_t ieee802154_frame_get_src_addr(const uint8_t *frame, uint8_t *addr); + +/** + * @brief Get the offset of the private payload. + * + * @param[in] frame The pointer to the frame. + * + * @return + * - The offset of the private payload + * + */ +uint8_t ieee802154_frame_get_security_payload_offset(uint8_t *frame); + +/** + * @brief Get the destination PAN ID of the frame. + * + * @param[in] frame The pointer to the frame. + * @param[out] panid The pointer to the destination PAN ID. + * + * @return + * - ESP_OK if destination PAN ID is present, otherwise ESP_FAIL. + * + */ +esp_err_t ieee802154_frame_get_dest_panid(const uint8_t *frame, uint8_t *panid); + +/** + * @brief Get the source PAN ID of the frame. + * + * @param[in] frame The pointer to the frame. + * @param[out] panid The pointer to the source PAN ID. + * + * @return + * - ESP_OK if source PAN ID is present, otherwise ESP_FAIL. + * + */ +esp_err_t ieee802154_frame_get_src_panid(const uint8_t *frame, uint8_t *panid); +#ifdef __cplusplus +} +#endif diff --git a/components/ieee802154/private_include/esp_ieee802154_pib.h b/components/ieee802154/private_include/esp_ieee802154_pib.h new file mode 100644 index 0000000000..d26ea6b7d2 --- /dev/null +++ b/components/ieee802154/private_include/esp_ieee802154_pib.h @@ -0,0 +1,234 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include +#include "hal/ieee802154_ll.h" +#include "esp_ieee802154_frame.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief The PAN information base(PIB) of IEEE802154 radio. + */ +typedef struct { + bool auto_ack_tx; /*!< A flag indicates auto-tx ack mode is enabled or not */ + bool auto_ack_rx; /*!< A flag indicates auto-rx ack mode is enabled or not */ + bool enhance_ack_tx; /*!< A flag indicates enh-ack timing mode is enabled or not */ + bool promiscuous; /*!< A flag indicates promiscuous mode is enabled or not */ + bool coordinator; /*!< A flag indicates the device is coordinator or not*/ + bool rx_when_idle; /*!< A flag indicates the device is rx on when idle or not */ + int8_t txpower; /*!< Tx power configuration */ + uint8_t channel; /*!< Channel configuration */ + ieee802154_ll_pending_mode_t pending_mode; /*!< Pending mode configuration */ + int8_t cca_threshold; /*!< CCA threshold */ + ieee802154_ll_cca_mode_t cca_mode; /*!< CCA mode */ +} ieee802154_pib_t; + +/** + * @brief Initialize the PAN information base(PIB) of IEEE802154 radio. + * + */ +void ieee802154_pib_init(void); + +/** + * @brief Update the PAN information base(PIB) of IEEE802154 radio. + * + */ +void ieee802154_pib_update(void); + +/** + * @brief Get the state of PIB, if is pending, the PIB should be updated to hardware. + * + * @return + * - True if the PIB is pending, otherwise false. + */ +bool ieee802154_pib_is_pending(void); + +/** + * @brief Set a specific channel to the PIB. + * + * @param[in] channel The channel. + * + */ +void ieee802154_pib_set_channel(uint8_t channel); + +/** + * @brief Get the channel from the PIB. + * + * @return + * - The channel has been set in the PIB. + */ +uint8_t ieee802154_pib_get_channel(void); + +/** + * @brief Set a specific transmission power to the PIB. + * + * @param[in] power The power. + * + */ +void ieee802154_pib_set_power(int8_t power); + +/** + * @brief Get the transmission power from the PIB. + * + * @return + * - The transmission power has been set in the PIB. + */ +int8_t ieee802154_pib_get_power(void); + +/** + * @brief Set the promiscuous mode to the PIB. + * + * @param[in] enable True for enabling the promiscuous mode, otherwise false. + * + */ +void ieee802154_pib_set_promiscuous(bool enable); + +/** + * @brief Get the promiscuous mode from the PIB. + * + * @return + * - The promiscuous mode has been set in the PIB. + */ +bool ieee802154_pib_get_promiscuous(void); + +/** + * @brief Set a specific CCA threshold to the PIB. + * + * @param[in] cca_threshold The CCA threshold. + * + */ +void ieee802154_pib_set_cca_threshold(int8_t cca_threshold); + +/** + * @brief Get the CCA threshold from the PIB. + * + * @return + * - The CCA threshold has been set in the PIB. + */ + int8_t ieee802154_pib_get_cca_threshold(void); + +/** + * @brief Set the CCA mode to the PIB. + * + * @param[in] cca_mode The CCA mode. + * + */ +void ieee802154_pib_set_cca_mode(ieee802154_ll_cca_mode_t cca_mode); + +/** + * @brief Get the CCA mode from the PIB. + * + * @return + * - The CCA mode has been set in the PIB. + */ +ieee802154_ll_cca_mode_t ieee802154_pib_get_cca_mode(void); + +/** + * @brief Configure the auto-ack transmission mode to the PIB. + * + * @param[in] enable True for enabling the auto-ack transmission mode, otherwise false. + * + */ +void ieee802154_pib_set_auto_ack_tx(bool enable); + +/** + * @brief Get the auto-ack transmission mode from the PIB. + * + * @return + * - The auto-ack transmission mode has been set in the PIB. + */ +bool ieee802154_pib_get_auto_ack_tx(void); + +/** + * @brief Configure the auto-ack receiving mode to the PIB. + * + * @param[in] enable True for enabling the auto-ack receiving mode, otherwise false. + * + */ +void ieee802154_pib_set_auto_ack_rx(bool enable); + +/** + * @brief Get the auto-ack receiving mode from the PIB. + * + * @return + * - The auto-ack receiving mode has been set in the PIB. + */ +bool ieee802154_pib_get_auto_ack_rx(void); + +/** + * @brief Configure the enh-ack timing mode to the PIB. + * + * @param[in] enable True for enabling the enh-ack timing mode, otherwise false. + * + */ +void ieee802154_pib_set_enhance_ack_tx(bool enable); + +/** + * @brief Get the enh-ack timing mode from the PIB. + * + * @return + * - The enh-ack timing mode has been set in the PIB. + */ +bool ieee802154_pib_get_enhance_ack_tx(void); + +/** + * @brief Configure this bit to the PIB to indicate the device is coordinator. + * + * @param[in] enable True for configuring the device coordinator, otherwise false. + * + */ +void ieee802154_pib_set_coordinator(bool enable); + +/** + * @brief Get the coordinator configuration of device from the PIB. + * + * @return + * - The coordinator configuration of device has been set in the PIB. + */ +bool ieee802154_pib_get_coordinator(void); + +/** + * @brief Configure the pending mode to the PIB. + * + * @param[in] pending_mode The pending mode. + * + */ +void ieee802154_pib_set_pending_mode(ieee802154_ll_pending_mode_t pending_mode); + +/** + * @brief Get the pending mode from the PIB. + * + * @return + * - The pending mode has been set in the PIB. + */ +ieee802154_ll_pending_mode_t ieee802154_pib_get_pending_mode(void); + +/** + * @brief Configure the radio mode when the radio is going to enter idle to the PIB. + * + * @param[in] enable True for continuing to receive when the radio is going to enter ilde, otherwise false. + * + */ +void ieee802154_pib_set_rx_when_idle(bool enable); + +/** + * @brief Get the radio mode when the radio is going to enter ilde to the PIB. + * + * @return + * - True for continuing to receive when the radio is going to enter ilde, otherwise false. + * + */ +bool ieee802154_pib_get_rx_when_idle(void); + +#ifdef __cplusplus +} +#endif diff --git a/components/ieee802154/private_include/esp_ieee802154_sec.h b/components/ieee802154/private_include/esp_ieee802154_sec.h new file mode 100644 index 0000000000..7c822a82da --- /dev/null +++ b/components/ieee802154/private_include/esp_ieee802154_sec.h @@ -0,0 +1,36 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include + +#define IEEE802154_SECURITY_ADDR_SIZE 8 +#define IEEE802154_SECURITY_KEY_SIZE 16 +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Configure the encryption of transmission. + * + * @param[in] frame The frame needs to be encrypted. + * @param[in] key The key using in the encryption process. + * @param[in] addr The address using in the encryption process. + * + */ +void ieee802154_transmit_security_config(uint8_t *frame, uint8_t *key, uint8_t *addr); + +/** + * @brief Update the encryption enabled configuration of the next transmission. + * + * + */ +void ieee802154_sec_update(void); + +#ifdef __cplusplus +} +#endif diff --git a/components/ieee802154/private_include/esp_ieee802154_timer.h b/components/ieee802154/private_include/esp_ieee802154_timer.h new file mode 100644 index 0000000000..aee1230720 --- /dev/null +++ b/components/ieee802154/private_include/esp_ieee802154_timer.h @@ -0,0 +1,84 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include "esp_log.h" +#include "esp_err.h" + +/** + * @brief Start the IEEE802154 MAC internal timer0. + * + */ +void ieee802154_timer0_start(void); + +/** + * @brief Stop the IEEE802154 MAC internal timer0. + * + */ +void ieee802154_timer0_stop(void); + +/** + * @brief Set the overflow threshold to the IEEE802154 MAC internal timer0. + * + * @param[in] value The threshold. + * + * @return + * ESP_OK if the threshold is valid. + * ESP_ERR_INVALID_ARG if the threshold is invalid. + * + */ +esp_err_t ieee802154_timer0_set_threshold(uint32_t value); + +/** + * @brief Get the current IEEE802154 MAC internal timer0 count. + * + * @return + * The timer0 count. + * + */ +uint32_t ieee802154_timer0_get_value(void); + +/** + * @brief Start the IEEE802154 MAC internal timer1. + * + */ +void ieee802154_timer1_start(void); + +/** + * @brief Stop the IEEE802154 MAC internal timer1. + * + */ +void ieee802154_timer1_stop(void); + +/** + * @brief Set the overflow threshold to the IEEE802154 MAC internal timer1. + * + * @param[in] value The threshold. + * + * @return + * ESP_OK if the threshold is valid. + * ESP_ERR_INVALID_ARG if the threshold is invalid. + * + */ +esp_err_t ieee802154_timer1_set_threshold(uint32_t value); + +/** + * @brief Get the current IEEE802154 MAC internal timer1 count. + * + * @return + * The timer1 count. + * + */ +uint32_t ieee802154_timer1_get_value(void); + +#ifdef __cplusplus +} +#endif diff --git a/components/ieee802154/private_include/esp_ieee802154_util.h b/components/ieee802154/private_include/esp_ieee802154_util.h new file mode 100644 index 0000000000..c1e843055a --- /dev/null +++ b/components/ieee802154/private_include/esp_ieee802154_util.h @@ -0,0 +1,330 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include +#include "sdkconfig.h" +#include "soc/soc_caps.h" +#include "esp_ieee802154_dev.h" +#include "hal/ieee802154_ll.h" +#include "esp_timer.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define IEEE802154_TAG "ieee802154" + +#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE +#define IEEE802154_RF_ENABLE() ieee802154_rf_enable() +#define IEEE802154_RF_DISABLE() ieee802154_rf_disable() +#else +#define IEEE802154_RF_ENABLE() +#define IEEE802154_RF_DISABLE() +#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE +#define IEEE802154_PROBE(a) do { \ + IEEE802154_RECORD_EVENT(a); \ + ieee802154_record_abort(a); \ + IEEE802154_TXRX_STATISTIC(a); \ + } while(0) + +#if CONFIG_IEEE802154_RECORD_EVENT +#define IEEE802154_ASSERT_RECORD_EVENT_SIZE CONFIG_IEEE802154_RECORD_EVENT_SIZE +#define IEEE802154_RECORD_EVENT(a) do { \ + g_ieee802154_probe.event[g_ieee802154_probe.event_index].event = a; \ + g_ieee802154_probe.event[g_ieee802154_probe.event_index].state = ieee802154_get_state(); \ + if (a == IEEE802154_EVENT_RX_ABORT) { \ + g_ieee802154_probe.event[g_ieee802154_probe.event_index].abort_reason.rx \ + = ieee802154_ll_get_rx_abort_reason(); \ + } else if (a == IEEE802154_EVENT_TX_ABORT) { \ + g_ieee802154_probe.event[g_ieee802154_probe.event_index].abort_reason.tx \ + = ieee802154_ll_get_tx_abort_reason(); \ + } \ + g_ieee802154_probe.event[g_ieee802154_probe.event_index++].timestamp = esp_timer_get_time(); \ + g_ieee802154_probe.event_index = (g_ieee802154_probe.event_index == IEEE802154_ASSERT_RECORD_EVENT_SIZE) ? \ + 0 : g_ieee802154_probe.event_index; \ + } while(0) + +/** + * @brief The table of recording IEEE802154 event command. + */ +typedef struct { + ieee802154_ll_events event; /*!< record current radio event */ + ieee802154_state_t state; /*!< record current radio state */ + union { + ieee802154_ll_rx_abort_reason_t rx; + ieee802154_ll_tx_abort_reason_t tx; + } abort_reason; /*!< record current radio abort reason */ + uint64_t timestamp; /*!< record timestamp*/ +} ieee802154_event_info_t; +#else +#define IEEE802154_RECORD_EVENT(a) +#endif // CONFIG_IEEE802154_RECORD_EVENT + +#if CONFIG_IEEE802154_RECORD_STATE +#define IEEE802154_ASSERT_RECORD_STATE_SIZE CONFIG_IEEE802154_RECORD_STATE_SIZE +#define ieee802154_set_state(a) do { s_ieee802154_state = a; \ + sprintf(g_ieee802154_probe.state[g_ieee802154_probe.state_index].line_str, "%d", __LINE__); \ + g_ieee802154_probe.state[g_ieee802154_probe.state_index].timestamp = esp_timer_get_time(); \ + g_ieee802154_probe.state[g_ieee802154_probe.state_index++].state = a; \ + g_ieee802154_probe.state_index = \ + (g_ieee802154_probe.state_index == IEEE802154_ASSERT_RECORD_STATE_SIZE) ? 0 : g_ieee802154_probe.state_index; \ + } while(0) + +/** + * @brief The table of recording IEEE802154 state command. + */ +typedef struct { + char line_str[5]; /*!< record which line in esp_ieee802154_dev.c changes the state */ + ieee802154_state_t state; /*!< record current radio state */ + uint64_t timestamp; /*!< record timestamp */ +} ieee802154_state_info_t; +#else +#define ieee802154_set_state(state) (s_ieee802154_state = state) +#endif // CONFIG_IEEE802154_RECORD_STATE + +#if CONFIG_IEEE802154_RECORD_CMD +#define IEEE802154_ASSERT_RECORD_CMD_SIZE CONFIG_IEEE802154_RECORD_CMD_SIZE +#define ieee802154_set_cmd(a) do { ieee802154_ll_set_cmd(a); \ + sprintf(g_ieee802154_probe.cmd[g_ieee802154_probe.cmd_index].line_str, "%d", __LINE__); \ + g_ieee802154_probe.cmd[g_ieee802154_probe.cmd_index].timestamp = esp_timer_get_time(); \ + g_ieee802154_probe.cmd[g_ieee802154_probe.cmd_index++].cmd = a; \ + g_ieee802154_probe.cmd_index = \ + (g_ieee802154_probe.cmd_index == IEEE802154_ASSERT_RECORD_CMD_SIZE) ? 0 : g_ieee802154_probe.cmd_index; \ + } while(0) + +/** + * @brief The table of recording IEEE802154 radio command. + */ +typedef struct { + char line_str[5]; /*!< record which line in esp_ieee802154_dev.c set the command */ + ieee802154_ll_cmd_t cmd; /*!< record current command */ + uint64_t timestamp; /*!< record timestamp */ +} ieee802154_cmd_info_t; +#else +#define ieee802154_set_cmd(cmd) ieee802154_ll_set_cmd(cmd) +#endif //CONFIG_IEEE802154_RECORD_CMD + +#if CONFIG_IEEE802154_RECORD_ABORT +#define IEEE802154_ASSERT_RECORD_ABORT_SIZE CONFIG_IEEE802154_RECORD_ABORT_SIZE +#define ieee802154_record_abort(a) do { \ + if (a == IEEE802154_EVENT_RX_ABORT) { \ + g_ieee802154_probe.abort[g_ieee802154_probe.abort_index].abort_reason.rx \ + = ieee802154_ll_get_rx_abort_reason(); \ + g_ieee802154_probe.abort[g_ieee802154_probe.abort_index].is_tx_abort = 0; \ + g_ieee802154_probe.abort[g_ieee802154_probe.abort_index++].timestamp = esp_timer_get_time(); \ + g_ieee802154_probe.abort_index = (g_ieee802154_probe.abort_index == IEEE802154_ASSERT_RECORD_ABORT_SIZE) ? \ + 0 : g_ieee802154_probe.abort_index; \ + } else if (a == IEEE802154_EVENT_TX_ABORT) { \ + g_ieee802154_probe.abort[g_ieee802154_probe.abort_index].abort_reason.tx \ + = ieee802154_ll_get_tx_abort_reason();\ + g_ieee802154_probe.abort[g_ieee802154_probe.abort_index].is_tx_abort = 1; \ + g_ieee802154_probe.abort[g_ieee802154_probe.abort_index++].timestamp = esp_timer_get_time(); \ + g_ieee802154_probe.abort_index = (g_ieee802154_probe.abort_index == IEEE802154_ASSERT_RECORD_ABORT_SIZE) ? \ + 0 : g_ieee802154_probe.abort_index; \ + } \ + } while(0) + +/** + * @brief The table of recording IEEE802154 radio abort. + */ +typedef struct { + bool is_tx_abort; /*!< record current abort type */ + union { + ieee802154_ll_rx_abort_reason_t rx; + ieee802154_ll_tx_abort_reason_t tx; + } abort_reason; /*!< record current radio abort reason */ + uint64_t timestamp; /*!< record timestamp*/ +} ieee802154_abort_info_t; +#else +#define ieee802154_record_abort(a) +#endif // CONFIG_IEEE802154_RECORD_ABORT + +/** + * @brief The table of recording IEEE802154 information. + */ +typedef struct { +#if CONFIG_IEEE802154_RECORD_EVENT + ieee802154_event_info_t event[IEEE802154_ASSERT_RECORD_EVENT_SIZE]; /*!< record radio event */ + uint8_t event_index; /*!< the index of event */ +#endif // CONFIG_IEEE802154_RECORD_EVENT +#if CONFIG_IEEE802154_RECORD_STATE + ieee802154_state_info_t state[IEEE802154_ASSERT_RECORD_STATE_SIZE]; /*!< record radio state */ + uint8_t state_index; /*!< the index of state */ +#endif // CONFIG_IEEE802154_RECORD_STATE +#if CONFIG_IEEE802154_RECORD_CMD + ieee802154_cmd_info_t cmd[IEEE802154_ASSERT_RECORD_CMD_SIZE]; /*!< record radio command */ + uint8_t cmd_index; /*!< the index of command */ +#endif // CONFIG_IEEE802154_RECORD_CMD +#if CONFIG_IEEE802154_RECORD_ABORT + ieee802154_abort_info_t abort[IEEE802154_ASSERT_RECORD_ABORT_SIZE]; /*!< record radio abort */ + uint8_t abort_index; /*!< the index of abort */ +#endif // CONFIG_IEEE802154_RECORD_ABORT +} ieee802154_probe_info_t; + +extern ieee802154_probe_info_t g_ieee802154_probe; + +#if CONFIG_IEEE802154_ASSERT +/** + * @brief This function print rich information, which is useful for debug. + * Only can be used when `IEEE802154_ASSERT` is enabled. + * + */ +void ieee802154_assert_print(void); +#define IEEE802154_ASSERT(a) do { \ + if(unlikely(!(a))) { \ + ieee802154_assert_print(); \ + assert(a); \ + } \ + } while (0) +#else // CONFIG_IEEE802154_ASSERT +#define IEEE802154_ASSERT(a) assert(a) +#endif // CONFIG_IEEE802154_ASSERT + +#if CONFIG_IEEE802154_TXRX_STATISTIC +typedef struct ieee802154_txrx_statistic{ + struct { + uint64_t nums; + uint64_t deferred_nums; + uint64_t done_nums; + struct { + uint64_t rx_ack_coex_break_nums; // IEEE802154_RX_ACK_ABORT_COEX_CNT_REG + uint64_t rx_ack_timeout_nums; // IEEE802154_RX_ACK_TIMEOUT_CNT_REG + uint64_t tx_coex_break_nums; // IEEE802154_TX_BREAK_COEX_CNT_REG + uint64_t tx_security_error_nums; // IEEE802154_TX_SECURITY_ERROR_CNT_REG + uint64_t cca_failed_nums; // IEEE802154_CCA_FAIL_CNT_REG + uint64_t cca_busy_nums; // IEEE802154_CCA_BUSY_CNT_REG + } abort; + } tx; + struct { + uint64_t done_nums; + struct { + uint64_t sfd_timeout_nums; // IEEE802154_SFD_TIMEOUT_CNT_REG + uint64_t crc_error_nums; // IEEE802154_CRC_ERROR_CNT_REG + uint64_t filter_fail_nums; // IEEE802154_RX_FILTER_FAIL_CNT_REG + uint64_t no_rss_nums; // IEEE802154_NO_RSS_DETECT_CNT_REG + uint64_t rx_coex_break_nums; // IEEE802154_RX_ABORT_COEX_CNT_REG + uint64_t rx_restart_nums; // IEEE802154_RX_RESTART_CNT_REG + uint64_t tx_ack_coex_break_nums; // IEEE802154_TX_ACK_ABORT_COEX_CNT_REG + uint64_t ed_abort_nums; // IEEE802154_ED_ABORT_CNT_REG + } abort; + } rx; +} ieee802154_txrx_statistic_t; + +#define IEEE802154_TXRX_STATISTIC_CLEAR() do { \ + ieee802154_txrx_statistic_clear();\ + } while(0) + +#define IEEE802154_TXRX_STATISTIC(a) do { \ + ieee802154_txrx_statistic(a);\ + } while(0) + +#define IEEE802154_TX_DEFERRED_NUMS_UPDATE() do { \ + ieee802154_tx_deferred_nums_update();\ + } while(0) + +#define IEEE802154_TX_NUMS_UPDATE() do { \ + ieee802154_tx_nums_update();\ + } while(0) + +#define IEEE802154_TX_BREAK_COEX_NUMS_UPDATE() do { \ + ieee802154_tx_break_coex_nums_update();\ + } while(0) + +void ieee802154_txrx_statistic_clear(void); +void ieee802154_txrx_statistic_print(void); +void ieee802154_txrx_statistic(ieee802154_ll_events events); +void ieee802154_tx_nums_update(void); +void ieee802154_tx_deferred_nums_update(void); +void ieee802154_tx_break_coex_nums_update(void); +#else +#define IEEE802154_TXRX_STATISTIC(a) +#define IEEE802154_TX_NUMS_UPDATE() +#define IEEE802154_TX_DEFERRED_NUMS_UPDATE() +#define IEEE802154_TXRX_STATISTIC_CLEAR() +#define IEEE802154_TX_BREAK_COEX_NUMS_UPDATE() +#endif // CONFIG_IEEE802154_TXRX_STATISTIC + +// TODO: replace etm code using common interface + +#define IEEE802154_ETM_CHANNEL0 0 +#define IEEE802154_ETM_CHANNEL1 1 + +/** + * @brief The scene of IEEE802154 radio coexistence. + */ +typedef enum { + IEEE802154_SCENE_IDLE, /*!< IEEE802154 radio coexistence scene IDLE */ + IEEE802154_SCENE_TX, /*!< IEEE802154 radio coexistence scene TX */ + IEEE802154_SCENE_RX, /*!< IEEE802154 radio coexistence scene RX */ + IEEE802154_SCENE_TX_AT, /*!< IEEE802154 radio coexistence scene TX AT */ + IEEE802154_SCENE_RX_AT, /*!< IEEE802154 radio coexistence scene RX AT */ +} ieee802154_txrx_scene_t; + +#if !CONFIG_IEEE802154_TEST && (CONFIG_ESP_COEX_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE) + +/** + * @brief Set the IEEE802154 radio coexistence scene during transmitting or receiving. + * + * @param[in] txrx_scene The scene of IEEE802154 radio coexistence. + * + */ +void ieee802154_set_txrx_pti(ieee802154_txrx_scene_t txrx_scene); + +#define IEEE802154_SET_TXRX_PTI(txrx_scene) ieee802154_set_txrx_pti(txrx_scene) + +#else + +#define IEEE802154_SET_TXRX_PTI(txrx_scene) + +#endif // !CONFIG_IEEE802154_TEST && CONFIG_ESP_COEX_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + +/** + * @brief Convert the frequency to the index of channel. + * + * @param[in] freq The frequency where the radio is processing. + * + * @return + * The channel index. + * + */ +uint8_t ieee802154_freq_to_channel(uint8_t freq); + +/** + * @brief Convert the index of channel to the frequency. + * + * @param[in] channel The index of channel where the radio is processing. + * + * @return + * The frequency. + * + */ +uint8_t ieee802154_channel_to_freq(uint8_t channel); + +// TZ-97: implement these two functions using ETM common interface +/** + * @brief Configure the ETM module, using [channel] for monitoring the event, when event appears + * hardware will operate the [task]. + * + * @param[in] channel The ETM channel. + * @param[in] event The ETM event. + * @param[in] task The ETM task. + * + */ +void ieee802154_etm_set_event_task(uint32_t channel, uint32_t event, uint32_t task); + +/** + * @brief Clear the ETM module [channel]. + * + * @param[in] channel The ETM channel. + * + */ +void ieee802154_etm_channel_clear(uint32_t channel); + +#ifdef __cplusplus +} +#endif From 11aed6f44b5132199a44cb6b2a3dd72d59558d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20J=C3=A4ger?= Date: Tue, 10 Dec 2024 13:08:41 +0100 Subject: [PATCH 2/2] ieee802154: update files for Zephyr support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FreeRTOS-related code (e.g. locks) are replaced with Zephyr-specific equivalents and required code is added to CMakeLists.txt. Signed-off-by: Martin Jäger --- components/esp_phy/src/btbb_init.c | 13 ++++---- components/esp_timer/src/esp_timer.c | 2 +- .../ieee802154/driver/esp_ieee802154_dev.c | 24 +++++++------- zephyr/esp32c6/CMakeLists.txt | 31 +++++++++++++++++-- 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/components/esp_phy/src/btbb_init.c b/components/esp_phy/src/btbb_init.c index 41d78dd83a..114c2f2bde 100644 --- a/components/esp_phy/src/btbb_init.c +++ b/components/esp_phy/src/btbb_init.c @@ -7,12 +7,13 @@ #include #include "esp_check.h" #include "esp_log.h" -#include "freertos/FreeRTOS.h" #include "esp_private/btbb.h" +#include + #define BTBB_ENABLE_VERSION_PRINT 1 -static _lock_t s_btbb_access_lock; +static struct k_spinlock s_btbb_access_lock; /* Reference count of enabling BT BB */ static uint8_t s_btbb_access_ref = 0; @@ -57,7 +58,7 @@ static void btbb_sleep_retention_deinit(void) void esp_btbb_enable(void) { - _lock_acquire(&s_btbb_access_lock); + k_spinlock_key_t key = k_spin_lock(&s_btbb_access_lock); if (s_btbb_access_ref == 0) { bt_bb_v2_init_cmplx(BTBB_ENABLE_VERSION_PRINT); #if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE @@ -77,16 +78,16 @@ void esp_btbb_enable(void) #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE } s_btbb_access_ref++; - _lock_release(&s_btbb_access_lock); + k_spin_unlock(&s_btbb_access_lock, key); } void esp_btbb_disable(void) { - _lock_acquire(&s_btbb_access_lock); + k_spinlock_key_t key = k_spin_lock(&s_btbb_access_lock); if (s_btbb_access_ref && (--s_btbb_access_ref == 0)) { #if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE btbb_sleep_retention_deinit(); #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE } - _lock_release(&s_btbb_access_lock); + k_spin_unlock(&s_btbb_access_lock, key); } diff --git a/components/esp_timer/src/esp_timer.c b/components/esp_timer/src/esp_timer.c index f7f4609d2c..9102b6e33d 100644 --- a/components/esp_timer/src/esp_timer.c +++ b/components/esp_timer/src/esp_timer.c @@ -586,7 +586,7 @@ esp_err_t esp_timer_init(void) return err; } -#if defined(CONFIG_WIFI_ESP32) || defined(CONFIG_BT_ESP32) +#if defined(CONFIG_WIFI_ESP32) || defined(CONFIG_BT_ESP32) || defined(CONFIG_IEEE802154_ESP32) SYS_INIT(esp_timer_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); #endif diff --git a/components/ieee802154/driver/esp_ieee802154_dev.c b/components/ieee802154/driver/esp_ieee802154_dev.c index b91eb11a89..27b0c29ea0 100644 --- a/components/ieee802154/driver/esp_ieee802154_dev.c +++ b/components/ieee802154/driver/esp_ieee802154_dev.c @@ -6,7 +6,6 @@ #include #include "sdkconfig.h" -#include "freertos/portmacro.h" #include "soc/periph_defs.h" #include "soc/soc.h" #include "soc/ieee802154_periph.h" @@ -39,6 +38,9 @@ #endif // SOC_PM_RETENTION_HAS_CLOCK_BUG #endif // CONFIG_PM_ENABLE +#include +#include + static bool s_rf_closed = true; #define CCA_DETECTION_TIME 8 @@ -68,8 +70,8 @@ static bool s_needs_next_operation = false; 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 s_ieee802154_isr_handle = NULL; +static struct k_spinlock s_ieee802154_spinlock; +static k_spinlock_key_t s_ieee802154_key; static esp_err_t ieee802154_sleep_init(void); static esp_err_t ieee802154_sleep_deinit(void); @@ -640,15 +642,15 @@ static IRAM_ATTR void isr_handle_ed_done(void) IEEE802154_STATIC IRAM_ATTR void ieee802154_enter_critical(void) { - portENTER_CRITICAL(&s_ieee802154_spinlock); + s_ieee802154_key = k_spin_lock(&s_ieee802154_spinlock); } IEEE802154_STATIC IRAM_ATTR void ieee802154_exit_critical(void) { - portEXIT_CRITICAL(&s_ieee802154_spinlock); + k_spin_unlock(&s_ieee802154_spinlock, s_ieee802154_key); } -IEEE802154_NOINLINE static void ieee802154_isr(void *arg) +IEEE802154_NOINLINE static void ieee802154_isr(const void *arg) { ieee802154_enter_critical(); ieee802154_ll_events events = ieee802154_ll_get_events(); @@ -810,7 +812,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, &s_ieee802154_isr_handle); + ret = esp_intr_alloc(ieee802154_periph.irq_id, 0, ieee802154_isr, NULL, NULL); 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"); @@ -820,12 +822,8 @@ esp_err_t ieee802154_mac_init(void) esp_err_t ieee802154_mac_deinit(void) { - esp_err_t ret = ESP_OK; - if (s_ieee802154_isr_handle) { - ret = esp_intr_free(s_ieee802154_isr_handle); - s_ieee802154_isr_handle = NULL; - ESP_RETURN_ON_FALSE(ret == ESP_OK, ESP_FAIL, IEEE802154_TAG, "IEEE802154 MAC ISR deinit failed"); - } + esp_err_t ret = esp_intr_disable(ieee802154_periph.irq_id); + ESP_RETURN_ON_FALSE(ret == ESP_OK, ESP_FAIL, IEEE802154_TAG, "IEEE802154 MAC ISR deinit failed"); ESP_RETURN_ON_FALSE(ieee802154_sleep_deinit() == ESP_OK, ESP_FAIL, IEEE802154_TAG, "IEEE802154 MAC sleep deinit failed"); return ret; } diff --git a/zephyr/esp32c6/CMakeLists.txt b/zephyr/esp32c6/CMakeLists.txt index 385fb919aa..82a4cfbf08 100644 --- a/zephyr/esp32c6/CMakeLists.txt +++ b/zephyr/esp32c6/CMakeLists.txt @@ -109,6 +109,9 @@ if(CONFIG_SOC_SERIES_ESP32C6) ../../components/wpa_supplicant/src/eap_peer ../../components/mbedtls/port/include + ../../components/ieee802154/include + ../../components/ieee802154/private_include + ../port/include/boot ) @@ -316,8 +319,8 @@ if(CONFIG_SOC_SERIES_ESP32C6) ../../components/hal/ledc_hal.c ) - ## shared WIFI/BT resources - if (CONFIG_BT OR CONFIG_WIFI_ESP32) + ## shared WIFI/BT/IEEE802154 resources + if (CONFIG_BT OR CONFIG_WIFI_ESP32 OR CONFIG_IEEE802154) zephyr_sources( ../../components/esp_phy/src/phy_init.c ../../components/esp_phy/src/lib_printf.c @@ -568,6 +571,30 @@ if(CONFIG_SOC_SERIES_ESP32C6) endif() + ## IEEE 802.15.4 definitions + if (CONFIG_IEEE802154) + zephyr_sources( + ../../components/esp_phy/src/btbb_init.c + ../../components/soc/${CONFIG_SOC_SERIES}/ieee802154_periph.c + ../../components/ieee802154/esp_ieee802154.c + ../../components/ieee802154/driver/esp_ieee802154_ack.c + ../../components/ieee802154/driver/esp_ieee802154_dev.c + ../../components/ieee802154/driver/esp_ieee802154_frame.c + ../../components/ieee802154/driver/esp_ieee802154_pib.c + ../../components/ieee802154/driver/esp_ieee802154_util.c + ../../components/ieee802154/driver/esp_ieee802154_sec.c + ../../components/ieee802154/driver/esp_ieee802154_timer.c + ) + + zephyr_compile_definitions(CONFIG_IEEE802154_ENABLED) + zephyr_compile_definitions(CONFIG_SOC_IEEE802154_SUPPORTED) + + zephyr_link_libraries( + btbb + -L${CMAKE_CURRENT_SOURCE_DIR}/../blobs/lib/${CONFIG_SOC_SERIES} + ) + endif() + zephyr_link_libraries_ifdef(CONFIG_NEWLIB_LIBC c) endif()