aboutsummaryrefslogtreecommitdiff
path: root/embassy-net-driver-channel/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-net-driver-channel/src/lib.rs')
-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();