WIP / POC for using the ESP32C3 and ESP32 wifi drivers in bare-metal Rust

Overview

Wifi on ESP32C3 and ESP32 (on bare-metal Rust)

About

This is experimental and work-in-progress! You are welcome to experiment with it and contribute but probably shouldn't use this for something real yet.

This uses the WiFi driver found in https://github.com/espressif/esp-wireless-drivers-3rdparty

Version used

esp-wireless-drivers-3rdparty-055f1ef49d0cb72c24bd492fbbdd37497a90bdae 45701c0

https://github.com/espressif/esp-wireless-drivers-3rdparty/archive/45701c0.zip

Example

  • dhcp
    • set SSID and PASSWORD env variable
    • gets an ip address via DHCP
    • performs an HTTP get request to some "random" server
Command Chip
cargo "+nightly" run --example dhcp_esp32c3 --release --target riscv32i-unknown-none-elf --features "esp32c3,embedded-svc" ESP32C3
cargo "+esp" run --example dhcp_esp32 --release --target xtensa-esp32-none-elf --features "esp32,embedded-svc" ESP32

Additional you can specify these features

Feature Meaning
wifi_logs logs the WiFi logs from the driver at log level info
dump_packets dumps some packet info at log level info
utils Provide utilities to use embedded-nal, this is a default feature
allocator Provides a global allocator which just uses the internal malloc - it doesn't honor special alignments
embedded-svc Provides a (very limited) implementation of the embedded-svc WiFi trait, includes utils and allocator feature

In general you should use the release profile since otherwise the performance is quite bad.

What works?

  • scanning for WiFi access points
  • connect to WiFi access point

Notes on ESP32C3 support

  • uses SYSTIMER as the main timer
  • doesn't work in direct-boot mode
  • only works with target riscv32i-unknown-none-elf

Notes on ESP32 support

This is even more experimental than support for ESP32C3.

  • The WiFi logs only print the format string - not the actual values.
  • Also there might be some packet loss and a bit worse performance than on ESP32C3 currently.
  • The code runs on a single core and is currently not multi-core safe!

On ESP32 currently TIMG1 is used as the main timer so you can't use it for anything else.

Directory Structure

  • src/timer-espXXX.rs: systimer code used for timing and task switching
  • src/preemt/: a bare minimum RISCV and Xtensa round-robin task scheduler
  • src/log/: code used for logging
  • src/binary/: generated bindings to the WiFi driver (per chip)
  • src/compat/: code needed to emulate enough of an (RT)OS to use the driver
    • malloc.rs: a homegrown allocator - this is NOT used on the Rust side (the Rust side of this is currently no-alloc)
    • common.rs: basics like semaphores and recursive mutexes
    • timer_compat.rs: code to emulate timer related functionality
  • headers: headers found in the WiFi driver archive (bindings are generated from these)
  • libs/espXXX: static libraries found in the WiFi driver archive (these get linked into the binary)
  • mkbindings.bat: generate the bindings / just calls bindgen
  • ld/espXXX/rom_functions.x: the WiFi driver uses some of these so it needs to get linked
  • ld/esp32/wifi-link.x: the main linker script for ESP32 - needs to get cleaned up and ideally the changes move to ESP-HAL
  • examples/dhcp_espXXX/main.rs: example using the code (per chip)

