diff options
Diffstat (limited to 'embassy-usb-ncm/src/lib.rs')
| -rw-r--r-- | embassy-usb-ncm/src/lib.rs | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/embassy-usb-ncm/src/lib.rs b/embassy-usb-ncm/src/lib.rs index 3a5abee8d..71d0691d4 100644 --- a/embassy-usb-ncm/src/lib.rs +++ b/embassy-usb-ncm/src/lib.rs | |||
| @@ -133,6 +133,7 @@ impl Default for ControlShared { | |||
| 133 | struct CommControl<'a> { | 133 | struct CommControl<'a> { |
| 134 | mac_addr_string: StringIndex, | 134 | mac_addr_string: StringIndex, |
| 135 | shared: &'a ControlShared, | 135 | shared: &'a ControlShared, |
| 136 | mac_addr_str: [u8; 12], | ||
| 136 | } | 137 | } |
| 137 | 138 | ||
| 138 | impl<'d> ControlHandler for CommControl<'d> { | 139 | impl<'d> ControlHandler for CommControl<'d> { |
| @@ -178,24 +179,20 @@ impl<'d> ControlHandler for CommControl<'d> { | |||
| 178 | } | 179 | } |
| 179 | } | 180 | } |
| 180 | 181 | ||
| 181 | fn get_string<'a>( | 182 | fn get_string(&mut self, index: StringIndex, _lang_id: u16) -> Option<&str> { |
| 182 | &'a mut self, | ||
| 183 | index: StringIndex, | ||
| 184 | _lang_id: u16, | ||
| 185 | buf: &'a mut [u8], | ||
| 186 | ) -> Option<&'a str> { | ||
| 187 | if index == self.mac_addr_string { | 183 | if index == self.mac_addr_string { |
| 188 | let mac_addr = self.shared.mac_addr.get(); | 184 | let mac_addr = self.shared.mac_addr.get(); |
| 185 | let s = &mut self.mac_addr_str; | ||
| 189 | for i in 0..12 { | 186 | for i in 0..12 { |
| 190 | let n = (mac_addr[i / 2] >> ((1 - i % 2) * 4)) & 0xF; | 187 | let n = (mac_addr[i / 2] >> ((1 - i % 2) * 4)) & 0xF; |
| 191 | buf[i] = match n { | 188 | s[i] = match n { |
| 192 | 0x0..=0x9 => b'0' + n, | 189 | 0x0..=0x9 => b'0' + n, |
| 193 | 0xA..=0xF => b'A' + n - 0xA, | 190 | 0xA..=0xF => b'A' + n - 0xA, |
| 194 | _ => unreachable!(), | 191 | _ => unreachable!(), |
| 195 | } | 192 | } |
| 196 | } | 193 | } |
| 197 | 194 | ||
| 198 | Some(unsafe { core::str::from_utf8_unchecked(&buf[..12]) }) | 195 | Some(unsafe { core::str::from_utf8_unchecked(s) }) |
| 199 | } else { | 196 | } else { |
| 200 | warn!("unknown string index requested"); | 197 | warn!("unknown string index requested"); |
| 201 | None | 198 | None |
| @@ -244,6 +241,7 @@ impl<'d, D: Driver<'d>> CdcNcmClass<'d, D> { | |||
| 244 | iface.handler(state.comm_control.write(CommControl { | 241 | iface.handler(state.comm_control.write(CommControl { |
| 245 | mac_addr_string, | 242 | mac_addr_string, |
| 246 | shared: &control_shared, | 243 | shared: &control_shared, |
| 244 | mac_addr_str: [0; 12], | ||
| 247 | })); | 245 | })); |
| 248 | let comm_if = iface.interface_number(); | 246 | let comm_if = iface.interface_number(); |
| 249 | let mut alt = iface.alt_setting(USB_CLASS_CDC, CDC_SUBCLASS_NCM, CDC_PROTOCOL_NONE); | 247 | let mut alt = iface.alt_setting(USB_CLASS_CDC, CDC_SUBCLASS_NCM, CDC_PROTOCOL_NONE); |
