diff options
| author | Ruben De Smet <[email protected]> | 2023-07-28 15:54:31 +0200 |
|---|---|---|
| committer | Ruben De Smet <[email protected]> | 2023-07-28 15:55:10 +0200 |
| commit | c52d1d11f92d58eaafada26a11ae9b4402e129a6 (patch) | |
| tree | eb01073c34e7f6295c91ae0e234ec7e413b81c3b /embassy-net-driver-channel/src/lib.rs | |
| parent | d752a3f9808ec9be64c720d3f80f152f0b7507df (diff) | |
Expose IEEE802.15.4 address in Driver
Diffstat (limited to 'embassy-net-driver-channel/src/lib.rs')
| -rw-r--r-- | embassy-net-driver-channel/src/lib.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/embassy-net-driver-channel/src/lib.rs b/embassy-net-driver-channel/src/lib.rs index 02a4c00d6..e101bf38a 100644 --- a/embassy-net-driver-channel/src/lib.rs +++ b/embassy-net-driver-channel/src/lib.rs | |||
| @@ -43,6 +43,7 @@ struct Shared { | |||
| 43 | link_state: LinkState, | 43 | link_state: LinkState, |
| 44 | waker: WakerRegistration, | 44 | waker: WakerRegistration, |
| 45 | ethernet_address: [u8; 6], | 45 | ethernet_address: [u8; 6], |
| 46 | ieee802154_address: [u8; 8], | ||
| 46 | } | 47 | } |
| 47 | 48 | ||
| 48 | pub struct Runner<'d, const MTU: usize> { | 49 | pub struct Runner<'d, const MTU: usize> { |
| @@ -93,6 +94,14 @@ impl<'d, const MTU: usize> Runner<'d, MTU> { | |||
| 93 | }); | 94 | }); |
| 94 | } | 95 | } |
| 95 | 96 | ||
| 97 | pub fn set_ieee802154_address(&mut self, address: [u8; 8]) { | ||
| 98 | self.shared.lock(|s| { | ||
| 99 | let s = &mut *s.borrow_mut(); | ||
| 100 | s.ieee802154_address = address; | ||
| 101 | s.waker.wake(); | ||
| 102 | }); | ||
| 103 | } | ||
| 104 | |||
| 96 | pub async fn rx_buf(&mut self) -> &mut [u8] { | 105 | pub async fn rx_buf(&mut self) -> &mut [u8] { |
| 97 | let p = self.rx_chan.send().await; | 106 | let p = self.rx_chan.send().await; |
| 98 | &mut p.buf | 107 | &mut p.buf |
| @@ -207,6 +216,7 @@ impl<'d, const MTU: usize> TxRunner<'d, MTU> { | |||
| 207 | pub fn new<'d, const MTU: usize, const N_RX: usize, const N_TX: usize>( | 216 | pub fn new<'d, const MTU: usize, const N_RX: usize, const N_TX: usize>( |
| 208 | state: &'d mut State<MTU, N_RX, N_TX>, | 217 | state: &'d mut State<MTU, N_RX, N_TX>, |
| 209 | ethernet_address: [u8; 6], | 218 | ethernet_address: [u8; 6], |
| 219 | ieee802154_address: [u8; 8], | ||
| 210 | ) -> (Runner<'d, MTU>, Device<'d, MTU>) { | 220 | ) -> (Runner<'d, MTU>, Device<'d, MTU>) { |
| 211 | let mut caps = Capabilities::default(); | 221 | let mut caps = Capabilities::default(); |
| 212 | caps.max_transmission_unit = MTU; | 222 | caps.max_transmission_unit = MTU; |
| @@ -223,6 +233,7 @@ pub fn new<'d, const MTU: usize, const N_RX: usize, const N_TX: usize>( | |||
| 223 | shared: Mutex::new(RefCell::new(Shared { | 233 | shared: Mutex::new(RefCell::new(Shared { |
| 224 | link_state: LinkState::Down, | 234 | link_state: LinkState::Down, |
| 225 | ethernet_address, | 235 | ethernet_address, |
| 236 | ieee802154_address, | ||
| 226 | waker: WakerRegistration::new(), | 237 | waker: WakerRegistration::new(), |
| 227 | })), | 238 | })), |
| 228 | }); | 239 | }); |
| @@ -293,6 +304,10 @@ impl<'d, const MTU: usize> embassy_net_driver::Driver for Device<'d, MTU> { | |||
| 293 | self.shared.lock(|s| s.borrow().ethernet_address) | 304 | self.shared.lock(|s| s.borrow().ethernet_address) |
| 294 | } | 305 | } |
| 295 | 306 | ||
| 307 | fn ieee802154_address(&self) -> [u8; 8] { | ||
| 308 | self.shared.lock(|s| s.borrow().ieee802154_address) | ||
| 309 | } | ||
| 310 | |||
| 296 | fn link_state(&mut self, cx: &mut Context) -> LinkState { | 311 | fn link_state(&mut self, cx: &mut Context) -> LinkState { |
| 297 | self.shared.lock(|s| { | 312 | self.shared.lock(|s| { |
| 298 | let s = &mut *s.borrow_mut(); | 313 | let s = &mut *s.borrow_mut(); |
