diff options
| -rw-r--r-- | embassy-usb-ncm/src/lib.rs | 16 |
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. |
| 4 | pub(crate) mod fmt; | 4 | pub(crate) mod fmt; |
| 5 | 5 | ||
| 6 | use core::cell::Cell; | ||
| 7 | use core::intrinsics::copy_nonoverlapping; | 6 | use core::intrinsics::copy_nonoverlapping; |
| 8 | use core::mem::{size_of, MaybeUninit}; | 7 | use core::mem::{size_of, MaybeUninit}; |
| 9 | use embassy_usb::control::{self, ControlHandler, InResponse, OutResponse, Request}; | 8 | use 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 |
| 121 | struct ControlShared { | 120 | struct ControlShared { |
| 122 | mac_addr: Cell<[u8; 6]>, | 121 | mac_addr: [u8; 6], |
| 123 | } | 122 | } |
| 124 | 123 | ||
| 125 | impl Default for ControlShared { | 124 | impl 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 | ||
