aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cyw43/src/control.rs16
-rw-r--r--cyw43/src/ioctl.rs2
2 files changed, 13 insertions, 5 deletions
diff --git a/cyw43/src/control.rs b/cyw43/src/control.rs
index 48be772c0..97dcb4d09 100644
--- a/cyw43/src/control.rs
+++ b/cyw43/src/control.rs
@@ -481,7 +481,7 @@ impl<'a> Control<'a> {
481 } 481 }
482 482
483 async fn set_iovar_v<const BUFSIZE: usize>(&mut self, name: &str, val: &[u8]) { 483 async fn set_iovar_v<const BUFSIZE: usize>(&mut self, name: &str, val: &[u8]) {
484 debug!("set {} = {:02x}", name, Bytes(val)); 484 debug!("iovar set {} = {:02x}", name, Bytes(val));
485 485
486 let mut buf = [0; BUFSIZE]; 486 let mut buf = [0; BUFSIZE];
487 buf[..name.len()].copy_from_slice(name.as_bytes()); 487 buf[..name.len()].copy_from_slice(name.as_bytes());
@@ -489,13 +489,13 @@ impl<'a> Control<'a> {
489 buf[name.len() + 1..][..val.len()].copy_from_slice(val); 489 buf[name.len() + 1..][..val.len()].copy_from_slice(val);
490 490
491 let total_len = name.len() + 1 + val.len(); 491 let total_len = name.len() + 1 + val.len();
492 self.ioctl(IoctlType::Set, Ioctl::SetVar, 0, &mut buf[..total_len]) 492 self.ioctl_inner(IoctlType::Set, Ioctl::SetVar, 0, &mut buf[..total_len])
493 .await; 493 .await;
494 } 494 }
495 495
496 // TODO this is not really working, it always returns all zeros. 496 // TODO this is not really working, it always returns all zeros.
497 async fn get_iovar(&mut self, name: &str, res: &mut [u8]) -> usize { 497 async fn get_iovar(&mut self, name: &str, res: &mut [u8]) -> usize {
498 debug!("get {}", name); 498 debug!("iovar get {}", name);
499 499
500 let mut buf = [0; 64]; 500 let mut buf = [0; 64];
501 buf[..name.len()].copy_from_slice(name.as_bytes()); 501 buf[..name.len()].copy_from_slice(name.as_bytes());
@@ -503,7 +503,7 @@ impl<'a> Control<'a> {
503 503
504 let total_len = max(name.len() + 1, res.len()); 504 let total_len = max(name.len() + 1, res.len());
505 let res_len = self 505 let res_len = self
506 .ioctl(IoctlType::Get, Ioctl::GetVar, 0, &mut buf[..total_len]) 506 .ioctl_inner(IoctlType::Get, Ioctl::GetVar, 0, &mut buf[..total_len])
507 .await; 507 .await;
508 508
509 let out_len = min(res.len(), res_len); 509 let out_len = min(res.len(), res_len);
@@ -517,6 +517,14 @@ impl<'a> Control<'a> {
517 } 517 }
518 518
519 async fn ioctl(&mut self, kind: IoctlType, cmd: Ioctl, iface: u32, buf: &mut [u8]) -> usize { 519 async fn ioctl(&mut self, kind: IoctlType, cmd: Ioctl, iface: u32, buf: &mut [u8]) -> usize {
520 if kind == IoctlType::Set {
521 debug!("ioctl set {:?} iface {} = {:02x}", cmd, iface, Bytes(buf));
522 }
523 let n = self.ioctl_inner(kind, cmd, iface, buf).await;
524 n
525 }
526
527 async fn ioctl_inner(&mut self, kind: IoctlType, cmd: Ioctl, iface: u32, buf: &mut [u8]) -> usize {
520 struct CancelOnDrop<'a>(&'a IoctlState); 528 struct CancelOnDrop<'a>(&'a IoctlState);
521 529
522 impl CancelOnDrop<'_> { 530 impl CancelOnDrop<'_> {
diff --git a/cyw43/src/ioctl.rs b/cyw43/src/ioctl.rs
index 3186370cc..f8b2d9aba 100644
--- a/cyw43/src/ioctl.rs
+++ b/cyw43/src/ioctl.rs
@@ -7,7 +7,7 @@ use embassy_sync::waitqueue::WakerRegistration;
7use crate::consts::Ioctl; 7use crate::consts::Ioctl;
8use crate::fmt::Bytes; 8use crate::fmt::Bytes;
9 9
10#[derive(Clone, Copy)] 10#[derive(Clone, Copy, PartialEq, Eq)]
11pub enum IoctlType { 11pub enum IoctlType {
12 Get = 0, 12 Get = 0,
13 Set = 2, 13 Set = 2,