Missing / To be done

  • lots of refactoring
  • Bluetooth (and coex)
  • esp-now
  • powersafe support

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Comments
  • Update embedded svc

    Update embedded svc

    This is based on the #82 branch, so until that's merged this is blocked. I only implemented the Wifi trait on the Wifi struct, but where should I implement the Interface trait. This contains the actual IP info, should I directly implement it into Wifi or should we change places into Network, what should we do with the poll_dhcp function then in Wifi

    Closes #83

    opened by ImUrX 22
  • Remove the embedded-nal / smoltcp-nal dependencies from `wifi_interface.rs` and esp-wifi

    Remove the embedded-nal / smoltcp-nal dependencies from `wifi_interface.rs` and esp-wifi

    While smoltcp itself has no alternative in the embedded world, I'm less than convinced that embedded-nal is the no-brainer for embedded networking: it still relies on the nb "async" approach, which is essentially just busylooping with constant polling of the networking layer. While this might have been the norm a few years ago, it is no more:

    • embedded-hal is moving away from nb in favor of the async-based traits
    • smoltcp itself has an async support and an async feature since quite some time, so it is very easy to bind it to an async executor of your choice, if you prefer so

    In my opinion:

    • We need to remove from esp-wifi all dependencies / reliance on embedded-nal / smoltcp-nal. This stuff is anyway a thin wrapper on top of the heavy lifting done by smoltcp itself
    • The Wifi struct can instead take directly the smoltcp IP interface, i.e. the "ethernet" var
    • This way, the create_network_stack utility will construct and return directly the smoltcp interface instead of the embedded-nal wrapper. Perhaps, we should rename the utility to create_network_interface or suchlike
    • The network_stack method of the Wifi struct should instead directly return the native smoltcp interface

    With that little surgery, users would be free to either use smoltcp-nal on top of the smoltcp interface returned by Wifi, or the smoltcp built-in async facilities, with an async executor of their choice.

    opened by ivmarkov 17
  • DHCP example fails to get an IP address on ESP32-C3

    DHCP example fails to get an IP address on ESP32-C3

    Hi, I tried running the DHCP example (commit a0a6b5fbcf7) on my esp32-c3-mini and it appears as though the code is racy. It fails to get an ip address, unless I do some random permutation of dump_packets, wifi_logs, and manually putting in for i in 1000 {} style loops.

    I'm working with @ImUrX and he also cannot get the example working on his PCB, although his is a lolin_c3_mini v1.0.0 (which may have hardware issues with wifi, so could be a red herring).

    If I use --release it works consistently.

    opened by TheButlah 16
  • dhcp_esp32c3 example fails to get an IP address when compiled in Release

    dhcp_esp32c3 example fails to get an IP address when compiled in Release

    When the dhcp_esp32c3 is ran in release it hangs at Start busy loop on main and never continues. This same dhcp_esp32c3 example gets an IP address from DHCP as expected for me when it's ran in debug.

    Related to #6?

    bug 
    opened by D1plo1d 16
  • Getting linking issues when using esp-wifi

    Getting linking issues when using esp-wifi

    I was adding esp32 support to my esp32c3 project and for some reason I'm getting linking issues when activating the esp-wifi feature I have. I honestly dont understand much so maybe I can get some help in here: This is the linking error and this is the project

    opened by ImUrX 10
  • Fix ESP32-C3 development mode

    Fix ESP32-C3 development mode

    This should address the issue reported in #88

    Additionally

    • updated embedded-io to 0.3.1
    • improve mkbindings.bat
    • don't report StaDisconnected as connected anymore
    opened by bjoernQ 8
  • Update drivers

    Update drivers

    This closes #52

    • update the drivers for ESP32 and ESP32-C3
    • improve the examples

    While this PR seems to be huge, it isn't. Most of the changes are in C headers and generated bindings.

    opened by bjoernQ 8
  • Swap out the current allocator for `esp-alloc`

    Swap out the current allocator for `esp-alloc`

    ~~This builds on #39, and as such cannot be merged until that PR is.~~

    This works on the ESP32-C3 without issue, however building for the ESP32 results in a linker error:

    error: linking with `xtensa-esp32-elf-gcc` failed: exit status: 1
      |
      = note: "xtensa-esp32-elf-gcc" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.0.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.1.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.10.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.11.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.12.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.13.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.14.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.15.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.2.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.3.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.4.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.5.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.6.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.7.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.8.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.dhcp_esp32.cb737b37-cgu.9.rcgu.o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b.iwnybrojg66ry1h.rcgu.o" "-Wl,--as-needed" "-L" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps" "-L" "/Users/jesse/Work/esp-wifi/target/release/deps" "-L" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/build/esp-wifi-4cf6e16cf3490c76/out" "-L" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/build/xtensa-lx-4a114887ea50d4c3/out" "-L" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/build/xtensa-lx-rt-ef310f0681dc9281/out" "-L" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/build/esp32-hal-981d4cfdf0ff5b85/out" "-L" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/build/esp32-5c76282a31736b6e/out" "-L" "/Users/jesse/.rustup/toolchains/esp/lib/rustlib/xtensa-esp32-none-elf/lib" "-Wl,-Bstatic" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libesp_wifi-fbe4abcbcf215b69.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libesp_alloc-c060953ba804a78a.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/liblinked_list_allocator-4ef263736359aad4.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libspinning_top-21c5f0355a2085be.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libsmoltcp-0bba41ed2db86d27.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libbitflags-2a9f9e706eec8442.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libmanaged-0f6b57e1625fcb7e.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libatomic_polyfill-bb467dab1e9b276f.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libcritical_section-36eac500ce94d399.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/liblog-ca5de0a110cc2fb9.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libesp_println-f12f43cb0797d101.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libesp32_hal-49cf89aa123eccd0.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libesp_hal_common-6d4f0442eb78b1f6.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libcritical_section-279312af61635534.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libcfg_if-778cc715c08c90dd.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libsmart_leds_trait-bf02318b2b258ba1.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/librgb-a61c6a77a5526a3b.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libbytemuck-95ec8e92ea41d238.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libxtensa_lx_rt-8f3e4a9df978c770.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libr0-27ef6ffbef74e8fa.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libfugit-f3d074f1f67858f7.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libgcd-aaa05ddbeaa2620a.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libesp32-7a9f161a7164ba4b.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libxtensa_lx-92fa6630c50fa721.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libspin-dc50f05a7a63865a.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/liblock_api-1b5268dfcd1bf4d3.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libscopeguard-4fd0099d2fa4a15e.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libmutex_trait-f357cef0832b190b.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libbare_metal-8c92058f831287bd.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libvcell-96a925c0101a1afe.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libembedded_hal-5849c01705429e94.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libvoid-e716c48010b93998.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libnb-7384b7c50b3fc834.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libnb-f671a0f55f07f463.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libembedded_svc-0c32aacbbd83c2a9.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libheapless-99bb4813e7ca9dec.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libhash32-23fe63db3bca42b9.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libbyteorder-3eec2d3701626149.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libserde-506dfce2d6d3eeca.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libno_std_net-c8aed46919778570.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libenumset-efb2872dc7c531a5.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libembedded_io-39243cccb0fb937d.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/liballoc-cab08ec8de2630a1.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/librustc_std_workspace_core-2bb66c92ab28eb50.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libcore-822e4434f606ddd3.rlib" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/deps/libcompiler_builtins-23011b67784957ef.rlib" "-Wl,-Bdynamic" "-lbtdm_app" "-lcoexist" "-lcore" "-lespnow" "-lmesh" "-lnet80211" "-lphy" "-lpp" "-lrtc" "-lsmartconfig" "-lwapi" "-lwpa_supplicant" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/Users/jesse/.rustup/toolchains/esp/lib/rustlib/xtensa-esp32-none-elf/lib" "-o" "/Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b" "-Wl,--gc-sections" "-no-pie" "-Wl,-O1" "-nodefaultlibs" "-Tlinkall.x" "-Tesp32_rom_functions.x"
      = note: /Users/jesse/.espressif/tools/xtensa-esp32-elf-gcc/8_4_0-esp-2021r2-patch3-x86_64-apple-darwin/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: /Users/jesse/Work/esp-wifi/target/xtensa-esp32-none-elf/release/examples/dhcp_esp32-db6b59f4ab95624b section `.bss' will not fit in region `dram_seg'
              /Users/jesse/.espressif/tools/xtensa-esp32-elf-gcc/8_4_0-esp-2021r2-patch3-x86_64-apple-darwin/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: region `dram_seg' overflowed by 35876 bytes
              collect2: error: ld returned 1 exit status
    

    Not sure why dram_seg is overflowing. Reducing the heap size allows it to build, but results in runtime errors instead.

    opened by jessebraham 8
  • Can't connect to any AP?

    Can't connect to any AP?

    I've been playing around trying to get this work. Scanning works perfectly, I can see a table of networks near me, but If I try to connect to any (I've tried 4 in total, on two different esp32c3's), the WiFi state never transitions to STA_CONNECTED. Judging by the logs below is transitions to STA_STOP.

    wifi_connect returned 0
    D (405) wifi:scan end: arg=0x0, status=0, ss_state=0x03
    V (405) wifi:hint scan, stop scan
    V (405) wifi:back home chan=<1,0>, current chan=<10,0>
    V (408) wifi:ht20 freq=2412, chan=1
    D (412) wifi:filter: set rx policy=4
    D (412) wifi:first chan=1
    V (416) wifi:scan_done: arg=0x0, status=0, cur_time=647416, scan_id=128, scan state=00
    V (423) wifi:call scan_done cb, arg=0x0
    D (427) wifi:handoff_cb: status=0
    D (431) wifi:clear rc list
    D (431) wifi:clear blacklist
    D (435) wifi:send disconnect event
    D (438) wifi:connect status 1 -> 3
    D (442) wifi:disable connect timer
    D (443) wifi:clear scan ap list
    

    Things I've tried

    • Different AP's
    • Different boards
    • Changing the country code in wifi_init

    I've sniffed the connect packed with my laptop in promiscuous mode and the packet seems normal.

    opened by MabezDev 6
  • Feature Request: UDP Sockets

    Feature Request: UDP Sockets

    I'm interested in using a esp32c3 to received UDP packets. I've been playing with the DHCP example and it looks like it is working quite well (kudos!) and I'm excited to use this more - is there any chance that UDP support is coming soon?

    opened by D1plo1d 5
  • Code fails to compile on latest `main`

    Code fails to compile on latest `main`

    Version: 69956d42d2ddf00dd7021e429ed815f982e35319 (latest main)

    Feature flags: "esp32c3", "wifi"

    I noticed that the crate patches esp32c3-hal, but that I am using esp32c3-hal = 0.2. Perhaps that could be why?

    Error:

    error[E0433]: failed to resolve: could not find `wifi_interface` in the crate root
       --> /Users/ryan.butler/.cargo/git/checkouts/esp-wifi-836f3b2af57fa847/69956d4/src/wifi/utils.rs:103:31
        |
    103 |     interface: RefCell<crate::wifi_interface::Wifi<'a>>,
        |                               ^^^^^^^^^^^^^^ could not find `wifi_interface` in the crate root
    
    error[E0433]: failed to resolve: could not find `wifi_interface` in the crate root
       --> /Users/ryan.butler/.cargo/git/checkouts/esp-wifi-836f3b2af57fa847/69956d4/src/wifi/utils.rs:110:27
        |
    110 |         interface: crate::wifi_interface::Wifi<'a>,
        |                           ^^^^^^^^^^^^^^ could not find `wifi_interface` in the crate root
    
    error[E0433]: failed to resolve: could not find `wifi_interface` in the crate root
       --> /Users/ryan.butler/.cargo/git/checkouts/esp-wifi-836f3b2af57fa847/69956d4/src/wifi/utils.rs:122:31
        |
    122 |         F: FnOnce(&mut crate::wifi_interface::Wifi<'a>) -> R,
        |                               ^^^^^^^^^^^^^^ could not find `wifi_interface` in the crate root
    
    error[E0392]: parameter `'a` is never used
       --> /Users/ryan.butler/.cargo/git/checkouts/esp-wifi-836f3b2af57fa847/69956d4/src/wifi/utils.rs:102:20
        |
    102 | pub struct Network<'a> {
        |                    ^^ unused parameter
        |
        = help: consider removing `'a`, referring to it in a field, or using a marker such as `PhantomData`
    
    error[E0392]: parameter `'n` is never used
       --> /Users/ryan.butler/.cargo/git/checkouts/esp-wifi-836f3b2af57fa847/69956d4/src/wifi/utils.rs:166:23
        |
    166 | pub struct Socket<'s, 'n: 's> {
        |                       ^^ unused parameter
        |
        = help: consider removing `'n`, referring to it in a field, or using a marker such as `PhantomData`
    
    Some errors have detailed explanations: E0392, E0433.
    For more information about an error, try `rustc --explain E0392`.
    error: could not compile `esp-wifi` due to 5 previous errors
    
    opened by TheButlah 4
  • BTLE for ESP32-S3

    BTLE for ESP32-S3

    • implements BTLE support for ESP32-S3
    • fixes #78 - not sure why not enabling the RWBLE interrupt fixes this but for me I haven't seen that assert triggered anymore
    • coex is implemented but only works in opt-level 1 (seems there are still mis-optimizations going on - no idea how to find out what the problem might be) ... that's why coex on ESP32-S3 isn't mentioned in the README
    opened by bjoernQ 1
  • Double Check Wrapping Behavior of Timers

    Double Check Wrapping Behavior of Timers

    Several functions include blocking behavior or generally deal with timers - double check them for the wrapping behavior of the timers Also note that the timers on different targets have different bit-widths

    opened by bjoernQ 0
  • Support async

    Support async

    Would be very nice. I haven't actually read a lot on how it should work. We would first need embedded-svc to implement an async trait which is nightly. But I see a lot of calls like scanning that could be async and it would be pretty nice to have that, I also see that smoltcp implements Wakers for their socket stuff, could we also have async sends and receives :astonished:?

    opened by ImUrX 3
  • Tracking Bluetooth Progress

    Tracking Bluetooth Progress

    I would like to keep this issue open to track progress towards fully working Bluetooth. Personally I am interested in seeing support for Bluetooth hid devices from the ESP32-S3.

    opened by PeterHindes 0
