Skip to content

Commit

Permalink
more code improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
thetek42 committed Dec 21, 2023
1 parent 1256108 commit 9e36569
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 98 deletions.
17 changes: 8 additions & 9 deletions examples/wps.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use embedded_svc::wifi::{AuthMethod, ClientConfiguration, Configuration};
use esp_idf_svc::hal::prelude::Peripherals;
use esp_idf_svc::log::EspLogger;
use esp_idf_svc::wifi::{BlockingWifi, EspWifi};
use esp_idf_svc::wifi::{WpsConfig, WpsEvent, WpsFactoryInfo, WpsType};
use esp_idf_svc::wifi::{WpsConfig, WpsFactoryInfo, WpsStatus, WpsType};
use esp_idf_svc::{eventloop::EspSystemEventLoop, nvs::EspDefaultNvsPartition};

use log::info;
Expand Down Expand Up @@ -37,11 +37,10 @@ fn main() -> anyhow::Result<()> {
info!("Wifi started");

match wifi.start_wps(&WPS_CONFIG)? {
WpsEvent::Active => anyhow::bail!("invalid WPS response"),
WpsEvent::Success(None) => (), // credentials only received for one network, configuration will be set automatically
WpsEvent::Success(Some(credentials)) => {
WpsStatus::SuccessConnected => (),
WpsStatus::SuccessMultipleAccessPoints(credentials) => {
log::info!("received multiple credentials, connecting to first one:");
for i in credentials.as_ref() {
for i in &credentials {
log::info!(" - ssid: {}", i.ssid);
}
let wifi_configuration: Configuration = Configuration::Client(ClientConfiguration {
Expand All @@ -53,10 +52,10 @@ fn main() -> anyhow::Result<()> {
});
wifi.set_configuration(&wifi_configuration)?;
}
WpsEvent::Failure => anyhow::bail!("WPS failure"),
WpsEvent::Timeout => anyhow::bail!("WPS timeout"),
WpsEvent::Pin(_) => anyhow::bail!("WPS pin"),
WpsEvent::PbcOverlap => anyhow::bail!("WPS PBC overlap"),
WpsStatus::Failure => anyhow::bail!("WPS failure"),
WpsStatus::Timeout => anyhow::bail!("WPS timeout"),
WpsStatus::Pin(_) => anyhow::bail!("WPS pin"),
WpsStatus::PbcOverlap => anyhow::bail!("WPS PBC overlap"),
}

match wifi.get_configuration()? {
Expand Down
17 changes: 8 additions & 9 deletions examples/wps_async.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use esp_idf_svc::hal::prelude::Peripherals;
use esp_idf_svc::log::EspLogger;
use esp_idf_svc::timer::EspTaskTimerService;
use esp_idf_svc::wifi::{AsyncWifi, EspWifi};
use esp_idf_svc::wifi::{WpsConfig, WpsEvent, WpsFactoryInfo, WpsType};
use esp_idf_svc::wifi::{WpsConfig, WpsFactoryInfo, WpsStatus, WpsType};
use esp_idf_svc::{eventloop::EspSystemEventLoop, nvs::EspDefaultNvsPartition};

use futures::executor::block_on;
Expand Down Expand Up @@ -55,11 +55,10 @@ async fn connect_wps(wifi: &mut AsyncWifi<EspWifi<'static>>) -> anyhow::Result<(
info!("Wifi started");

match wifi.start_wps(&WPS_CONFIG).await? {
WpsEvent::Active => anyhow::bail!("invalid WPS response"),
WpsEvent::Success(None) => (), // credentials only received for one network, configuration will be set automatically
WpsEvent::Success(Some(credentials)) => {
WpsStatus::SuccessConnected => (),
WpsStatus::SuccessMultipleAccessPoints(credentials) => {
log::info!("received multiple credentials, connecting to first one:");
for i in credentials.as_ref() {
for i in &credentials {
log::info!(" - ssid: {}", i.ssid);
}
let wifi_configuration: Configuration = Configuration::Client(ClientConfiguration {
Expand All @@ -71,10 +70,10 @@ async fn connect_wps(wifi: &mut AsyncWifi<EspWifi<'static>>) -> anyhow::Result<(
});
wifi.set_configuration(&wifi_configuration)?;
}
WpsEvent::Failure => anyhow::bail!("WPS failure"),
WpsEvent::Timeout => anyhow::bail!("WPS timeout"),
WpsEvent::Pin(_) => anyhow::bail!("WPS pin"),
WpsEvent::PbcOverlap => anyhow::bail!("WPS PBC overlap"),
WpsStatus::Failure => anyhow::bail!("WPS failure"),
WpsStatus::Timeout => anyhow::bail!("WPS timeout"),
WpsStatus::Pin(_) => anyhow::bail!("WPS pin"),
WpsStatus::PbcOverlap => anyhow::bail!("WPS PBC overlap"),
}

match wifi.get_configuration()? {
Expand Down
21 changes: 9 additions & 12 deletions src/private/cstr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,21 @@ use core::str::Utf8Error;

use crate::sys::{EspError, ESP_ERR_INVALID_SIZE};

#[cfg(feature = "alloc")]
pub fn set_str(buf: &mut [u8], s: &str) -> Result<(), EspError> {
assert!(s.len() < buf.len());
let cs = to_cstring_arg(s)?;
let ss: &[u8] = cs.as_bytes_with_nul();
buf[..ss.len()].copy_from_slice(ss);
if s.len() >= buf.len() {
return Err(EspError::from_infallible::<ESP_ERR_INVALID_SIZE>());
}

buf[..s.len()].copy_from_slice(s.as_bytes());
buf[s.len()] = 0;

Ok(())
}

pub fn set_cchar_slice(buf: &mut [c_char], s: &str) -> Result<(), EspError> {
if s.len() > buf.len() {
return Err(EspError::from_infallible::<ESP_ERR_INVALID_SIZE>());
}
let s_cchar = unsafe { s.as_bytes().as_ptr() as *const c_char };
let s_slice = unsafe { core::slice::from_raw_parts(s_cchar, s.len()) };
buf[..s.len()].copy_from_slice(s_slice);
Ok(())
let buf_ptr = unsafe { buf.as_mut_ptr() as *mut u8 };
let buf_slice = unsafe { core::slice::from_raw_parts_mut(buf_ptr, buf.len()) };
set_str(buf_slice, s)
}

pub unsafe fn from_cstr_ptr<'a>(ptr: *const c_char) -> &'a str {
Expand Down
Loading

0 comments on commit 9e36569

Please sign in to comment.