aboutsummaryrefslogtreecommitdiff
path: root/embassy-net-driver-channel
diff options
context:
space:
mode:
authorRuben De Smet <[email protected]>2023-07-28 15:54:31 +0200
committerRuben De Smet <[email protected]>2023-07-28 15:55:10 +0200
commitc52d1d11f92d58eaafada26a11ae9b4402e129a6 (patch)
treeeb01073c34e7f6295c91ae0e234ec7e413b81c3b /embassy-net-driver-channel
parentd752a3f9808ec9be64c720d3f80f152f0b7507df (diff)
Expose IEEE802.15.4 address in Driver
Diffstat (limited to 'embassy-net-driver-channel')
-rw-r--r--embassy-net-driver-channel/src/lib.rs15
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
48pub struct Runner<'d, const MTU: usize> { 49pub 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> {
207pub fn new<'d, const MTU: usize, const N_RX: usize, const N_TX: usize>( 216pub 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();