From e1585f801c4d0fc20e9b0b968ba8458e85fde3d2 Mon Sep 17 00:00:00 2001 From: sakimisu <1203593632@qq.com> Date: Tue, 3 Jan 2023 22:17:24 +0800 Subject: [PATCH] reset pipe and is_opened before set_interface cmd --- class/video/usbh_video.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 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,7 +247,25 @@ 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; + + USB_LOG_INFO("Close video device\r\n"); + + 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; + } + + if (video_class->isoout) { + usbh_pipe_free(video_class->isoout); + video_class->isoout = NULL; + } setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = USB_REQUEST_SET_INTERFACE; @@ -259,18 +277,6 @@ int usbh_video_close(struct usbh_video *video_class) if (ret < 0) { return ret; } - if (video_class->isoin) { - usbh_pipe_free(video_class->isoin); - video_class->isoin = NULL; - } - - if (video_class->isoout) { - usbh_pipe_free(video_class->isoout); - video_class->isoout = NULL; - } - - USB_LOG_INFO("Close video device\r\n"); - video_class->is_opened = false; return ret; }