aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-usb-ncm/src/lib.rs16
1 files changed, 6 insertions, 10 deletions
diff --git a/embassy-usb-ncm/src/lib.rs b/embassy-usb-ncm/src/lib.rs
index 71d0691d4..70870d51a 100644
--- a/embassy-usb-ncm/src/lib.rs
+++ b/embassy-usb-ncm/src/lib.rs
@@ -3,7 +3,6 @@
3// This mod MUST go first, so that the others see its macros. 3// This mod MUST go first, so that the others see its macros.
4pub(crate) mod fmt; 4pub(crate) mod fmt;
5 5
6use core::cell::Cell;
7use core::intrinsics::copy_nonoverlapping; 6use core::intrinsics::copy_nonoverlapping;
8use core::mem::{size_of, MaybeUninit}; 7use core::mem::{size_of, MaybeUninit};
9use embassy_usb::control::{self, ControlHandler, InResponse, OutResponse, Request}; 8use embassy_usb::control::{self, ControlHandler, InResponse, OutResponse, Request};
@@ -119,14 +118,12 @@ impl<'a> State<'a> {
119 118
120/// Shared data between Control and CdcAcmClass 119/// Shared data between Control and CdcAcmClass
121struct ControlShared { 120struct ControlShared {
122 mac_addr: Cell<[u8; 6]>, 121 mac_addr: [u8; 6],
123} 122}
124 123
125impl Default for ControlShared { 124impl Default for ControlShared {
126 fn default() -> Self { 125 fn default() -> Self {
127 ControlShared { 126 ControlShared { mac_addr: [0; 6] }
128 mac_addr: Cell::new([0; 6]),
129 }
130 } 127 }
131} 128}
132 129
@@ -181,7 +178,7 @@ impl<'d> ControlHandler for CommControl<'d> {
181 178
182 fn get_string(&mut self, index: StringIndex, _lang_id: u16) -> Option<&str> { 179 fn get_string(&mut self, index: StringIndex, _lang_id: u16) -> Option<&str> {
183 if index == self.mac_addr_string { 180 if index == self.mac_addr_string {
184 let mac_addr = self.shared.mac_addr.get(); 181 let mac_addr = self.shared.mac_addr;
185 let s = &mut self.mac_addr_str; 182 let s = &mut self.mac_addr_str;
186 for i in 0..12 { 183 for i in 0..12 {
187 let n = (mac_addr[i / 2] >> ((1 - i % 2) * 4)) & 0xF; 184 let n = (mac_addr[i / 2] >> ((1 - i % 2) * 4)) & 0xF;
@@ -230,8 +227,7 @@ impl<'d, D: Driver<'d>> CdcNcmClass<'d, D> {
230 mac_address: [u8; 6], 227 mac_address: [u8; 6],
231 max_packet_size: u16, 228 max_packet_size: u16,
232 ) -> Self { 229 ) -> Self {
233 let control_shared = &state.shared; 230 state.shared.mac_addr = mac_address;
234 control_shared.mac_addr.set(mac_address);
235 231
236 let mut func = builder.function(USB_CLASS_CDC, CDC_SUBCLASS_NCM, CDC_PROTOCOL_NONE); 232 let mut func = builder.function(USB_CLASS_CDC, CDC_SUBCLASS_NCM, CDC_PROTOCOL_NONE);
237 233
@@ -240,7 +236,7 @@ impl<'d, D: Driver<'d>> CdcNcmClass<'d, D> {
240 let mac_addr_string = iface.string(); 236 let mac_addr_string = iface.string();
241 iface.handler(state.comm_control.write(CommControl { 237 iface.handler(state.comm_control.write(CommControl {
242 mac_addr_string, 238 mac_addr_string,
243 shared: &control_shared, 239 shared: &state.shared,
244 mac_addr_str: [0; 12], 240 mac_addr_str: [0; 12],
245 })); 241 }));
246 let comm_if = iface.interface_number(); 242 let comm_if = iface.interface_number();
@@ -305,7 +301,7 @@ impl<'d, D: Driver<'d>> CdcNcmClass<'d, D> {
305 data_if, 301 data_if,
306 read_ep, 302 read_ep,
307 write_ep, 303 write_ep,
308 _control: control_shared, 304 _control: &state.shared,
309 } 305 }
310 } 306 }
311 307