aboutsummaryrefslogtreecommitdiff
path: root/examples/boot/bootloader
diff options
context:
space:
mode:
Diffstat (limited to 'examples/boot/bootloader')
-rw-r--r--examples/boot/bootloader/stm32wb-dfu/src/main.rs17
1 files changed, 14 insertions, 3 deletions
diff --git a/examples/boot/bootloader/stm32wb-dfu/src/main.rs b/examples/boot/bootloader/stm32wb-dfu/src/main.rs
index 28216806e..0b643079f 100644
--- a/examples/boot/bootloader/stm32wb-dfu/src/main.rs
+++ b/examples/boot/bootloader/stm32wb-dfu/src/main.rs
@@ -20,7 +20,9 @@ bind_interrupts!(struct Irqs {
20 USB_LP => usb::InterruptHandler<peripherals::USB>; 20 USB_LP => usb::InterruptHandler<peripherals::USB>;
21}); 21});
22 22
23// This is a randomly generated GUID to allow clients on Windows to find our device 23// This is a randomly generated GUID to allow clients on Windows to find your device.
24//
25// N.B. update to a custom GUID for your own device!
24const DEVICE_INTERFACE_GUIDS: &[&str] = &["{EAA9A5DC-30BA-44BC-9232-606CDC875321}"]; 26const DEVICE_INTERFACE_GUIDS: &[&str] = &["{EAA9A5DC-30BA-44BC-9232-606CDC875321}"];
25 27
26#[entry] 28#[entry]
@@ -68,7 +70,8 @@ fn main() -> ! {
68 // We add MSOS headers so that the device automatically gets assigned the WinUSB driver on Windows. 70 // We add MSOS headers so that the device automatically gets assigned the WinUSB driver on Windows.
69 // Otherwise users need to do this manually using a tool like Zadig. 71 // Otherwise users need to do this manually using a tool like Zadig.
70 // 72 //
71 // It seems it is important for the DFU class that these headers be on the Device level. 73 // It seems these always need to be at added at the device level for this to work and for
74 // composite devices they also need to be added on the function level (as shown later).
72 // 75 //
73 builder.msos_descriptor(msos::windows_version::WIN8_1, 2); 76 builder.msos_descriptor(msos::windows_version::WIN8_1, 2);
74 builder.msos_feature(msos::CompatibleIdFeatureDescriptor::new("WINUSB", "")); 77 builder.msos_feature(msos::CompatibleIdFeatureDescriptor::new("WINUSB", ""));
@@ -77,7 +80,15 @@ fn main() -> ! {
77 msos::PropertyData::RegMultiSz(DEVICE_INTERFACE_GUIDS), 80 msos::PropertyData::RegMultiSz(DEVICE_INTERFACE_GUIDS),
78 )); 81 ));
79 82
80 usb_dfu::<_, _, _, _, 4096>(&mut builder, &mut state); 83 usb_dfu::<_, _, _, _, 4096>(&mut builder, &mut state, |func| {
84 // You likely don't have to add these function level headers if your USB device is not composite
85 // (i.e. if your device does not expose another interface in addition to DFU)
86 func.msos_feature(msos::CompatibleIdFeatureDescriptor::new("WINUSB", ""));
87 func.msos_feature(msos::RegistryPropertyFeatureDescriptor::new(
88 "DeviceInterfaceGUIDs",
89 msos::PropertyData::RegMultiSz(DEVICE_INTERFACE_GUIDS),
90 ));
91 });
81 92
82 let mut dev = builder.build(); 93 let mut dev = builder.build();
83 embassy_futures::block_on(dev.run()); 94 embassy_futures::block_on(dev.run());