Owner
esp-rs
Libraries, crates and examples for using Rust on Espressif SoC's
esp-rs
Custom WiFi module and client for ALUTECH RTO-1000

Самодельный WiFI модуль для автоматики раздвижных ворот ALUTECH RTO-1000 Цель проекта Основная задача - автоматическое открывание ворот при приближени

null 3 Nov 25, 2024
A very basic show-case of rust on the esp32 in 2022

Readme This example code does the following: Set up a WiFi connection on the ESP32-C3 Spawn a thread using std::thread in which we listen for incoming

Mattia 13 Jan 19, 2023
Rust code for T-Display S3 AMOLED, ESP32-S3 board with RM67162 AMOLED display

T-Display S3 AMOLED What is it? This is a Rust BSP for the Lilygo's T-Display S3 AMOLED board. RM67162 AMOLED driver in QSPI mode RM67162 AMOLED drive

BH1XUW 4 Jun 28, 2023
Navigate in the world of ESP32 with easy. Tool for maintaining development environment.

ESP Helm Get all important information for Embedded Development with ESP32 and mainitain the development environment. Check out releases for binary ve

Juraj Michálek 4 Aug 7, 2023
A PoC for the CVE-2022-44268 - ImageMagick arbitrary file read

CVE-2022-44268 Arbitrary File Read PoC - PNG generator This is a proof of concept of the ImageMagick bug discovered by https://www.metabaseq.com/image

