From e1585f801c4d0fc20e9b0b968ba8458e85fde3d2 Mon Sep 17 00:00:00 2001 From: sakimisu <1203593632@qq.com> Date: Tue, 3 Jan 2023 22:17:24 +0800 Subject: reset pipe and is_opened before set_interface cmd --- class/video/usbh_video.c | 28 +++++++++++++++++----------- 1 file 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; } -- cgit v1.3.1