From ae793c14be863a8e50df08068fb0be9b014217d3 Mon Sep 17 00:00:00 2001 From: andromeda Date: Mon, 6 Apr 2026 20:03:39 +0200 Subject: [PATCH] wifi init --- .cargo/config.toml | 2 +- Cargo.lock | 255 +++++++++++++++++++++++++++++++++++++++++---- Cargo.toml | 42 +++++--- src/main.rs | 38 ++++++- 4 files changed, 299 insertions(+), 38 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 637097c..04a9b67 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -15,4 +15,4 @@ rustflags = [ target = "riscv32imac-unknown-none-elf" [unstable] -build-std = ["core"] +build-std = ["core", "alloc"] diff --git a/Cargo.lock b/Cargo.lock index 39e8ad4..27d8c7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,12 +2,30 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "allocator-api2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c583acf993cf4245c4acb0a2cc2ab1f9cc097de73411bb6d3647ff6af2b1013d" + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "bitfield" version = "0.19.4" @@ -25,7 +43,7 @@ checksum = "f48d6ace212fdf1b45fd6b566bb40808415344642b76c3224c07c8df9da81e97" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -52,6 +70,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "const-default" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" + [[package]] name = "critical-section" version = "1.2.0" @@ -98,7 +122,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -111,7 +135,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.117", ] [[package]] @@ -122,7 +146,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -133,7 +157,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -144,7 +168,7 @@ checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -197,6 +221,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "embassy-net-driver" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" + [[package]] name = "embassy-sync" version = "0.6.2" @@ -322,7 +352,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -331,6 +361,22 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "esp-alloc" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "641e43d6a60244429117ef2fa7a47182120c7561336ea01f6fb08d634f46bae1" +dependencies = [ + "allocator-api2", + "cfg-if", + "document-features", + "enumset", + "esp-config", + "esp-sync", + "linked_list_allocator", + "rlsf", +] + [[package]] name = "esp-backtrace" version = "0.18.1" @@ -442,7 +488,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "termcolor", ] @@ -464,6 +510,21 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a93e39c8ad8d390d248dc7b9f4b59a873f313bf535218b8e2351356972399e3" +[[package]] +name = "esp-phy" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1facf348e1e251517278fc0f5dc134e95e518251f5796cfbb532ca226a29bf" +dependencies = [ + "cfg-if", + "document-features", + "esp-config", + "esp-hal", + "esp-metadata-generated", + "esp-sync", + "esp-wifi-sys", +] + [[package]] name = "esp-println" version = "0.16.1" @@ -477,6 +538,44 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "esp-radio" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "684c4de2f8907b73c9b891fbda65286a86d34fced4b856f36a7896c211f2f265" +dependencies = [ + "allocator-api2", + "cfg-if", + "document-features", + "embassy-net-driver", + "embedded-io 0.6.1", + "embedded-io 0.7.1", + "embedded-io-async 0.6.1", + "embedded-io-async 0.7.0", + "enumset", + "esp-alloc", + "esp-config", + "esp-hal", + "esp-hal-procmacros", + "esp-metadata-generated", + "esp-phy", + "esp-radio-rtos-driver", + "esp-sync", + "esp-wifi-sys", + "heapless 0.9.2", + "instability", + "num-derive", + "num-traits", + "portable-atomic", + "portable_atomic_enum", +] + +[[package]] +name = "esp-radio-rtos-driver" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "543bc31d1851afd062357e7810c1a9633f282fd3993583499a841ab497cbca6c" + [[package]] name = "esp-riscv-rt" version = "0.13.0" @@ -499,6 +598,26 @@ dependencies = [ "esp-metadata-generated", ] +[[package]] +name = "esp-rtos" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ec711c8d06e79c67b75d01595539e86b0aac209643af98ca87a12250428b3" +dependencies = [ + "allocator-api2", + "cfg-if", + "document-features", + "embassy-sync 0.7.2", + "esp-alloc", + "esp-config", + "esp-hal", + "esp-hal-procmacros", + "esp-metadata-generated", + "esp-radio-rtos-driver", + "esp-sync", + "portable-atomic", +] + [[package]] name = "esp-sync" version = "0.1.1" @@ -514,6 +633,15 @@ dependencies = [ "xtensa-lx", ] +[[package]] +name = "esp-wifi-sys" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b6544f6f0cb86169d1f93ba2101a8d50358a040c5043676ed86b793e09b12c" +dependencies = [ + "anyhow", +] + [[package]] name = "esp32" version = "0.39.0" @@ -559,13 +687,15 @@ name = "esp32c6-play" version = "0.1.0" dependencies = [ "critical-section", + "esp-alloc", "esp-backtrace", "esp-bootloader-esp-idf", "esp-hal", "esp-hal-smartled", "esp-println", + "esp-radio", + "esp-rtos", "log", - "micromath", "smart-leds", ] @@ -735,7 +865,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -765,9 +895,21 @@ checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] +[[package]] +name = "libc" +version = "0.2.184" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" + +[[package]] +name = "linked_list_allocator" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" + [[package]] name = "litrs" version = "1.0.0" @@ -786,12 +928,6 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" -[[package]] -name = "micromath" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c8dda44ff03a2f238717214da50f65d5a53b45cd213a7370424ffdb6fae815" - [[package]] name = "nb" version = "0.1.3" @@ -807,6 +943,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -852,6 +999,27 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "portable_atomic_enum" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d48f60c43e0120bb2bb48589a16d4bed2f4b911be41e299f2d0fc0e0e20885" +dependencies = [ + "portable-atomic", + "portable_atomic_enum_macros", +] + +[[package]] +name = "portable_atomic_enum_macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33fa6ec7f2047f572d49317cca19c87195de99c6e5b6ee492da701cfe02b053" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -921,7 +1089,7 @@ checksum = "7d323d13972c1b104aa036bc692cd08b822c8bbf23d79a27c526095856499799" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -950,7 +1118,7 @@ checksum = "def519ddeeb5e43c2b4fc3952c27b3a86782fc05192f322b2309125cd85b1fc3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -959,6 +1127,19 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1376b15f3ff160e9b1e8ea564ce427f2f6fcf77528cc0a8bf405cb476f9cea7" +[[package]] +name = "rlsf" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1646a59a9734b8b7a0ac51689388a60fe1625d4b956348e9de07591a1478457a" +dependencies = [ + "cfg-if", + "const-default", + "libc", + "rustversion", + "svgbobdoc", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -998,7 +1179,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1077,7 +1258,31 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.117", +] + +[[package]] +name = "svgbobdoc" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2c04b93fc15d79b39c63218f15e3fdffaa4c227830686e3b7c5f41244eb3e50" +dependencies = [ + "base64", + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-width", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] @@ -1148,6 +1353,12 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + [[package]] name = "unsafe-libyaml" version = "0.2.11" @@ -1233,5 +1444,5 @@ checksum = "96fb42cd29c42f8744c74276e9f5bee7b06685bbe5b88df891516d72cb320450" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] diff --git a/Cargo.toml b/Cargo.toml index 60e9b52..427a1f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,21 +9,35 @@ name = "esp32c6-play" path = "./src/main.rs" [dependencies] -esp-hal = { version = "~1.0", features = ["esp32c6", "log-04", "unstable"] } - -esp-bootloader-esp-idf = { version = "0.4.0", features = ["esp32c6", "log-04"] } -log = "0.4.27" - +log = "0.4.27" critical-section = "1.2.0" -esp-backtrace = { version = "0.18.1", features = [ - "esp32c6", - "panic-handler", - "println", -] } -esp-println = { version = "0.16.1", features = ["esp32c6", "log-04"] } -esp-hal-smartled = { version = "0.17.0", features = ["esp32c6"] } -smart-leds = { version = "0.4.0", default-features = false } -micromath = { version = "2.1.0", default-features = false } +[dependencies.esp-hal] +version = "~1.0" +features = ["esp32c6", "unstable", "log-04"] +[dependencies.esp-bootloader-esp-idf] +version = "0.4.0" +features = ["esp32c6", "log-04"] +[dependencies.esp-backtrace] +version = "0.18.1" +features = ["esp32c6", "panic-handler", "println"] +[dependencies.esp-println] +version = "0.16.1" +features = ["esp32c6", "log-04"] +[dependencies.esp-hal-smartled] +version = "0.17.0" +features = ["esp32c6"] +[dependencies.smart-leds] +version = "0.4.0" +default-features = false +[dependencies.esp-radio] +version = "0.17.0" +features = ["esp32c6", "esp-alloc", "wifi", "esp-now", "unstable"] +[dependencies.esp-rtos] +version = "0.2.0" +features = ["esp32c6", "esp-alloc", "esp-radio"] +[dependencies.esp-alloc] +version = "0.9.0" +features = ["esp32c6"] [profile.dev] diff --git a/src/main.rs b/src/main.rs index 960438f..de13de8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,14 @@ #![no_std] #![no_main] +extern crate alloc; +use alloc::string::String; use esp_backtrace as _; // panic_handler -use esp_hal::{rmt::Rmt, time::Rate}; +use esp_hal::{ + interrupt::software::SoftwareInterruptControl, rmt::Rmt, time::Rate, timer::timg::TimerGroup, +}; use esp_hal_smartled::{SmartLedsAdapter, smart_led_buffer}; +use esp_radio::wifi; use smart_leds::RGB; use esp32c6_play::{init, sin, wait_ms, write_rgb}; @@ -14,8 +19,39 @@ esp_bootloader_esp_idf::esp_app_desc!(); #[esp_hal::main] fn main() -> ! { + // initialize peripherals and logging let peripherals = init(); + // initialize heap + esp_alloc::heap_allocator!(size: 64 * 1024); + + // initialize wifi + let timg0 = TimerGroup::new(peripherals.TIMG0); + let software_interrupt = SoftwareInterruptControl::new(peripherals.SW_INTERRUPT); + esp_rtos::start(timg0.timer0, software_interrupt.software_interrupt0); + let esp_radio_controller = esp_radio::init().expect("failed to init radio controller"); + let (mut wifi_controller, _) = wifi::new( + &esp_radio_controller, + peripherals.WIFI, + wifi::Config::default(), + ) + .expect("failed to create wifi controller"); + + let wifi_config = wifi::ModeConfig::AccessPoint( + wifi::AccessPointConfig::default() + .with_auth_method(wifi::AuthMethod::WpaWpa2Personal) + .with_ssid(String::from("ssid-test")) + .with_password(String::from("password")), + ); + wifi_controller + .set_config(&wifi_config) + .expect("failed to set wifi config"); + + wifi_controller + .start() + .expect("failed to start wifi controller"); + + // set up rgb led let mut led_buffer = smart_led_buffer!(1 /* # of leds */); let mut rgb_led = { let frequency = Rate::from_mhz(80); // max frequency of RMT