summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMengsk <[email protected]>2021-07-07 12:07:10 +0200
committerMengsk <[email protected]>2021-07-07 12:12:52 +0200
commit3949fb9e8c1b9a9646223e3edf7a0df4f010b5be (patch)
tree2d9f29415ba1aec17bd390f260a2904e7fb709b9 /src
parent88478594bc0c5946853567620beb944940f81a1d (diff)
Add DFU_DETACH support
Diffstat (limited to 'src')
-rw-r--r--src/class/dfu/dfu_device.c7
-rw-r--r--src/class/dfu/dfu_device.h2
2 files changed, 8 insertions, 1 deletions
diff --git a/src/class/dfu/dfu_device.c b/src/class/dfu/dfu_device.c
index f6fcb1339..f4edd713a 100644
--- a/src/class/dfu/dfu_device.c
+++ b/src/class/dfu/dfu_device.c
@@ -263,6 +263,12 @@ bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_reque
switch (request->bRequest)
{
+ case DFU_REQUEST_DETACH:
+ {
+ tud_control_status(rhport, request);
+ if (tud_dfu_reboot_cb) tud_dfu_reboot_cb();
+ break;
+ }
case DFU_REQUEST_DNLOAD:
{
if ( (stage == CONTROL_STAGE_ACK)
@@ -273,7 +279,6 @@ bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_reque
return true;
}
} // fallthrough
- case DFU_REQUEST_DETACH:
case DFU_REQUEST_UPLOAD:
case DFU_REQUEST_GETSTATUS:
case DFU_REQUEST_CLRSTATUS:
diff --git a/src/class/dfu/dfu_device.h b/src/class/dfu/dfu_device.h
index 67d15c3c6..53be0005e 100644
--- a/src/class/dfu/dfu_device.h
+++ b/src/class/dfu/dfu_device.h
@@ -81,6 +81,8 @@ TU_ATTR_WEAK void tud_dfu_abort_cb(void);
// Return the number of bytes to write
TU_ATTR_WEAK uint16_t tud_dfu_req_upload_data_cb(uint8_t alt, uint16_t block_num, uint8_t* data, uint16_t length);
+// Invoked when a DFU_DETACH request is received
+TU_ATTR_WEAK void tud_dfu_reboot_cb(void);
//--------------------------------------------------------------------+
// Internal Class Driver API
//--------------------------------------------------------------------+