summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2026-04-23 19:46:28 +0800
committersakumisu <[email protected]>2026-04-23 19:46:28 +0800
commit1a885c76b85d7d40955bc8e88a522a3dd0eb3183 (patch)
treea71fdf9f189127a3cb2aeed5a8f471653b5d022b
parentdce7491d171fd1f15fa840377aa343b7927f65df (diff)
fix(class/dfu): only reset device when dfu-util with -e or leave cmd
Signed-off-by: sakumisu <[email protected]>
-rw-r--r--class/dfu/usbd_dfu.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/class/dfu/usbd_dfu.c b/class/dfu/usbd_dfu.c
index 6d21d0d2..4c3e432c 100644
--- a/class/dfu/usbd_dfu.c
+++ b/class/dfu/usbd_dfu.c
@@ -259,7 +259,30 @@ static int dfu_class_interface_request_handler(uint8_t busid, struct usb_setup_p
(*data)[5] = 0; /* iString */
*len = 6;
+ break;
+ case DFU_REQUEST_GETSTATE:
+ (*data)[0] = g_usbd_dfu.dfu_state;
+ *len = 1;
+ break;
+
+ default:
+ return -1;
+ }
+ break;
+ case DFU_STATE_DFU_MANIFEST_WAIT_RESET:
+ switch (setup->bRequest) {
+ case DFU_REQUEST_GETSTATUS:
+
+ (*data)[0] = DFU_STATUS_OK; /* bStatus */
+ (*data)[1] = 0;
+ (*data)[2] = 0;
+ (*data)[3] = 0;
+ (*data)[4] = g_usbd_dfu.dfu_state;
+ (*data)[5] = 0; /* iString */
+ *len = 6;
+
usbd_dfu_reset();
+
break;
case DFU_REQUEST_GETSTATE:
(*data)[0] = g_usbd_dfu.dfu_state;