Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add IEEE 802.15.4 support #379

Draft
wants to merge 2 commits into
base: zephyr
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions components/esp_phy/src/btbb_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@
#include <stdint.h>
#include "esp_check.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "esp_private/btbb.h"

#include <zephyr/kernel.h>

#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;

Expand Down Expand Up @@ -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
Expand All @@ -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);
}
2 changes: 1 addition & 1 deletion components/esp_timer/src/esp_timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
39 changes: 39 additions & 0 deletions components/ieee802154/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
)
176 changes: 176 additions & 0 deletions components/ieee802154/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Loading