diff options
| author | sakimisu <[email protected]> | 2023-01-03 22:17:24 +0800 |
|---|---|---|
| committer | sakimisu <[email protected]> | 2023-01-03 22:20:57 +0800 |
| commit | e1585f801c4d0fc20e9b0b968ba8458e85fde3d2 (patch) | |
| tree | 6fe72b70b872aa749f59bf37afaca8c6bff8118b /class | |
| parent | 2e7c4953cea692edb1a920c5bc47fc81b951d78b (diff) | |
reset pipe and is_opened before set_interface cmd
Diffstat (limited to 'class')
| -rw-r--r-- | class/video/usbh_video.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/class/video/usbh_video.c b/class/video/usbh_video.c index 4b7ff6e7..28d5a642 100644 --- a/class/video/usbh_video.c +++ b/class/video/usbh_video.c @@ -247,18 +247,16 @@ int usbh_video_open(struct usbh_video *video_class, int usbh_video_close(struct usbh_video *video_class) { struct usb_setup_packet *setup = &video_class->hport->setup; - int ret; + int ret = 0; - setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; - setup->bRequest = USB_REQUEST_SET_INTERFACE; - setup->wValue = 0; - setup->wIndex = video_class->data_intf; - setup->wLength = 0; + USB_LOG_INFO("Close video device\r\n"); - ret = usbh_control_transfer(video_class->hport->ep0, setup, NULL); - if (ret < 0) { - return ret; + if (video_class->is_opened == false) { + return 0; } + + video_class->is_opened = false; + if (video_class->isoin) { usbh_pipe_free(video_class->isoin); video_class->isoin = NULL; @@ -269,8 +267,16 @@ int usbh_video_close(struct usbh_video *video_class) video_class->isoout = NULL; } - USB_LOG_INFO("Close video device\r\n"); - video_class->is_opened = false; + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; + setup->bRequest = USB_REQUEST_SET_INTERFACE; + setup->wValue = 0; + setup->wIndex = video_class->data_intf; + setup->wLength = 0; + + ret = usbh_control_transfer(video_class->hport->ep0, setup, NULL); + if (ret < 0) { + return ret; + } return ret; } |
