From b16abb393b45316fe5a734386b1966336b590583 Mon Sep 17 00:00:00 2001 From: Nereuxofficial <37740907+Nereuxofficial@users.noreply.github.com> Date: Wed, 12 Apr 2023 11:07:24 +0200 Subject: [PATCH] Add wifi_set_mode for Wifi Protocol Support (#156) * Add set_mode * Revert unnecessary changes * Review changes * Removed unecessary change * Review changes, merge conflict fix --- esp-wifi/build.rs | 2 -- esp-wifi/src/wifi/mod.rs | 22 +++++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/esp-wifi/build.rs b/esp-wifi/build.rs index c0e491cb2a7..6b9bee17f21 100644 --- a/esp-wifi/build.rs +++ b/esp-wifi/build.rs @@ -18,8 +18,6 @@ fn main() -> Result<(), String> { .to_string(); println!("cargo:warning={}", message); } - - () } Err(_err) => (), } diff --git a/esp-wifi/src/wifi/mod.rs b/esp-wifi/src/wifi/mod.rs index 223b6d2dd7c..32b60a25c7e 100644 --- a/esp-wifi/src/wifi/mod.rs +++ b/esp-wifi/src/wifi/mod.rs @@ -7,7 +7,7 @@ use crate::common_adapter::*; use crate::esp_wifi_result; use critical_section::Mutex; -use embedded_svc::wifi::{AccessPointInfo, AuthMethod, SecondaryChannel}; +use embedded_svc::wifi::{AccessPointInfo, AuthMethod, Protocol, SecondaryChannel}; use enumset::EnumSet; use enumset::EnumSetType; use esp_hal_common::peripheral::Peripheral; @@ -29,6 +29,7 @@ use esp_wifi_sys::include::wifi_interface_t_WIFI_IF_AP; use esp_wifi_sys::include::wifi_mode_t_WIFI_MODE_AP; use esp_wifi_sys::include::wifi_mode_t_WIFI_MODE_APSTA; use esp_wifi_sys::include::wifi_mode_t_WIFI_MODE_NULL; +use esp_wifi_sys::include::esp_wifi_set_protocol; use num_derive::FromPrimitive; use num_traits::FromPrimitive; @@ -752,6 +753,25 @@ impl<'d> WifiController<'d> { Self { _device, config } } + /// Set the wifi mode. + /// This will set the wifi protocol to the desired protocol, the default for this is: + /// `WIFI_PROTOCOL_11B|WIFI_PROTOCOL_11G|WIFI_PROTOCOL_11N` + /// # Arguments: + /// * `protocol` - The desired protocol + /// # Example: + /// ``` + /// use embedded_svc::wifi::Protocol; + /// use esp_wifi::wifi::WifiController; + /// let mut wifi = WifiController::new(); + /// wifi.set_mode(Protocol::P802D11BGNLR); + /// ``` + pub fn set_mode(&mut self, protocol: Protocol) -> Result<(), WifiError> { + let mut mode = wifi_mode_t_WIFI_MODE_NULL; + esp_wifi_result!(unsafe { esp_wifi_get_mode(&mut mode) })?; + esp_wifi_result!(unsafe { esp_wifi_set_protocol(mode, protocol as u8) })?; + Ok(()) + } + fn is_sta_enabled(&self) -> Result { let mut mode: esp_wifi_sys::include::wifi_mode_t = 0; esp_wifi_result!(unsafe { esp_wifi_sys::include::esp_wifi_get_mode(&mut mode) })?;