aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-net-driver-channel/src/lib.rs15
-rw-r--r--embassy-net-driver/src/lib.rs6
2 files changed, 21 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();
diff --git a/embassy-net-driver/src/lib.rs b/embassy-net-driver/src/lib.rs
index 09def20c4..beb1a1c79 100644
--- a/embassy-net-driver/src/lib.rs
+++ b/embassy-net-driver/src/lib.rs
@@ -53,6 +53,9 @@ pub trait Driver {
53 53
54 /// Get the device's Ethernet address. 54 /// Get the device's Ethernet address.
55 fn ethernet_address(&self) -> [u8; 6]; 55 fn ethernet_address(&self) -> [u8; 6];
56
57 /// Get the device's IEEE 802.15.4 address.
58 fn ieee802154_address(&self) -> [u8; 8];
56} 59}
57 60
58impl<T: ?Sized + Driver> Driver for &mut T { 61impl<T: ?Sized + Driver> Driver for &mut T {
@@ -78,6 +81,9 @@ impl<T: ?Sized + Driver> Driver for &mut T {
78 fn ethernet_address(&self) -> [u8; 6] { 81 fn ethernet_address(&self) -> [u8; 6] {
79 T::ethernet_address(self) 82 T::ethernet_address(self)
80 } 83 }
84 fn ieee802154_address(&self) -> [u8; 8] {
85 T::ieee802154_address(self)
86 }
81} 87}
82 88
83/// A token to receive a single network packet. 89/// A token to receive a single network packet.