Expose IEEE802.15.4 address in Driver
This commit is contained in:
parent
d752a3f980
commit
c52d1d11f9
@ -43,6 +43,7 @@ struct Shared {
|
|||||||
link_state: LinkState,
|
link_state: LinkState,
|
||||||
waker: WakerRegistration,
|
waker: WakerRegistration,
|
||||||
ethernet_address: [u8; 6],
|
ethernet_address: [u8; 6],
|
||||||
|
ieee802154_address: [u8; 8],
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Runner<'d, const MTU: usize> {
|
pub struct Runner<'d, const MTU: usize> {
|
||||||
@ -93,6 +94,14 @@ impl<'d, const MTU: usize> Runner<'d, MTU> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_ieee802154_address(&mut self, address: [u8; 8]) {
|
||||||
|
self.shared.lock(|s| {
|
||||||
|
let s = &mut *s.borrow_mut();
|
||||||
|
s.ieee802154_address = address;
|
||||||
|
s.waker.wake();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn rx_buf(&mut self) -> &mut [u8] {
|
pub async fn rx_buf(&mut self) -> &mut [u8] {
|
||||||
let p = self.rx_chan.send().await;
|
let p = self.rx_chan.send().await;
|
||||||
&mut p.buf
|
&mut p.buf
|
||||||
@ -207,6 +216,7 @@ impl<'d, const MTU: usize> TxRunner<'d, MTU> {
|
|||||||
pub fn new<'d, const MTU: usize, const N_RX: usize, const N_TX: usize>(
|
pub fn new<'d, const MTU: usize, const N_RX: usize, const N_TX: usize>(
|
||||||
state: &'d mut State<MTU, N_RX, N_TX>,
|
state: &'d mut State<MTU, N_RX, N_TX>,
|
||||||
ethernet_address: [u8; 6],
|
ethernet_address: [u8; 6],
|
||||||
|
ieee802154_address: [u8; 8],
|
||||||
) -> (Runner<'d, MTU>, Device<'d, MTU>) {
|
) -> (Runner<'d, MTU>, Device<'d, MTU>) {
|
||||||
let mut caps = Capabilities::default();
|
let mut caps = Capabilities::default();
|
||||||
caps.max_transmission_unit = MTU;
|
caps.max_transmission_unit = MTU;
|
||||||
@ -223,6 +233,7 @@ pub fn new<'d, const MTU: usize, const N_RX: usize, const N_TX: usize>(
|
|||||||
shared: Mutex::new(RefCell::new(Shared {
|
shared: Mutex::new(RefCell::new(Shared {
|
||||||
link_state: LinkState::Down,
|
link_state: LinkState::Down,
|
||||||
ethernet_address,
|
ethernet_address,
|
||||||
|
ieee802154_address,
|
||||||
waker: WakerRegistration::new(),
|
waker: WakerRegistration::new(),
|
||||||
})),
|
})),
|
||||||
});
|
});
|
||||||
@ -293,6 +304,10 @@ impl<'d, const MTU: usize> embassy_net_driver::Driver for Device<'d, MTU> {
|
|||||||
self.shared.lock(|s| s.borrow().ethernet_address)
|
self.shared.lock(|s| s.borrow().ethernet_address)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn ieee802154_address(&self) -> [u8; 8] {
|
||||||
|
self.shared.lock(|s| s.borrow().ieee802154_address)
|
||||||
|
}
|
||||||
|
|
||||||
fn link_state(&mut self, cx: &mut Context) -> LinkState {
|
fn link_state(&mut self, cx: &mut Context) -> LinkState {
|
||||||
self.shared.lock(|s| {
|
self.shared.lock(|s| {
|
||||||
let s = &mut *s.borrow_mut();
|
let s = &mut *s.borrow_mut();
|
||||||
|
@ -53,6 +53,9 @@ pub trait Driver {
|
|||||||
|
|
||||||
/// Get the device's Ethernet address.
|
/// Get the device's Ethernet address.
|
||||||
fn ethernet_address(&self) -> [u8; 6];
|
fn ethernet_address(&self) -> [u8; 6];
|
||||||
|
|
||||||
|
/// Get the device's IEEE 802.15.4 address.
|
||||||
|
fn ieee802154_address(&self) -> [u8; 8];
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: ?Sized + Driver> Driver for &mut T {
|
impl<T: ?Sized + Driver> Driver for &mut T {
|
||||||
@ -78,6 +81,9 @@ impl<T: ?Sized + Driver> Driver for &mut T {
|
|||||||
fn ethernet_address(&self) -> [u8; 6] {
|
fn ethernet_address(&self) -> [u8; 6] {
|
||||||
T::ethernet_address(self)
|
T::ethernet_address(self)
|
||||||
}
|
}
|
||||||
|
fn ieee802154_address(&self) -> [u8; 8] {
|
||||||
|
T::ieee802154_address(self)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A token to receive a single network packet.
|
/// A token to receive a single network packet.
|
||||||
|
Loading…
Reference in New Issue
Block a user