Cristian 'void' Giustini 100 Feb 19, 2023
Dragonfly, POC full-stack web app DSL

Dragonfly Dragonfly is a toy DSL that explores ways to describe the structure of full-stack web applications. You should not use it in production. For

Bas Dirks 9 Mar 15, 2023
[PoC] An all-in-one preview window for the furries

previuwu An all-in-one preview window for the furries. Uses egui to render the preview window. STATUS: Proof of Concept ( ⚠️ heavy work in progress).

Arijit Basu 9 Feb 10, 2023
Prompt Description Language [POC]

Prompt Description Language (V0.1.1 POC) Description PDL (Prompt Description Language) format provides an extensible way to describe the behavior and

Alex 192 Jun 5, 2023
WIP. Goals: Treesitter highlighting, snippets, and a smooth intergration with neovim.

typst.nvim WIP. Goals: Tree-sitter highlighting, snippets, and a smooth integration with neovim. For the past week, I've been thinking what I want for

SeniorMars 66 Apr 9, 2023
I2P SAMv3 library in Rust (WIP)

SOLITUDE (WIP) i2p SAMv3 library written in Rust for use in the EVA project. Examples Echo Server Creates a UDP service that returns and prints whatev

Syvita Guild 5 Feb 20, 2022
A minecraft clone made in Rust - WIP

