diff options
Diffstat (limited to 'embassy-usb-dfu/src/dfu.rs')
| -rw-r--r-- | embassy-usb-dfu/src/dfu.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/embassy-usb-dfu/src/dfu.rs b/embassy-usb-dfu/src/dfu.rs index a98d6ab40..0f39d906b 100644 --- a/embassy-usb-dfu/src/dfu.rs +++ b/embassy-usb-dfu/src/dfu.rs | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | use embassy_boot::{AlignedBuffer, BlockingFirmwareUpdater, FirmwareUpdaterError}; | 1 | use embassy_boot::{AlignedBuffer, BlockingFirmwareUpdater, FirmwareUpdaterError}; |
| 2 | use embassy_usb::control::{InResponse, OutResponse, Recipient, RequestType}; | 2 | use embassy_usb::control::{InResponse, OutResponse, Recipient, RequestType}; |
| 3 | use embassy_usb::driver::Driver; | 3 | use embassy_usb::driver::Driver; |
| 4 | use embassy_usb::{Builder, Handler}; | 4 | use embassy_usb::{Builder, FunctionBuilder, Handler}; |
| 5 | use embedded_storage::nor_flash::{NorFlash, NorFlashErrorKind}; | 5 | use embedded_storage::nor_flash::{NorFlash, NorFlashErrorKind}; |
| 6 | 6 | ||
| 7 | use crate::consts::{ | 7 | use crate::consts::{ |
| @@ -186,8 +186,14 @@ impl<'d, DFU: NorFlash, STATE: NorFlash, RST: Reset, const BLOCK_SIZE: usize> Ha | |||
| 186 | pub fn usb_dfu<'d, D: Driver<'d>, DFU: NorFlash, STATE: NorFlash, RST: Reset, const BLOCK_SIZE: usize>( | 186 | pub fn usb_dfu<'d, D: Driver<'d>, DFU: NorFlash, STATE: NorFlash, RST: Reset, const BLOCK_SIZE: usize>( |
| 187 | builder: &mut Builder<'d, D>, | 187 | builder: &mut Builder<'d, D>, |
| 188 | handler: &'d mut Control<'d, DFU, STATE, RST, BLOCK_SIZE>, | 188 | handler: &'d mut Control<'d, DFU, STATE, RST, BLOCK_SIZE>, |
| 189 | func_modifier: impl Fn(&mut FunctionBuilder<'_, 'd, D>), | ||
| 189 | ) { | 190 | ) { |
| 190 | let mut func = builder.function(USB_CLASS_APPN_SPEC, APPN_SPEC_SUBCLASS_DFU, DFU_PROTOCOL_DFU); | 191 | let mut func = builder.function(USB_CLASS_APPN_SPEC, APPN_SPEC_SUBCLASS_DFU, DFU_PROTOCOL_DFU); |
| 192 | |||
| 193 | // Here we give users the opportunity to add their own function level MSOS headers for instance. | ||
| 194 | // This is useful when DFU functionality is part of a composite USB device. | ||
| 195 | func_modifier(&mut func); | ||
| 196 | |||
| 191 | let mut iface = func.interface(); | 197 | let mut iface = func.interface(); |
| 192 | let mut alt = iface.alt_setting(USB_CLASS_APPN_SPEC, APPN_SPEC_SUBCLASS_DFU, DFU_PROTOCOL_DFU, None); | 198 | let mut alt = iface.alt_setting(USB_CLASS_APPN_SPEC, APPN_SPEC_SUBCLASS_DFU, DFU_PROTOCOL_DFU, None); |
| 193 | alt.descriptor( | 199 | alt.descriptor( |
