diff options
Diffstat (limited to 'cyw43')
| -rw-r--r-- | cyw43/src/control.rs | 16 | ||||
| -rw-r--r-- | cyw43/src/ioctl.rs | 2 |
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; | |||
| 7 | use crate::consts::Ioctl; | 7 | use crate::consts::Ioctl; |
| 8 | use crate::fmt::Bytes; | 8 | use crate::fmt::Bytes; |
| 9 | 9 | ||
| 10 | #[derive(Clone, Copy)] | 10 | #[derive(Clone, Copy, PartialEq, Eq)] |
| 11 | pub enum IoctlType { | 11 | pub enum IoctlType { |
| 12 | Get = 0, | 12 | Get = 0, |
| 13 | Set = 2, | 13 | Set = 2, |
