diff options
Diffstat (limited to 'embassy-net-driver-channel')
| -rw-r--r-- | embassy-net-driver-channel/src/lib.rs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/embassy-net-driver-channel/src/lib.rs b/embassy-net-driver-channel/src/lib.rs index 073edb41a..0c8dcc22b 100644 --- a/embassy-net-driver-channel/src/lib.rs +++ b/embassy-net-driver-channel/src/lib.rs | |||
| @@ -50,9 +50,13 @@ pub struct Runner<'d, const MTU: usize> { | |||
| 50 | shared: &'d Mutex<NoopRawMutex, RefCell<Shared>>, | 50 | shared: &'d Mutex<NoopRawMutex, RefCell<Shared>>, |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | #[derive(Clone, Copy)] | ||
| 54 | pub struct StateRunner<'d> { | ||
| 55 | shared: &'d Mutex<NoopRawMutex, RefCell<Shared>>, | ||
| 56 | } | ||
| 57 | |||
| 53 | pub struct RxRunner<'d, const MTU: usize> { | 58 | pub struct RxRunner<'d, const MTU: usize> { |
| 54 | rx_chan: zerocopy_channel::Sender<'d, NoopRawMutex, PacketBuf<MTU>>, | 59 | rx_chan: zerocopy_channel::Sender<'d, NoopRawMutex, PacketBuf<MTU>>, |
| 55 | shared: &'d Mutex<NoopRawMutex, RefCell<Shared>>, | ||
| 56 | } | 60 | } |
| 57 | 61 | ||
| 58 | pub struct TxRunner<'d, const MTU: usize> { | 62 | pub struct TxRunner<'d, const MTU: usize> { |
| @@ -60,16 +64,18 @@ pub struct TxRunner<'d, const MTU: usize> { | |||
| 60 | } | 64 | } |
| 61 | 65 | ||
| 62 | impl<'d, const MTU: usize> Runner<'d, MTU> { | 66 | impl<'d, const MTU: usize> Runner<'d, MTU> { |
| 63 | pub fn split(self) -> (RxRunner<'d, MTU>, TxRunner<'d, MTU>) { | 67 | pub fn split(self) -> (StateRunner<'d>, RxRunner<'d, MTU>, TxRunner<'d, MTU>) { |
| 64 | ( | 68 | ( |
| 65 | RxRunner { | 69 | StateRunner { shared: self.shared }, |
| 66 | shared: self.shared, | 70 | RxRunner { rx_chan: self.rx_chan }, |
| 67 | rx_chan: self.rx_chan, | ||
| 68 | }, | ||
| 69 | TxRunner { tx_chan: self.tx_chan }, | 71 | TxRunner { tx_chan: self.tx_chan }, |
| 70 | ) | 72 | ) |
| 71 | } | 73 | } |
| 72 | 74 | ||
| 75 | pub fn state_runner(&self) -> StateRunner<'d> { | ||
| 76 | StateRunner { shared: self.shared } | ||
| 77 | } | ||
| 78 | |||
| 73 | pub fn set_link_state(&mut self, state: LinkState) { | 79 | pub fn set_link_state(&mut self, state: LinkState) { |
| 74 | self.shared.lock(|s| { | 80 | self.shared.lock(|s| { |
| 75 | let s = &mut *s.borrow_mut(); | 81 | let s = &mut *s.borrow_mut(); |
| @@ -131,8 +137,8 @@ impl<'d, const MTU: usize> Runner<'d, MTU> { | |||
| 131 | } | 137 | } |
| 132 | } | 138 | } |
| 133 | 139 | ||
| 134 | impl<'d, const MTU: usize> RxRunner<'d, MTU> { | 140 | impl<'d> StateRunner<'d> { |
| 135 | pub fn set_link_state(&mut self, state: LinkState) { | 141 | pub fn set_link_state(&self, state: LinkState) { |
| 136 | self.shared.lock(|s| { | 142 | self.shared.lock(|s| { |
| 137 | let s = &mut *s.borrow_mut(); | 143 | let s = &mut *s.borrow_mut(); |
| 138 | s.link_state = state; | 144 | s.link_state = state; |
| @@ -140,14 +146,16 @@ impl<'d, const MTU: usize> RxRunner<'d, MTU> { | |||
| 140 | }); | 146 | }); |
| 141 | } | 147 | } |
| 142 | 148 | ||
| 143 | pub fn set_ethernet_address(&mut self, address: [u8; 6]) { | 149 | pub fn set_ethernet_address(&self, address: [u8; 6]) { |
| 144 | self.shared.lock(|s| { | 150 | self.shared.lock(|s| { |
| 145 | let s = &mut *s.borrow_mut(); | 151 | let s = &mut *s.borrow_mut(); |
| 146 | s.ethernet_address = address; | 152 | s.ethernet_address = address; |
| 147 | s.waker.wake(); | 153 | s.waker.wake(); |
| 148 | }); | 154 | }); |
| 149 | } | 155 | } |
| 156 | } | ||
| 150 | 157 | ||
| 158 | impl<'d, const MTU: usize> RxRunner<'d, MTU> { | ||
| 151 | pub async fn rx_buf(&mut self) -> &mut [u8] { | 159 | pub async fn rx_buf(&mut self) -> &mut [u8] { |
| 152 | let p = self.rx_chan.send().await; | 160 | let p = self.rx_chan.send().await; |
| 153 | &mut p.buf | 161 | &mut p.buf |
