From 0787a74b3627a54591b345650b462cda244faabe Mon Sep 17 00:00:00 2001 From: Patricio Whittingslow Date: Thu, 28 May 2026 12:21:21 -0300 Subject: [PATCH] cesp: new package containing C logic --- .vscode/settings.json | 8 + arena.c => cesp/arena.c | 0 cesp/arena.go | 8 + cesp/arena_c.go | 23 ++ cesp/arena_stub.go | 6 + {blobs => cesp/blobs}/LICENSE.txt | 0 {blobs => cesp/blobs}/headers/btbb.h | 0 {blobs => cesp/blobs}/headers/esp_coex_i154.h | 0 {blobs => cesp/blobs}/headers/esp_coexist.h | 0 .../blobs}/headers/esp_coexist_adapter.h | 0 .../blobs}/headers/esp_coexist_internal.h | 0 {blobs => cesp/blobs}/headers/esp_compiler.h | 0 .../blobs}/headers/esp_debug_helpers.h | 0 {blobs => cesp/blobs}/headers/esp_dpp.h | 0 .../blobs}/headers/esp_eap_client.h | 0 {blobs => cesp/blobs}/headers/esp_err.h | 0 {blobs => cesp/blobs}/headers/esp_event.h | 0 .../blobs}/headers/esp_event_base.h | 0 .../blobs}/headers/esp_event_loop.h | 0 .../headers/esp_expression_with_stack.h | 0 .../blobs}/headers/esp_freertos_hooks.h | 0 {blobs => cesp/blobs}/headers/esp_interface.h | 0 {blobs => cesp/blobs}/headers/esp_ipc.h | 0 {blobs => cesp/blobs}/headers/esp_ipc_isr.h | 0 {blobs => cesp/blobs}/headers/esp_mbo.h | 0 {blobs => cesp/blobs}/headers/esp_mesh.h | 0 .../blobs}/headers/esp_mesh_internal.h | 0 .../blobs}/headers/esp_modem_wrapper.h | 0 {blobs => cesp/blobs}/headers/esp_now.h | 0 {blobs => cesp/blobs}/headers/esp_phy.h | 0 .../blobs}/headers/esp_phy_cert_test.h | 0 {blobs => cesp/blobs}/headers/esp_phy_init.h | 0 {blobs => cesp/blobs}/headers/esp_rrm.h | 0 .../blobs}/headers/esp_smartconfig.h | 0 .../blobs}/headers/esp_supplicant_utils.h | 0 {blobs => cesp/blobs}/headers/esp_system.h | 0 .../blobs}/headers/esp_systick_etm.h | 0 {blobs => cesp/blobs}/headers/esp_task.h | 0 {blobs => cesp/blobs}/headers/esp_task_wdt.h | 0 {blobs => cesp/blobs}/headers/esp_timer.h | 0 {blobs => cesp/blobs}/headers/esp_wifi.h | 0 .../blobs}/headers/esp_wifi_ap_get_sta_list.h | 0 .../blobs}/headers/esp_wifi_default.h | 0 {blobs => cesp/blobs}/headers/esp_wifi_he.h | 0 .../blobs}/headers/esp_wifi_he_types.h | 0 .../blobs}/headers/esp_wifi_netif.h | 0 .../blobs}/headers/esp_wifi_types.h | 0 {blobs => cesp/blobs}/headers/esp_wnm.h | 0 {blobs => cesp/blobs}/headers/esp_wpa.h | 0 {blobs => cesp/blobs}/headers/esp_wpa2.h | 0 {blobs => cesp/blobs}/headers/esp_wps.h | 0 {blobs => cesp/blobs}/headers/esp_xt_wdt.h | 0 {blobs => cesp/blobs}/headers/libunwind.h | 0 .../headers/local/esp_wifi_types_native.h | 0 {blobs => cesp/blobs}/headers/nvs.h | 0 {blobs => cesp/blobs}/headers/nvs_flash.h | 0 {blobs => cesp/blobs}/headers/nvs_handle.hpp | 0 {blobs => cesp/blobs}/headers/phy.h | 0 .../blobs}/headers/smartconfig_ack.h | 0 {blobs => cesp/blobs}/include/btbb.h | 0 {blobs => cesp/blobs}/include/esp32/esp_bt.h | 0 .../blobs}/include/esp32/esp_bt_vs.h | 0 .../blobs}/include/esp32/phy_init_data.h | 0 .../blobs}/include/esp32/phy_init_deps.h | 0 .../blobs}/include/esp32/sdkconfig.h | 0 .../blobs}/include/esp32/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32/soc/interrupts.h | 0 .../blobs}/include/esp32/soc/periph_defs.h | 0 .../blobs}/include/esp32/soc/reg_base.h | 0 {blobs => cesp/blobs}/include/esp32/soc/soc.h | 0 .../blobs}/include/esp32/soc/soc_caps.h | 0 .../blobs}/include/esp32c2/esp_bt.h | 0 .../blobs}/include/esp32c2/esp_bt_cfg.h | 0 .../blobs}/include/esp32c2/esp_bt_vs.h | 0 .../blobs}/include/esp32c2/phy_init_data.h | 0 .../blobs}/include/esp32c2/phy_init_deps.h | 0 .../blobs}/include/esp32c2/sdkconfig.h | 0 .../include/esp32c2/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32c2/soc/interrupts.h | 0 .../blobs}/include/esp32c2/soc/periph_defs.h | 0 .../blobs}/include/esp32c2/soc/reg_base.h | 0 .../blobs}/include/esp32c2/soc/soc.h | 0 .../blobs}/include/esp32c2/soc/soc_caps.h | 0 .../blobs}/include/esp32c3/esp_bt.h | 0 .../blobs}/include/esp32c3/esp_bt_vs.h | 0 .../blobs}/include/esp32c3/phy_init_data.h | 0 .../blobs}/include/esp32c3/phy_init_deps.h | 0 .../blobs}/include/esp32c3/sdkconfig.h | 0 .../include/esp32c3/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32c3/soc/interrupts.h | 0 .../blobs}/include/esp32c3/soc/periph_defs.h | 0 .../blobs}/include/esp32c3/soc/reg_base.h | 0 .../blobs}/include/esp32c3/soc/soc.h | 0 .../blobs}/include/esp32c3/soc/soc_caps.h | 0 .../include/esp32c5/btbb_retention_reg.h | 0 .../blobs}/include/esp32c5/esp_bt.h | 0 .../blobs}/include/esp32c5/esp_bt_vs.h | 0 .../include/esp32c5/hal/modem_lpcon_ll.h | 0 .../include/esp32c5/hal/modem_syscon_ll.h | 0 .../blobs}/include/esp32c5/hal/pmu_hal.h | 0 .../blobs}/include/esp32c5/hal/pmu_ll.h | 0 .../esp32c5/modem/modem_lpcon_struct.h | 0 .../esp32c5/modem/modem_syscon_struct.h | 0 .../blobs}/include/esp32c5/phy_init_data.h | 0 .../blobs}/include/esp32c5/phy_init_deps.h | 0 .../blobs}/include/esp32c5/pmu_bit_defs.h | 0 .../blobs}/include/esp32c5/pmu_param.h | 0 .../blobs}/include/esp32c5/sdkconfig.h | 0 .../include/esp32c5/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32c5/soc/interrupts.h | 0 .../blobs}/include/esp32c5/soc/periph_defs.h | 0 .../blobs}/include/esp32c5/soc/pmu_reg.h | 0 .../blobs}/include/esp32c5/soc/pmu_struct.h | 0 .../blobs}/include/esp32c5/soc/reg_base.h | 0 .../blobs}/include/esp32c5/soc/soc.h | 0 .../blobs}/include/esp32c5/soc/soc_caps.h | 0 .../include/esp32c6/btbb_retention_reg.h | 0 .../blobs}/include/esp32c6/esp_bt.h | 0 .../blobs}/include/esp32c6/esp_bt_cfg.h | 0 .../blobs}/include/esp32c6/esp_bt_vs.h | 0 .../include/esp32c6/hal/modem_lpcon_ll.h | 0 .../include/esp32c6/hal/modem_syscon_ll.h | 0 .../blobs}/include/esp32c6/hal/pmu_hal.h | 0 .../blobs}/include/esp32c6/hal/pmu_ll.h | 0 .../esp32c6/modem/modem_lpcon_struct.h | 0 .../esp32c6/modem/modem_syscon_struct.h | 0 .../blobs}/include/esp32c6/phy_init_data.h | 0 .../blobs}/include/esp32c6/phy_init_deps.h | 0 .../blobs}/include/esp32c6/pmu_bit_defs.h | 0 .../blobs}/include/esp32c6/pmu_param.h | 0 .../blobs}/include/esp32c6/sdkconfig.h | 0 .../include/esp32c6/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32c6/soc/interrupts.h | 0 .../blobs}/include/esp32c6/soc/periph_defs.h | 0 .../blobs}/include/esp32c6/soc/pmu_reg.h | 0 .../blobs}/include/esp32c6/soc/pmu_struct.h | 0 .../blobs}/include/esp32c6/soc/reg_base.h | 0 .../blobs}/include/esp32c6/soc/soc.h | 0 .../blobs}/include/esp32c6/soc/soc_caps.h | 0 .../blobs}/include/esp32c61/.gitkeep | 0 .../include/esp32c61/btbb_retention_reg.h | 0 .../blobs}/include/esp32c61/esp_bt.h | 0 .../blobs}/include/esp32c61/esp_bt_vs.h | 0 .../include/esp32c61/hal/modem_lpcon_ll.h | 0 .../include/esp32c61/hal/modem_syscon_ll.h | 0 .../blobs}/include/esp32c61/hal/pmu_hal.h | 0 .../blobs}/include/esp32c61/hal/pmu_ll.h | 0 .../esp32c61/modem/modem_lpcon_struct.h | 0 .../esp32c61/modem/modem_syscon_struct.h | 0 .../blobs}/include/esp32c61/phy_init_data.h | 0 .../blobs}/include/esp32c61/phy_init_deps.h | 0 .../blobs}/include/esp32c61/pmu_bit_defs.h | 0 .../blobs}/include/esp32c61/pmu_param.h | 0 .../blobs}/include/esp32c61/sdkconfig.h | 0 .../include/esp32c61/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32c61/soc/interrupts.h | 0 .../blobs}/include/esp32c61/soc/periph_defs.h | 0 .../blobs}/include/esp32c61/soc/pmu_reg.h | 0 .../blobs}/include/esp32c61/soc/pmu_struct.h | 0 .../blobs}/include/esp32c61/soc/reg_base.h | 0 .../blobs}/include/esp32c61/soc/soc.h | 0 .../blobs}/include/esp32c61/soc/soc_caps.h | 0 .../include/esp32h2/btbb_retention_reg.h | 0 .../blobs}/include/esp32h2/esp_bt.h | 0 .../blobs}/include/esp32h2/esp_bt_cfg.h | 0 .../blobs}/include/esp32h2/esp_bt_vs.h | 0 .../include/esp32h2/hal/modem_lpcon_ll.h | 0 .../include/esp32h2/hal/modem_syscon_ll.h | 0 .../blobs}/include/esp32h2/hal/pmu_hal.h | 0 .../blobs}/include/esp32h2/hal/pmu_ll.h | 0 .../esp32h2/modem/modem_lpcon_struct.h | 0 .../esp32h2/modem/modem_syscon_struct.h | 0 .../blobs}/include/esp32h2/phy_init_data.h | 0 .../blobs}/include/esp32h2/phy_init_deps.h | 0 .../blobs}/include/esp32h2/pmu_bit_defs.h | 0 .../blobs}/include/esp32h2/pmu_param.h | 0 .../blobs}/include/esp32h2/sdkconfig.h | 0 .../include/esp32h2/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32h2/soc/interrupts.h | 0 .../blobs}/include/esp32h2/soc/periph_defs.h | 0 .../blobs}/include/esp32h2/soc/pmu_reg.h | 0 .../blobs}/include/esp32h2/soc/pmu_struct.h | 0 .../blobs}/include/esp32h2/soc/reg_base.h | 0 .../blobs}/include/esp32h2/soc/soc.h | 0 .../blobs}/include/esp32h2/soc/soc_caps.h | 0 .../blobs}/include/esp32s2/phy_init_data.h | 0 .../blobs}/include/esp32s2/phy_init_deps.h | 0 .../blobs}/include/esp32s2/sdkconfig.h | 0 .../include/esp32s2/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32s2/soc/interrupts.h | 0 .../blobs}/include/esp32s2/soc/periph_defs.h | 0 .../blobs}/include/esp32s2/soc/reg_base.h | 0 .../blobs}/include/esp32s2/soc/soc.h | 0 .../blobs}/include/esp32s2/soc/soc_caps.h | 0 .../blobs}/include/esp32s3/esp_bt.h | 0 .../blobs}/include/esp32s3/esp_bt_vs.h | 0 .../blobs}/include/esp32s3/phy_init_data.h | 0 .../blobs}/include/esp32s3/phy_init_deps.h | 0 .../blobs}/include/esp32s3/sdkconfig.h | 0 .../include/esp32s3/soc/clk_tree_defs.h | 0 .../blobs}/include/esp32s3/soc/interrupts.h | 0 .../blobs}/include/esp32s3/soc/periph_defs.h | 0 .../blobs}/include/esp32s3/soc/reg_base.h | 0 .../blobs}/include/esp32s3/soc/soc.h | 0 .../blobs}/include/esp32s3/soc/soc_caps.h | 0 {blobs => cesp/blobs}/include/esp_assert.h | 0 {blobs => cesp/blobs}/include/esp_attr.h | 0 {blobs => cesp/blobs}/include/esp_bit_defs.h | 0 {blobs => cesp/blobs}/include/esp_bt_cfg.h | 0 {blobs => cesp/blobs}/include/esp_coex_i154.h | 0 {blobs => cesp/blobs}/include/esp_coexist.h | 0 .../blobs}/include/esp_coexist_adapter.h | 0 .../blobs}/include/esp_coexist_debug.h | 0 .../blobs}/include/esp_coexist_internal.h | 0 {blobs => cesp/blobs}/include/esp_compiler.h | 0 .../blobs}/include/esp_debug_helpers.h | 0 {blobs => cesp/blobs}/include/esp_dpp.h | 0 .../blobs}/include/esp_eap_client.h | 0 {blobs => cesp/blobs}/include/esp_err.h | 0 {blobs => cesp/blobs}/include/esp_etm.h | 0 {blobs => cesp/blobs}/include/esp_event.h | 0 .../blobs}/include/esp_event_base.h | 0 .../blobs}/include/esp_event_loop.h | 0 .../include/esp_expression_with_stack.h | 0 .../blobs}/include/esp_freertos_hooks.h | 0 {blobs => cesp/blobs}/include/esp_interface.h | 0 {blobs => cesp/blobs}/include/esp_ipc.h | 0 {blobs => cesp/blobs}/include/esp_ipc_isr.h | 0 {blobs => cesp/blobs}/include/esp_mbo.h | 0 {blobs => cesp/blobs}/include/esp_mesh.h | 0 .../blobs}/include/esp_mesh_internal.h | 0 .../blobs}/include/esp_modem_wrapper.h | 0 {blobs => cesp/blobs}/include/esp_netif.h | 0 {blobs => cesp/blobs}/include/esp_now.h | 0 {blobs => cesp/blobs}/include/esp_phy.h | 0 .../blobs}/include/esp_phy_cert_test.h | 0 {blobs => cesp/blobs}/include/esp_phy_init.h | 0 .../include/esp_private/esp_modem_clock.h | 0 .../blobs}/include/esp_private/esp_pmu | 0 .../blobs}/include/esp_private/esp_pmu.h | 0 .../include/esp_private/esp_wifi_he_private.h | 0 .../esp_private/esp_wifi_he_types_private.h | 0 .../include/esp_private/esp_wifi_private.h | 0 .../esp_private/esp_wifi_types_private.h | 0 .../blobs}/include/esp_private/wifi.h | 0 .../include/esp_private/wifi_os_adapter.h | 0 .../blobs}/include/esp_private/wifi_types.h | 0 {blobs => cesp/blobs}/include/esp_rrm.h | 0 .../blobs}/include/esp_smartconfig.h | 0 .../blobs}/include/esp_supplicant_utils.h | 0 {blobs => cesp/blobs}/include/esp_system.h | 0 .../blobs}/include/esp_system_console.h | 0 .../blobs}/include/esp_systick_etm.h | 0 {blobs => cesp/blobs}/include/esp_task.h | 0 {blobs => cesp/blobs}/include/esp_task_wdt.h | 0 {blobs => cesp/blobs}/include/esp_timer.h | 0 {blobs => cesp/blobs}/include/esp_types.h | 0 {blobs => cesp/blobs}/include/esp_wifi.h | 0 .../blobs}/include/esp_wifi_ap_get_sta_list.h | 0 .../blobs}/include/esp_wifi_crypto_types.h | 0 .../blobs}/include/esp_wifi_default.h | 0 {blobs => cesp/blobs}/include/esp_wifi_he.h | 0 .../blobs}/include/esp_wifi_he_types.h | 0 .../blobs}/include/esp_wifi_netif.h | 0 .../blobs}/include/esp_wifi_types.h | 0 .../blobs}/include/esp_wifi_types_generic.h | 0 {blobs => cesp/blobs}/include/esp_wnm.h | 0 {blobs => cesp/blobs}/include/esp_wpa.h | 0 {blobs => cesp/blobs}/include/esp_wpa2.h | 0 {blobs => cesp/blobs}/include/esp_wps.h | 0 {blobs => cesp/blobs}/include/esp_xt_wdt.h | 0 {blobs => cesp/blobs}/include/hal/assert.h | 0 {blobs => cesp/blobs}/include/hal/efuse_hal.h | 0 .../blobs}/include/hal/gpio_types.h | 0 {blobs => cesp/blobs}/include/hal/misc.h | 0 .../blobs}/include/hal/modem_clock_hal.h | 0 .../blobs}/include/hal/modem_clock_types.h | 0 {blobs => cesp/blobs}/include/hal/pmu_types.h | 0 {blobs => cesp/blobs}/include/include.h | 0 {blobs => cesp/blobs}/include/libunwind.h | 0 .../include/local/esp_wifi_types_native.h | 0 .../blobs}/include/nimble/nimble_npl.h | 0 .../blobs}/include/nimble/nimble_npl_os.h | 0 {blobs => cesp/blobs}/include/nvs.h | 0 .../blobs}/include/nvs_bootloader.h | 0 {blobs => cesp/blobs}/include/nvs_flash.h | 0 {blobs => cesp/blobs}/include/nvs_handle.hpp | 0 {blobs => cesp/blobs}/include/phy.h | 0 .../blobs}/include/smartconfig_ack.h | 0 {blobs => cesp/blobs}/libs/esp32c3/libbtbb.a | Bin .../blobs}/libs/esp32c3/libbtdm_app.a | Bin .../blobs}/libs/esp32c3/libcoexist.a | Bin {blobs => cesp/blobs}/libs/esp32c3/libcore.a | Bin .../blobs}/libs/esp32c3/libespnow.a | Bin {blobs => cesp/blobs}/libs/esp32c3/libmesh.a | Bin .../blobs}/libs/esp32c3/libnet80211.a | Bin {blobs => cesp/blobs}/libs/esp32c3/libphy.a | Bin {blobs => cesp/blobs}/libs/esp32c3/libpp.a | Bin .../blobs}/libs/esp32c3/libprintf.a | Bin .../blobs}/libs/esp32c3/libregulatory.a | Bin .../blobs}/libs/esp32c3/libsmartconfig.a | Bin {blobs => cesp/blobs}/libs/esp32c3/libwapi.a | Bin .../blobs}/libs/esp32c3/libwpa_supplicant.a | Bin {blobs => cesp/blobs}/libs/esp32s3/libbtbb.a | Bin .../blobs}/libs/esp32s3/libbtdm_app.a | Bin .../blobs}/libs/esp32s3/libcoexist.a | Bin {blobs => cesp/blobs}/libs/esp32s3/libcore.a | Bin .../blobs}/libs/esp32s3/libespnow.a | Bin {blobs => cesp/blobs}/libs/esp32s3/libmesh.a | Bin .../blobs}/libs/esp32s3/libnet80211.a | Bin {blobs => cesp/blobs}/libs/esp32s3/libphy.a | Bin {blobs => cesp/blobs}/libs/esp32s3/libpp.a | Bin .../blobs}/libs/esp32s3/libprintf.a | Bin .../blobs}/libs/esp32s3/libregulatory.a | Bin .../blobs}/libs/esp32s3/libsmartconfig.a | Bin {blobs => cesp/blobs}/libs/esp32s3/libwapi.a | Bin .../blobs}/libs/esp32s3/libwpa_supplicant.a | Bin cesp/chip_esp32c3.go | 51 +++++ cesp/chip_esp32c3_qemu.go | 17 ++ cesp/chip_esp32s3.go | 53 +++++ cesp/chip_stub.go | 14 ++ cesp/error.go | 59 +++++ cesp/error_c.go | 30 +++ cesp/error_stub.go | 21 ++ {esp32c3 => cesp/esp32c3}/esp32c3.go | 0 {esp32c3 => cesp/esp32c3}/esp_phy_adapter.c | 0 {esp32c3 => cesp/esp32c3}/isr.c | 0 cesp/esp32c3_c.go | 9 + cesp/esp32c3_qemu_c.go | 8 + {esp32s3 => cesp/esp32s3}/esp32s3.go | 0 {esp32s3 => cesp/esp32s3}/esp_phy_adapter.c | 0 {esp32s3 => cesp/esp32s3}/isr.c | 0 cesp/esp32s3_c.go | 9 + esp_timer_shim.c => cesp/esp_timer_shim.c | 0 espradio.h => cesp/espradio.h | 0 isr.c => cesp/isr.c | 0 cesp/isr.go | 42 ++++ cesp/isr_c.go | 65 ++++++ cesp/isr_stub.go | 19 ++ lib.c => cesp/lib.c | 0 netif.c => cesp/netif.c | 0 cesp/netif.go | 26 +++ cesp/netif_c.go | 51 +++++ cesp/netif_stub.go | 12 + osi.c => cesp/osi.c | 0 radio.c => cesp/radio.c | 0 cesp/radio.go | 109 +++++++++ cesp/radio_c.go | 207 ++++++++++++++++++ cesp/radio_stub.go | 43 ++++ cesp/timer.go | 21 ++ cesp/timer_c.go | 36 +++ cesp/timer_stub.go | 13 ++ cgo_esp32c3.go | 8 + cgo_esp32s3.go | 8 + espstack.go | 12 +- examples/esp32-netdev/main.go | 203 +++++++++++++++++ examples/http-app/main-http.go | 13 +- go.mod | 5 + netif_esp.go | 33 +-- netif_new.go.go | 69 ++++++ radio.go | 28 ++- radio_esp32c3.go | 75 ------- radio_esp32c3_qemu.go | 30 --- radio_esp32s3.go | 78 ------- 364 files changed, 1298 insertions(+), 224 deletions(-) create mode 100644 .vscode/settings.json rename arena.c => cesp/arena.c (100%) create mode 100644 cesp/arena.go create mode 100644 cesp/arena_c.go create mode 100644 cesp/arena_stub.go rename {blobs => cesp/blobs}/LICENSE.txt (100%) rename {blobs => cesp/blobs}/headers/btbb.h (100%) rename {blobs => cesp/blobs}/headers/esp_coex_i154.h (100%) rename {blobs => cesp/blobs}/headers/esp_coexist.h (100%) rename {blobs => cesp/blobs}/headers/esp_coexist_adapter.h (100%) rename {blobs => cesp/blobs}/headers/esp_coexist_internal.h (100%) rename {blobs => cesp/blobs}/headers/esp_compiler.h (100%) rename {blobs => cesp/blobs}/headers/esp_debug_helpers.h (100%) rename {blobs => cesp/blobs}/headers/esp_dpp.h (100%) rename {blobs => cesp/blobs}/headers/esp_eap_client.h (100%) rename {blobs => cesp/blobs}/headers/esp_err.h (100%) rename {blobs => cesp/blobs}/headers/esp_event.h (100%) rename {blobs => cesp/blobs}/headers/esp_event_base.h (100%) rename {blobs => cesp/blobs}/headers/esp_event_loop.h (100%) rename {blobs => cesp/blobs}/headers/esp_expression_with_stack.h (100%) rename {blobs => cesp/blobs}/headers/esp_freertos_hooks.h (100%) rename {blobs => cesp/blobs}/headers/esp_interface.h (100%) rename {blobs => cesp/blobs}/headers/esp_ipc.h (100%) rename {blobs => cesp/blobs}/headers/esp_ipc_isr.h (100%) rename {blobs => cesp/blobs}/headers/esp_mbo.h (100%) rename {blobs => cesp/blobs}/headers/esp_mesh.h (100%) rename {blobs => cesp/blobs}/headers/esp_mesh_internal.h (100%) rename {blobs => cesp/blobs}/headers/esp_modem_wrapper.h (100%) rename {blobs => cesp/blobs}/headers/esp_now.h (100%) rename {blobs => cesp/blobs}/headers/esp_phy.h (100%) rename {blobs => cesp/blobs}/headers/esp_phy_cert_test.h (100%) rename {blobs => cesp/blobs}/headers/esp_phy_init.h (100%) rename {blobs => cesp/blobs}/headers/esp_rrm.h (100%) rename {blobs => cesp/blobs}/headers/esp_smartconfig.h (100%) rename {blobs => cesp/blobs}/headers/esp_supplicant_utils.h (100%) rename {blobs => cesp/blobs}/headers/esp_system.h (100%) rename {blobs => cesp/blobs}/headers/esp_systick_etm.h (100%) rename {blobs => cesp/blobs}/headers/esp_task.h (100%) rename {blobs => cesp/blobs}/headers/esp_task_wdt.h (100%) rename {blobs => cesp/blobs}/headers/esp_timer.h (100%) rename {blobs => cesp/blobs}/headers/esp_wifi.h (100%) rename {blobs => cesp/blobs}/headers/esp_wifi_ap_get_sta_list.h (100%) rename {blobs => cesp/blobs}/headers/esp_wifi_default.h (100%) rename {blobs => cesp/blobs}/headers/esp_wifi_he.h (100%) rename {blobs => cesp/blobs}/headers/esp_wifi_he_types.h (100%) rename {blobs => cesp/blobs}/headers/esp_wifi_netif.h (100%) rename {blobs => cesp/blobs}/headers/esp_wifi_types.h (100%) rename {blobs => cesp/blobs}/headers/esp_wnm.h (100%) rename {blobs => cesp/blobs}/headers/esp_wpa.h (100%) rename {blobs => cesp/blobs}/headers/esp_wpa2.h (100%) rename {blobs => cesp/blobs}/headers/esp_wps.h (100%) rename {blobs => cesp/blobs}/headers/esp_xt_wdt.h (100%) rename {blobs => cesp/blobs}/headers/libunwind.h (100%) rename {blobs => cesp/blobs}/headers/local/esp_wifi_types_native.h (100%) rename {blobs => cesp/blobs}/headers/nvs.h (100%) rename {blobs => cesp/blobs}/headers/nvs_flash.h (100%) rename {blobs => cesp/blobs}/headers/nvs_handle.hpp (100%) rename {blobs => cesp/blobs}/headers/phy.h (100%) rename {blobs => cesp/blobs}/headers/smartconfig_ack.h (100%) rename {blobs => cesp/blobs}/include/btbb.h (100%) rename {blobs => cesp/blobs}/include/esp32/esp_bt.h (100%) rename {blobs => cesp/blobs}/include/esp32/esp_bt_vs.h (100%) rename {blobs => cesp/blobs}/include/esp32/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/esp_bt.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/esp_bt_cfg.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/esp_bt_vs.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32c2/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/esp_bt.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/esp_bt_vs.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32c3/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/btbb_retention_reg.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/esp_bt.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/esp_bt_vs.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/hal/modem_lpcon_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/hal/modem_syscon_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/hal/pmu_hal.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/hal/pmu_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/modem/modem_lpcon_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/modem/modem_syscon_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/pmu_bit_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/pmu_param.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/soc/pmu_reg.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/soc/pmu_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32c5/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/btbb_retention_reg.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/esp_bt.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/esp_bt_cfg.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/esp_bt_vs.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/hal/modem_lpcon_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/hal/modem_syscon_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/hal/pmu_hal.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/hal/pmu_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/modem/modem_lpcon_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/modem/modem_syscon_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/pmu_bit_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/pmu_param.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/soc/pmu_reg.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/soc/pmu_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32c6/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/.gitkeep (100%) rename {blobs => cesp/blobs}/include/esp32c61/btbb_retention_reg.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/esp_bt.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/esp_bt_vs.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/hal/modem_lpcon_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/hal/modem_syscon_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/hal/pmu_hal.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/hal/pmu_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/modem/modem_lpcon_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/modem/modem_syscon_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/pmu_bit_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/pmu_param.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/soc/pmu_reg.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/soc/pmu_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32c61/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/btbb_retention_reg.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/esp_bt.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/esp_bt_cfg.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/esp_bt_vs.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/hal/modem_lpcon_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/hal/modem_syscon_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/hal/pmu_hal.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/hal/pmu_ll.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/modem/modem_lpcon_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/modem/modem_syscon_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/pmu_bit_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/pmu_param.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/soc/pmu_reg.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/soc/pmu_struct.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32h2/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32s2/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/esp_bt.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/esp_bt_vs.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/phy_init_data.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/phy_init_deps.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/sdkconfig.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/soc/clk_tree_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/soc/interrupts.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/soc/periph_defs.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/soc/reg_base.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/soc/soc.h (100%) rename {blobs => cesp/blobs}/include/esp32s3/soc/soc_caps.h (100%) rename {blobs => cesp/blobs}/include/esp_assert.h (100%) rename {blobs => cesp/blobs}/include/esp_attr.h (100%) rename {blobs => cesp/blobs}/include/esp_bit_defs.h (100%) rename {blobs => cesp/blobs}/include/esp_bt_cfg.h (100%) rename {blobs => cesp/blobs}/include/esp_coex_i154.h (100%) rename {blobs => cesp/blobs}/include/esp_coexist.h (100%) rename {blobs => cesp/blobs}/include/esp_coexist_adapter.h (100%) rename {blobs => cesp/blobs}/include/esp_coexist_debug.h (100%) rename {blobs => cesp/blobs}/include/esp_coexist_internal.h (100%) rename {blobs => cesp/blobs}/include/esp_compiler.h (100%) rename {blobs => cesp/blobs}/include/esp_debug_helpers.h (100%) rename {blobs => cesp/blobs}/include/esp_dpp.h (100%) rename {blobs => cesp/blobs}/include/esp_eap_client.h (100%) rename {blobs => cesp/blobs}/include/esp_err.h (100%) rename {blobs => cesp/blobs}/include/esp_etm.h (100%) rename {blobs => cesp/blobs}/include/esp_event.h (100%) rename {blobs => cesp/blobs}/include/esp_event_base.h (100%) rename {blobs => cesp/blobs}/include/esp_event_loop.h (100%) rename {blobs => cesp/blobs}/include/esp_expression_with_stack.h (100%) rename {blobs => cesp/blobs}/include/esp_freertos_hooks.h (100%) rename {blobs => cesp/blobs}/include/esp_interface.h (100%) rename {blobs => cesp/blobs}/include/esp_ipc.h (100%) rename {blobs => cesp/blobs}/include/esp_ipc_isr.h (100%) rename {blobs => cesp/blobs}/include/esp_mbo.h (100%) rename {blobs => cesp/blobs}/include/esp_mesh.h (100%) rename {blobs => cesp/blobs}/include/esp_mesh_internal.h (100%) rename {blobs => cesp/blobs}/include/esp_modem_wrapper.h (100%) rename {blobs => cesp/blobs}/include/esp_netif.h (100%) rename {blobs => cesp/blobs}/include/esp_now.h (100%) rename {blobs => cesp/blobs}/include/esp_phy.h (100%) rename {blobs => cesp/blobs}/include/esp_phy_cert_test.h (100%) rename {blobs => cesp/blobs}/include/esp_phy_init.h (100%) rename {blobs => cesp/blobs}/include/esp_private/esp_modem_clock.h (100%) rename {blobs => cesp/blobs}/include/esp_private/esp_pmu (100%) rename {blobs => cesp/blobs}/include/esp_private/esp_pmu.h (100%) rename {blobs => cesp/blobs}/include/esp_private/esp_wifi_he_private.h (100%) rename {blobs => cesp/blobs}/include/esp_private/esp_wifi_he_types_private.h (100%) rename {blobs => cesp/blobs}/include/esp_private/esp_wifi_private.h (100%) rename {blobs => cesp/blobs}/include/esp_private/esp_wifi_types_private.h (100%) rename {blobs => cesp/blobs}/include/esp_private/wifi.h (100%) rename {blobs => cesp/blobs}/include/esp_private/wifi_os_adapter.h (100%) rename {blobs => cesp/blobs}/include/esp_private/wifi_types.h (100%) rename {blobs => cesp/blobs}/include/esp_rrm.h (100%) rename {blobs => cesp/blobs}/include/esp_smartconfig.h (100%) rename {blobs => cesp/blobs}/include/esp_supplicant_utils.h (100%) rename {blobs => cesp/blobs}/include/esp_system.h (100%) rename {blobs => cesp/blobs}/include/esp_system_console.h (100%) rename {blobs => cesp/blobs}/include/esp_systick_etm.h (100%) rename {blobs => cesp/blobs}/include/esp_task.h (100%) rename {blobs => cesp/blobs}/include/esp_task_wdt.h (100%) rename {blobs => cesp/blobs}/include/esp_timer.h (100%) rename {blobs => cesp/blobs}/include/esp_types.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi_ap_get_sta_list.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi_crypto_types.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi_default.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi_he.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi_he_types.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi_netif.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi_types.h (100%) rename {blobs => cesp/blobs}/include/esp_wifi_types_generic.h (100%) rename {blobs => cesp/blobs}/include/esp_wnm.h (100%) rename {blobs => cesp/blobs}/include/esp_wpa.h (100%) rename {blobs => cesp/blobs}/include/esp_wpa2.h (100%) rename {blobs => cesp/blobs}/include/esp_wps.h (100%) rename {blobs => cesp/blobs}/include/esp_xt_wdt.h (100%) rename {blobs => cesp/blobs}/include/hal/assert.h (100%) rename {blobs => cesp/blobs}/include/hal/efuse_hal.h (100%) rename {blobs => cesp/blobs}/include/hal/gpio_types.h (100%) rename {blobs => cesp/blobs}/include/hal/misc.h (100%) rename {blobs => cesp/blobs}/include/hal/modem_clock_hal.h (100%) rename {blobs => cesp/blobs}/include/hal/modem_clock_types.h (100%) rename {blobs => cesp/blobs}/include/hal/pmu_types.h (100%) rename {blobs => cesp/blobs}/include/include.h (100%) rename {blobs => cesp/blobs}/include/libunwind.h (100%) rename {blobs => cesp/blobs}/include/local/esp_wifi_types_native.h (100%) rename {blobs => cesp/blobs}/include/nimble/nimble_npl.h (100%) rename {blobs => cesp/blobs}/include/nimble/nimble_npl_os.h (100%) rename {blobs => cesp/blobs}/include/nvs.h (100%) rename {blobs => cesp/blobs}/include/nvs_bootloader.h (100%) rename {blobs => cesp/blobs}/include/nvs_flash.h (100%) rename {blobs => cesp/blobs}/include/nvs_handle.hpp (100%) rename {blobs => cesp/blobs}/include/phy.h (100%) rename {blobs => cesp/blobs}/include/smartconfig_ack.h (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libbtbb.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libbtdm_app.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libcoexist.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libcore.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libespnow.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libmesh.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libnet80211.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libphy.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libpp.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libprintf.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libregulatory.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libsmartconfig.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libwapi.a (100%) rename {blobs => cesp/blobs}/libs/esp32c3/libwpa_supplicant.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libbtbb.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libbtdm_app.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libcoexist.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libcore.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libespnow.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libmesh.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libnet80211.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libphy.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libpp.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libprintf.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libregulatory.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libsmartconfig.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libwapi.a (100%) rename {blobs => cesp/blobs}/libs/esp32s3/libwpa_supplicant.a (100%) create mode 100644 cesp/chip_esp32c3.go create mode 100644 cesp/chip_esp32c3_qemu.go create mode 100644 cesp/chip_esp32s3.go create mode 100644 cesp/chip_stub.go create mode 100644 cesp/error.go create mode 100644 cesp/error_c.go create mode 100644 cesp/error_stub.go rename {esp32c3 => cesp/esp32c3}/esp32c3.go (100%) rename {esp32c3 => cesp/esp32c3}/esp_phy_adapter.c (100%) rename {esp32c3 => cesp/esp32c3}/isr.c (100%) create mode 100644 cesp/esp32c3_c.go create mode 100644 cesp/esp32c3_qemu_c.go rename {esp32s3 => cesp/esp32s3}/esp32s3.go (100%) rename {esp32s3 => cesp/esp32s3}/esp_phy_adapter.c (100%) rename {esp32s3 => cesp/esp32s3}/isr.c (100%) create mode 100644 cesp/esp32s3_c.go rename esp_timer_shim.c => cesp/esp_timer_shim.c (100%) rename espradio.h => cesp/espradio.h (100%) rename isr.c => cesp/isr.c (100%) create mode 100644 cesp/isr.go create mode 100644 cesp/isr_c.go create mode 100644 cesp/isr_stub.go rename lib.c => cesp/lib.c (100%) rename netif.c => cesp/netif.c (100%) create mode 100644 cesp/netif.go create mode 100644 cesp/netif_c.go create mode 100644 cesp/netif_stub.go rename osi.c => cesp/osi.c (100%) rename radio.c => cesp/radio.c (100%) create mode 100644 cesp/radio.go create mode 100644 cesp/radio_c.go create mode 100644 cesp/radio_stub.go create mode 100644 cesp/timer.go create mode 100644 cesp/timer_c.go create mode 100644 cesp/timer_stub.go create mode 100644 cgo_esp32c3.go create mode 100644 cgo_esp32s3.go create mode 100644 examples/esp32-netdev/main.go create mode 100644 netif_new.go.go delete mode 100644 radio_esp32c3.go delete mode 100644 radio_esp32c3_qemu.go delete mode 100644 radio_esp32s3.go diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ad508e3 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "go.toolsEnvVars": { + "GOOS": "linux", + "GOARCH": "arm", + "GOROOT": "/home/pato/.cache/tinygo/goroot-5785ac87d82e22fa19480809c96061180a5be317b3abeefd9a525386974df68a", + "GOFLAGS": "-tags=tinygo.riscv,baremetal,linux,arm,tinygo.riscv32,esp32c3,esp,xiao_esp32c3,tinygo,purego,osusergo,math_big_pure_go,gc.conservative,scheduler.tasks,serial.usb,tinygo.unicore" + } +} \ No newline at end of file diff --git a/arena.c b/cesp/arena.c similarity index 100% rename from arena.c rename to cesp/arena.c diff --git a/cesp/arena.go b/cesp/arena.go new file mode 100644 index 0000000..36eaffc --- /dev/null +++ b/cesp/arena.go @@ -0,0 +1,8 @@ +package cesp + +// ArenaInit hands base to the C arena allocator as the backing pool. +// base must remain reachable for the lifetime of the program. +func ArenaInit(base []byte) { arenaInit(base) } + +// ArenaStats returns current arena usage and total capacity in bytes. +func ArenaStats() (used, capacity uint32) { return arenaStats() } diff --git a/cesp/arena_c.go b/cesp/arena_c.go new file mode 100644 index 0000000..4189fc2 --- /dev/null +++ b/cesp/arena_c.go @@ -0,0 +1,23 @@ +//go:build esp32c3 || esp32c3_qemu_target || esp32s3 + +package cesp + +/* +#cgo CFLAGS: -fno-short-enums +#cgo CFLAGS: -Iblobs/include +#cgo CFLAGS: -Iblobs/include/local +#cgo CFLAGS: -Iblobs/headers +#include "espradio.h" +*/ +import "C" +import "unsafe" + +func arenaInit(base []byte) { + C.espradio_arena_init((*C.uint8_t)(unsafe.Pointer(&base[0])), C.size_t(len(base))) +} + +func arenaStats() (used, capacity uint32) { + var u, c C.uint32_t + C.espradio_arena_stats(&u, &c) + return uint32(u), uint32(c) +} diff --git a/cesp/arena_stub.go b/cesp/arena_stub.go new file mode 100644 index 0000000..5e76ea1 --- /dev/null +++ b/cesp/arena_stub.go @@ -0,0 +1,6 @@ +//go:build !(esp32c3 || esp32c3_qemu_target || esp32s3) + +package cesp + +func arenaInit(_ []byte) { panic("espradio: not an ESP32 target") } +func arenaStats() (uint32, uint32) { panic("espradio: not an ESP32 target") } diff --git a/blobs/LICENSE.txt b/cesp/blobs/LICENSE.txt similarity index 100% rename from blobs/LICENSE.txt rename to cesp/blobs/LICENSE.txt diff --git a/blobs/headers/btbb.h b/cesp/blobs/headers/btbb.h similarity index 100% rename from blobs/headers/btbb.h rename to cesp/blobs/headers/btbb.h diff --git a/blobs/headers/esp_coex_i154.h b/cesp/blobs/headers/esp_coex_i154.h similarity index 100% rename from blobs/headers/esp_coex_i154.h rename to cesp/blobs/headers/esp_coex_i154.h diff --git a/blobs/headers/esp_coexist.h b/cesp/blobs/headers/esp_coexist.h similarity index 100% rename from blobs/headers/esp_coexist.h rename to cesp/blobs/headers/esp_coexist.h diff --git a/blobs/headers/esp_coexist_adapter.h b/cesp/blobs/headers/esp_coexist_adapter.h similarity index 100% rename from blobs/headers/esp_coexist_adapter.h rename to cesp/blobs/headers/esp_coexist_adapter.h diff --git a/blobs/headers/esp_coexist_internal.h b/cesp/blobs/headers/esp_coexist_internal.h similarity index 100% rename from blobs/headers/esp_coexist_internal.h rename to cesp/blobs/headers/esp_coexist_internal.h diff --git a/blobs/headers/esp_compiler.h b/cesp/blobs/headers/esp_compiler.h similarity index 100% rename from blobs/headers/esp_compiler.h rename to cesp/blobs/headers/esp_compiler.h diff --git a/blobs/headers/esp_debug_helpers.h b/cesp/blobs/headers/esp_debug_helpers.h similarity index 100% rename from blobs/headers/esp_debug_helpers.h rename to cesp/blobs/headers/esp_debug_helpers.h diff --git a/blobs/headers/esp_dpp.h b/cesp/blobs/headers/esp_dpp.h similarity index 100% rename from blobs/headers/esp_dpp.h rename to cesp/blobs/headers/esp_dpp.h diff --git a/blobs/headers/esp_eap_client.h b/cesp/blobs/headers/esp_eap_client.h similarity index 100% rename from blobs/headers/esp_eap_client.h rename to cesp/blobs/headers/esp_eap_client.h diff --git a/blobs/headers/esp_err.h b/cesp/blobs/headers/esp_err.h similarity index 100% rename from blobs/headers/esp_err.h rename to cesp/blobs/headers/esp_err.h diff --git a/blobs/headers/esp_event.h b/cesp/blobs/headers/esp_event.h similarity index 100% rename from blobs/headers/esp_event.h rename to cesp/blobs/headers/esp_event.h diff --git a/blobs/headers/esp_event_base.h b/cesp/blobs/headers/esp_event_base.h similarity index 100% rename from blobs/headers/esp_event_base.h rename to cesp/blobs/headers/esp_event_base.h diff --git a/blobs/headers/esp_event_loop.h b/cesp/blobs/headers/esp_event_loop.h similarity index 100% rename from blobs/headers/esp_event_loop.h rename to cesp/blobs/headers/esp_event_loop.h diff --git a/blobs/headers/esp_expression_with_stack.h b/cesp/blobs/headers/esp_expression_with_stack.h similarity index 100% rename from blobs/headers/esp_expression_with_stack.h rename to cesp/blobs/headers/esp_expression_with_stack.h diff --git a/blobs/headers/esp_freertos_hooks.h b/cesp/blobs/headers/esp_freertos_hooks.h similarity index 100% rename from blobs/headers/esp_freertos_hooks.h rename to cesp/blobs/headers/esp_freertos_hooks.h diff --git a/blobs/headers/esp_interface.h b/cesp/blobs/headers/esp_interface.h similarity index 100% rename from blobs/headers/esp_interface.h rename to cesp/blobs/headers/esp_interface.h diff --git a/blobs/headers/esp_ipc.h b/cesp/blobs/headers/esp_ipc.h similarity index 100% rename from blobs/headers/esp_ipc.h rename to cesp/blobs/headers/esp_ipc.h diff --git a/blobs/headers/esp_ipc_isr.h b/cesp/blobs/headers/esp_ipc_isr.h similarity index 100% rename from blobs/headers/esp_ipc_isr.h rename to cesp/blobs/headers/esp_ipc_isr.h diff --git a/blobs/headers/esp_mbo.h b/cesp/blobs/headers/esp_mbo.h similarity index 100% rename from blobs/headers/esp_mbo.h rename to cesp/blobs/headers/esp_mbo.h diff --git a/blobs/headers/esp_mesh.h b/cesp/blobs/headers/esp_mesh.h similarity index 100% rename from blobs/headers/esp_mesh.h rename to cesp/blobs/headers/esp_mesh.h diff --git a/blobs/headers/esp_mesh_internal.h b/cesp/blobs/headers/esp_mesh_internal.h similarity index 100% rename from blobs/headers/esp_mesh_internal.h rename to cesp/blobs/headers/esp_mesh_internal.h diff --git a/blobs/headers/esp_modem_wrapper.h b/cesp/blobs/headers/esp_modem_wrapper.h similarity index 100% rename from blobs/headers/esp_modem_wrapper.h rename to cesp/blobs/headers/esp_modem_wrapper.h diff --git a/blobs/headers/esp_now.h b/cesp/blobs/headers/esp_now.h similarity index 100% rename from blobs/headers/esp_now.h rename to cesp/blobs/headers/esp_now.h diff --git a/blobs/headers/esp_phy.h b/cesp/blobs/headers/esp_phy.h similarity index 100% rename from blobs/headers/esp_phy.h rename to cesp/blobs/headers/esp_phy.h diff --git a/blobs/headers/esp_phy_cert_test.h b/cesp/blobs/headers/esp_phy_cert_test.h similarity index 100% rename from blobs/headers/esp_phy_cert_test.h rename to cesp/blobs/headers/esp_phy_cert_test.h diff --git a/blobs/headers/esp_phy_init.h b/cesp/blobs/headers/esp_phy_init.h similarity index 100% rename from blobs/headers/esp_phy_init.h rename to cesp/blobs/headers/esp_phy_init.h diff --git a/blobs/headers/esp_rrm.h b/cesp/blobs/headers/esp_rrm.h similarity index 100% rename from blobs/headers/esp_rrm.h rename to cesp/blobs/headers/esp_rrm.h diff --git a/blobs/headers/esp_smartconfig.h b/cesp/blobs/headers/esp_smartconfig.h similarity index 100% rename from blobs/headers/esp_smartconfig.h rename to cesp/blobs/headers/esp_smartconfig.h diff --git a/blobs/headers/esp_supplicant_utils.h b/cesp/blobs/headers/esp_supplicant_utils.h similarity index 100% rename from blobs/headers/esp_supplicant_utils.h rename to cesp/blobs/headers/esp_supplicant_utils.h diff --git a/blobs/headers/esp_system.h b/cesp/blobs/headers/esp_system.h similarity index 100% rename from blobs/headers/esp_system.h rename to cesp/blobs/headers/esp_system.h diff --git a/blobs/headers/esp_systick_etm.h b/cesp/blobs/headers/esp_systick_etm.h similarity index 100% rename from blobs/headers/esp_systick_etm.h rename to cesp/blobs/headers/esp_systick_etm.h diff --git a/blobs/headers/esp_task.h b/cesp/blobs/headers/esp_task.h similarity index 100% rename from blobs/headers/esp_task.h rename to cesp/blobs/headers/esp_task.h diff --git a/blobs/headers/esp_task_wdt.h b/cesp/blobs/headers/esp_task_wdt.h similarity index 100% rename from blobs/headers/esp_task_wdt.h rename to cesp/blobs/headers/esp_task_wdt.h diff --git a/blobs/headers/esp_timer.h b/cesp/blobs/headers/esp_timer.h similarity index 100% rename from blobs/headers/esp_timer.h rename to cesp/blobs/headers/esp_timer.h diff --git a/blobs/headers/esp_wifi.h b/cesp/blobs/headers/esp_wifi.h similarity index 100% rename from blobs/headers/esp_wifi.h rename to cesp/blobs/headers/esp_wifi.h diff --git a/blobs/headers/esp_wifi_ap_get_sta_list.h b/cesp/blobs/headers/esp_wifi_ap_get_sta_list.h similarity index 100% rename from blobs/headers/esp_wifi_ap_get_sta_list.h rename to cesp/blobs/headers/esp_wifi_ap_get_sta_list.h diff --git a/blobs/headers/esp_wifi_default.h b/cesp/blobs/headers/esp_wifi_default.h similarity index 100% rename from blobs/headers/esp_wifi_default.h rename to cesp/blobs/headers/esp_wifi_default.h diff --git a/blobs/headers/esp_wifi_he.h b/cesp/blobs/headers/esp_wifi_he.h similarity index 100% rename from blobs/headers/esp_wifi_he.h rename to cesp/blobs/headers/esp_wifi_he.h diff --git a/blobs/headers/esp_wifi_he_types.h b/cesp/blobs/headers/esp_wifi_he_types.h similarity index 100% rename from blobs/headers/esp_wifi_he_types.h rename to cesp/blobs/headers/esp_wifi_he_types.h diff --git a/blobs/headers/esp_wifi_netif.h b/cesp/blobs/headers/esp_wifi_netif.h similarity index 100% rename from blobs/headers/esp_wifi_netif.h rename to cesp/blobs/headers/esp_wifi_netif.h diff --git a/blobs/headers/esp_wifi_types.h b/cesp/blobs/headers/esp_wifi_types.h similarity index 100% rename from blobs/headers/esp_wifi_types.h rename to cesp/blobs/headers/esp_wifi_types.h diff --git a/blobs/headers/esp_wnm.h b/cesp/blobs/headers/esp_wnm.h similarity index 100% rename from blobs/headers/esp_wnm.h rename to cesp/blobs/headers/esp_wnm.h diff --git a/blobs/headers/esp_wpa.h b/cesp/blobs/headers/esp_wpa.h similarity index 100% rename from blobs/headers/esp_wpa.h rename to cesp/blobs/headers/esp_wpa.h diff --git a/blobs/headers/esp_wpa2.h b/cesp/blobs/headers/esp_wpa2.h similarity index 100% rename from blobs/headers/esp_wpa2.h rename to cesp/blobs/headers/esp_wpa2.h diff --git a/blobs/headers/esp_wps.h b/cesp/blobs/headers/esp_wps.h similarity index 100% rename from blobs/headers/esp_wps.h rename to cesp/blobs/headers/esp_wps.h diff --git a/blobs/headers/esp_xt_wdt.h b/cesp/blobs/headers/esp_xt_wdt.h similarity index 100% rename from blobs/headers/esp_xt_wdt.h rename to cesp/blobs/headers/esp_xt_wdt.h diff --git a/blobs/headers/libunwind.h b/cesp/blobs/headers/libunwind.h similarity index 100% rename from blobs/headers/libunwind.h rename to cesp/blobs/headers/libunwind.h diff --git a/blobs/headers/local/esp_wifi_types_native.h b/cesp/blobs/headers/local/esp_wifi_types_native.h similarity index 100% rename from blobs/headers/local/esp_wifi_types_native.h rename to cesp/blobs/headers/local/esp_wifi_types_native.h diff --git a/blobs/headers/nvs.h b/cesp/blobs/headers/nvs.h similarity index 100% rename from blobs/headers/nvs.h rename to cesp/blobs/headers/nvs.h diff --git a/blobs/headers/nvs_flash.h b/cesp/blobs/headers/nvs_flash.h similarity index 100% rename from blobs/headers/nvs_flash.h rename to cesp/blobs/headers/nvs_flash.h diff --git a/blobs/headers/nvs_handle.hpp b/cesp/blobs/headers/nvs_handle.hpp similarity index 100% rename from blobs/headers/nvs_handle.hpp rename to cesp/blobs/headers/nvs_handle.hpp diff --git a/blobs/headers/phy.h b/cesp/blobs/headers/phy.h similarity index 100% rename from blobs/headers/phy.h rename to cesp/blobs/headers/phy.h diff --git a/blobs/headers/smartconfig_ack.h b/cesp/blobs/headers/smartconfig_ack.h similarity index 100% rename from blobs/headers/smartconfig_ack.h rename to cesp/blobs/headers/smartconfig_ack.h diff --git a/blobs/include/btbb.h b/cesp/blobs/include/btbb.h similarity index 100% rename from blobs/include/btbb.h rename to cesp/blobs/include/btbb.h diff --git a/blobs/include/esp32/esp_bt.h b/cesp/blobs/include/esp32/esp_bt.h similarity index 100% rename from blobs/include/esp32/esp_bt.h rename to cesp/blobs/include/esp32/esp_bt.h diff --git a/blobs/include/esp32/esp_bt_vs.h b/cesp/blobs/include/esp32/esp_bt_vs.h similarity index 100% rename from blobs/include/esp32/esp_bt_vs.h rename to cesp/blobs/include/esp32/esp_bt_vs.h diff --git a/blobs/include/esp32/phy_init_data.h b/cesp/blobs/include/esp32/phy_init_data.h similarity index 100% rename from blobs/include/esp32/phy_init_data.h rename to cesp/blobs/include/esp32/phy_init_data.h diff --git a/blobs/include/esp32/phy_init_deps.h b/cesp/blobs/include/esp32/phy_init_deps.h similarity index 100% rename from blobs/include/esp32/phy_init_deps.h rename to cesp/blobs/include/esp32/phy_init_deps.h diff --git a/blobs/include/esp32/sdkconfig.h b/cesp/blobs/include/esp32/sdkconfig.h similarity index 100% rename from blobs/include/esp32/sdkconfig.h rename to cesp/blobs/include/esp32/sdkconfig.h diff --git a/blobs/include/esp32/soc/clk_tree_defs.h b/cesp/blobs/include/esp32/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32/soc/clk_tree_defs.h diff --git a/blobs/include/esp32/soc/interrupts.h b/cesp/blobs/include/esp32/soc/interrupts.h similarity index 100% rename from blobs/include/esp32/soc/interrupts.h rename to cesp/blobs/include/esp32/soc/interrupts.h diff --git a/blobs/include/esp32/soc/periph_defs.h b/cesp/blobs/include/esp32/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32/soc/periph_defs.h rename to cesp/blobs/include/esp32/soc/periph_defs.h diff --git a/blobs/include/esp32/soc/reg_base.h b/cesp/blobs/include/esp32/soc/reg_base.h similarity index 100% rename from blobs/include/esp32/soc/reg_base.h rename to cesp/blobs/include/esp32/soc/reg_base.h diff --git a/blobs/include/esp32/soc/soc.h b/cesp/blobs/include/esp32/soc/soc.h similarity index 100% rename from blobs/include/esp32/soc/soc.h rename to cesp/blobs/include/esp32/soc/soc.h diff --git a/blobs/include/esp32/soc/soc_caps.h b/cesp/blobs/include/esp32/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32/soc/soc_caps.h rename to cesp/blobs/include/esp32/soc/soc_caps.h diff --git a/blobs/include/esp32c2/esp_bt.h b/cesp/blobs/include/esp32c2/esp_bt.h similarity index 100% rename from blobs/include/esp32c2/esp_bt.h rename to cesp/blobs/include/esp32c2/esp_bt.h diff --git a/blobs/include/esp32c2/esp_bt_cfg.h b/cesp/blobs/include/esp32c2/esp_bt_cfg.h similarity index 100% rename from blobs/include/esp32c2/esp_bt_cfg.h rename to cesp/blobs/include/esp32c2/esp_bt_cfg.h diff --git a/blobs/include/esp32c2/esp_bt_vs.h b/cesp/blobs/include/esp32c2/esp_bt_vs.h similarity index 100% rename from blobs/include/esp32c2/esp_bt_vs.h rename to cesp/blobs/include/esp32c2/esp_bt_vs.h diff --git a/blobs/include/esp32c2/phy_init_data.h b/cesp/blobs/include/esp32c2/phy_init_data.h similarity index 100% rename from blobs/include/esp32c2/phy_init_data.h rename to cesp/blobs/include/esp32c2/phy_init_data.h diff --git a/blobs/include/esp32c2/phy_init_deps.h b/cesp/blobs/include/esp32c2/phy_init_deps.h similarity index 100% rename from blobs/include/esp32c2/phy_init_deps.h rename to cesp/blobs/include/esp32c2/phy_init_deps.h diff --git a/blobs/include/esp32c2/sdkconfig.h b/cesp/blobs/include/esp32c2/sdkconfig.h similarity index 100% rename from blobs/include/esp32c2/sdkconfig.h rename to cesp/blobs/include/esp32c2/sdkconfig.h diff --git a/blobs/include/esp32c2/soc/clk_tree_defs.h b/cesp/blobs/include/esp32c2/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32c2/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32c2/soc/clk_tree_defs.h diff --git a/blobs/include/esp32c2/soc/interrupts.h b/cesp/blobs/include/esp32c2/soc/interrupts.h similarity index 100% rename from blobs/include/esp32c2/soc/interrupts.h rename to cesp/blobs/include/esp32c2/soc/interrupts.h diff --git a/blobs/include/esp32c2/soc/periph_defs.h b/cesp/blobs/include/esp32c2/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32c2/soc/periph_defs.h rename to cesp/blobs/include/esp32c2/soc/periph_defs.h diff --git a/blobs/include/esp32c2/soc/reg_base.h b/cesp/blobs/include/esp32c2/soc/reg_base.h similarity index 100% rename from blobs/include/esp32c2/soc/reg_base.h rename to cesp/blobs/include/esp32c2/soc/reg_base.h diff --git a/blobs/include/esp32c2/soc/soc.h b/cesp/blobs/include/esp32c2/soc/soc.h similarity index 100% rename from blobs/include/esp32c2/soc/soc.h rename to cesp/blobs/include/esp32c2/soc/soc.h diff --git a/blobs/include/esp32c2/soc/soc_caps.h b/cesp/blobs/include/esp32c2/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32c2/soc/soc_caps.h rename to cesp/blobs/include/esp32c2/soc/soc_caps.h diff --git a/blobs/include/esp32c3/esp_bt.h b/cesp/blobs/include/esp32c3/esp_bt.h similarity index 100% rename from blobs/include/esp32c3/esp_bt.h rename to cesp/blobs/include/esp32c3/esp_bt.h diff --git a/blobs/include/esp32c3/esp_bt_vs.h b/cesp/blobs/include/esp32c3/esp_bt_vs.h similarity index 100% rename from blobs/include/esp32c3/esp_bt_vs.h rename to cesp/blobs/include/esp32c3/esp_bt_vs.h diff --git a/blobs/include/esp32c3/phy_init_data.h b/cesp/blobs/include/esp32c3/phy_init_data.h similarity index 100% rename from blobs/include/esp32c3/phy_init_data.h rename to cesp/blobs/include/esp32c3/phy_init_data.h diff --git a/blobs/include/esp32c3/phy_init_deps.h b/cesp/blobs/include/esp32c3/phy_init_deps.h similarity index 100% rename from blobs/include/esp32c3/phy_init_deps.h rename to cesp/blobs/include/esp32c3/phy_init_deps.h diff --git a/blobs/include/esp32c3/sdkconfig.h b/cesp/blobs/include/esp32c3/sdkconfig.h similarity index 100% rename from blobs/include/esp32c3/sdkconfig.h rename to cesp/blobs/include/esp32c3/sdkconfig.h diff --git a/blobs/include/esp32c3/soc/clk_tree_defs.h b/cesp/blobs/include/esp32c3/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32c3/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32c3/soc/clk_tree_defs.h diff --git a/blobs/include/esp32c3/soc/interrupts.h b/cesp/blobs/include/esp32c3/soc/interrupts.h similarity index 100% rename from blobs/include/esp32c3/soc/interrupts.h rename to cesp/blobs/include/esp32c3/soc/interrupts.h diff --git a/blobs/include/esp32c3/soc/periph_defs.h b/cesp/blobs/include/esp32c3/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32c3/soc/periph_defs.h rename to cesp/blobs/include/esp32c3/soc/periph_defs.h diff --git a/blobs/include/esp32c3/soc/reg_base.h b/cesp/blobs/include/esp32c3/soc/reg_base.h similarity index 100% rename from blobs/include/esp32c3/soc/reg_base.h rename to cesp/blobs/include/esp32c3/soc/reg_base.h diff --git a/blobs/include/esp32c3/soc/soc.h b/cesp/blobs/include/esp32c3/soc/soc.h similarity index 100% rename from blobs/include/esp32c3/soc/soc.h rename to cesp/blobs/include/esp32c3/soc/soc.h diff --git a/blobs/include/esp32c3/soc/soc_caps.h b/cesp/blobs/include/esp32c3/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32c3/soc/soc_caps.h rename to cesp/blobs/include/esp32c3/soc/soc_caps.h diff --git a/blobs/include/esp32c5/btbb_retention_reg.h b/cesp/blobs/include/esp32c5/btbb_retention_reg.h similarity index 100% rename from blobs/include/esp32c5/btbb_retention_reg.h rename to cesp/blobs/include/esp32c5/btbb_retention_reg.h diff --git a/blobs/include/esp32c5/esp_bt.h b/cesp/blobs/include/esp32c5/esp_bt.h similarity index 100% rename from blobs/include/esp32c5/esp_bt.h rename to cesp/blobs/include/esp32c5/esp_bt.h diff --git a/blobs/include/esp32c5/esp_bt_vs.h b/cesp/blobs/include/esp32c5/esp_bt_vs.h similarity index 100% rename from blobs/include/esp32c5/esp_bt_vs.h rename to cesp/blobs/include/esp32c5/esp_bt_vs.h diff --git a/blobs/include/esp32c5/hal/modem_lpcon_ll.h b/cesp/blobs/include/esp32c5/hal/modem_lpcon_ll.h similarity index 100% rename from blobs/include/esp32c5/hal/modem_lpcon_ll.h rename to cesp/blobs/include/esp32c5/hal/modem_lpcon_ll.h diff --git a/blobs/include/esp32c5/hal/modem_syscon_ll.h b/cesp/blobs/include/esp32c5/hal/modem_syscon_ll.h similarity index 100% rename from blobs/include/esp32c5/hal/modem_syscon_ll.h rename to cesp/blobs/include/esp32c5/hal/modem_syscon_ll.h diff --git a/blobs/include/esp32c5/hal/pmu_hal.h b/cesp/blobs/include/esp32c5/hal/pmu_hal.h similarity index 100% rename from blobs/include/esp32c5/hal/pmu_hal.h rename to cesp/blobs/include/esp32c5/hal/pmu_hal.h diff --git a/blobs/include/esp32c5/hal/pmu_ll.h b/cesp/blobs/include/esp32c5/hal/pmu_ll.h similarity index 100% rename from blobs/include/esp32c5/hal/pmu_ll.h rename to cesp/blobs/include/esp32c5/hal/pmu_ll.h diff --git a/blobs/include/esp32c5/modem/modem_lpcon_struct.h b/cesp/blobs/include/esp32c5/modem/modem_lpcon_struct.h similarity index 100% rename from blobs/include/esp32c5/modem/modem_lpcon_struct.h rename to cesp/blobs/include/esp32c5/modem/modem_lpcon_struct.h diff --git a/blobs/include/esp32c5/modem/modem_syscon_struct.h b/cesp/blobs/include/esp32c5/modem/modem_syscon_struct.h similarity index 100% rename from blobs/include/esp32c5/modem/modem_syscon_struct.h rename to cesp/blobs/include/esp32c5/modem/modem_syscon_struct.h diff --git a/blobs/include/esp32c5/phy_init_data.h b/cesp/blobs/include/esp32c5/phy_init_data.h similarity index 100% rename from blobs/include/esp32c5/phy_init_data.h rename to cesp/blobs/include/esp32c5/phy_init_data.h diff --git a/blobs/include/esp32c5/phy_init_deps.h b/cesp/blobs/include/esp32c5/phy_init_deps.h similarity index 100% rename from blobs/include/esp32c5/phy_init_deps.h rename to cesp/blobs/include/esp32c5/phy_init_deps.h diff --git a/blobs/include/esp32c5/pmu_bit_defs.h b/cesp/blobs/include/esp32c5/pmu_bit_defs.h similarity index 100% rename from blobs/include/esp32c5/pmu_bit_defs.h rename to cesp/blobs/include/esp32c5/pmu_bit_defs.h diff --git a/blobs/include/esp32c5/pmu_param.h b/cesp/blobs/include/esp32c5/pmu_param.h similarity index 100% rename from blobs/include/esp32c5/pmu_param.h rename to cesp/blobs/include/esp32c5/pmu_param.h diff --git a/blobs/include/esp32c5/sdkconfig.h b/cesp/blobs/include/esp32c5/sdkconfig.h similarity index 100% rename from blobs/include/esp32c5/sdkconfig.h rename to cesp/blobs/include/esp32c5/sdkconfig.h diff --git a/blobs/include/esp32c5/soc/clk_tree_defs.h b/cesp/blobs/include/esp32c5/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32c5/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32c5/soc/clk_tree_defs.h diff --git a/blobs/include/esp32c5/soc/interrupts.h b/cesp/blobs/include/esp32c5/soc/interrupts.h similarity index 100% rename from blobs/include/esp32c5/soc/interrupts.h rename to cesp/blobs/include/esp32c5/soc/interrupts.h diff --git a/blobs/include/esp32c5/soc/periph_defs.h b/cesp/blobs/include/esp32c5/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32c5/soc/periph_defs.h rename to cesp/blobs/include/esp32c5/soc/periph_defs.h diff --git a/blobs/include/esp32c5/soc/pmu_reg.h b/cesp/blobs/include/esp32c5/soc/pmu_reg.h similarity index 100% rename from blobs/include/esp32c5/soc/pmu_reg.h rename to cesp/blobs/include/esp32c5/soc/pmu_reg.h diff --git a/blobs/include/esp32c5/soc/pmu_struct.h b/cesp/blobs/include/esp32c5/soc/pmu_struct.h similarity index 100% rename from blobs/include/esp32c5/soc/pmu_struct.h rename to cesp/blobs/include/esp32c5/soc/pmu_struct.h diff --git a/blobs/include/esp32c5/soc/reg_base.h b/cesp/blobs/include/esp32c5/soc/reg_base.h similarity index 100% rename from blobs/include/esp32c5/soc/reg_base.h rename to cesp/blobs/include/esp32c5/soc/reg_base.h diff --git a/blobs/include/esp32c5/soc/soc.h b/cesp/blobs/include/esp32c5/soc/soc.h similarity index 100% rename from blobs/include/esp32c5/soc/soc.h rename to cesp/blobs/include/esp32c5/soc/soc.h diff --git a/blobs/include/esp32c5/soc/soc_caps.h b/cesp/blobs/include/esp32c5/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32c5/soc/soc_caps.h rename to cesp/blobs/include/esp32c5/soc/soc_caps.h diff --git a/blobs/include/esp32c6/btbb_retention_reg.h b/cesp/blobs/include/esp32c6/btbb_retention_reg.h similarity index 100% rename from blobs/include/esp32c6/btbb_retention_reg.h rename to cesp/blobs/include/esp32c6/btbb_retention_reg.h diff --git a/blobs/include/esp32c6/esp_bt.h b/cesp/blobs/include/esp32c6/esp_bt.h similarity index 100% rename from blobs/include/esp32c6/esp_bt.h rename to cesp/blobs/include/esp32c6/esp_bt.h diff --git a/blobs/include/esp32c6/esp_bt_cfg.h b/cesp/blobs/include/esp32c6/esp_bt_cfg.h similarity index 100% rename from blobs/include/esp32c6/esp_bt_cfg.h rename to cesp/blobs/include/esp32c6/esp_bt_cfg.h diff --git a/blobs/include/esp32c6/esp_bt_vs.h b/cesp/blobs/include/esp32c6/esp_bt_vs.h similarity index 100% rename from blobs/include/esp32c6/esp_bt_vs.h rename to cesp/blobs/include/esp32c6/esp_bt_vs.h diff --git a/blobs/include/esp32c6/hal/modem_lpcon_ll.h b/cesp/blobs/include/esp32c6/hal/modem_lpcon_ll.h similarity index 100% rename from blobs/include/esp32c6/hal/modem_lpcon_ll.h rename to cesp/blobs/include/esp32c6/hal/modem_lpcon_ll.h diff --git a/blobs/include/esp32c6/hal/modem_syscon_ll.h b/cesp/blobs/include/esp32c6/hal/modem_syscon_ll.h similarity index 100% rename from blobs/include/esp32c6/hal/modem_syscon_ll.h rename to cesp/blobs/include/esp32c6/hal/modem_syscon_ll.h diff --git a/blobs/include/esp32c6/hal/pmu_hal.h b/cesp/blobs/include/esp32c6/hal/pmu_hal.h similarity index 100% rename from blobs/include/esp32c6/hal/pmu_hal.h rename to cesp/blobs/include/esp32c6/hal/pmu_hal.h diff --git a/blobs/include/esp32c6/hal/pmu_ll.h b/cesp/blobs/include/esp32c6/hal/pmu_ll.h similarity index 100% rename from blobs/include/esp32c6/hal/pmu_ll.h rename to cesp/blobs/include/esp32c6/hal/pmu_ll.h diff --git a/blobs/include/esp32c6/modem/modem_lpcon_struct.h b/cesp/blobs/include/esp32c6/modem/modem_lpcon_struct.h similarity index 100% rename from blobs/include/esp32c6/modem/modem_lpcon_struct.h rename to cesp/blobs/include/esp32c6/modem/modem_lpcon_struct.h diff --git a/blobs/include/esp32c6/modem/modem_syscon_struct.h b/cesp/blobs/include/esp32c6/modem/modem_syscon_struct.h similarity index 100% rename from blobs/include/esp32c6/modem/modem_syscon_struct.h rename to cesp/blobs/include/esp32c6/modem/modem_syscon_struct.h diff --git a/blobs/include/esp32c6/phy_init_data.h b/cesp/blobs/include/esp32c6/phy_init_data.h similarity index 100% rename from blobs/include/esp32c6/phy_init_data.h rename to cesp/blobs/include/esp32c6/phy_init_data.h diff --git a/blobs/include/esp32c6/phy_init_deps.h b/cesp/blobs/include/esp32c6/phy_init_deps.h similarity index 100% rename from blobs/include/esp32c6/phy_init_deps.h rename to cesp/blobs/include/esp32c6/phy_init_deps.h diff --git a/blobs/include/esp32c6/pmu_bit_defs.h b/cesp/blobs/include/esp32c6/pmu_bit_defs.h similarity index 100% rename from blobs/include/esp32c6/pmu_bit_defs.h rename to cesp/blobs/include/esp32c6/pmu_bit_defs.h diff --git a/blobs/include/esp32c6/pmu_param.h b/cesp/blobs/include/esp32c6/pmu_param.h similarity index 100% rename from blobs/include/esp32c6/pmu_param.h rename to cesp/blobs/include/esp32c6/pmu_param.h diff --git a/blobs/include/esp32c6/sdkconfig.h b/cesp/blobs/include/esp32c6/sdkconfig.h similarity index 100% rename from blobs/include/esp32c6/sdkconfig.h rename to cesp/blobs/include/esp32c6/sdkconfig.h diff --git a/blobs/include/esp32c6/soc/clk_tree_defs.h b/cesp/blobs/include/esp32c6/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32c6/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32c6/soc/clk_tree_defs.h diff --git a/blobs/include/esp32c6/soc/interrupts.h b/cesp/blobs/include/esp32c6/soc/interrupts.h similarity index 100% rename from blobs/include/esp32c6/soc/interrupts.h rename to cesp/blobs/include/esp32c6/soc/interrupts.h diff --git a/blobs/include/esp32c6/soc/periph_defs.h b/cesp/blobs/include/esp32c6/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32c6/soc/periph_defs.h rename to cesp/blobs/include/esp32c6/soc/periph_defs.h diff --git a/blobs/include/esp32c6/soc/pmu_reg.h b/cesp/blobs/include/esp32c6/soc/pmu_reg.h similarity index 100% rename from blobs/include/esp32c6/soc/pmu_reg.h rename to cesp/blobs/include/esp32c6/soc/pmu_reg.h diff --git a/blobs/include/esp32c6/soc/pmu_struct.h b/cesp/blobs/include/esp32c6/soc/pmu_struct.h similarity index 100% rename from blobs/include/esp32c6/soc/pmu_struct.h rename to cesp/blobs/include/esp32c6/soc/pmu_struct.h diff --git a/blobs/include/esp32c6/soc/reg_base.h b/cesp/blobs/include/esp32c6/soc/reg_base.h similarity index 100% rename from blobs/include/esp32c6/soc/reg_base.h rename to cesp/blobs/include/esp32c6/soc/reg_base.h diff --git a/blobs/include/esp32c6/soc/soc.h b/cesp/blobs/include/esp32c6/soc/soc.h similarity index 100% rename from blobs/include/esp32c6/soc/soc.h rename to cesp/blobs/include/esp32c6/soc/soc.h diff --git a/blobs/include/esp32c6/soc/soc_caps.h b/cesp/blobs/include/esp32c6/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32c6/soc/soc_caps.h rename to cesp/blobs/include/esp32c6/soc/soc_caps.h diff --git a/blobs/include/esp32c61/.gitkeep b/cesp/blobs/include/esp32c61/.gitkeep similarity index 100% rename from blobs/include/esp32c61/.gitkeep rename to cesp/blobs/include/esp32c61/.gitkeep diff --git a/blobs/include/esp32c61/btbb_retention_reg.h b/cesp/blobs/include/esp32c61/btbb_retention_reg.h similarity index 100% rename from blobs/include/esp32c61/btbb_retention_reg.h rename to cesp/blobs/include/esp32c61/btbb_retention_reg.h diff --git a/blobs/include/esp32c61/esp_bt.h b/cesp/blobs/include/esp32c61/esp_bt.h similarity index 100% rename from blobs/include/esp32c61/esp_bt.h rename to cesp/blobs/include/esp32c61/esp_bt.h diff --git a/blobs/include/esp32c61/esp_bt_vs.h b/cesp/blobs/include/esp32c61/esp_bt_vs.h similarity index 100% rename from blobs/include/esp32c61/esp_bt_vs.h rename to cesp/blobs/include/esp32c61/esp_bt_vs.h diff --git a/blobs/include/esp32c61/hal/modem_lpcon_ll.h b/cesp/blobs/include/esp32c61/hal/modem_lpcon_ll.h similarity index 100% rename from blobs/include/esp32c61/hal/modem_lpcon_ll.h rename to cesp/blobs/include/esp32c61/hal/modem_lpcon_ll.h diff --git a/blobs/include/esp32c61/hal/modem_syscon_ll.h b/cesp/blobs/include/esp32c61/hal/modem_syscon_ll.h similarity index 100% rename from blobs/include/esp32c61/hal/modem_syscon_ll.h rename to cesp/blobs/include/esp32c61/hal/modem_syscon_ll.h diff --git a/blobs/include/esp32c61/hal/pmu_hal.h b/cesp/blobs/include/esp32c61/hal/pmu_hal.h similarity index 100% rename from blobs/include/esp32c61/hal/pmu_hal.h rename to cesp/blobs/include/esp32c61/hal/pmu_hal.h diff --git a/blobs/include/esp32c61/hal/pmu_ll.h b/cesp/blobs/include/esp32c61/hal/pmu_ll.h similarity index 100% rename from blobs/include/esp32c61/hal/pmu_ll.h rename to cesp/blobs/include/esp32c61/hal/pmu_ll.h diff --git a/blobs/include/esp32c61/modem/modem_lpcon_struct.h b/cesp/blobs/include/esp32c61/modem/modem_lpcon_struct.h similarity index 100% rename from blobs/include/esp32c61/modem/modem_lpcon_struct.h rename to cesp/blobs/include/esp32c61/modem/modem_lpcon_struct.h diff --git a/blobs/include/esp32c61/modem/modem_syscon_struct.h b/cesp/blobs/include/esp32c61/modem/modem_syscon_struct.h similarity index 100% rename from blobs/include/esp32c61/modem/modem_syscon_struct.h rename to cesp/blobs/include/esp32c61/modem/modem_syscon_struct.h diff --git a/blobs/include/esp32c61/phy_init_data.h b/cesp/blobs/include/esp32c61/phy_init_data.h similarity index 100% rename from blobs/include/esp32c61/phy_init_data.h rename to cesp/blobs/include/esp32c61/phy_init_data.h diff --git a/blobs/include/esp32c61/phy_init_deps.h b/cesp/blobs/include/esp32c61/phy_init_deps.h similarity index 100% rename from blobs/include/esp32c61/phy_init_deps.h rename to cesp/blobs/include/esp32c61/phy_init_deps.h diff --git a/blobs/include/esp32c61/pmu_bit_defs.h b/cesp/blobs/include/esp32c61/pmu_bit_defs.h similarity index 100% rename from blobs/include/esp32c61/pmu_bit_defs.h rename to cesp/blobs/include/esp32c61/pmu_bit_defs.h diff --git a/blobs/include/esp32c61/pmu_param.h b/cesp/blobs/include/esp32c61/pmu_param.h similarity index 100% rename from blobs/include/esp32c61/pmu_param.h rename to cesp/blobs/include/esp32c61/pmu_param.h diff --git a/blobs/include/esp32c61/sdkconfig.h b/cesp/blobs/include/esp32c61/sdkconfig.h similarity index 100% rename from blobs/include/esp32c61/sdkconfig.h rename to cesp/blobs/include/esp32c61/sdkconfig.h diff --git a/blobs/include/esp32c61/soc/clk_tree_defs.h b/cesp/blobs/include/esp32c61/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32c61/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32c61/soc/clk_tree_defs.h diff --git a/blobs/include/esp32c61/soc/interrupts.h b/cesp/blobs/include/esp32c61/soc/interrupts.h similarity index 100% rename from blobs/include/esp32c61/soc/interrupts.h rename to cesp/blobs/include/esp32c61/soc/interrupts.h diff --git a/blobs/include/esp32c61/soc/periph_defs.h b/cesp/blobs/include/esp32c61/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32c61/soc/periph_defs.h rename to cesp/blobs/include/esp32c61/soc/periph_defs.h diff --git a/blobs/include/esp32c61/soc/pmu_reg.h b/cesp/blobs/include/esp32c61/soc/pmu_reg.h similarity index 100% rename from blobs/include/esp32c61/soc/pmu_reg.h rename to cesp/blobs/include/esp32c61/soc/pmu_reg.h diff --git a/blobs/include/esp32c61/soc/pmu_struct.h b/cesp/blobs/include/esp32c61/soc/pmu_struct.h similarity index 100% rename from blobs/include/esp32c61/soc/pmu_struct.h rename to cesp/blobs/include/esp32c61/soc/pmu_struct.h diff --git a/blobs/include/esp32c61/soc/reg_base.h b/cesp/blobs/include/esp32c61/soc/reg_base.h similarity index 100% rename from blobs/include/esp32c61/soc/reg_base.h rename to cesp/blobs/include/esp32c61/soc/reg_base.h diff --git a/blobs/include/esp32c61/soc/soc.h b/cesp/blobs/include/esp32c61/soc/soc.h similarity index 100% rename from blobs/include/esp32c61/soc/soc.h rename to cesp/blobs/include/esp32c61/soc/soc.h diff --git a/blobs/include/esp32c61/soc/soc_caps.h b/cesp/blobs/include/esp32c61/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32c61/soc/soc_caps.h rename to cesp/blobs/include/esp32c61/soc/soc_caps.h diff --git a/blobs/include/esp32h2/btbb_retention_reg.h b/cesp/blobs/include/esp32h2/btbb_retention_reg.h similarity index 100% rename from blobs/include/esp32h2/btbb_retention_reg.h rename to cesp/blobs/include/esp32h2/btbb_retention_reg.h diff --git a/blobs/include/esp32h2/esp_bt.h b/cesp/blobs/include/esp32h2/esp_bt.h similarity index 100% rename from blobs/include/esp32h2/esp_bt.h rename to cesp/blobs/include/esp32h2/esp_bt.h diff --git a/blobs/include/esp32h2/esp_bt_cfg.h b/cesp/blobs/include/esp32h2/esp_bt_cfg.h similarity index 100% rename from blobs/include/esp32h2/esp_bt_cfg.h rename to cesp/blobs/include/esp32h2/esp_bt_cfg.h diff --git a/blobs/include/esp32h2/esp_bt_vs.h b/cesp/blobs/include/esp32h2/esp_bt_vs.h similarity index 100% rename from blobs/include/esp32h2/esp_bt_vs.h rename to cesp/blobs/include/esp32h2/esp_bt_vs.h diff --git a/blobs/include/esp32h2/hal/modem_lpcon_ll.h b/cesp/blobs/include/esp32h2/hal/modem_lpcon_ll.h similarity index 100% rename from blobs/include/esp32h2/hal/modem_lpcon_ll.h rename to cesp/blobs/include/esp32h2/hal/modem_lpcon_ll.h diff --git a/blobs/include/esp32h2/hal/modem_syscon_ll.h b/cesp/blobs/include/esp32h2/hal/modem_syscon_ll.h similarity index 100% rename from blobs/include/esp32h2/hal/modem_syscon_ll.h rename to cesp/blobs/include/esp32h2/hal/modem_syscon_ll.h diff --git a/blobs/include/esp32h2/hal/pmu_hal.h b/cesp/blobs/include/esp32h2/hal/pmu_hal.h similarity index 100% rename from blobs/include/esp32h2/hal/pmu_hal.h rename to cesp/blobs/include/esp32h2/hal/pmu_hal.h diff --git a/blobs/include/esp32h2/hal/pmu_ll.h b/cesp/blobs/include/esp32h2/hal/pmu_ll.h similarity index 100% rename from blobs/include/esp32h2/hal/pmu_ll.h rename to cesp/blobs/include/esp32h2/hal/pmu_ll.h diff --git a/blobs/include/esp32h2/modem/modem_lpcon_struct.h b/cesp/blobs/include/esp32h2/modem/modem_lpcon_struct.h similarity index 100% rename from blobs/include/esp32h2/modem/modem_lpcon_struct.h rename to cesp/blobs/include/esp32h2/modem/modem_lpcon_struct.h diff --git a/blobs/include/esp32h2/modem/modem_syscon_struct.h b/cesp/blobs/include/esp32h2/modem/modem_syscon_struct.h similarity index 100% rename from blobs/include/esp32h2/modem/modem_syscon_struct.h rename to cesp/blobs/include/esp32h2/modem/modem_syscon_struct.h diff --git a/blobs/include/esp32h2/phy_init_data.h b/cesp/blobs/include/esp32h2/phy_init_data.h similarity index 100% rename from blobs/include/esp32h2/phy_init_data.h rename to cesp/blobs/include/esp32h2/phy_init_data.h diff --git a/blobs/include/esp32h2/phy_init_deps.h b/cesp/blobs/include/esp32h2/phy_init_deps.h similarity index 100% rename from blobs/include/esp32h2/phy_init_deps.h rename to cesp/blobs/include/esp32h2/phy_init_deps.h diff --git a/blobs/include/esp32h2/pmu_bit_defs.h b/cesp/blobs/include/esp32h2/pmu_bit_defs.h similarity index 100% rename from blobs/include/esp32h2/pmu_bit_defs.h rename to cesp/blobs/include/esp32h2/pmu_bit_defs.h diff --git a/blobs/include/esp32h2/pmu_param.h b/cesp/blobs/include/esp32h2/pmu_param.h similarity index 100% rename from blobs/include/esp32h2/pmu_param.h rename to cesp/blobs/include/esp32h2/pmu_param.h diff --git a/blobs/include/esp32h2/sdkconfig.h b/cesp/blobs/include/esp32h2/sdkconfig.h similarity index 100% rename from blobs/include/esp32h2/sdkconfig.h rename to cesp/blobs/include/esp32h2/sdkconfig.h diff --git a/blobs/include/esp32h2/soc/clk_tree_defs.h b/cesp/blobs/include/esp32h2/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32h2/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32h2/soc/clk_tree_defs.h diff --git a/blobs/include/esp32h2/soc/interrupts.h b/cesp/blobs/include/esp32h2/soc/interrupts.h similarity index 100% rename from blobs/include/esp32h2/soc/interrupts.h rename to cesp/blobs/include/esp32h2/soc/interrupts.h diff --git a/blobs/include/esp32h2/soc/periph_defs.h b/cesp/blobs/include/esp32h2/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32h2/soc/periph_defs.h rename to cesp/blobs/include/esp32h2/soc/periph_defs.h diff --git a/blobs/include/esp32h2/soc/pmu_reg.h b/cesp/blobs/include/esp32h2/soc/pmu_reg.h similarity index 100% rename from blobs/include/esp32h2/soc/pmu_reg.h rename to cesp/blobs/include/esp32h2/soc/pmu_reg.h diff --git a/blobs/include/esp32h2/soc/pmu_struct.h b/cesp/blobs/include/esp32h2/soc/pmu_struct.h similarity index 100% rename from blobs/include/esp32h2/soc/pmu_struct.h rename to cesp/blobs/include/esp32h2/soc/pmu_struct.h diff --git a/blobs/include/esp32h2/soc/reg_base.h b/cesp/blobs/include/esp32h2/soc/reg_base.h similarity index 100% rename from blobs/include/esp32h2/soc/reg_base.h rename to cesp/blobs/include/esp32h2/soc/reg_base.h diff --git a/blobs/include/esp32h2/soc/soc.h b/cesp/blobs/include/esp32h2/soc/soc.h similarity index 100% rename from blobs/include/esp32h2/soc/soc.h rename to cesp/blobs/include/esp32h2/soc/soc.h diff --git a/blobs/include/esp32h2/soc/soc_caps.h b/cesp/blobs/include/esp32h2/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32h2/soc/soc_caps.h rename to cesp/blobs/include/esp32h2/soc/soc_caps.h diff --git a/blobs/include/esp32s2/phy_init_data.h b/cesp/blobs/include/esp32s2/phy_init_data.h similarity index 100% rename from blobs/include/esp32s2/phy_init_data.h rename to cesp/blobs/include/esp32s2/phy_init_data.h diff --git a/blobs/include/esp32s2/phy_init_deps.h b/cesp/blobs/include/esp32s2/phy_init_deps.h similarity index 100% rename from blobs/include/esp32s2/phy_init_deps.h rename to cesp/blobs/include/esp32s2/phy_init_deps.h diff --git a/blobs/include/esp32s2/sdkconfig.h b/cesp/blobs/include/esp32s2/sdkconfig.h similarity index 100% rename from blobs/include/esp32s2/sdkconfig.h rename to cesp/blobs/include/esp32s2/sdkconfig.h diff --git a/blobs/include/esp32s2/soc/clk_tree_defs.h b/cesp/blobs/include/esp32s2/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32s2/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32s2/soc/clk_tree_defs.h diff --git a/blobs/include/esp32s2/soc/interrupts.h b/cesp/blobs/include/esp32s2/soc/interrupts.h similarity index 100% rename from blobs/include/esp32s2/soc/interrupts.h rename to cesp/blobs/include/esp32s2/soc/interrupts.h diff --git a/blobs/include/esp32s2/soc/periph_defs.h b/cesp/blobs/include/esp32s2/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32s2/soc/periph_defs.h rename to cesp/blobs/include/esp32s2/soc/periph_defs.h diff --git a/blobs/include/esp32s2/soc/reg_base.h b/cesp/blobs/include/esp32s2/soc/reg_base.h similarity index 100% rename from blobs/include/esp32s2/soc/reg_base.h rename to cesp/blobs/include/esp32s2/soc/reg_base.h diff --git a/blobs/include/esp32s2/soc/soc.h b/cesp/blobs/include/esp32s2/soc/soc.h similarity index 100% rename from blobs/include/esp32s2/soc/soc.h rename to cesp/blobs/include/esp32s2/soc/soc.h diff --git a/blobs/include/esp32s2/soc/soc_caps.h b/cesp/blobs/include/esp32s2/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32s2/soc/soc_caps.h rename to cesp/blobs/include/esp32s2/soc/soc_caps.h diff --git a/blobs/include/esp32s3/esp_bt.h b/cesp/blobs/include/esp32s3/esp_bt.h similarity index 100% rename from blobs/include/esp32s3/esp_bt.h rename to cesp/blobs/include/esp32s3/esp_bt.h diff --git a/blobs/include/esp32s3/esp_bt_vs.h b/cesp/blobs/include/esp32s3/esp_bt_vs.h similarity index 100% rename from blobs/include/esp32s3/esp_bt_vs.h rename to cesp/blobs/include/esp32s3/esp_bt_vs.h diff --git a/blobs/include/esp32s3/phy_init_data.h b/cesp/blobs/include/esp32s3/phy_init_data.h similarity index 100% rename from blobs/include/esp32s3/phy_init_data.h rename to cesp/blobs/include/esp32s3/phy_init_data.h diff --git a/blobs/include/esp32s3/phy_init_deps.h b/cesp/blobs/include/esp32s3/phy_init_deps.h similarity index 100% rename from blobs/include/esp32s3/phy_init_deps.h rename to cesp/blobs/include/esp32s3/phy_init_deps.h diff --git a/blobs/include/esp32s3/sdkconfig.h b/cesp/blobs/include/esp32s3/sdkconfig.h similarity index 100% rename from blobs/include/esp32s3/sdkconfig.h rename to cesp/blobs/include/esp32s3/sdkconfig.h diff --git a/blobs/include/esp32s3/soc/clk_tree_defs.h b/cesp/blobs/include/esp32s3/soc/clk_tree_defs.h similarity index 100% rename from blobs/include/esp32s3/soc/clk_tree_defs.h rename to cesp/blobs/include/esp32s3/soc/clk_tree_defs.h diff --git a/blobs/include/esp32s3/soc/interrupts.h b/cesp/blobs/include/esp32s3/soc/interrupts.h similarity index 100% rename from blobs/include/esp32s3/soc/interrupts.h rename to cesp/blobs/include/esp32s3/soc/interrupts.h diff --git a/blobs/include/esp32s3/soc/periph_defs.h b/cesp/blobs/include/esp32s3/soc/periph_defs.h similarity index 100% rename from blobs/include/esp32s3/soc/periph_defs.h rename to cesp/blobs/include/esp32s3/soc/periph_defs.h diff --git a/blobs/include/esp32s3/soc/reg_base.h b/cesp/blobs/include/esp32s3/soc/reg_base.h similarity index 100% rename from blobs/include/esp32s3/soc/reg_base.h rename to cesp/blobs/include/esp32s3/soc/reg_base.h diff --git a/blobs/include/esp32s3/soc/soc.h b/cesp/blobs/include/esp32s3/soc/soc.h similarity index 100% rename from blobs/include/esp32s3/soc/soc.h rename to cesp/blobs/include/esp32s3/soc/soc.h diff --git a/blobs/include/esp32s3/soc/soc_caps.h b/cesp/blobs/include/esp32s3/soc/soc_caps.h similarity index 100% rename from blobs/include/esp32s3/soc/soc_caps.h rename to cesp/blobs/include/esp32s3/soc/soc_caps.h diff --git a/blobs/include/esp_assert.h b/cesp/blobs/include/esp_assert.h similarity index 100% rename from blobs/include/esp_assert.h rename to cesp/blobs/include/esp_assert.h diff --git a/blobs/include/esp_attr.h b/cesp/blobs/include/esp_attr.h similarity index 100% rename from blobs/include/esp_attr.h rename to cesp/blobs/include/esp_attr.h diff --git a/blobs/include/esp_bit_defs.h b/cesp/blobs/include/esp_bit_defs.h similarity index 100% rename from blobs/include/esp_bit_defs.h rename to cesp/blobs/include/esp_bit_defs.h diff --git a/blobs/include/esp_bt_cfg.h b/cesp/blobs/include/esp_bt_cfg.h similarity index 100% rename from blobs/include/esp_bt_cfg.h rename to cesp/blobs/include/esp_bt_cfg.h diff --git a/blobs/include/esp_coex_i154.h b/cesp/blobs/include/esp_coex_i154.h similarity index 100% rename from blobs/include/esp_coex_i154.h rename to cesp/blobs/include/esp_coex_i154.h diff --git a/blobs/include/esp_coexist.h b/cesp/blobs/include/esp_coexist.h similarity index 100% rename from blobs/include/esp_coexist.h rename to cesp/blobs/include/esp_coexist.h diff --git a/blobs/include/esp_coexist_adapter.h b/cesp/blobs/include/esp_coexist_adapter.h similarity index 100% rename from blobs/include/esp_coexist_adapter.h rename to cesp/blobs/include/esp_coexist_adapter.h diff --git a/blobs/include/esp_coexist_debug.h b/cesp/blobs/include/esp_coexist_debug.h similarity index 100% rename from blobs/include/esp_coexist_debug.h rename to cesp/blobs/include/esp_coexist_debug.h diff --git a/blobs/include/esp_coexist_internal.h b/cesp/blobs/include/esp_coexist_internal.h similarity index 100% rename from blobs/include/esp_coexist_internal.h rename to cesp/blobs/include/esp_coexist_internal.h diff --git a/blobs/include/esp_compiler.h b/cesp/blobs/include/esp_compiler.h similarity index 100% rename from blobs/include/esp_compiler.h rename to cesp/blobs/include/esp_compiler.h diff --git a/blobs/include/esp_debug_helpers.h b/cesp/blobs/include/esp_debug_helpers.h similarity index 100% rename from blobs/include/esp_debug_helpers.h rename to cesp/blobs/include/esp_debug_helpers.h diff --git a/blobs/include/esp_dpp.h b/cesp/blobs/include/esp_dpp.h similarity index 100% rename from blobs/include/esp_dpp.h rename to cesp/blobs/include/esp_dpp.h diff --git a/blobs/include/esp_eap_client.h b/cesp/blobs/include/esp_eap_client.h similarity index 100% rename from blobs/include/esp_eap_client.h rename to cesp/blobs/include/esp_eap_client.h diff --git a/blobs/include/esp_err.h b/cesp/blobs/include/esp_err.h similarity index 100% rename from blobs/include/esp_err.h rename to cesp/blobs/include/esp_err.h diff --git a/blobs/include/esp_etm.h b/cesp/blobs/include/esp_etm.h similarity index 100% rename from blobs/include/esp_etm.h rename to cesp/blobs/include/esp_etm.h diff --git a/blobs/include/esp_event.h b/cesp/blobs/include/esp_event.h similarity index 100% rename from blobs/include/esp_event.h rename to cesp/blobs/include/esp_event.h diff --git a/blobs/include/esp_event_base.h b/cesp/blobs/include/esp_event_base.h similarity index 100% rename from blobs/include/esp_event_base.h rename to cesp/blobs/include/esp_event_base.h diff --git a/blobs/include/esp_event_loop.h b/cesp/blobs/include/esp_event_loop.h similarity index 100% rename from blobs/include/esp_event_loop.h rename to cesp/blobs/include/esp_event_loop.h diff --git a/blobs/include/esp_expression_with_stack.h b/cesp/blobs/include/esp_expression_with_stack.h similarity index 100% rename from blobs/include/esp_expression_with_stack.h rename to cesp/blobs/include/esp_expression_with_stack.h diff --git a/blobs/include/esp_freertos_hooks.h b/cesp/blobs/include/esp_freertos_hooks.h similarity index 100% rename from blobs/include/esp_freertos_hooks.h rename to cesp/blobs/include/esp_freertos_hooks.h diff --git a/blobs/include/esp_interface.h b/cesp/blobs/include/esp_interface.h similarity index 100% rename from blobs/include/esp_interface.h rename to cesp/blobs/include/esp_interface.h diff --git a/blobs/include/esp_ipc.h b/cesp/blobs/include/esp_ipc.h similarity index 100% rename from blobs/include/esp_ipc.h rename to cesp/blobs/include/esp_ipc.h diff --git a/blobs/include/esp_ipc_isr.h b/cesp/blobs/include/esp_ipc_isr.h similarity index 100% rename from blobs/include/esp_ipc_isr.h rename to cesp/blobs/include/esp_ipc_isr.h diff --git a/blobs/include/esp_mbo.h b/cesp/blobs/include/esp_mbo.h similarity index 100% rename from blobs/include/esp_mbo.h rename to cesp/blobs/include/esp_mbo.h diff --git a/blobs/include/esp_mesh.h b/cesp/blobs/include/esp_mesh.h similarity index 100% rename from blobs/include/esp_mesh.h rename to cesp/blobs/include/esp_mesh.h diff --git a/blobs/include/esp_mesh_internal.h b/cesp/blobs/include/esp_mesh_internal.h similarity index 100% rename from blobs/include/esp_mesh_internal.h rename to cesp/blobs/include/esp_mesh_internal.h diff --git a/blobs/include/esp_modem_wrapper.h b/cesp/blobs/include/esp_modem_wrapper.h similarity index 100% rename from blobs/include/esp_modem_wrapper.h rename to cesp/blobs/include/esp_modem_wrapper.h diff --git a/blobs/include/esp_netif.h b/cesp/blobs/include/esp_netif.h similarity index 100% rename from blobs/include/esp_netif.h rename to cesp/blobs/include/esp_netif.h diff --git a/blobs/include/esp_now.h b/cesp/blobs/include/esp_now.h similarity index 100% rename from blobs/include/esp_now.h rename to cesp/blobs/include/esp_now.h diff --git a/blobs/include/esp_phy.h b/cesp/blobs/include/esp_phy.h similarity index 100% rename from blobs/include/esp_phy.h rename to cesp/blobs/include/esp_phy.h diff --git a/blobs/include/esp_phy_cert_test.h b/cesp/blobs/include/esp_phy_cert_test.h similarity index 100% rename from blobs/include/esp_phy_cert_test.h rename to cesp/blobs/include/esp_phy_cert_test.h diff --git a/blobs/include/esp_phy_init.h b/cesp/blobs/include/esp_phy_init.h similarity index 100% rename from blobs/include/esp_phy_init.h rename to cesp/blobs/include/esp_phy_init.h diff --git a/blobs/include/esp_private/esp_modem_clock.h b/cesp/blobs/include/esp_private/esp_modem_clock.h similarity index 100% rename from blobs/include/esp_private/esp_modem_clock.h rename to cesp/blobs/include/esp_private/esp_modem_clock.h diff --git a/blobs/include/esp_private/esp_pmu b/cesp/blobs/include/esp_private/esp_pmu similarity index 100% rename from blobs/include/esp_private/esp_pmu rename to cesp/blobs/include/esp_private/esp_pmu diff --git a/blobs/include/esp_private/esp_pmu.h b/cesp/blobs/include/esp_private/esp_pmu.h similarity index 100% rename from blobs/include/esp_private/esp_pmu.h rename to cesp/blobs/include/esp_private/esp_pmu.h diff --git a/blobs/include/esp_private/esp_wifi_he_private.h b/cesp/blobs/include/esp_private/esp_wifi_he_private.h similarity index 100% rename from blobs/include/esp_private/esp_wifi_he_private.h rename to cesp/blobs/include/esp_private/esp_wifi_he_private.h diff --git a/blobs/include/esp_private/esp_wifi_he_types_private.h b/cesp/blobs/include/esp_private/esp_wifi_he_types_private.h similarity index 100% rename from blobs/include/esp_private/esp_wifi_he_types_private.h rename to cesp/blobs/include/esp_private/esp_wifi_he_types_private.h diff --git a/blobs/include/esp_private/esp_wifi_private.h b/cesp/blobs/include/esp_private/esp_wifi_private.h similarity index 100% rename from blobs/include/esp_private/esp_wifi_private.h rename to cesp/blobs/include/esp_private/esp_wifi_private.h diff --git a/blobs/include/esp_private/esp_wifi_types_private.h b/cesp/blobs/include/esp_private/esp_wifi_types_private.h similarity index 100% rename from blobs/include/esp_private/esp_wifi_types_private.h rename to cesp/blobs/include/esp_private/esp_wifi_types_private.h diff --git a/blobs/include/esp_private/wifi.h b/cesp/blobs/include/esp_private/wifi.h similarity index 100% rename from blobs/include/esp_private/wifi.h rename to cesp/blobs/include/esp_private/wifi.h diff --git a/blobs/include/esp_private/wifi_os_adapter.h b/cesp/blobs/include/esp_private/wifi_os_adapter.h similarity index 100% rename from blobs/include/esp_private/wifi_os_adapter.h rename to cesp/blobs/include/esp_private/wifi_os_adapter.h diff --git a/blobs/include/esp_private/wifi_types.h b/cesp/blobs/include/esp_private/wifi_types.h similarity index 100% rename from blobs/include/esp_private/wifi_types.h rename to cesp/blobs/include/esp_private/wifi_types.h diff --git a/blobs/include/esp_rrm.h b/cesp/blobs/include/esp_rrm.h similarity index 100% rename from blobs/include/esp_rrm.h rename to cesp/blobs/include/esp_rrm.h diff --git a/blobs/include/esp_smartconfig.h b/cesp/blobs/include/esp_smartconfig.h similarity index 100% rename from blobs/include/esp_smartconfig.h rename to cesp/blobs/include/esp_smartconfig.h diff --git a/blobs/include/esp_supplicant_utils.h b/cesp/blobs/include/esp_supplicant_utils.h similarity index 100% rename from blobs/include/esp_supplicant_utils.h rename to cesp/blobs/include/esp_supplicant_utils.h diff --git a/blobs/include/esp_system.h b/cesp/blobs/include/esp_system.h similarity index 100% rename from blobs/include/esp_system.h rename to cesp/blobs/include/esp_system.h diff --git a/blobs/include/esp_system_console.h b/cesp/blobs/include/esp_system_console.h similarity index 100% rename from blobs/include/esp_system_console.h rename to cesp/blobs/include/esp_system_console.h diff --git a/blobs/include/esp_systick_etm.h b/cesp/blobs/include/esp_systick_etm.h similarity index 100% rename from blobs/include/esp_systick_etm.h rename to cesp/blobs/include/esp_systick_etm.h diff --git a/blobs/include/esp_task.h b/cesp/blobs/include/esp_task.h similarity index 100% rename from blobs/include/esp_task.h rename to cesp/blobs/include/esp_task.h diff --git a/blobs/include/esp_task_wdt.h b/cesp/blobs/include/esp_task_wdt.h similarity index 100% rename from blobs/include/esp_task_wdt.h rename to cesp/blobs/include/esp_task_wdt.h diff --git a/blobs/include/esp_timer.h b/cesp/blobs/include/esp_timer.h similarity index 100% rename from blobs/include/esp_timer.h rename to cesp/blobs/include/esp_timer.h diff --git a/blobs/include/esp_types.h b/cesp/blobs/include/esp_types.h similarity index 100% rename from blobs/include/esp_types.h rename to cesp/blobs/include/esp_types.h diff --git a/blobs/include/esp_wifi.h b/cesp/blobs/include/esp_wifi.h similarity index 100% rename from blobs/include/esp_wifi.h rename to cesp/blobs/include/esp_wifi.h diff --git a/blobs/include/esp_wifi_ap_get_sta_list.h b/cesp/blobs/include/esp_wifi_ap_get_sta_list.h similarity index 100% rename from blobs/include/esp_wifi_ap_get_sta_list.h rename to cesp/blobs/include/esp_wifi_ap_get_sta_list.h diff --git a/blobs/include/esp_wifi_crypto_types.h b/cesp/blobs/include/esp_wifi_crypto_types.h similarity index 100% rename from blobs/include/esp_wifi_crypto_types.h rename to cesp/blobs/include/esp_wifi_crypto_types.h diff --git a/blobs/include/esp_wifi_default.h b/cesp/blobs/include/esp_wifi_default.h similarity index 100% rename from blobs/include/esp_wifi_default.h rename to cesp/blobs/include/esp_wifi_default.h diff --git a/blobs/include/esp_wifi_he.h b/cesp/blobs/include/esp_wifi_he.h similarity index 100% rename from blobs/include/esp_wifi_he.h rename to cesp/blobs/include/esp_wifi_he.h diff --git a/blobs/include/esp_wifi_he_types.h b/cesp/blobs/include/esp_wifi_he_types.h similarity index 100% rename from blobs/include/esp_wifi_he_types.h rename to cesp/blobs/include/esp_wifi_he_types.h diff --git a/blobs/include/esp_wifi_netif.h b/cesp/blobs/include/esp_wifi_netif.h similarity index 100% rename from blobs/include/esp_wifi_netif.h rename to cesp/blobs/include/esp_wifi_netif.h diff --git a/blobs/include/esp_wifi_types.h b/cesp/blobs/include/esp_wifi_types.h similarity index 100% rename from blobs/include/esp_wifi_types.h rename to cesp/blobs/include/esp_wifi_types.h diff --git a/blobs/include/esp_wifi_types_generic.h b/cesp/blobs/include/esp_wifi_types_generic.h similarity index 100% rename from blobs/include/esp_wifi_types_generic.h rename to cesp/blobs/include/esp_wifi_types_generic.h diff --git a/blobs/include/esp_wnm.h b/cesp/blobs/include/esp_wnm.h similarity index 100% rename from blobs/include/esp_wnm.h rename to cesp/blobs/include/esp_wnm.h diff --git a/blobs/include/esp_wpa.h b/cesp/blobs/include/esp_wpa.h similarity index 100% rename from blobs/include/esp_wpa.h rename to cesp/blobs/include/esp_wpa.h diff --git a/blobs/include/esp_wpa2.h b/cesp/blobs/include/esp_wpa2.h similarity index 100% rename from blobs/include/esp_wpa2.h rename to cesp/blobs/include/esp_wpa2.h diff --git a/blobs/include/esp_wps.h b/cesp/blobs/include/esp_wps.h similarity index 100% rename from blobs/include/esp_wps.h rename to cesp/blobs/include/esp_wps.h diff --git a/blobs/include/esp_xt_wdt.h b/cesp/blobs/include/esp_xt_wdt.h similarity index 100% rename from blobs/include/esp_xt_wdt.h rename to cesp/blobs/include/esp_xt_wdt.h diff --git a/blobs/include/hal/assert.h b/cesp/blobs/include/hal/assert.h similarity index 100% rename from blobs/include/hal/assert.h rename to cesp/blobs/include/hal/assert.h diff --git a/blobs/include/hal/efuse_hal.h b/cesp/blobs/include/hal/efuse_hal.h similarity index 100% rename from blobs/include/hal/efuse_hal.h rename to cesp/blobs/include/hal/efuse_hal.h diff --git a/blobs/include/hal/gpio_types.h b/cesp/blobs/include/hal/gpio_types.h similarity index 100% rename from blobs/include/hal/gpio_types.h rename to cesp/blobs/include/hal/gpio_types.h diff --git a/blobs/include/hal/misc.h b/cesp/blobs/include/hal/misc.h similarity index 100% rename from blobs/include/hal/misc.h rename to cesp/blobs/include/hal/misc.h diff --git a/blobs/include/hal/modem_clock_hal.h b/cesp/blobs/include/hal/modem_clock_hal.h similarity index 100% rename from blobs/include/hal/modem_clock_hal.h rename to cesp/blobs/include/hal/modem_clock_hal.h diff --git a/blobs/include/hal/modem_clock_types.h b/cesp/blobs/include/hal/modem_clock_types.h similarity index 100% rename from blobs/include/hal/modem_clock_types.h rename to cesp/blobs/include/hal/modem_clock_types.h diff --git a/blobs/include/hal/pmu_types.h b/cesp/blobs/include/hal/pmu_types.h similarity index 100% rename from blobs/include/hal/pmu_types.h rename to cesp/blobs/include/hal/pmu_types.h diff --git a/blobs/include/include.h b/cesp/blobs/include/include.h similarity index 100% rename from blobs/include/include.h rename to cesp/blobs/include/include.h diff --git a/blobs/include/libunwind.h b/cesp/blobs/include/libunwind.h similarity index 100% rename from blobs/include/libunwind.h rename to cesp/blobs/include/libunwind.h diff --git a/blobs/include/local/esp_wifi_types_native.h b/cesp/blobs/include/local/esp_wifi_types_native.h similarity index 100% rename from blobs/include/local/esp_wifi_types_native.h rename to cesp/blobs/include/local/esp_wifi_types_native.h diff --git a/blobs/include/nimble/nimble_npl.h b/cesp/blobs/include/nimble/nimble_npl.h similarity index 100% rename from blobs/include/nimble/nimble_npl.h rename to cesp/blobs/include/nimble/nimble_npl.h diff --git a/blobs/include/nimble/nimble_npl_os.h b/cesp/blobs/include/nimble/nimble_npl_os.h similarity index 100% rename from blobs/include/nimble/nimble_npl_os.h rename to cesp/blobs/include/nimble/nimble_npl_os.h diff --git a/blobs/include/nvs.h b/cesp/blobs/include/nvs.h similarity index 100% rename from blobs/include/nvs.h rename to cesp/blobs/include/nvs.h diff --git a/blobs/include/nvs_bootloader.h b/cesp/blobs/include/nvs_bootloader.h similarity index 100% rename from blobs/include/nvs_bootloader.h rename to cesp/blobs/include/nvs_bootloader.h diff --git a/blobs/include/nvs_flash.h b/cesp/blobs/include/nvs_flash.h similarity index 100% rename from blobs/include/nvs_flash.h rename to cesp/blobs/include/nvs_flash.h diff --git a/blobs/include/nvs_handle.hpp b/cesp/blobs/include/nvs_handle.hpp similarity index 100% rename from blobs/include/nvs_handle.hpp rename to cesp/blobs/include/nvs_handle.hpp diff --git a/blobs/include/phy.h b/cesp/blobs/include/phy.h similarity index 100% rename from blobs/include/phy.h rename to cesp/blobs/include/phy.h diff --git a/blobs/include/smartconfig_ack.h b/cesp/blobs/include/smartconfig_ack.h similarity index 100% rename from blobs/include/smartconfig_ack.h rename to cesp/blobs/include/smartconfig_ack.h diff --git a/blobs/libs/esp32c3/libbtbb.a b/cesp/blobs/libs/esp32c3/libbtbb.a similarity index 100% rename from blobs/libs/esp32c3/libbtbb.a rename to cesp/blobs/libs/esp32c3/libbtbb.a diff --git a/blobs/libs/esp32c3/libbtdm_app.a b/cesp/blobs/libs/esp32c3/libbtdm_app.a similarity index 100% rename from blobs/libs/esp32c3/libbtdm_app.a rename to cesp/blobs/libs/esp32c3/libbtdm_app.a diff --git a/blobs/libs/esp32c3/libcoexist.a b/cesp/blobs/libs/esp32c3/libcoexist.a similarity index 100% rename from blobs/libs/esp32c3/libcoexist.a rename to cesp/blobs/libs/esp32c3/libcoexist.a diff --git a/blobs/libs/esp32c3/libcore.a b/cesp/blobs/libs/esp32c3/libcore.a similarity index 100% rename from blobs/libs/esp32c3/libcore.a rename to cesp/blobs/libs/esp32c3/libcore.a diff --git a/blobs/libs/esp32c3/libespnow.a b/cesp/blobs/libs/esp32c3/libespnow.a similarity index 100% rename from blobs/libs/esp32c3/libespnow.a rename to cesp/blobs/libs/esp32c3/libespnow.a diff --git a/blobs/libs/esp32c3/libmesh.a b/cesp/blobs/libs/esp32c3/libmesh.a similarity index 100% rename from blobs/libs/esp32c3/libmesh.a rename to cesp/blobs/libs/esp32c3/libmesh.a diff --git a/blobs/libs/esp32c3/libnet80211.a b/cesp/blobs/libs/esp32c3/libnet80211.a similarity index 100% rename from blobs/libs/esp32c3/libnet80211.a rename to cesp/blobs/libs/esp32c3/libnet80211.a diff --git a/blobs/libs/esp32c3/libphy.a b/cesp/blobs/libs/esp32c3/libphy.a similarity index 100% rename from blobs/libs/esp32c3/libphy.a rename to cesp/blobs/libs/esp32c3/libphy.a diff --git a/blobs/libs/esp32c3/libpp.a b/cesp/blobs/libs/esp32c3/libpp.a similarity index 100% rename from blobs/libs/esp32c3/libpp.a rename to cesp/blobs/libs/esp32c3/libpp.a diff --git a/blobs/libs/esp32c3/libprintf.a b/cesp/blobs/libs/esp32c3/libprintf.a similarity index 100% rename from blobs/libs/esp32c3/libprintf.a rename to cesp/blobs/libs/esp32c3/libprintf.a diff --git a/blobs/libs/esp32c3/libregulatory.a b/cesp/blobs/libs/esp32c3/libregulatory.a similarity index 100% rename from blobs/libs/esp32c3/libregulatory.a rename to cesp/blobs/libs/esp32c3/libregulatory.a diff --git a/blobs/libs/esp32c3/libsmartconfig.a b/cesp/blobs/libs/esp32c3/libsmartconfig.a similarity index 100% rename from blobs/libs/esp32c3/libsmartconfig.a rename to cesp/blobs/libs/esp32c3/libsmartconfig.a diff --git a/blobs/libs/esp32c3/libwapi.a b/cesp/blobs/libs/esp32c3/libwapi.a similarity index 100% rename from blobs/libs/esp32c3/libwapi.a rename to cesp/blobs/libs/esp32c3/libwapi.a diff --git a/blobs/libs/esp32c3/libwpa_supplicant.a b/cesp/blobs/libs/esp32c3/libwpa_supplicant.a similarity index 100% rename from blobs/libs/esp32c3/libwpa_supplicant.a rename to cesp/blobs/libs/esp32c3/libwpa_supplicant.a diff --git a/blobs/libs/esp32s3/libbtbb.a b/cesp/blobs/libs/esp32s3/libbtbb.a similarity index 100% rename from blobs/libs/esp32s3/libbtbb.a rename to cesp/blobs/libs/esp32s3/libbtbb.a diff --git a/blobs/libs/esp32s3/libbtdm_app.a b/cesp/blobs/libs/esp32s3/libbtdm_app.a similarity index 100% rename from blobs/libs/esp32s3/libbtdm_app.a rename to cesp/blobs/libs/esp32s3/libbtdm_app.a diff --git a/blobs/libs/esp32s3/libcoexist.a b/cesp/blobs/libs/esp32s3/libcoexist.a similarity index 100% rename from blobs/libs/esp32s3/libcoexist.a rename to cesp/blobs/libs/esp32s3/libcoexist.a diff --git a/blobs/libs/esp32s3/libcore.a b/cesp/blobs/libs/esp32s3/libcore.a similarity index 100% rename from blobs/libs/esp32s3/libcore.a rename to cesp/blobs/libs/esp32s3/libcore.a diff --git a/blobs/libs/esp32s3/libespnow.a b/cesp/blobs/libs/esp32s3/libespnow.a similarity index 100% rename from blobs/libs/esp32s3/libespnow.a rename to cesp/blobs/libs/esp32s3/libespnow.a diff --git a/blobs/libs/esp32s3/libmesh.a b/cesp/blobs/libs/esp32s3/libmesh.a similarity index 100% rename from blobs/libs/esp32s3/libmesh.a rename to cesp/blobs/libs/esp32s3/libmesh.a diff --git a/blobs/libs/esp32s3/libnet80211.a b/cesp/blobs/libs/esp32s3/libnet80211.a similarity index 100% rename from blobs/libs/esp32s3/libnet80211.a rename to cesp/blobs/libs/esp32s3/libnet80211.a diff --git a/blobs/libs/esp32s3/libphy.a b/cesp/blobs/libs/esp32s3/libphy.a similarity index 100% rename from blobs/libs/esp32s3/libphy.a rename to cesp/blobs/libs/esp32s3/libphy.a diff --git a/blobs/libs/esp32s3/libpp.a b/cesp/blobs/libs/esp32s3/libpp.a similarity index 100% rename from blobs/libs/esp32s3/libpp.a rename to cesp/blobs/libs/esp32s3/libpp.a diff --git a/blobs/libs/esp32s3/libprintf.a b/cesp/blobs/libs/esp32s3/libprintf.a similarity index 100% rename from blobs/libs/esp32s3/libprintf.a rename to cesp/blobs/libs/esp32s3/libprintf.a diff --git a/blobs/libs/esp32s3/libregulatory.a b/cesp/blobs/libs/esp32s3/libregulatory.a similarity index 100% rename from blobs/libs/esp32s3/libregulatory.a rename to cesp/blobs/libs/esp32s3/libregulatory.a diff --git a/blobs/libs/esp32s3/libsmartconfig.a b/cesp/blobs/libs/esp32s3/libsmartconfig.a similarity index 100% rename from blobs/libs/esp32s3/libsmartconfig.a rename to cesp/blobs/libs/esp32s3/libsmartconfig.a diff --git a/blobs/libs/esp32s3/libwapi.a b/cesp/blobs/libs/esp32s3/libwapi.a similarity index 100% rename from blobs/libs/esp32s3/libwapi.a rename to cesp/blobs/libs/esp32s3/libwapi.a diff --git a/blobs/libs/esp32s3/libwpa_supplicant.a b/cesp/blobs/libs/esp32s3/libwpa_supplicant.a similarity index 100% rename from blobs/libs/esp32s3/libwpa_supplicant.a rename to cesp/blobs/libs/esp32s3/libwpa_supplicant.a diff --git a/cesp/chip_esp32c3.go b/cesp/chip_esp32c3.go new file mode 100644 index 0000000..899da79 --- /dev/null +++ b/cesp/chip_esp32c3.go @@ -0,0 +1,51 @@ +//go:build esp32c3 + +package cesp + +import ( + "device/esp" + "runtime/interrupt" + + _ "tinygo.org/x/espradio/cesp/esp32c3" +) + +const ( + WifiCPUInterrupt = 1 + TicksPerSecond = 16_000_000 + ArenaPoolSize = 32 * 1024 +) + +func InitHardware() error { + // See: + // https://github.com/esp-rs/esp-wifi/blob/main/esp-wifi/src/common_adapter/common_adapter_esp32c3.rs#L18 + const ( + SYSTEM_WIFIBB_RST = 1 << 0 + SYSTEM_FE_RST = 1 << 1 + SYSTEM_WIFIMAC_RST = 1 << 2 + SYSTEM_BTBB_RST = 1 << 3 + SYSTEM_BTMAC_RST = 1 << 4 + SYSTEM_RW_BTMAC_RST = 1 << 9 + SYSTEM_RW_BTMAC_REG_RST = 1 << 11 + SYSTEM_BTBB_REG_RST = 1 << 13 + ) + const modemResetFieldWhenPU = SYSTEM_WIFIBB_RST | + SYSTEM_FE_RST | + SYSTEM_WIFIMAC_RST | + SYSTEM_BTBB_RST | + SYSTEM_BTMAC_RST | + SYSTEM_RW_BTMAC_RST | + SYSTEM_RW_BTMAC_REG_RST | + SYSTEM_BTBB_REG_RST + + esp.RTC_CNTL.DIG_PWC.ClearBits(esp.RTC_CNTL_DIG_PWC_WIFI_FORCE_PD) + esp.APB_CTRL.WIFI_RST_EN.SetBits(modemResetFieldWhenPU) + esp.APB_CTRL.WIFI_RST_EN.ClearBits(modemResetFieldWhenPU) + esp.RTC_CNTL.DIG_ISO.ClearBits(esp.RTC_CNTL_DIG_ISO_FORCE_OFF) + return nil +} + +// WifiISRHandler is the hardware interrupt handler for the WiFi MAC interrupt. +// On RISC-V (ESP32-C3) the interrupt context can safely call the blob's ISR directly. +func WifiISRHandler(_ interrupt.Interrupt) { + isrCallWifiISR() +} diff --git a/cesp/chip_esp32c3_qemu.go b/cesp/chip_esp32c3_qemu.go new file mode 100644 index 0000000..6edf678 --- /dev/null +++ b/cesp/chip_esp32c3_qemu.go @@ -0,0 +1,17 @@ +//go:build esp32c3_qemu_target + +package cesp + +import "runtime/interrupt" + +const ( + WifiCPUInterrupt = 1 + TicksPerSecond = 16_000_000 + ArenaPoolSize = 32 * 1024 +) + +// InitHardware is a no-op for QEMU: no modem power/clock hardware present. +func InitHardware() error { return nil } + +// WifiISRHandler is a no-op for QEMU: no real WiFi interrupts fire. +func WifiISRHandler(_ interrupt.Interrupt) {} diff --git a/cesp/chip_esp32s3.go b/cesp/chip_esp32s3.go new file mode 100644 index 0000000..351fcdd --- /dev/null +++ b/cesp/chip_esp32s3.go @@ -0,0 +1,53 @@ +//go:build esp32s3 + +package cesp + +import ( + "device/esp" + "runtime/interrupt" + + _ "tinygo.org/x/espradio/cesp/esp32s3" +) + +const ( + WifiCPUInterrupt = 12 + TicksPerSecond = 16_000_000 + ArenaPoolSize = 48 * 1024 +) + +func InitHardware() error { + // See: + // https://github.com/esp-rs/esp-hal/blob/main/esp-radio/src/radio_clocks/clocks_ll/esp32s3.rs + const ( + SYSTEM_WIFIBB_RST = 1 << 0 + SYSTEM_FE_RST = 1 << 1 + SYSTEM_WIFIMAC_RST = 1 << 2 + SYSTEM_BTBB_RST = 1 << 3 + SYSTEM_BTMAC_RST = 1 << 4 + SYSTEM_RW_BTMAC_RST = 1 << 9 + SYSTEM_RW_BTMAC_REG_RST = 1 << 11 + SYSTEM_BTBB_REG_RST = 1 << 13 + ) + const modemResetFieldWhenPU = SYSTEM_WIFIBB_RST | + SYSTEM_FE_RST | + SYSTEM_WIFIMAC_RST | + SYSTEM_BTBB_RST | + SYSTEM_BTMAC_RST | + SYSTEM_RW_BTMAC_RST | + SYSTEM_RW_BTMAC_REG_RST | + SYSTEM_BTBB_REG_RST + + esp.RTC_CNTL.DIG_PWC.ClearBits(1 << 17) // WIFI_FORCE_PD + esp.APB_CTRL.WIFI_RST_EN.SetBits(modemResetFieldWhenPU) + esp.APB_CTRL.WIFI_RST_EN.ClearBits(modemResetFieldWhenPU) + esp.RTC_CNTL.DIG_ISO.ClearBits(1 << 28) // WIFI_FORCE_ISO + return nil +} + +// WifiISRHandler is the hardware interrupt handler for the WiFi MAC interrupt. +// On Xtensa (ESP32-S3) the blob ISR cannot run in interrupt context (deep windowed +// call chains overflow the stack), so the interrupt is masked and the scheduler wakes +// a goroutine to call the ISR on a full-sized stack. +func WifiISRHandler(_ interrupt.Interrupt) { + isrIntsOff(1 << WifiCPUInterrupt) +} diff --git a/cesp/chip_stub.go b/cesp/chip_stub.go new file mode 100644 index 0000000..3d4ac4e --- /dev/null +++ b/cesp/chip_stub.go @@ -0,0 +1,14 @@ +//go:build !(esp32c3 || esp32c3_qemu_target || esp32s3) + +package cesp + +import "runtime/interrupt" + +const ( + WifiCPUInterrupt = 0 + TicksPerSecond = 0 + ArenaPoolSize = 0 +) + +func InitHardware() error { panic("espradio: not an ESP32 target") } +func WifiISRHandler(_ interrupt.Interrupt) { panic("espradio: not an ESP32 target") } diff --git a/cesp/error.go b/cesp/error.go new file mode 100644 index 0000000..fa215c2 --- /dev/null +++ b/cesp/error.go @@ -0,0 +1,59 @@ +package cesp + +import "strconv" + +// Error is an ESP-IDF error code. +type Error int32 + +// EspErrTimeout is returned when an operation times out. +const EspErrTimeout = Error(espErrTimeout) + +func (e Error) Error() string { + switch { + case int32(e) >= espErrMemprotBase: + return "espradio: memprot error " + strconv.FormatInt(int64(int32(e)), 10) + case int32(e) >= espErrHwCrypto: + return "espradio: unknown hw crypto error" + case int32(e) >= espErrFlash: + return "espradio: unknown flash error" + case int32(e) >= espErrMesh: + return "espradio: unknown mesh error" + case int32(e) >= espErrWifiBase: + code := int32(e) + switch code { + case 0x3001: + return "espradio: wifi not initialized (driver was not installed by esp_wifi_init)" + case 0x3002: + return "espradio: wifi not started (call esp_wifi_start)" + default: + return "espradio: wifi error " + strconv.FormatInt(int64(code), 10) + } + default: + switch int32(e) { + case 0: + return "espradio: no error" + case espErrNoMem: + return "espradio: no memory" + case espErrInvalidArg: + return "espradio: invalid argument" + case espErrTimeout: + return "espradio: timeout" + case 2: + return "espradio: auth expired" + case 15: + return "espradio: 4-way handshake timeout" + case 201: + return "espradio: AP not found" + case 202: + return "espradio: auth failed" + case 203: + return "espradio: assoc failed" + case 204: + return "espradio: handshake timeout" + case 205: + return "espradio: connection failed" + default: + return "espradio: error " + strconv.FormatInt(int64(int32(e)), 10) + } + } +} diff --git a/cesp/error_c.go b/cesp/error_c.go new file mode 100644 index 0000000..fb44e9d --- /dev/null +++ b/cesp/error_c.go @@ -0,0 +1,30 @@ +//go:build esp32c3 || esp32c3_qemu_target || esp32s3 + +package cesp + +/* +#cgo CFLAGS: -fno-short-enums +#cgo CFLAGS: -Iblobs/include +#cgo CFLAGS: -Iblobs/include/local +#cgo CFLAGS: -Iblobs/headers +#include "espradio.h" +*/ +import "C" + +func codeToErr(c C.esp_err_t) error { + if c == C.ESP_OK { + return nil + } + return Error(c) +} + +const ( + espErrWifiBase = int32(C.ESP_ERR_WIFI_BASE) + espErrMemprotBase = int32(C.ESP_ERR_MEMPROT_BASE) + espErrHwCrypto = int32(C.ESP_ERR_HW_CRYPTO_BASE) + espErrFlash = int32(C.ESP_ERR_FLASH_BASE) + espErrMesh = int32(C.ESP_ERR_MESH_BASE) + espErrNoMem = int32(C.ESP_ERR_NO_MEM) + espErrInvalidArg = int32(C.ESP_ERR_INVALID_ARG) + espErrTimeout = int32(C.ESP_ERR_TIMEOUT) +) diff --git a/cesp/error_stub.go b/cesp/error_stub.go new file mode 100644 index 0000000..97582dc --- /dev/null +++ b/cesp/error_stub.go @@ -0,0 +1,21 @@ +//go:build !(esp32c3 || esp32c3_qemu_target || esp32s3) + +package cesp + +const ( + espErrWifiBase = int32(0x3000) + espErrMemprotBase = int32(0xd000) + espErrHwCrypto = int32(0xc000) + espErrFlash = int32(0x10000) + espErrMesh = int32(0x4000) + espErrNoMem = int32(0x101) + espErrInvalidArg = int32(0x102) + espErrTimeout = int32(0x107) +) + +func codeToErr(c int32) error { + if c == 0 { + return nil + } + return Error(c) +} diff --git a/esp32c3/esp32c3.go b/cesp/esp32c3/esp32c3.go similarity index 100% rename from esp32c3/esp32c3.go rename to cesp/esp32c3/esp32c3.go diff --git a/esp32c3/esp_phy_adapter.c b/cesp/esp32c3/esp_phy_adapter.c similarity index 100% rename from esp32c3/esp_phy_adapter.c rename to cesp/esp32c3/esp_phy_adapter.c diff --git a/esp32c3/isr.c b/cesp/esp32c3/isr.c similarity index 100% rename from esp32c3/isr.c rename to cesp/esp32c3/isr.c diff --git a/cesp/esp32c3_c.go b/cesp/esp32c3_c.go new file mode 100644 index 0000000..dc2303a --- /dev/null +++ b/cesp/esp32c3_c.go @@ -0,0 +1,9 @@ +//go:build esp32c3 + +package cesp + +/* +#cgo CFLAGS: -Iblobs/include/esp32c3 +#cgo LDFLAGS: -Lblobs/libs/esp32c3 -lcoexist -lcore -lmesh -lnet80211 -lespnow -lregulatory -lphy -lpp -lwpa_supplicant +*/ +import "C" diff --git a/cesp/esp32c3_qemu_c.go b/cesp/esp32c3_qemu_c.go new file mode 100644 index 0000000..fcc2c0e --- /dev/null +++ b/cesp/esp32c3_qemu_c.go @@ -0,0 +1,8 @@ +//go:build esp32c3_qemu_target + +package cesp + +/* +#cgo CFLAGS: -Iblobs/include/esp32c3 +*/ +import "C" diff --git a/esp32s3/esp32s3.go b/cesp/esp32s3/esp32s3.go similarity index 100% rename from esp32s3/esp32s3.go rename to cesp/esp32s3/esp32s3.go diff --git a/esp32s3/esp_phy_adapter.c b/cesp/esp32s3/esp_phy_adapter.c similarity index 100% rename from esp32s3/esp_phy_adapter.c rename to cesp/esp32s3/esp_phy_adapter.c diff --git a/esp32s3/isr.c b/cesp/esp32s3/isr.c similarity index 100% rename from esp32s3/isr.c rename to cesp/esp32s3/isr.c diff --git a/cesp/esp32s3_c.go b/cesp/esp32s3_c.go new file mode 100644 index 0000000..81e3a2f --- /dev/null +++ b/cesp/esp32s3_c.go @@ -0,0 +1,9 @@ +//go:build esp32s3 + +package cesp + +/* +#cgo CFLAGS: -Iblobs/include/esp32s3 +#cgo LDFLAGS: -Lblobs/libs/esp32s3 -lcoexist -lcore -lmesh -lnet80211 -lespnow -lregulatory -lphy -lpp -lwpa_supplicant +*/ +import "C" diff --git a/esp_timer_shim.c b/cesp/esp_timer_shim.c similarity index 100% rename from esp_timer_shim.c rename to cesp/esp_timer_shim.c diff --git a/espradio.h b/cesp/espradio.h similarity index 100% rename from espradio.h rename to cesp/espradio.h diff --git a/isr.c b/cesp/isr.c similarity index 100% rename from isr.c rename to cesp/isr.c diff --git a/cesp/isr.go b/cesp/isr.go new file mode 100644 index 0000000..ed49234 --- /dev/null +++ b/cesp/isr.go @@ -0,0 +1,42 @@ +package cesp + +import "unsafe" + +// IntsOff masks the CPU interrupt given by bit position in mask. +func IntsOff(mask uint32) { isrIntsOff(mask) } + +// WifiUnmask re-enables the WiFi CPU interrupt after IntsOff. +func WifiUnmask() { isrWifiUnmask() } + +// CallWifiISR invokes the WiFi blob's ISR handler from goroutine context. +func CallWifiISR() { isrCallWifiISR() } + +// IsrRingTail returns the current tail index of the ISR event ring. +func IsrRingTail() uint32 { return isrRingTail() } + +// IsrRingHead returns the current head index of the ISR event ring. +func IsrRingHead() uint32 { return isrRingHead() } + +// IsrRingEntryQueue returns the queue pointer stored at ring index idx. +func IsrRingEntryQueue(idx uint32) unsafe.Pointer { return isrRingEntryQueue(idx) } + +// IsrRingEntryItem returns the item pointer stored at ring index idx. +func IsrRingEntryItem(idx uint32) unsafe.Pointer { return isrRingEntryItem(idx) } + +// IsrRingAdvanceTail consumes the current tail entry. +func IsrRingAdvanceTail() { isrRingAdvanceTail() } + +// IsrRingDrops returns the number of ISR events dropped due to ring overflow. +func IsrRingDrops() uint32 { return isrRingDrops() } + +// GetWifiISRCount returns the total number of WiFi ISR invocations. +func GetWifiISRCount() uint32 { return isrGetWifiISRCount() } + +// WifiIntRaisePriority raises the WiFi interrupt to its operational priority. +func WifiIntRaisePriority() { isrWifiIntRaisePriority() } + +// PrewireWifiInterrupts sets up the WiFi interrupt vector before init. +func PrewireWifiInterrupts() { isrPrewireWifiInterrupts() } + +// WifiIntToLevel switches the WiFi interrupt to level-triggered mode. +func WifiIntToLevel() { isrWifiIntToLevel() } diff --git a/cesp/isr_c.go b/cesp/isr_c.go new file mode 100644 index 0000000..597e157 --- /dev/null +++ b/cesp/isr_c.go @@ -0,0 +1,65 @@ +//go:build esp32c3 || esp32c3_qemu_target || esp32s3 + +package cesp + +/* +#cgo CFLAGS: -fno-short-enums +#cgo CFLAGS: -Iblobs/include +#cgo CFLAGS: -Iblobs/include/local +#cgo CFLAGS: -Iblobs/headers +#include "espradio.h" +*/ +import "C" +import "unsafe" + +func isrIntsOff(mask uint32) { + C.espradio_ints_off(C.uint32_t(mask)) +} + +func isrWifiUnmask() { + C.espradio_wifi_unmask() +} + +func isrCallWifiISR() { + C.espradio_call_wifi_isr() +} + +func isrRingTail() uint32 { + return uint32(C.espradio_isr_ring_tail()) +} + +func isrRingHead() uint32 { + return uint32(C.espradio_isr_ring_head()) +} + +func isrRingEntryQueue(idx uint32) unsafe.Pointer { + return C.espradio_isr_ring_entry_queue(C.uint32_t(idx)) +} + +func isrRingEntryItem(idx uint32) unsafe.Pointer { + return C.espradio_isr_ring_entry_item(C.uint32_t(idx)) +} + +func isrRingAdvanceTail() { + C.espradio_isr_ring_advance_tail() +} + +func isrRingDrops() uint32 { + return uint32(C.espradio_isr_ring_drops()) +} + +func isrGetWifiISRCount() uint32 { + return uint32(C.espradio_get_wifi_isr_count()) +} + +func isrWifiIntRaisePriority() { + C.espradio_wifi_int_raise_priority() +} + +func isrPrewireWifiInterrupts() { + C.espradio_prewire_wifi_interrupts() +} + +func isrWifiIntToLevel() { + C.espradio_wifi_int_to_level() +} diff --git a/cesp/isr_stub.go b/cesp/isr_stub.go new file mode 100644 index 0000000..3a81b44 --- /dev/null +++ b/cesp/isr_stub.go @@ -0,0 +1,19 @@ +//go:build !(esp32c3 || esp32c3_qemu_target || esp32s3) + +package cesp + +import "unsafe" + +func isrIntsOff(_ uint32) { panic("espradio: not an ESP32 target") } +func isrWifiUnmask() { panic("espradio: not an ESP32 target") } +func isrCallWifiISR() { panic("espradio: not an ESP32 target") } +func isrRingTail() uint32 { panic("espradio: not an ESP32 target") } +func isrRingHead() uint32 { panic("espradio: not an ESP32 target") } +func isrRingEntryQueue(_ uint32) unsafe.Pointer { panic("espradio: not an ESP32 target") } +func isrRingEntryItem(_ uint32) unsafe.Pointer { panic("espradio: not an ESP32 target") } +func isrRingAdvanceTail() { panic("espradio: not an ESP32 target") } +func isrRingDrops() uint32 { panic("espradio: not an ESP32 target") } +func isrGetWifiISRCount() uint32 { panic("espradio: not an ESP32 target") } +func isrWifiIntRaisePriority() { panic("espradio: not an ESP32 target") } +func isrPrewireWifiInterrupts() { panic("espradio: not an ESP32 target") } +func isrWifiIntToLevel() { panic("espradio: not an ESP32 target") } diff --git a/lib.c b/cesp/lib.c similarity index 100% rename from lib.c rename to cesp/lib.c diff --git a/netif.c b/cesp/netif.c similarity index 100% rename from netif.c rename to cesp/netif.c diff --git a/cesp/netif.go b/cesp/netif.go new file mode 100644 index 0000000..f677606 --- /dev/null +++ b/cesp/netif.go @@ -0,0 +1,26 @@ +package cesp + +// NetifStartRx initializes the C-side RX ring and registers the WiFi receive +// callback. apMode=1 selects the AP interface, 0 selects STA. +func NetifStartRx(apMode int) error { return netifStartRx(apMode) } + +// NetifTx transmits buf as a raw Ethernet frame on the WiFi interface. +func NetifTx(buf []byte) error { return netifTx(buf) } + +// NetifRxAvailable reports whether at least one received frame is waiting. +func NetifRxAvailable() bool { return netifRxAvailable() } + +// NetifRxPop copies the next received frame into dst and returns its length. +func NetifRxPop(dst []byte) int { return netifRxPop(dst) } + +// NetifGetMAC returns the 6-byte MAC address of the WiFi interface. +func NetifGetMAC() ([6]byte, error) { return netifGetMAC() } + +// NetifRxStats returns (callback_count, drop_count) from the C RX ring. +func NetifRxStats() (uint32, uint32) { return netifRxStats() } + +// NetifSetConnected updates the C-side connection state. +func NetifSetConnected(connected bool) { netifSetConnected(connected) } + +// NetifInitNetstackCB installs the netstack WiFi RX/TX callbacks. +func NetifInitNetstackCB() { netifInitNetstackCB() } diff --git a/cesp/netif_c.go b/cesp/netif_c.go new file mode 100644 index 0000000..977d8c4 --- /dev/null +++ b/cesp/netif_c.go @@ -0,0 +1,51 @@ +//go:build esp32c3 || esp32c3_qemu_target || esp32s3 + +package cesp + +/* +#cgo CFLAGS: -fno-short-enums +#cgo CFLAGS: -Iblobs/include +#cgo CFLAGS: -Iblobs/include/local +#cgo CFLAGS: -Iblobs/headers +#include "espradio.h" +*/ +import "C" +import "unsafe" + +func netifStartRx(apMode int) error { + return codeToErr(C.espradio_netif_start_rx(C.int(apMode))) +} + +func netifTx(buf []byte) error { + code := C.espradio_netif_tx(unsafe.Pointer(&buf[0]), C.uint16_t(len(buf))) + return codeToErr(C.esp_err_t(code)) +} + +func netifRxAvailable() bool { + return C.espradio_netif_rx_available() != 0 +} + +func netifRxPop(dst []byte) int { + return int(C.espradio_netif_rx_pop(unsafe.Pointer(&dst[0]), C.uint16_t(len(dst)))) +} + +func netifGetMAC() ([6]byte, error) { + var mac [6]byte + return mac, codeToErr(C.espradio_netif_get_mac((*C.uint8_t)(unsafe.Pointer(&mac[0])))) +} + +func netifRxStats() (cbCount, dropCount uint32) { + return uint32(C.espradio_netif_rx_cb_count()), uint32(C.espradio_netif_rx_cb_drop()) +} + +func netifSetConnected(connected bool) { + v := 0 + if connected { + v = 1 + } + C.espradio_netif_set_connected(C.int(v)) +} + +func netifInitNetstackCB() { + C.espradio_netif_init_netstack_cb() +} diff --git a/cesp/netif_stub.go b/cesp/netif_stub.go new file mode 100644 index 0000000..19620e5 --- /dev/null +++ b/cesp/netif_stub.go @@ -0,0 +1,12 @@ +//go:build !(esp32c3 || esp32c3_qemu_target || esp32s3) + +package cesp + +func netifStartRx(_ int) error { panic("espradio: not an ESP32 target") } +func netifTx(_ []byte) error { panic("espradio: not an ESP32 target") } +func netifRxAvailable() bool { panic("espradio: not an ESP32 target") } +func netifRxPop(_ []byte) int { panic("espradio: not an ESP32 target") } +func netifGetMAC() ([6]byte, error) { panic("espradio: not an ESP32 target") } +func netifRxStats() (uint32, uint32) { panic("espradio: not an ESP32 target") } +func netifSetConnected(_ bool) { panic("espradio: not an ESP32 target") } +func netifInitNetstackCB() { panic("espradio: not an ESP32 target") } diff --git a/osi.c b/cesp/osi.c similarity index 100% rename from osi.c rename to cesp/osi.c diff --git a/radio.c b/cesp/radio.c similarity index 100% rename from radio.c rename to cesp/radio.c diff --git a/cesp/radio.go b/cesp/radio.go new file mode 100644 index 0000000..a31d22d --- /dev/null +++ b/cesp/radio.go @@ -0,0 +1,109 @@ +package cesp + +import "unsafe" + +// LogLevel controls WiFi blob verbosity. +type LogLevel uint8 + +const ( + LogLevelNone LogLevel = logLevelNone + LogLevelError LogLevel = logLevelError + LogLevelWarning LogLevel = logLevelWarning + LogLevelInfo LogLevel = logLevelInfo + LogLevelDebug LogLevel = logLevelDebug + LogLevelVerbose LogLevel = logLevelVerbose +) + +// WifiMode is the operating mode of the WiFi driver. +type WifiMode uint32 + +const ( + WifiModeNone WifiMode = wifiModeNone + WifiModeSTA WifiMode = wifiModeSTA + WifiModeAP WifiMode = wifiModeAP +) + +// WifiEvent carries parsed data from the blob's WiFi event callback. +type WifiEvent struct { + ID int32 + SSID string + Channel uint8 + Reason uint8 +} + +const ( + WifiEventSTAConnected = wifiEventSTAConnected + WifiEventSTADisconnected = wifiEventSTADisconnected + WifiEventSTAStart = wifiEventSTAStart +) + +// APRecord is a single result from a WiFi scan. +type APRecord struct { + SSID string + RSSI int8 +} + +// WifiInit initializes the WiFi driver and blob library. +func WifiInit() error { return wifiInit() } + +// WifiInitCompleted signals to the blob that init is complete. +func WifiInitCompleted() { wifiInitCompleted() } + +// WifiEspStart starts the WiFi driver (posts START to ppTask). +func WifiEspStart() error { return wifiEspStart() } + +// WifiSetBlobLogLevel sets the WiFi blob's internal log level. +func WifiSetBlobLogLevel(level LogLevel) { wifiSetBlobLogLevel(level) } + +// WifiSetPS enables (false) or disables (true) power-save mode. +func WifiSetPS(disablePS bool) { wifiSetPS(disablePS) } + +// WifiGetMode returns the current WiFi operating mode. +func WifiGetMode() (WifiMode, error) { return wifiGetMode() } + +// WifiSetMode sets the WiFi operating mode. +func WifiSetMode(mode WifiMode) error { return wifiSetMode(mode) } + +// WifiSetCountryEU configures the EU regulatory domain. +func WifiSetCountryEU() error { return wifiSetCountryEU() } + +// WifiEnsureOSIPtr ensures the OSI adapter pointer is valid. +func WifiEnsureOSIPtr() { wifiEnsureOSIPtr() } + +// WifiRestoreROMPtrs restores critical ROM pointer variables. +func WifiRestoreROMPtrs() { wifiRestoreROMPtrs() } + +// WifiSaveROMPtrs snapshots critical ROM pointer variables. +func WifiSaveROMPtrs() { wifiSaveROMPtrs() } + +// HalInitClocksGo initializes hardware clocks via the chip-specific shim. +func HalInitClocksGo() { halInitClocksGo() } + +// WifiSetSTAConfig sets SSID and password for station mode. +func WifiSetSTAConfig(ssid, password string) error { return wifiSetSTAConfig(ssid, password) } + +// WifiConnect initiates association with the configured AP. +func WifiConnect() error { return wifiConnect() } + +// WifiScan performs an active scan and returns discovered access points. +func WifiScan() ([]APRecord, error) { return wifiScan() } + +// WifiSetAPConfig configures soft-AP mode parameters. +func WifiSetAPConfig(ssid, password string, channel uint8, authOpen bool) error { + return wifiSetAPConfig(ssid, password, channel, authOpen) +} + +// SniffBegin starts passive packet capture on the given channel. +func SniffBegin(channel uint8) error { return sniffBegin(channel) } + +// SniffCount returns the number of packets captured since SniffBegin. +func SniffCount() uint32 { return sniffCount() } + +// SniffEnd stops packet capture. +func SniffEnd() error { return sniffEnd() } + +// ParseWifiEvent extracts Go-typed event data from the C blob event callback. +// data must be the unsafe.Pointer received by the espradio_on_wifi_event //export callback. +func ParseWifiEvent(eventID int32, data unsafe.Pointer) WifiEvent { + return parseWifiEvent(eventID, data) +} diff --git a/cesp/radio_c.go b/cesp/radio_c.go new file mode 100644 index 0000000..cb6f4cf --- /dev/null +++ b/cesp/radio_c.go @@ -0,0 +1,207 @@ +//go:build esp32c3 || esp32c3_qemu_target || esp32s3 + +package cesp + +/* +#cgo CFLAGS: -fno-short-enums +#cgo CFLAGS: -Iblobs/include +#cgo CFLAGS: -Iblobs/include/local +#cgo CFLAGS: -Iblobs/headers +#cgo CFLAGS: -DCONFIG_SOC_WIFI_NAN_SUPPORT=0 +#cgo CFLAGS: -DESPRADIO_PHY_PATCH_ROMFUNCS=0 +#include "espradio.h" +#include +*/ +import "C" +import ( + "bytes" + "unsafe" +) + +// ── LogLevel constants ────────────────────────────────────────────────────── + +const ( + logLevelNone = LogLevel(C.WIFI_LOG_NONE) + logLevelError = LogLevel(C.WIFI_LOG_ERROR) + logLevelWarning = LogLevel(C.WIFI_LOG_WARNING) + logLevelInfo = LogLevel(C.WIFI_LOG_INFO) + logLevelDebug = LogLevel(C.WIFI_LOG_DEBUG) + logLevelVerbose = LogLevel(C.WIFI_LOG_VERBOSE) +) + +// ── WiFi mode constants ───────────────────────────────────────────────────── + +const ( + wifiModeNone = WifiMode(C.WIFI_MODE_NULL) + wifiModeSTA = WifiMode(C.WIFI_MODE_STA) + wifiModeAP = WifiMode(C.WIFI_MODE_AP) +) + +// ── WiFi event constants ──────────────────────────────────────────────────── + +const ( + wifiEventSTAConnected = int32(C.WIFI_EVENT_STA_CONNECTED) + wifiEventSTADisconnected = int32(C.WIFI_EVENT_STA_DISCONNECTED) + wifiEventSTAStart = int32(C.WIFI_EVENT_STA_START) +) + +// ── Lifecycle ─────────────────────────────────────────────────────────────── + +func wifiInit() error { + return codeToErr(C.espradio_wifi_init()) +} + +func wifiInitCompleted() { + C.espradio_wifi_init_completed() +} + +func wifiEspStart() error { + return codeToErr(C.espradio_esp_wifi_start()) +} + +func wifiSetBlobLogLevel(level LogLevel) { + C.espradio_set_blob_log_level(C.uint32_t(level)) +} + +func wifiSetPS(disablePS bool) { + if disablePS { + C.esp_wifi_set_ps(C.WIFI_PS_NONE) + } else { + C.esp_wifi_set_ps(C.WIFI_PS_MIN_MODEM) + } +} + +func wifiGetMode() (WifiMode, error) { + var mode C.wifi_mode_t + code := C.esp_wifi_get_mode(&mode) + return WifiMode(mode), codeToErr(code) +} + +func wifiSetMode(mode WifiMode) error { + return codeToErr(C.esp_wifi_set_mode(C.wifi_mode_t(mode))) +} + +func wifiSetCountryEU() error { + return codeToErr(C.espradio_set_country_eu_manual()) +} + +func wifiEnsureOSIPtr() { + C.espradio_ensure_osi_ptr() +} + +func wifiRestoreROMPtrs() { + C.espradio_restore_rom_ptrs() +} + +func wifiSaveROMPtrs() { + C.espradio_save_rom_ptrs() +} + +func halInitClocksGo() { + C.espradio_hal_init_clocks_go() +} + +// ── Station ───────────────────────────────────────────────────────────────── + +func wifiSetSTAConfig(ssid, password string) error { + csssid := C.CString(ssid) + cspwd := C.CString(password) + code := C.espradio_sta_set_config(csssid, C.int(len(ssid)), cspwd, C.int(len(password))) + C.free(unsafe.Pointer(csssid)) + C.free(unsafe.Pointer(cspwd)) + return codeToErr(code) +} + +func wifiConnect() error { + return codeToErr(C.esp_wifi_connect_internal()) +} + +// ── Scan ──────────────────────────────────────────────────────────────────── + +func wifiScan() ([]APRecord, error) { + var scanCfg C.wifi_scan_config_t + scanCfg.ssid = nil + scanCfg.bssid = nil + scanCfg.channel = 0 + scanCfg.show_hidden = false + scanCfg.scan_type = C.WIFI_SCAN_TYPE_ACTIVE + scanCfg.scan_time.active.min = 0 + scanCfg.scan_time.active.max = 300 + scanCfg.scan_time.passive = 500 + if code := C.esp_wifi_scan_start(&scanCfg, true); code != C.ESP_OK { + return nil, codeToErr(code) + } + var num C.uint16_t + if code := C.esp_wifi_scan_get_ap_num(&num); code != C.ESP_OK { + return nil, codeToErr(code) + } + if num == 0 { + return nil, nil + } + recs := make([]C.wifi_ap_record_t, int(num)) + if code := C.esp_wifi_scan_get_ap_records(&num, (*C.wifi_ap_record_t)(unsafe.Pointer(&recs[0]))); code != C.ESP_OK { + return nil, codeToErr(code) + } + out := make([]APRecord, int(num)) + for i := range out { + raw := C.GoBytes(unsafe.Pointer(&recs[i].ssid[0]), C.int(len(recs[i].ssid))) + if idx := bytes.IndexByte(raw, 0); idx >= 0 { + raw = raw[:idx] + } + out[i] = APRecord{SSID: string(raw), RSSI: int8(recs[i].rssi)} + } + return out, nil +} + +// ── Soft-AP ───────────────────────────────────────────────────────────────── + +func wifiSetAPConfig(ssid, password string, channel uint8, authOpen bool) error { + auth := 0 + if authOpen { + auth = 1 + } + csssid := C.CString(ssid) + cspwd := C.CString(password) + code := C.espradio_ap_set_config( + csssid, C.int(len(ssid)), + cspwd, C.int(len(password)), + C.uint8_t(channel), C.int(auth), + ) + C.free(unsafe.Pointer(csssid)) + C.free(unsafe.Pointer(cspwd)) + return codeToErr(code) +} + +// ── Sniffer ───────────────────────────────────────────────────────────────── + +func sniffBegin(channel uint8) error { + return codeToErr(C.espradio_sniff_begin(C.uint8_t(channel))) +} + +func sniffCount() uint32 { + return uint32(C.espradio_sniff_count()) +} + +func sniffEnd() error { + return codeToErr(C.espradio_sniff_end()) +} + +// ── WiFi event parsing ─────────────────────────────────────────────────────── + +func parseWifiEvent(eventID int32, data unsafe.Pointer) WifiEvent { + ev := WifiEvent{ID: eventID} + switch eventID { + case wifiEventSTAConnected: + raw := (*C.wifi_event_sta_connected_t)(data) + ssidLen := int(raw.ssid_len) + if ssidLen > 32 { + ssidLen = 32 + } + ev.SSID = string(C.GoBytes(unsafe.Pointer(&raw.ssid[0]), C.int(ssidLen))) + ev.Channel = uint8(raw.channel) + case wifiEventSTADisconnected: + raw := (*C.wifi_event_sta_disconnected_t)(data) + ev.Reason = uint8(raw.reason) + } + return ev +} diff --git a/cesp/radio_stub.go b/cesp/radio_stub.go new file mode 100644 index 0000000..db13462 --- /dev/null +++ b/cesp/radio_stub.go @@ -0,0 +1,43 @@ +//go:build !(esp32c3 || esp32c3_qemu_target || esp32s3) + +package cesp + +import "unsafe" + +const ( + logLevelNone = LogLevel(0) + logLevelError = LogLevel(1) + logLevelWarning = LogLevel(2) + logLevelInfo = LogLevel(3) + logLevelDebug = LogLevel(4) + logLevelVerbose = LogLevel(5) + + wifiModeNone = WifiMode(0) + wifiModeSTA = WifiMode(1) + wifiModeAP = WifiMode(2) + + wifiEventSTAConnected = int32(4) + wifiEventSTADisconnected = int32(5) + wifiEventSTAStart = int32(2) +) + +func wifiInit() error { panic("espradio: not an ESP32 target") } +func wifiInitCompleted() { panic("espradio: not an ESP32 target") } +func wifiEspStart() error { panic("espradio: not an ESP32 target") } +func wifiSetBlobLogLevel(_ LogLevel) { panic("espradio: not an ESP32 target") } +func wifiSetPS(_ bool) { panic("espradio: not an ESP32 target") } +func wifiGetMode() (WifiMode, error) { panic("espradio: not an ESP32 target") } +func wifiSetMode(_ WifiMode) error { panic("espradio: not an ESP32 target") } +func wifiSetCountryEU() error { panic("espradio: not an ESP32 target") } +func wifiEnsureOSIPtr() { panic("espradio: not an ESP32 target") } +func wifiRestoreROMPtrs() { panic("espradio: not an ESP32 target") } +func wifiSaveROMPtrs() { panic("espradio: not an ESP32 target") } +func halInitClocksGo() { panic("espradio: not an ESP32 target") } +func wifiSetSTAConfig(_, _ string) error { panic("espradio: not an ESP32 target") } +func wifiConnect() error { panic("espradio: not an ESP32 target") } +func wifiScan() ([]APRecord, error) { panic("espradio: not an ESP32 target") } +func wifiSetAPConfig(_, _ string, _ uint8, _ bool) error { panic("espradio: not an ESP32 target") } +func sniffBegin(_ uint8) error { panic("espradio: not an ESP32 target") } +func sniffCount() uint32 { panic("espradio: not an ESP32 target") } +func sniffEnd() error { panic("espradio: not an ESP32 target") } +func parseWifiEvent(_ int32, _ unsafe.Pointer) WifiEvent { panic("espradio: not an ESP32 target") } diff --git a/cesp/timer.go b/cesp/timer.go new file mode 100644 index 0000000..635c78c --- /dev/null +++ b/cesp/timer.go @@ -0,0 +1,21 @@ +package cesp + +import "unsafe" + +// TimerPollDue fires up to maxFire pending soft-timers. Returns how many fired. +func TimerPollDue(maxFire int) int { return timerPollDue(maxFire) } + +// EspTimerPollDue fires up to maxFire pending esp_timer callbacks. Returns how many fired. +func EspTimerPollDue(maxFire int) int { return espTimerPollDue(maxFire) } + +// TimerFire invokes the C-side timer callback for timer. +func TimerFire(timer unsafe.Pointer) { timerFire(timer) } + +// EventLoopRunOnce drains one pending WiFi event from the blob event loop. +func EventLoopRunOnce() { eventLoopRunOnce() } + +// EventRegisterDefaultCB installs the default WiFi event handler. +func EventRegisterDefaultCB() { eventRegisterDefaultCB() } + +// OSITimeBlocking is the sentinel block-time value meaning "wait forever". +const OSITimeBlocking = osiTimeBlocking diff --git a/cesp/timer_c.go b/cesp/timer_c.go new file mode 100644 index 0000000..7fc7504 --- /dev/null +++ b/cesp/timer_c.go @@ -0,0 +1,36 @@ +//go:build esp32c3 || esp32c3_qemu_target || esp32s3 + +package cesp + +/* +#cgo CFLAGS: -fno-short-enums +#cgo CFLAGS: -Iblobs/include +#cgo CFLAGS: -Iblobs/include/local +#cgo CFLAGS: -Iblobs/headers +#include "espradio.h" +*/ +import "C" +import "unsafe" + +func timerPollDue(maxFire int) int { + return int(C.espradio_timer_poll_due(C.int(maxFire))) +} + +func espTimerPollDue(maxFire int) int { + return int(C.espradio_esp_timer_poll_due(C.int(maxFire))) +} + +func timerFire(timer unsafe.Pointer) { + C.espradio_timer_fire(timer) +} + +func eventLoopRunOnce() { + C.espradio_event_loop_run_once() +} + +func eventRegisterDefaultCB() { + C.espradio_event_register_default_cb() +} + +// osiTimeBlocking is the sentinel value meaning "block forever" in OSI queue/semaphore calls. +const osiTimeBlocking = uint32(C.OSI_FUNCS_TIME_BLOCKING) diff --git a/cesp/timer_stub.go b/cesp/timer_stub.go new file mode 100644 index 0000000..ca0a16c --- /dev/null +++ b/cesp/timer_stub.go @@ -0,0 +1,13 @@ +//go:build !(esp32c3 || esp32c3_qemu_target || esp32s3) + +package cesp + +import "unsafe" + +func timerPollDue(_ int) int { panic("espradio: not an ESP32 target") } +func espTimerPollDue(_ int) int { panic("espradio: not an ESP32 target") } +func timerFire(_ unsafe.Pointer) { panic("espradio: not an ESP32 target") } +func eventLoopRunOnce() { panic("espradio: not an ESP32 target") } +func eventRegisterDefaultCB() { panic("espradio: not an ESP32 target") } + +const osiTimeBlocking = uint32(0xFFFFFFFF) diff --git a/cgo_esp32c3.go b/cgo_esp32c3.go new file mode 100644 index 0000000..a107ef8 --- /dev/null +++ b/cgo_esp32c3.go @@ -0,0 +1,8 @@ +//go:build esp32c3 || esp32c3_qemu_target + +package espradio + +/* +#cgo CFLAGS: -Icesp/blobs/include/esp32c3 +*/ +import "C" diff --git a/cgo_esp32s3.go b/cgo_esp32s3.go new file mode 100644 index 0000000..ef94874 --- /dev/null +++ b/cgo_esp32s3.go @@ -0,0 +1,8 @@ +//go:build esp32s3 + +package espradio + +/* +#cgo CFLAGS: -Icesp/blobs/include/esp32s3 +*/ +import "C" diff --git a/espstack.go b/espstack.go index 93becc1..c3ec5b1 100644 --- a/espstack.go +++ b/espstack.go @@ -47,8 +47,16 @@ func NewStack(dev *NetDev, cfg StackConfig) (*Stack, error) { stack := &Stack{dev: dev} const MTU = MaxFrameSize - ethernet.MaxOverheadSize + 4 // CRC not included:+4 + var static4 [4]byte + var static6 [16]byte + if cfg.StaticAddress.Is4() { + static4 = cfg.StaticAddress.As4() + } else if cfg.StaticAddress.Is6() { + static6 = cfg.StaticAddress.As16() + } err = stack.s.Reset(xnet.StackConfig{ - StaticAddress: cfg.StaticAddress, + StaticAddress4: static4, + StaticAddress6: static6, DNSServer: cfg.DNSServer, NTPServer: cfg.NTPServer, Hostname: cfg.Hostname, @@ -131,6 +139,6 @@ func (stack *Stack) SetupWithDHCP(cfg DHCPConfig) (*xnet.DHCPResults, error) { if err != nil { return dhcpResults, err } - lstack.SetGateway6(gatewayHW) + lstack.SetGatewayHardwareAddr(gatewayHW) return dhcpResults, nil } diff --git a/examples/esp32-netdev/main.go b/examples/esp32-netdev/main.go new file mode 100644 index 0000000..7dc6982 --- /dev/null +++ b/examples/esp32-netdev/main.go @@ -0,0 +1,203 @@ +// Example showing how to use the ESP32 WiFi radio through lneto's netdev +// package. This mirrors the picow-netdev example and demonstrates the +// standardised DevEthernet+Netlink interface that works across hardware targets. +// +// Build and flash: +// +// tinygo flash -target xiao-esp32c3 \ +// -ldflags="-X main.ssid=YourSSID -X main.password=YourPassword" \ +// -monitor ./examples/esp32-netdev +package main + +import ( + "context" + "net/netip" + "time" + + "github.com/soypat/lneto" + "github.com/soypat/lneto/x/netdev" + "github.com/soypat/lneto/x/xnet" + "tinygo.org/x/espradio" +) + +var ( + ssid string + password string + + globConnectParams espradio.STAConfig + + poolCfg = xnet.TCPPoolConfig{ + PoolSize: 4, + QueueSize: 4, + TxBufSize: 2048, + RxBufSize: 512, + NewBackoff: func() lneto.BackoffStrategy { return backoff }, + NanoTime: func() int64 { return time.Now().UnixNano() }, + EstablishedTimeout: 5 * time.Second, + ClosingTimeout: 3 * time.Second, + } +) + +func main() { + time.Sleep(time.Second) + globConnectParams.SSID = ssid + globConnectParams.Password = password + + var dev EspDev + dev.radioConfig = espradio.Config{Logging: espradio.LogLevelError} + + // LinkConnect runs Enable+Start+Connect+StartNetDev. It must complete + // before HardwareAddr6 is called because the MAC is only readable after + // Enable() initialises the WiFi hardware. + err := dev.LinkConnect(globConnectParams) + failIfErr("wifi connect", err) + + hw, err := dev.HardwareAddr6() + failIfErr("hardware addr", err) + + var stack xnet.Netstack + err = stack.Reset(xnet.StackConfig{ + RandSeed: time.Now().UnixNano() | 1, + Hostname: "esp32-lneto", + MaxActiveTCPPorts: 4, + MaxActiveUDPPorts: 4, + ICMPQueueLimit: 1, + HardwareAddress: hw, + }, backoff, poolCfg) + failIfErr("stack reset", err) + + dev.LinkNotify(userNotify) + var iface netdev.Interface[espradio.STAConfig] + err = iface.Init(&dev, &dev, netdev.InterfaceConfig{}) + failIfErr("init iface", err) + + var runner netdev.Runner[espradio.STAConfig] + go func() { + if err := runner.Run(context.Background(), iface, &stack, backoff); err != nil { + failIfErr("runner", err) + } + }() + + assigned, gatewayRt, subnetBits, err := stack.EnableDHCP(context.Background(), true, netip.Addr{}) + failIfErr("enable dhcp", err) + println("assigned=", assigned.String(), "gateway=", gatewayRt.String(), "subnet=", subnetBits) + + select {} +} + +// compile-time interface checks. +var _ lneto.BackoffStrategy = backoff +var _ netdev.Stack = (*xnet.Netstack)(nil) +var _ netdev.DevEthernet = (*EspDev)(nil) +var _ netdev.Netlink[espradio.STAConfig] = (*EspDev)(nil) + +func backoff(consecutiveBackoffs uint) time.Duration { + return 5 * time.Millisecond +} + +func userNotify(connected bool) (retries int, reconnectParams espradio.STAConfig) { + if !connected { + return 1, globConnectParams + } + return 0, espradio.STAConfig{} +} + +// EspDev adapts [espradio.NetDev] to [netdev.DevEthernet] and wraps the +// ESP32 WiFi bring-up sequence (Enable/Start/Connect/StartNetDev) as [netdev.Netlink]. +// +// The same struct implements both interfaces so a single pointer can be passed +// to [netdev.Interface.Init] for both the netlink and device arguments, matching +// the pattern used by the picow-netdev example. +type EspDev struct { + nd *espradio.NetDev + radioConfig espradio.Config + notifyCb netdev.NotifyCallback[espradio.STAConfig] +} + +// LinkConnect implements [netdev.Netlink]. +// Runs Enable→Start→Connect→StartNetDev. nd is nil until this returns successfully. +func (d *EspDev) LinkConnect(cfg espradio.STAConfig) error { + if err := espradio.Enable(d.radioConfig); err != nil { + return err + } + if err := espradio.Start(); err != nil { + return err + } + if err := espradio.Connect(cfg); err != nil { + return err + } + nd, err := espradio.StartNetDev() + if err != nil { + return err + } + d.nd = nd + return nil +} + +// LinkDisconnect implements [netdev.Netlink]. +func (d *EspDev) LinkDisconnect() {} + +// LinkNotify implements [netdev.Netlink]. +func (d *EspDev) LinkNotify(cb netdev.NotifyCallback[espradio.STAConfig]) { + d.notifyCb = cb +} + +// HardwareAddr6 implements [netdev.DevEthernet]. +func (d *EspDev) HardwareAddr6() ([6]byte, error) { + return d.nd.HardwareAddr6() +} + +// SendOffsetEthFrame implements [netdev.DevEthernet]. +// ESP32 has no frame prefix offset, so buf is passed directly to [espradio.NetDev.SendEthFrame]. +func (d *EspDev) SendOffsetEthFrame(buf []byte) error { + return d.nd.SendEthFrame(buf) +} + +// SetEthRecvHandler implements [netdev.DevEthernet]. +// Adapts the error-less netdev handler signature to espradio's error-returning one. +func (d *EspDev) SetEthRecvHandler(handler func(rxEthframe []byte)) { + if handler == nil { + d.nd.SetEthRecvHandler(nil) + return + } + d.nd.SetEthRecvHandler(func(pkt []byte) error { + handler(pkt) + return nil + }) +} + +// EthPoll implements [netdev.DevEthernet]. +// +// espradio.NetDev.EthPoll both pops a frame from the C ring buffer into buf +// AND synchronously calls the registered rxHandler with that frame. Returning +// the non-zero byte count here as well would trigger the Runner's "device uses +// both paths" guard. We therefore drain the ring (calling the handler) and +// return (0, 0, err) so the Runner sees only the handler-based receive path. +func (d *EspDev) EthPoll(buf []byte) (ethFrameOff, ethernetBytes int, err error) { + _, err = d.nd.EthPoll(buf) + return 0, 0, err +} + +// MaxFrameSizeAndOffset implements [netdev.DevEthernet]. +// ESP32 transmits frames with no prefix offset. +func (d *EspDev) MaxFrameSizeAndOffset() (maxFrameSize int, frameOff int) { + return d.nd.MaxFrameSize(), 0 +} + +func failIfErr(msg string, err error) { + if err != nil { + fail(msg, err) + } + println(msg, "PASS") +} + +func fail(msg string, err error) { + var errstr string + if err != nil { + errstr = err.Error() + } + for { + println("FAIL:", msg, errstr) + time.Sleep(time.Second) + } +} diff --git a/examples/http-app/main-http.go b/examples/http-app/main-http.go index 81251ce..0e22be7 100644 --- a/examples/http-app/main-http.go +++ b/examples/http-app/main-http.go @@ -22,14 +22,15 @@ import ( "github.com/soypat/lneto" "github.com/soypat/lneto/http/httpraw" + "github.com/soypat/lneto/ipv4" "github.com/soypat/lneto/tcp" "github.com/soypat/lneto/x/xnet" "tinygo.org/x/espradio" ) var ( - ssid string - password string + ssid string = "Patoniato" + password string = "amoladoramesada" ) const ( @@ -98,7 +99,7 @@ func main() { if err != nil { failure("DHCP failed: " + err.Error()) } - println("got IP:", dhcp.AssignedAddr.String()) + println("got IP:", string(ipv4.AppendFormatAddr(nil, dhcp.AssignedAddr4))) lstack := espstack.LnetoStack() rstack := lstack.StackRetrying(lneto.BackoffStrategy(func(_ uint) time.Duration { @@ -108,7 +109,7 @@ func main() { if err != nil { failure("ARP resolve failed: " + err.Error()) } - lstack.SetGateway6(gatewayHW) + lstack.SetGatewayHardwareAddr(gatewayHW) // DNS lookup for NTP server and calculate time. If this fails just ignore. println("resolving ntp host:", ntpHost) @@ -138,13 +139,13 @@ func main() { failure("tcppool create: " + err.Error()) } - listenAddr := netip.AddrPortFrom(dhcp.AssignedAddr, listenPort) + listenAddr := netip.AddrPortFrom(netip.AddrFrom4(dhcp.AssignedAddr4), listenPort) var listener tcp.Listener err = listener.Reset(listenPort, tcpPool) if err != nil { failure("listener reset: " + err.Error()) } - err = lstack.RegisterListener(&listener) + err = lstack.RegisterListenerTCP(&listener) if err != nil { failure("listener register: " + err.Error()) } diff --git a/go.mod b/go.mod index e85f203..d2224c3 100644 --- a/go.mod +++ b/go.mod @@ -8,3 +8,8 @@ require ( ) require github.com/soypat/natiu-mqtt v0.6.0 + +// Local replace for development: points to the lneto netdev branch which adds +// the x/netdev package used by examples/esp32-netdev. Remove once that branch +// is merged and a tagged release is cut. +replace github.com/soypat/lneto => ../lneto diff --git a/netif_esp.go b/netif_esp.go index 513a0d3..03db4d6 100644 --- a/netif_esp.go +++ b/netif_esp.go @@ -1,14 +1,9 @@ package espradio -/* -#cgo CFLAGS: -fno-short-enums -#include "espradio.h" -*/ -import "C" - import ( "net" - "unsafe" + + "tinygo.org/x/espradio/cesp" ) var _ EthernetDevice = (*NetDev)(nil) @@ -19,8 +14,8 @@ type NetDev struct { } func startNetDev(apMode int) (*NetDev, error) { - if code := C.espradio_netif_start_rx(C.int(apMode)); code != C.ESP_OK { - return nil, makeError(code) + if err := cesp.NetifStartRx(apMode); err != nil { + return nil, err } return &NetDev{}, nil } @@ -43,11 +38,7 @@ func (nd *NetDev) SendEthFrame(frame []byte) error { if len(frame) == 0 { return nil } - code := C.espradio_netif_tx(unsafe.Pointer(&frame[0]), C.uint16_t(len(frame))) - if code != 0 { - return makeError(C.esp_err_t(code)) - } - return nil + return cesp.NetifTx(frame) } // SetEthRecvHandler sets the callback to be called when a new Ethernet frame is received. @@ -59,26 +50,22 @@ func (nd *NetDev) SetEthRecvHandler(handler func(pkt []byte) error) { // EthPoll returns (true, nil) if a frame was received and the handler was called, (false, nil) // if no frame was available, or (false, err) if an error occurred. func (nd *NetDev) EthPoll(buf []byte) (int, error) { - if C.espradio_netif_rx_available() == 0 { + if !cesp.NetifRxAvailable() { return 0, nil } - n := C.espradio_netif_rx_pop(unsafe.Pointer(&buf[0]), C.uint16_t(len(buf))) + n := cesp.NetifRxPop(buf) if n == 0 { return 0, nil } if nd.rxHandler != nil { nd.rxHandler(buf[:n]) } - return int(n), nil + return n, nil } // HardwareAddr6 returns the 6-byte MAC address of the WiFi interface. func (nd *NetDev) HardwareAddr6() (mac [6]byte, _ error) { - code := C.espradio_netif_get_mac((*C.uint8_t)(unsafe.Pointer(&mac[0]))) - if code != C.ESP_OK { - return mac, makeError(code) - } - return mac, nil + return cesp.NetifGetMAC() } // MaxFrameSize returns the maximum Ethernet frame size supported by the driver, @@ -95,5 +82,5 @@ func (nd *NetDev) NetFlags() net.Flags { // NetifRxStats returns (callback_count, drop_count) from the C ring buffer. func NetifRxStats() (uint32, uint32) { - return uint32(C.espradio_netif_rx_cb_count()), uint32(C.espradio_netif_rx_cb_drop()) + return cesp.NetifRxStats() } diff --git a/netif_new.go.go b/netif_new.go.go new file mode 100644 index 0000000..0b555af --- /dev/null +++ b/netif_new.go.go @@ -0,0 +1,69 @@ +//go:build esp32c3 || esp32c3_qemu_target || esp32s3 + +package espradio + +import ( + "github.com/soypat/lneto/x/netdev" + "tinygo.org/x/espradio/cesp" +) + +var _ netdev.DevEthernet = (*Handle)(nil) + +// var _ netdev.Interface[STAConfig] = (*Handle)(nil) + +// Handle is a raw netdev.DevEthernet implementation over the ESP WiFi interface. +// Call Start before use. +type Handle struct { + rxHandler func([]byte) +} + +func (h *Handle) LinkConnect(cfg STAConfig) error { + return cesp.WifiSetSTAConfig(cfg.SSID, cfg.Password) +} + +// Start initializes the C-side RX ring and registers the WiFi receive callback. +// apMode selects the AP interface when true, STA otherwise. +func (h *Handle) Start(apMode bool) error { + ap := 0 + if apMode { + ap = 1 + } + return cesp.NetifStartRx(ap) +} + +func (h *Handle) HardwareAddr6() ([6]byte, error) { + return cesp.NetifGetMAC() +} + +// SendOffsetEthFrame transmits a raw Ethernet frame. frameOff is 0 for this +// device so the frame starts at buf[0]. +func (h *Handle) SendOffsetEthFrame(buf []byte) error { + if len(buf) == 0 { + return nil + } + return cesp.NetifTx(buf) +} + +func (h *Handle) SetEthRecvHandler(handler func(rxEthframe []byte)) { + h.rxHandler = handler +} + +func (h *Handle) EthPoll(buf []byte) (ethFrameOff, ethernetBytes int, err error) { + if !cesp.NetifRxAvailable() { + return 0, 0, nil + } + n := cesp.NetifRxPop(buf) + if n == 0 { + return 0, 0, nil + } + if h.rxHandler != nil { + h.rxHandler(buf[:n]) + } + return 0, n, nil +} + +// MaxFrameSizeAndOffset returns the maximum frame size and a zero offset, +// meaning the Ethernet frame begins at byte 0 of every buffer. +func (h *Handle) MaxFrameSizeAndOffset() (maxFrameSize int, frameOff int) { + return MaxFrameSize, 0 +} diff --git a/radio.go b/radio.go index 81e1bb8..1b0f151 100644 --- a/radio.go +++ b/radio.go @@ -3,12 +3,13 @@ package espradio /* -#cgo CFLAGS: -Iblobs/include -#cgo CFLAGS: -Iblobs/include/local -#cgo CFLAGS: -Iblobs/headers +#cgo CFLAGS: -Icesp/blobs/include +#cgo CFLAGS: -Icesp/blobs/include/local +#cgo CFLAGS: -Icesp/blobs/headers #cgo CFLAGS: -DCONFIG_SOC_WIFI_NAN_SUPPORT=0 #cgo CFLAGS: -DESPRADIO_PHY_PATCH_ROMFUNCS=0 #cgo CFLAGS: -fno-short-enums +#cgo CFLAGS: -Icesp #include "espradio.h" */ @@ -21,6 +22,8 @@ import ( "sync/atomic" "time" "unsafe" + + "tinygo.org/x/espradio/cesp" ) // ─── Types ─────────────────────────────────────────────────────────────────── @@ -122,7 +125,7 @@ func schedOnce() { // the hardware ISR preempts us and re-entrantly calls the blob's ISR // handler, corrupting its state and crashing. Masking first prevents // this; espradio_wifi_unmask() at the end re-enables the interrupt. - C.espradio_ints_off(C.uint32_t(1 << wifiCPUInterrupt)) + cesp.IntsOff(1 << cesp.WifiCPUInterrupt) // Restore ROM pointers BEFORE any blob code runs. The blob reads // pTxRx, pp_wdev_funcs etc. during ISR/queue/timer processing below. @@ -170,6 +173,11 @@ func kickSched() { } } +func wifiISRHandler(intr interrupt.Interrupt) { + cesp.WifiISRHandler(intr) + kickSched() +} + // arenaPool keeps the arena backing memory reachable from Go so the GC // won't collect it. The WiFi blob stores pointers into this pool in ROM // BSS (outside the GC's scan range), so individual malloc'd objects would @@ -186,7 +194,7 @@ func ArenaStats() (used, capacity uint32) { // Enable and configure the radio for WiFi. func Enable(config Config) error { // Allocate arena pool from Go heap and hand it to C. - poolSize := arenaPoolSize + poolSize := cesp.ArenaPoolSize if config.ArenaPoolSize > 0 { poolSize = config.ArenaPoolSize } @@ -195,10 +203,10 @@ func Enable(config Config) error { startSchedTicker() time.Sleep(schedTickerMs * time.Millisecond) - initHardware() + cesp.InitHardware() C.espradio_ensure_osi_ptr() - wifiISR = interrupt.New(wifiCPUInterrupt, wifiISRHandler) + wifiISR = interrupt.New(cesp.WifiCPUInterrupt, wifiISRHandler) wifiISR.Enable() C.espradio_wifi_int_raise_priority() @@ -453,11 +461,11 @@ func SniffCountOnChannel(channel uint8, duration time.Duration) (uint32, error) // ─── Tasks / timers / ISR ──────────────────────────────────────────────────── func millisecondsToTicks(ms uint32) uint32 { - return ms * (ticksPerSecond / 1000) + return ms * (cesp.TicksPerSecond / 1000) } func ticksToMilliseconds(ticks uint32) uint32 { - return ticks / (ticksPerSecond / 1000) + return ticks / (cesp.TicksPerSecond / 1000) } //export espradio_panic @@ -612,7 +620,7 @@ func espradio_timer_arm_go_us(timer unsafe.Pointer, us uint32, repeat int32) { //export espradio_task_delay func espradio_task_delay(ticks uint32) { - const ticksPerMillisecond = ticksPerSecond / 1000 + const ticksPerMillisecond = cesp.TicksPerSecond / 1000 ms := (ticks + ticksPerMillisecond - 1) / ticksPerMillisecond time.Sleep(time.Duration(ms) * time.Millisecond) } diff --git a/radio_esp32c3.go b/radio_esp32c3.go deleted file mode 100644 index 4cd8d7f..0000000 --- a/radio_esp32c3.go +++ /dev/null @@ -1,75 +0,0 @@ -//go:build esp32c3 - -package espradio - -/* -#cgo CFLAGS: -Iblobs/include -#cgo CFLAGS: -Iblobs/include/esp32c3 -#cgo CFLAGS: -Iblobs/include/local -#cgo CFLAGS: -Iblobs/headers -#cgo CFLAGS: -DCONFIG_SOC_WIFI_NAN_SUPPORT=0 -#cgo CFLAGS: -DESPRADIO_PHY_PATCH_ROMFUNCS=0 -#cgo LDFLAGS: -Lblobs/libs/esp32c3 -lcoexist -lcore -lmesh -lnet80211 -lespnow -lregulatory -lphy -lpp -lwpa_supplicant - -#include "include.h" -*/ -import "C" - -import ( - "device/esp" - "runtime/interrupt" - - _ "tinygo.org/x/espradio/esp32c3" -) - -// ─── Hardware init ─────────────────────────────────────────────────────────── - -// CPU interrupt number for WiFi MAC. On RISC-V, interrupt 1 is valid. -const wifiCPUInterrupt = 1 - -func initHardware() error { - // See: - // https://github.com/esp-rs/esp-wifi/blob/main/esp-wifi/src/common_adapter/common_adapter_esp32c3.rs#L18 - - const ( - SYSTEM_WIFIBB_RST = 1 << 0 - SYSTEM_FE_RST = 1 << 1 - SYSTEM_WIFIMAC_RST = 1 << 2 - SYSTEM_BTBB_RST = 1 << 3 // Bluetooth Baseband - SYSTEM_BTMAC_RST = 1 << 4 // deprecated - SYSTEM_RW_BTMAC_RST = 1 << 9 // Bluetooth MAC - SYSTEM_RW_BTMAC_REG_RST = 1 << 11 // Bluetooth MAC Regsiters - SYSTEM_BTBB_REG_RST = 1 << 13 // Bluetooth Baseband Registers - ) - - const MODEM_RESET_FIELD_WHEN_PU = SYSTEM_WIFIBB_RST | - SYSTEM_FE_RST | - SYSTEM_WIFIMAC_RST | - SYSTEM_BTBB_RST | - SYSTEM_BTMAC_RST | - SYSTEM_RW_BTMAC_RST | - SYSTEM_RW_BTMAC_REG_RST | - SYSTEM_BTBB_REG_RST - - esp.RTC_CNTL.DIG_PWC.ClearBits(esp.RTC_CNTL_DIG_PWC_WIFI_FORCE_PD) - esp.APB_CTRL.WIFI_RST_EN.SetBits(MODEM_RESET_FIELD_WHEN_PU) - esp.APB_CTRL.WIFI_RST_EN.ClearBits(MODEM_RESET_FIELD_WHEN_PU) - esp.RTC_CNTL.DIG_ISO.ClearBits(esp.RTC_CNTL_DIG_ISO_FORCE_OFF) - - return nil -} - -// This is the value used for the ESP32-C3, see: -// https://github.com/esp-rs/esp-wifi/blob/v0.2.0/esp-wifi/src/timer/riscv.rs#L28 -const ticksPerSecond = 16_000_000 - -// C3 has only 321KB DRAM total; keep the arena pool small. -const arenaPoolSize = 32 * 1024 - -// ESP32-C3 (RISC-V): call the blob's WiFi ISR directly from the -// hardware interrupt handler. On RISC-V the interrupt context can -// safely call the blob's ISR without stack overflow concerns. -func wifiISRHandler(interrupt.Interrupt) { - C.espradio_call_wifi_isr() - kickSched() -} diff --git a/radio_esp32c3_qemu.go b/radio_esp32c3_qemu.go deleted file mode 100644 index b5e980b..0000000 --- a/radio_esp32c3_qemu.go +++ /dev/null @@ -1,30 +0,0 @@ -//go:build esp32c3_qemu_target - -package espradio - -/* -#cgo CFLAGS: -Iblobs/include -#cgo CFLAGS: -Iblobs/include/esp32c3 -#cgo CFLAGS: -Iblobs/include/local -#cgo CFLAGS: -Iblobs/headers -#cgo CFLAGS: -DCONFIG_SOC_WIFI_NAN_SUPPORT=0 -#cgo CFLAGS: -DESPRADIO_PHY_PATCH_ROMFUNCS=0 -*/ -import "C" - -import "runtime/interrupt" - -// ticksPerSecond matches the real ESP32-C3 value used to convert timer ticks. -const ticksPerSecond = 16_000_000 - -// wifiCPUInterrupt is the CPU interrupt number for WiFi MAC (matches real C3). -const wifiCPUInterrupt = 1 - -// arenaPoolSize matches the real C3 value. -const arenaPoolSize = 32 * 1024 - -// initHardware is a no-op for QEMU: no modem power / clock hardware present. -func initHardware() error { return nil } - -// wifiISRHandler is a no-op for QEMU: no real WiFi interrupts. -func wifiISRHandler(interrupt.Interrupt) {} diff --git a/radio_esp32s3.go b/radio_esp32s3.go deleted file mode 100644 index d897fb0..0000000 --- a/radio_esp32s3.go +++ /dev/null @@ -1,78 +0,0 @@ -//go:build esp32s3 - -package espradio - -/* -#cgo CFLAGS: -Iblobs/include -#cgo CFLAGS: -Iblobs/include/esp32s3 -#cgo CFLAGS: -Iblobs/include/local -#cgo CFLAGS: -Iblobs/headers -#cgo CFLAGS: -DCONFIG_SOC_WIFI_NAN_SUPPORT=0 -#cgo CFLAGS: -DESPRADIO_PHY_PATCH_ROMFUNCS=0 -#cgo CFLAGS: -fno-short-enums -#cgo LDFLAGS: -Lblobs/libs/esp32s3 -lcoexist -lcore -lmesh -lnet80211 -lespnow -lregulatory -lphy -lpp -lwpa_supplicant - -#include "include.h" -*/ -import "C" - -import ( - "device/esp" - "runtime/interrupt" - - _ "tinygo.org/x/espradio/esp32s3" -) - -// ─── Hardware init ─────────────────────────────────────────────────────────── - -// CPU interrupt number for WiFi MAC. On Xtensa, TinyGo dispatches only lines -// 6-30. Interrupt 12 is a level-triggered, level-1 interrupt in the allocatable range. -const wifiCPUInterrupt = 12 - -func initHardware() error { - // See: - // https://github.com/esp-rs/esp-hal/blob/main/esp-radio/src/radio_clocks/clocks_ll/esp32s3.rs - - const ( - SYSTEM_WIFIBB_RST = 1 << 0 - SYSTEM_FE_RST = 1 << 1 - SYSTEM_WIFIMAC_RST = 1 << 2 - SYSTEM_BTBB_RST = 1 << 3 // Bluetooth Baseband - SYSTEM_BTMAC_RST = 1 << 4 // deprecated - SYSTEM_RW_BTMAC_RST = 1 << 9 // Bluetooth MAC - SYSTEM_RW_BTMAC_REG_RST = 1 << 11 // Bluetooth MAC Registers - SYSTEM_BTBB_REG_RST = 1 << 13 // Bluetooth Baseband Registers - ) - - const MODEM_RESET_FIELD_WHEN_PU = SYSTEM_WIFIBB_RST | - SYSTEM_FE_RST | - SYSTEM_WIFIMAC_RST | - SYSTEM_BTBB_RST | - SYSTEM_BTMAC_RST | - SYSTEM_RW_BTMAC_RST | - SYSTEM_RW_BTMAC_REG_RST | - SYSTEM_BTBB_REG_RST - - esp.RTC_CNTL.DIG_PWC.ClearBits(1 << 17) // WIFI_FORCE_PD - esp.APB_CTRL.WIFI_RST_EN.SetBits(MODEM_RESET_FIELD_WHEN_PU) - esp.APB_CTRL.WIFI_RST_EN.ClearBits(MODEM_RESET_FIELD_WHEN_PU) - esp.RTC_CNTL.DIG_ISO.ClearBits(1 << 28) // WIFI_FORCE_ISO - - return nil -} - -// ESP32-S3 uses the Xtensa systimer at 16 MHz. -// See: https://github.com/esp-rs/esp-hal/blob/main/esp-hal/src/timer/systimer.rs -const ticksPerSecond = 16_000_000 - -// S3 has 416KB SRAM1; larger arena pool for blob allocations. -const arenaPoolSize = 48 * 1024 - -// ESP32-S3 (Xtensa): don't run the blob ISR from interrupt context — the deep -// windowed call chains can overflow the interrupted goroutine's 8KB stack. -// Just mask the level-triggered interrupt and wake the scheduler; schedOnce() -// will call espradio_call_wifi_isr() on its own goroutine stack. -func wifiISRHandler(interrupt.Interrupt) { - C.espradio_ints_off(C.uint32_t(1 << wifiCPUInterrupt)) - kickSched() -}