diff options
| author | Matt Ickstadt <[email protected]> | 2023-01-13 12:08:25 -0600 |
|---|---|---|
| committer | Matt Ickstadt <[email protected]> | 2023-01-13 12:10:36 -0600 |
| commit | 7ecb05ff77ba8cd87d87c1c6bc3b8c1a1624ad15 (patch) | |
| tree | eca67b5e9632a51f7c018e929d04a03811dbbf39 | |
| parent | b0c8c688c7458785826c60a3afb05c3338d70427 (diff) | |
usb: allow setting the interface string for interface alt settings
| -rw-r--r-- | embassy-usb/src/builder.rs | 19 | ||||
| -rw-r--r-- | embassy-usb/src/class/cdc_acm.rs | 4 | ||||
| -rw-r--r-- | embassy-usb/src/class/cdc_ncm/mod.rs | 6 | ||||
| -rw-r--r-- | embassy-usb/src/class/hid.rs | 2 |
4 files changed, 21 insertions, 10 deletions
diff --git a/embassy-usb/src/builder.rs b/embassy-usb/src/builder.rs index 87a8333bb..785dc6f87 100644 --- a/embassy-usb/src/builder.rs +++ b/embassy-usb/src/builder.rs | |||
| @@ -306,14 +306,25 @@ impl<'a, 'd, D: Driver<'d>> InterfaceBuilder<'a, 'd, D> { | |||
| 306 | /// Alternate setting numbers are guaranteed to be allocated consecutively, starting from 0. | 306 | /// Alternate setting numbers are guaranteed to be allocated consecutively, starting from 0. |
| 307 | /// | 307 | /// |
| 308 | /// The first alternate setting, with number 0, is the default one. | 308 | /// The first alternate setting, with number 0, is the default one. |
| 309 | pub fn alt_setting(&mut self, class: u8, subclass: u8, protocol: u8) -> InterfaceAltBuilder<'_, 'd, D> { | 309 | pub fn alt_setting( |
| 310 | &mut self, | ||
| 311 | class: u8, | ||
| 312 | subclass: u8, | ||
| 313 | protocol: u8, | ||
| 314 | interface_string: Option<StringIndex>, | ||
| 315 | ) -> InterfaceAltBuilder<'_, 'd, D> { | ||
| 310 | let number = self.next_alt_setting_number; | 316 | let number = self.next_alt_setting_number; |
| 311 | self.next_alt_setting_number += 1; | 317 | self.next_alt_setting_number += 1; |
| 312 | self.builder.interfaces[self.interface_number.0 as usize].num_alt_settings += 1; | 318 | self.builder.interfaces[self.interface_number.0 as usize].num_alt_settings += 1; |
| 313 | 319 | ||
| 314 | self.builder | 320 | self.builder.config_descriptor.interface_alt( |
| 315 | .config_descriptor | 321 | self.interface_number, |
| 316 | .interface_alt(self.interface_number, number, class, subclass, protocol, None); | 322 | number, |
| 323 | class, | ||
| 324 | subclass, | ||
| 325 | protocol, | ||
| 326 | interface_string, | ||
| 327 | ); | ||
| 317 | 328 | ||
| 318 | InterfaceAltBuilder { | 329 | InterfaceAltBuilder { |
| 319 | builder: self.builder, | 330 | builder: self.builder, |
diff --git a/embassy-usb/src/class/cdc_acm.rs b/embassy-usb/src/class/cdc_acm.rs index 84db20621..09d7f774d 100644 --- a/embassy-usb/src/class/cdc_acm.rs +++ b/embassy-usb/src/class/cdc_acm.rs | |||
| @@ -171,7 +171,7 @@ impl<'d, D: Driver<'d>> CdcAcmClass<'d, D> { | |||
| 171 | iface.handler(control); | 171 | iface.handler(control); |
| 172 | let comm_if = iface.interface_number(); | 172 | let comm_if = iface.interface_number(); |
| 173 | let data_if = u8::from(comm_if) + 1; | 173 | let data_if = u8::from(comm_if) + 1; |
| 174 | let mut alt = iface.alt_setting(USB_CLASS_CDC, CDC_SUBCLASS_ACM, CDC_PROTOCOL_NONE); | 174 | let mut alt = iface.alt_setting(USB_CLASS_CDC, CDC_SUBCLASS_ACM, CDC_PROTOCOL_NONE, None); |
| 175 | 175 | ||
| 176 | alt.descriptor( | 176 | alt.descriptor( |
| 177 | CS_INTERFACE, | 177 | CS_INTERFACE, |
| @@ -205,7 +205,7 @@ impl<'d, D: Driver<'d>> CdcAcmClass<'d, D> { | |||
| 205 | // Data interface | 205 | // Data interface |
| 206 | let mut iface = func.interface(); | 206 | let mut iface = func.interface(); |
| 207 | let data_if = iface.interface_number(); | 207 | let data_if = iface.interface_number(); |
| 208 | let mut alt = iface.alt_setting(USB_CLASS_CDC_DATA, 0x00, CDC_PROTOCOL_NONE); | 208 | let mut alt = iface.alt_setting(USB_CLASS_CDC_DATA, 0x00, CDC_PROTOCOL_NONE, None); |
| 209 | let read_ep = alt.endpoint_bulk_out(max_packet_size); | 209 | let read_ep = alt.endpoint_bulk_out(max_packet_size); |
| 210 | let write_ep = alt.endpoint_bulk_in(max_packet_size); | 210 | let write_ep = alt.endpoint_bulk_in(max_packet_size); |
| 211 | 211 | ||
diff --git a/embassy-usb/src/class/cdc_ncm/mod.rs b/embassy-usb/src/class/cdc_ncm/mod.rs index 4954a65bc..d946eb113 100644 --- a/embassy-usb/src/class/cdc_ncm/mod.rs +++ b/embassy-usb/src/class/cdc_ncm/mod.rs | |||
| @@ -254,7 +254,7 @@ impl<'d, D: Driver<'d>> CdcNcmClass<'d, D> { | |||
| 254 | mac_addr_str: [0; 12], | 254 | mac_addr_str: [0; 12], |
| 255 | })); | 255 | })); |
| 256 | let comm_if = iface.interface_number(); | 256 | let comm_if = iface.interface_number(); |
| 257 | let mut alt = iface.alt_setting(USB_CLASS_CDC, CDC_SUBCLASS_NCM, CDC_PROTOCOL_NONE); | 257 | let mut alt = iface.alt_setting(USB_CLASS_CDC, CDC_SUBCLASS_NCM, CDC_PROTOCOL_NONE, None); |
| 258 | 258 | ||
| 259 | alt.descriptor( | 259 | alt.descriptor( |
| 260 | CS_INTERFACE, | 260 | CS_INTERFACE, |
| @@ -304,8 +304,8 @@ impl<'d, D: Driver<'d>> CdcNcmClass<'d, D> { | |||
| 304 | let mut iface = func.interface(); | 304 | let mut iface = func.interface(); |
| 305 | iface.handler(state.data_control.write(DataControl {})); | 305 | iface.handler(state.data_control.write(DataControl {})); |
| 306 | let data_if = iface.interface_number(); | 306 | let data_if = iface.interface_number(); |
| 307 | let _alt = iface.alt_setting(USB_CLASS_CDC_DATA, 0x00, CDC_PROTOCOL_NTB); | 307 | let _alt = iface.alt_setting(USB_CLASS_CDC_DATA, 0x00, CDC_PROTOCOL_NTB, None); |
| 308 | let mut alt = iface.alt_setting(USB_CLASS_CDC_DATA, 0x00, CDC_PROTOCOL_NTB); | 308 | let mut alt = iface.alt_setting(USB_CLASS_CDC_DATA, 0x00, CDC_PROTOCOL_NTB, None); |
| 309 | let read_ep = alt.endpoint_bulk_out(max_packet_size); | 309 | let read_ep = alt.endpoint_bulk_out(max_packet_size); |
| 310 | let write_ep = alt.endpoint_bulk_in(max_packet_size); | 310 | let write_ep = alt.endpoint_bulk_in(max_packet_size); |
| 311 | 311 | ||
diff --git a/embassy-usb/src/class/hid.rs b/embassy-usb/src/class/hid.rs index b967aba0e..12e49b7de 100644 --- a/embassy-usb/src/class/hid.rs +++ b/embassy-usb/src/class/hid.rs | |||
| @@ -101,7 +101,7 @@ fn build<'d, D: Driver<'d>>( | |||
| 101 | let mut func = builder.function(USB_CLASS_HID, USB_SUBCLASS_NONE, USB_PROTOCOL_NONE); | 101 | let mut func = builder.function(USB_CLASS_HID, USB_SUBCLASS_NONE, USB_PROTOCOL_NONE); |
| 102 | let mut iface = func.interface(); | 102 | let mut iface = func.interface(); |
| 103 | iface.handler(control); | 103 | iface.handler(control); |
| 104 | let mut alt = iface.alt_setting(USB_CLASS_HID, USB_SUBCLASS_NONE, USB_PROTOCOL_NONE); | 104 | let mut alt = iface.alt_setting(USB_CLASS_HID, USB_SUBCLASS_NONE, USB_PROTOCOL_NONE, None); |
| 105 | 105 | ||
| 106 | // HID descriptor | 106 | // HID descriptor |
| 107 | alt.descriptor( | 107 | alt.descriptor( |