unsafe {} A minecraft clone made in Rust. The world is infinite in all three directions. DISCLAIMER: Some textures are stolen from the chisel mod HEAV

Adam Harmansky 5 Jul 18, 2022
A command line interface for trash written in Rust (WIP)

trashctl A command line interface for trash Features Add file to trash List files Permanently delete a file Restore file Empty the trash Documentation

0xMRTT 2 Nov 11, 2022
WIP: Rust implementation of packs for ruby

packs WIP: Rust implementation of packs and packwerk for ruby Features It's entirely built in Rust, so it's really fast, and doesn't require any exter

Alex Evanczuk 9 Jun 7, 2023
🦀 A Pure Rust Framework For Building AGI (WIP).

?? AutoGPT ??️ (Recommended) ?? cargo install autogpt --all-features docker pull kevinrsdev/autogpt:0.0.1 autogpt-demo.mp4 AutoGPT is a pure rust fram

Kevin RS 10 May 4, 2024
A WIP property-based testing library in Rust, built with generalized targeted-property testing in mind.

Crabcheck A WIP property-based testing library in Rust, built with generalized targeted-property testing in mind. What is property-based testing? TODO

Alperen Keleş 9 Mar 27, 2024
WIP

What is that? AwesomeWM but oxidized and rewritten as Wayland Compositor Awesome-rs is supposed to replace (currently archived) project called way-coo

Bran 13 Oct 21, 2021
Command-line program to manage PS battle logs. WIP.

psbattletools psbattletools is a command-line tool written in Rust for manipulating Pokémon Showdown battle logs. Installation psbattletools currently

Annika 2 Dec 27, 2022
WIP GUI for NixOS documentation + configuration

nixos-druid Highly experimental GUI for NixOS. For now I expect to frequently make large changes and break stuff whenever I'm working on this. Screens

Sybrand Aarnoutse 6 Aug 23, 2022
[WIP] Store bookmarks to anything

Handyman - store bookmarks to anything Handyman Acronym's Noticeably Dumb, Yet Makes A Name The motivation Internet browsers have bookmarks. File mana

Mateusz Koteja 2 Nov 8, 2022