diff options
| author | sakumisu <[email protected]> | 2026-04-23 19:46:28 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2026-04-23 19:46:28 +0800 |
| commit | 1a885c76b85d7d40955bc8e88a522a3dd0eb3183 (patch) | |
| tree | a71fdf9f189127a3cb2aeed5a8f471653b5d022b | |
| parent | dce7491d171fd1f15fa840377aa343b7927f65df (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.c | 23 |
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; |
