diff options
| -rw-r--r-- | embassy-usb/src/msos.rs | 4 | ||||
| -rw-r--r-- | examples/rp/src/bin/usb_webusb.rs | 11 |
2 files changed, 10 insertions, 5 deletions
diff --git a/embassy-usb/src/msos.rs b/embassy-usb/src/msos.rs index 66689871e..6d7f87061 100644 --- a/embassy-usb/src/msos.rs +++ b/embassy-usb/src/msos.rs | |||
| @@ -110,10 +110,6 @@ impl<'d> MsOsDescriptorWriter<'d> { | |||
| 110 | !self.is_empty(), | 110 | !self.is_empty(), |
| 111 | "device features may only be added after the header is written" | 111 | "device features may only be added after the header is written" |
| 112 | ); | 112 | ); |
| 113 | assert!( | ||
| 114 | self.config_mark.is_none(), | ||
| 115 | "device features must be added before the first configuration subset" | ||
| 116 | ); | ||
| 117 | self.write(desc); | 113 | self.write(desc); |
| 118 | } | 114 | } |
| 119 | 115 | ||
diff --git a/examples/rp/src/bin/usb_webusb.rs b/examples/rp/src/bin/usb_webusb.rs index 5cecb92f0..edc9a0c52 100644 --- a/examples/rp/src/bin/usb_webusb.rs +++ b/examples/rp/src/bin/usb_webusb.rs | |||
| @@ -26,6 +26,7 @@ use embassy_rp::usb::{Driver as UsbDriver, InterruptHandler}; | |||
| 26 | use embassy_usb::class::web_usb::{Config as WebUsbConfig, State, Url, WebUsb}; | 26 | use embassy_usb::class::web_usb::{Config as WebUsbConfig, State, Url, WebUsb}; |
| 27 | use embassy_usb::driver::{Driver, Endpoint, EndpointIn, EndpointOut}; | 27 | use embassy_usb::driver::{Driver, Endpoint, EndpointIn, EndpointOut}; |
| 28 | use embassy_usb::msos::{self, windows_version}; | 28 | use embassy_usb::msos::{self, windows_version}; |
| 29 | use embassy_usb::types::InterfaceNumber; | ||
| 29 | use embassy_usb::{Builder, Config}; | 30 | use embassy_usb::{Builder, Config}; |
| 30 | use {defmt_rtt as _, panic_probe as _}; | 31 | use {defmt_rtt as _, panic_probe as _}; |
| 31 | 32 | ||
| @@ -56,7 +57,7 @@ async fn main(_spawner: Spawner) { | |||
| 56 | let mut config_descriptor = [0; 256]; | 57 | let mut config_descriptor = [0; 256]; |
| 57 | let mut bos_descriptor = [0; 256]; | 58 | let mut bos_descriptor = [0; 256]; |
| 58 | let mut control_buf = [0; 64]; | 59 | let mut control_buf = [0; 64]; |
| 59 | let mut msos_descriptor = [0; 256]; | 60 | let mut msos_descriptor = [0; 512]; |
| 60 | 61 | ||
| 61 | let webusb_config = WebUsbConfig { | 62 | let webusb_config = WebUsbConfig { |
| 62 | max_packet_size: 64, | 63 | max_packet_size: 64, |
| @@ -83,6 +84,14 @@ async fn main(_spawner: Spawner) { | |||
| 83 | // In principle you might want to call msos_feature() just on a specific function, | 84 | // In principle you might want to call msos_feature() just on a specific function, |
| 84 | // if your device also has other functions that still use standard class drivers. | 85 | // if your device also has other functions that still use standard class drivers. |
| 85 | builder.msos_descriptor(windows_version::WIN8_1, 0); | 86 | builder.msos_descriptor(windows_version::WIN8_1, 0); |
| 87 | builder.msos_writer().configuration(0); | ||
| 88 | builder.msos_writer().function(InterfaceNumber(0)); | ||
| 89 | builder.msos_feature(msos::CompatibleIdFeatureDescriptor::new("WINUSB", "")); | ||
| 90 | builder.msos_feature(msos::RegistryPropertyFeatureDescriptor::new( | ||
| 91 | "DeviceInterfaceGUIDs", | ||
| 92 | msos::PropertyData::RegMultiSz(DEVICE_INTERFACE_GUIDS), | ||
| 93 | )); | ||
| 94 | builder.msos_writer().function(InterfaceNumber(1)); | ||
| 86 | builder.msos_feature(msos::CompatibleIdFeatureDescriptor::new("WINUSB", "")); | 95 | builder.msos_feature(msos::CompatibleIdFeatureDescriptor::new("WINUSB", "")); |
| 87 | builder.msos_feature(msos::RegistryPropertyFeatureDescriptor::new( | 96 | builder.msos_feature(msos::RegistryPropertyFeatureDescriptor::new( |
| 88 | "DeviceInterfaceGUIDs", | 97 | "DeviceInterfaceGUIDs", |
