wpan: complete prelim. command impl.
This commit is contained in:
		
							parent
							
								
									899a68325c
								
							
						
					
					
						commit
						c675208b8a
					
				@ -1,5 +1,6 @@
 | 
				
			|||||||
use core::future::Future;
 | 
					use core::future::Future;
 | 
				
			||||||
use core::task;
 | 
					use core::task;
 | 
				
			||||||
 | 
					use core::task::Poll;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
 | 
					use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
 | 
				
			||||||
use embassy_sync::mutex::MutexGuard;
 | 
					use embassy_sync::mutex::MutexGuard;
 | 
				
			||||||
@ -7,6 +8,7 @@ use embassy_sync::signal::Signal;
 | 
				
			|||||||
use futures::FutureExt;
 | 
					use futures::FutureExt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use super::commands::MacCommand;
 | 
					use super::commands::MacCommand;
 | 
				
			||||||
 | 
					use super::event::MacEvent;
 | 
				
			||||||
use super::typedefs::MacError;
 | 
					use super::typedefs::MacError;
 | 
				
			||||||
use crate::mac::runner::Runner;
 | 
					use crate::mac::runner::Runner;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -62,10 +64,9 @@ impl<'a> EventToken<'a> {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> Future for EventToken<'a> {
 | 
					impl<'a> Future for EventToken<'a> {
 | 
				
			||||||
    // TODO: output something
 | 
					    type Output = MacEvent<'a>;
 | 
				
			||||||
    type Output = ();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn poll(self: core::pin::Pin<&mut Self>, cx: &mut task::Context<'_>) -> task::Poll<Self::Output> {
 | 
					    fn poll(self: core::pin::Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll<Self::Output> {
 | 
				
			||||||
        self.get_mut().runner.rx_event_channel.lock(|s| {
 | 
					        self.get_mut().runner.rx_event_channel.lock(|s| {
 | 
				
			||||||
            let signal = s.borrow_mut();
 | 
					            let signal = s.borrow_mut();
 | 
				
			||||||
            let signal = match &*signal {
 | 
					            let signal = match &*signal {
 | 
				
			||||||
@ -73,10 +74,13 @@ impl<'a> Future for EventToken<'a> {
 | 
				
			|||||||
                _ => unreachable!(),
 | 
					                _ => unreachable!(),
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let _ = signal.wait().poll_unpin(cx);
 | 
					            let result = match signal.wait().poll_unpin(cx) {
 | 
				
			||||||
        });
 | 
					                Poll::Ready(mac_event) => Poll::Ready(mac_event),
 | 
				
			||||||
 | 
					                Poll::Pending => Poll::Pending,
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        todo!()
 | 
					            result
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -13,12 +13,13 @@ use crate::mac::typedefs::{AddressMode, MacAddress, PanId, SecurityLevel};
 | 
				
			|||||||
use crate::mac::MTU;
 | 
					use crate::mac::MTU;
 | 
				
			||||||
use crate::sub::mac::Mac;
 | 
					use crate::sub::mac::Mac;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ZeroCopyPubSub<M, T> = blocking_mutex::Mutex<M, RefCell<Option<Signal<NoopRawMutex, T>>>>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Runner<'a> {
 | 
					pub struct Runner<'a> {
 | 
				
			||||||
    pub(crate) mac_subsystem: Mac,
 | 
					    pub(crate) mac_subsystem: Mac,
 | 
				
			||||||
 | 
					 | 
				
			||||||
    // rx event backpressure is already provided through the MacEvent drop mechanism
 | 
					    // rx event backpressure is already provided through the MacEvent drop mechanism
 | 
				
			||||||
    pub(crate) rx_event_channel:
 | 
					    // therefore, we don't need to worry about overwriting events
 | 
				
			||||||
        blocking_mutex::Mutex<CriticalSectionRawMutex, RefCell<Option<Signal<NoopRawMutex, MacEvent<'a>>>>>,
 | 
					    pub(crate) rx_event_channel: ZeroCopyPubSub<CriticalSectionRawMutex, MacEvent<'a>>,
 | 
				
			||||||
    pub(crate) read_mutex: Mutex<CriticalSectionRawMutex, ()>,
 | 
					    pub(crate) read_mutex: Mutex<CriticalSectionRawMutex, ()>,
 | 
				
			||||||
    pub(crate) write_mutex: Mutex<CriticalSectionRawMutex, ()>,
 | 
					    pub(crate) write_mutex: Mutex<CriticalSectionRawMutex, ()>,
 | 
				
			||||||
    pub(crate) rx_channel: Channel<CriticalSectionRawMutex, MacEvent<'a>, 1>,
 | 
					    pub(crate) rx_channel: Channel<CriticalSectionRawMutex, MacEvent<'a>, 1>,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user