aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Ickstadt <[email protected]>2023-01-13 12:08:25 -0600
committerMatt Ickstadt <[email protected]>2023-01-13 12:10:36 -0600
commit7ecb05ff77ba8cd87d87c1c6bc3b8c1a1624ad15 (patch)
treeeca67b5e9632a51f7c018e929d04a03811dbbf39
parentb0c8c688c7458785826c60a3afb05c3338d70427 (diff)
usb: allow setting the interface string for interface alt settings
-rw-r--r--embassy-usb/src/builder.rs19
-rw-r--r--embassy-usb/src/class/cdc_acm.rs4
-rw-r--r--embassy-usb/src/class/cdc_ncm/mod.rs6
-rw-r--r--embassy-usb/src/class/hid.rs2
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(