From 6f547cf05ddd1a27c8ec4e107ac227f7f9520ba6 Mon Sep 17 00:00:00 2001 From: kbleeke Date: Thu, 2 Mar 2023 15:34:08 +0100 Subject: asyncify outgoing events --- src/control.rs | 32 ++++++-------------------------- 1 file changed, 6 insertions(+), 26 deletions(-) (limited to 'src/control.rs') diff --git a/src/control.rs b/src/control.rs index 8bfa033ba..98f678fbc 100644 --- a/src/control.rs +++ b/src/control.rs @@ -1,8 +1,6 @@ -use core::cell::Cell; use core::cmp::{max, min}; use ch::driver::LinkState; -use embassy_futures::yield_now; use embassy_net_driver_channel as ch; use embassy_time::{Duration, Timer}; @@ -10,21 +8,18 @@ pub use crate::bus::SpiBusCyw43; use crate::consts::*; use crate::events::{Event, EventQueue}; use crate::fmt::Bytes; +use crate::ioctl::{IoctlState, IoctlType}; use crate::structs::*; -use crate::{countries, IoctlState, IoctlType, PowerManagementMode}; +use crate::{countries, PowerManagementMode}; pub struct Control<'a> { state_ch: ch::StateRunner<'a>, event_sub: &'a EventQueue, - ioctl_state: &'a Cell, + ioctl_state: &'a IoctlState, } impl<'a> Control<'a> { - pub(crate) fn new( - state_ch: ch::StateRunner<'a>, - event_sub: &'a EventQueue, - ioctl_state: &'a Cell, - ) -> Self { + pub(crate) fn new(state_ch: ch::StateRunner<'a>, event_sub: &'a EventQueue, ioctl_state: &'a IoctlState) -> Self { Self { state_ch, event_sub, @@ -278,23 +273,8 @@ impl<'a> Control<'a> { } async fn ioctl(&mut self, kind: IoctlType, cmd: u32, iface: u32, buf: &mut [u8]) -> usize { - // TODO cancel ioctl on future drop. - - while !matches!(self.ioctl_state.get(), IoctlState::Idle) { - yield_now().await; - } - - self.ioctl_state.set(IoctlState::Pending { kind, cmd, iface, buf }); - - let resp_len = loop { - if let IoctlState::Done { resp_len } = self.ioctl_state.get() { - break resp_len; - } - yield_now().await; - }; - - self.ioctl_state.set(IoctlState::Idle); - + self.ioctl_state.do_ioctl(kind, cmd, iface, buf).await; + let resp_len = self.ioctl_state.wait_complete().await; resp_len } } -- cgit