aboutsummaryrefslogtreecommitdiff
path: root/embassy-usb-ncm
diff options
context:
space:
mode:
authorHenrik Alsér <[email protected]>2022-05-12 15:24:46 +0200
committerGitHub <[email protected]>2022-05-12 15:24:46 +0200
commit0be9184efc8f814a19081c2176b8317bd5217f0f (patch)
tree5b9469de15c0a1cc6e106a9a7455602e3bfaad17 /embassy-usb-ncm
parent1ca5475010a1cae6ebc55a27948ca4320decd5cd (diff)
parent30d4d0e9d78681e16a68ff953c61b96c9863bfc6 (diff)
Merge branch 'embassy-rs:master' into qdec
Diffstat (limited to 'embassy-usb-ncm')
-rw-r--r--embassy-usb-ncm/src/lib.rs14
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 {
133struct CommControl<'a> { 133struct 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
138impl<'d> ControlHandler for CommControl<'d> { 139impl<'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);