From 681d7410a4d033402bed8f06f6eb4b637c6c0c97 Mon Sep 17 00:00:00 2001 From: macronova Date: Sun, 22 Jun 2025 22:59:24 -0500 Subject: [PATCH] Try jj --- flake.lock | 73 ++++++++++++----- flake.nix | 1 + xiao-esp32c6/Cargo.lock | 122 +++++++++-------------------- xiao-esp32c6/Cargo.toml | 48 ++++++------ xiao-esp32c6/src/lib.rs | 46 +++++------ xiao-esp32c6/src/tasks/mod.rs | 2 +- xiao-esp32c6/src/tasks/wireless.rs | 31 ++++++++ xiao-esp32c6/tests/hello_test.rs | 26 ------ 8 files changed, 168 insertions(+), 181 deletions(-) create mode 100644 xiao-esp32c6/src/tasks/wireless.rs delete mode 100644 xiao-esp32c6/tests/hello_test.rs diff --git a/flake.lock b/flake.lock index cf8e18f..c852b2a 100644 --- a/flake.lock +++ b/flake.lock @@ -41,11 +41,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1750615580, - "narHash": "sha256-8ucRXBCG5vA1nHCH1agRDBZaiuPKuqb/RsPxQEsHeVk=", + "lastModified": 1751047748, + "narHash": "sha256-KaS77WfbcLkLdqzeWP7GMgU5LltjOyjVxSzRhZbxPCc=", "owner": "cachix", "repo": "devenv", - "rev": "e5dfaa34eed24f1ec79e99624666b15f51c4be97", + "rev": "0350732a6725a550e4d2d69070774480dce86620", "type": "github" }, "original": { @@ -79,11 +79,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1750574187, - "narHash": "sha256-A2v6EQCnGk67cZstf5nxfH4ZUr9DpUovAvSrLaAfhUM=", + "lastModified": 1751092526, + "narHash": "sha256-vmbu97JXqr9/sTWR5XRh646jkp8a0J9m0o6JIQTdjE4=", "owner": "nix-community", "repo": "fenix", - "rev": "263d9d394e9b9606a82c73941c4145052007799a", + "rev": "6643d56d9a78afa157b577862c220298c09b891d", "type": "github" }, "original": { @@ -248,11 +248,11 @@ ] }, "locked": { - "lastModified": 1750117611, - "narHash": "sha256-LTwASICtyN3AjzlF9l2ZNAIVZqclio3yRcwwZy3QSJA=", + "lastModified": 1750955511, + "narHash": "sha256-IDB/oh/P63ZTdhgSkey2LZHzeNhCdoKk+4j7AaPe1SE=", "owner": "cachix", "repo": "nix", - "rev": "9e4fc95c388e2223d47da865503dee20d179776a", + "rev": "afa41b08df4f67b8d77a8034b037ac28c71c77df", "type": "github" }, "original": { @@ -330,11 +330,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1750365781, - "narHash": "sha256-XE/lFNhz5lsriMm/yjXkvSZz5DfvKJLUjsS6pP8EC50=", + "lastModified": 1750776420, + "narHash": "sha256-/CG+w0o0oJ5itVklOoLbdn2dGB0wbZVOoDm4np6w09A=", "owner": "nixos", "repo": "nixpkgs", - "rev": "08f22084e6085d19bcfb4be30d1ca76ecb96fe54", + "rev": "30a61f056ac492e3b7cdcb69c1e6abdcf00e39cf", "type": "github" }, "original": { @@ -346,11 +346,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1750365781, - "narHash": "sha256-XE/lFNhz5lsriMm/yjXkvSZz5DfvKJLUjsS6pP8EC50=", + "lastModified": 1751011381, + "narHash": "sha256-krGXKxvkBhnrSC/kGBmg5MyupUUT5R6IBCLEzx9jhMM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "08f22084e6085d19bcfb4be30d1ca76ecb96fe54", + "rev": "30e2e2857ba47844aa71991daa6ed1fc678bcbb7", "type": "github" }, "original": { @@ -376,6 +376,22 @@ "type": "github" } }, + "nixpkgs_7": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "devenv": "devenv", @@ -383,17 +399,18 @@ "fenix": "fenix", "flake-utils": "flake-utils_2", "nixpkgs": "nixpkgs_5", - "nixpkgs-python": "nixpkgs-python" + "nixpkgs-python": "nixpkgs-python", + "rust-overlay": "rust-overlay" } }, "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1750538096, - "narHash": "sha256-8/KtURbFw0cd15WcqKJOMeF3JoxBbmjk2AWJ8Ud80WY=", + "lastModified": 1750871759, + "narHash": "sha256-hMNZXMtlhfjQdu1F4Fa/UFiMoXdZag4cider2R9a648=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "0ddaf2cd7b5c020addb5c35b09dc5ef409701522", + "rev": "317542c1e4a3ec3467d21d1c25f6a43b80d83e7d", "type": "github" }, "original": { @@ -403,6 +420,24 @@ "type": "github" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1751078221, + "narHash": "sha256-/SRmXIPxL7ixFLZgcDdgZDuIwt8eWQAamMYer0ODwbM=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "1712a6d3430ca75353d366b7ddd1c79d6b243efc", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/flake.nix b/flake.nix index e55a62e..aef9e3f 100644 --- a/flake.nix +++ b/flake.nix @@ -6,6 +6,7 @@ flake-utils.url = "github:numtide/flake-utils"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs-python.url = "github:cachix/nixpkgs-python"; + rust-overlay.url = "github:oxalica/rust-overlay"; }; outputs = inputs @ { diff --git a/xiao-esp32c6/Cargo.lock b/xiao-esp32c6/Cargo.lock index 6aee544..c3ad6c4 100644 --- a/xiao-esp32c6/Cargo.lock +++ b/xiao-esp32c6/Cargo.lock @@ -2,25 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - [[package]] name = "allocator-api2" version = "0.3.0" @@ -106,11 +87,11 @@ dependencies = [ [[package]] name = "bt-hci" -version = "0.2.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f377753756ec12e76b52d2dd657437be0448cc9736402ffadd0b8b8b9602c8a1" +checksum = "fa7f7c19df9648c1da4f5356c4256533e38bd65633b6a41654922475a1c6d777" dependencies = [ - "embassy-sync 0.6.2", + "embassy-sync 0.7.0", "embassy-time", "embedded-io", "embedded-io-async", @@ -119,24 +100,11 @@ dependencies = [ "uuid", ] -[[package]] -name = "bt-hci" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7f7c19df9648c1da4f5356c4256533e38bd65633b6a41654922475a1c6d777" -dependencies = [ - "embassy-sync 0.7.0", - "embedded-io", - "embedded-io-async", - "futures-intrusive", - "heapless", -] - [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" @@ -177,6 +145,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "convert_case" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -716,7 +693,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3700028d3d2ee57e6d2a5c5f60544711052f8d394e73a6f534b538fbfb9d058c" dependencies = [ "allocator-api2", - "bt-hci 0.3.2", + "bt-hci", "cfg-if", "critical-section", "document-features", @@ -924,9 +901,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown", @@ -967,12 +944,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - [[package]] name = "libc" version = "0.2.174" @@ -1034,9 +1005,9 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "minijinja" -version = "2.10.2" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd72e8b4e42274540edabec853f607c015c73436159b06c39c7af85a20433155" +checksum = "4e60ac08614cc09062820e51d5d94c2fce16b94ea4e5003bb81b99a95f84e876" dependencies = [ "serde", ] @@ -1203,35 +1174,6 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - [[package]] name = "riscv" version = "0.12.1" @@ -1360,9 +1302,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "static_cell" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89b0684884a883431282db1e4343f34afc2ff6996fe1f4a1664519b66e14c1e" +checksum = "0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23" dependencies = [ "portable-atomic", ] @@ -1458,13 +1400,13 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "trouble-host" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b31abacc7bd8bc686160f6de3347a3b7669ae4a31e4eef9a306466e97d297cea" +checksum = "2f759a3da7d8501bf4be7a11d0754f1da3d2bad226d64cdad9314cec00288fbc" dependencies = [ - "bt-hci 0.2.1", + "bt-hci", "embassy-futures", - "embassy-sync 0.6.2", + "embassy-sync 0.7.0", "embassy-time", "embedded-io", "futures", @@ -1477,11 +1419,11 @@ dependencies = [ [[package]] name = "trouble-host-macros" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2798a58a818bdf9d98f5283cc7ac647f11ecbd1e5ff4cdc45a2a13c31bf86fd" +checksum = "ab5c25c521a9a0cad8c62b86bd3ca9abd6c94842ecf62b64fc56f0d91bb1a426" dependencies = [ - "Inflector", + "convert_case", "darling", "proc-macro2", "quote", @@ -1507,6 +1449,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + [[package]] name = "uuid" version = "1.17.0" @@ -1747,7 +1695,7 @@ dependencies = [ name = "xiao-esp32c6" version = "0.1.0" dependencies = [ - "bt-hci 0.2.1", + "bt-hci", "critical-section", "embassy-executor", "embassy-net", diff --git a/xiao-esp32c6/Cargo.toml b/xiao-esp32c6/Cargo.toml index f5d89b7..18dd2d3 100644 --- a/xiao-esp32c6/Cargo.toml +++ b/xiao-esp32c6/Cargo.toml @@ -8,41 +8,38 @@ name = "xiao-esp32c6" path = "./src/bin/main.rs" [dependencies] -esp-bootloader-esp-idf = "0.1.0" -esp-hal = { version = "=1.0.0-beta.1", features = [ - "esp32c6", - "log-04", - "unstable", +bt-hci = { version = "*", features = [] } +critical-section = "*" +embassy-executor = { version = "*", features = [ + "log", + "task-arena-size-20480", ] } -log = "0.4.27" - -embassy-net = { version = "0.7.0", features = [ +embassy-net = { version = "*", features = [ "dhcpv4", "log", "medium-ethernet", "tcp", "udp", ] } -embedded-io = "0.6.1" -embedded-io-async = "0.6.1" -esp-alloc = "0.8.0" -esp-backtrace = { version = "0.16.0", features = [ +embassy-time = { version = "*", features = ["log"] } +embedded-io = "*" +embedded-io-async = "*" +esp-alloc = "*" +esp-backtrace = { version = "*", features = [ "esp32c6", "exception-handler", "panic-handler", "println", ] } -esp-println = { version = "0.14.0", features = ["esp32c6", "log-04"] } -# for more networking protocol support see https://crates.io/crates/edge-net -bt-hci = { version = "0.2.1", features = [] } -critical-section = "1.2.0" -embassy-executor = { version = "0.7.0", features = [ - "log", - "task-arena-size-20480", +esp-bootloader-esp-idf = "*" +esp-hal = { version = "=1.0.0-beta.1", features = [ + "esp32c6", + "log-04", + "unstable", ] } -embassy-time = { version = "0.4.0", features = ["log"] } -esp-hal-embassy = { version = "0.8.1", features = ["esp32c6", "log-04"] } -esp-wifi = { version = "0.14.1", features = [ +esp-hal-embassy = { version = "*", features = ["esp32c6", "log-04"] } +esp-println = { version = "*", features = ["esp32c6", "log-04"] } +esp-wifi = { version = "*", features = [ "ble", "builtin-scheduler", "coex", @@ -52,7 +49,8 @@ esp-wifi = { version = "0.14.1", features = [ "smoltcp", "wifi", ] } -smoltcp = { version = "0.12.0", default-features = false, features = [ +log = "*" +smoltcp = { version = "*", default-features = false, features = [ "log", "medium-ethernet", "multicast", @@ -65,8 +63,8 @@ smoltcp = { version = "0.12.0", default-features = false, features = [ "socket-tcp", "socket-udp", ] } -static_cell = { version = "2.1.0", features = ["nightly"] } -trouble-host = { version = "0.1.0", features = ["gatt"] } +static_cell = { version = "*", features = ["nightly"] } +trouble-host = { version = "*", features = ["gatt"] } [profile.dev] diff --git a/xiao-esp32c6/src/lib.rs b/xiao-esp32c6/src/lib.rs index a4d4287..493e8e0 100644 --- a/xiao-esp32c6/src/lib.rs +++ b/xiao-esp32c6/src/lib.rs @@ -1,53 +1,53 @@ #![no_std] -use bt_hci::controller::ExternalController; use embassy_executor::Spawner; use embassy_time::{Duration, Timer}; use esp_hal::{ clock::CpuClock, gpio::{Level, Output, OutputConfig}, - timer::{systimer::SystemTimer, timg::TimerGroup}, + timer::systimer::SystemTimer, }; -use esp_wifi::ble::controller::BleConnector; pub mod tasks; -pub async fn entrypoint(spawner: Spawner) { - // generator version: 0.4.0 - +pub async fn entrypoint(spawner: Spawner) -> ! { esp_println::logger::init_logger_from_env(); let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max()); let peripherals = esp_hal::init(config); + log::info!("Initialized peripherals"); + esp_alloc::heap_allocator!(size: 64 * 1024); // COEX needs more RAM - so we've added some more esp_alloc::heap_allocator!(#[unsafe(link_section = ".dram2_uninit")] size: 64 * 1024); - let timer0 = SystemTimer::new(peripherals.SYSTIMER); - esp_hal_embassy::init(timer0.alarm0); + let system_timer = SystemTimer::new(peripherals.SYSTIMER); + esp_hal_embassy::init(system_timer.alarm0); - log::info!("Embassy initialized!"); + log::info!("Initialized embassy"); let rng = esp_hal::rng::Rng::new(peripherals.RNG); - let timer1 = TimerGroup::new(peripherals.TIMG0); - let wifi_init = esp_wifi::init(timer1.timer0, rng, peripherals.RADIO_CLK) - .expect("Failed to initialize WIFI/BLE controller"); - let (mut _wifi_controller, _interfaces) = esp_wifi::wifi::new(&wifi_init, peripherals.WIFI) - .expect("Failed to initialize WIFI controller"); - // find more examples https://github.com/embassy-rs/trouble/tree/main/examples/esp32 - let transport = BleConnector::new(&wifi_init, peripherals.BT); - let _ble_controller = ExternalController::<_, 20>::new(transport); - // TODO: Spawn some tasks - let _ = spawner; + log::info!("Initialized drivers"); + + spawner + .spawn(tasks::wireless::setup_wireless( + system_timer.alarm1, + peripherals.BT, + peripherals.RADIO_CLK, + rng.clone(), + peripherals.WIFI, + )) + .expect("Failed to spawn task to setup wireless connections"); + + log::info!("Initializing wireless connections in background"); + let mut led = Output::new(peripherals.GPIO15, Level::High, OutputConfig::default()); loop { - log::info!("Blink!"); + log::info!("Slow blink!"); led.toggle(); - Timer::after(Duration::from_secs(1)).await; + Timer::after(Duration::from_secs(2)).await; } - - // for inspiration have a look at the examples at https://github.com/esp-rs/esp-hal/tree/esp-hal-v1.0.0-beta.1/examples/src/bin } diff --git a/xiao-esp32c6/src/tasks/mod.rs b/xiao-esp32c6/src/tasks/mod.rs index 8b13789..c37f0e9 100644 --- a/xiao-esp32c6/src/tasks/mod.rs +++ b/xiao-esp32c6/src/tasks/mod.rs @@ -1 +1 @@ - +pub mod wireless; diff --git a/xiao-esp32c6/src/tasks/wireless.rs b/xiao-esp32c6/src/tasks/wireless.rs new file mode 100644 index 0000000..4b271a4 --- /dev/null +++ b/xiao-esp32c6/src/tasks/wireless.rs @@ -0,0 +1,31 @@ +use bt_hci::controller::ExternalController; +use embassy_executor::task; +use embassy_time::{Duration, Timer}; +use esp_hal::{ + peripherals::{BT, RADIO_CLK, WIFI}, + rng::Rng, + timer::systimer::Alarm, +}; +use esp_wifi::ble::controller::BleConnector; + +#[task] +pub async fn setup_wireless( + alarm: Alarm<'static>, + bt: BT<'static>, + radio_clk: RADIO_CLK<'static>, + rng: Rng, + wifi: WIFI<'static>, +) -> ! { + let wifi_init = + esp_wifi::init(alarm, rng, radio_clk).expect("Failed to initialize wireless module"); + // TODO: Use wifi controller + let (_wifi_controller, _interfaces) = + esp_wifi::wifi::new(&wifi_init, wifi).expect("Failed to initialize WIFI controller"); + let ble_connector = BleConnector::new(&wifi_init, bt); + // TODO: Use bluetooth controller + let _ble_controller = ExternalController::<_, 20>::new(ble_connector); + loop { + log::info!("No-op connection"); + Timer::after(Duration::from_secs(1)).await + } +} diff --git a/xiao-esp32c6/tests/hello_test.rs b/xiao-esp32c6/tests/hello_test.rs deleted file mode 100644 index bb2e90a..0000000 --- a/xiao-esp32c6/tests/hello_test.rs +++ /dev/null @@ -1,26 +0,0 @@ -//! Demo test suite using embedded-test -//! -//! You can run this using `cargo test` as usual. - -#![no_std] -#![no_main] - -#[cfg(test)] -#[embedded_test::tests(executor = esp_hal_embassy::Executor::new())] -mod tests { - use esp_hal::timer::systimer::SystemTimer; - - #[init] - fn init() { - let peripherals = esp_hal::init(esp_hal::Config::default()); - - let timer0 = SystemTimer::new(peripherals.SYSTIMER); - esp_hal_embassy::init(timer0.alarm0); - } - - #[test] - async fn hello_test() { - embassy_time::Timer::after(embassy_time::Duration::from_millis(100)).await; - assert_eq!(1 + 1, 2); - } -}