diff options
| author | sakumisu <[email protected]> | 2023-02-05 14:38:14 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2023-02-05 14:38:14 +0800 |
| commit | af88c8e90b62baf47f06cd579261ebcce4f965c8 (patch) | |
| tree | 5bc95af4d84347995f5abf58d1d4512d0c8c2639 /class | |
| parent | b00fd55aff2f30f6499c26da172ab551158b1cbb (diff) | |
config ep pipe after set_interface
Diffstat (limited to 'class')
| -rw-r--r-- | class/video/usbh_video.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/class/video/usbh_video.c b/class/video/usbh_video.c index 28d5a642..02a96133 100644 --- a/class/video/usbh_video.c +++ b/class/video/usbh_video.c @@ -216,17 +216,6 @@ int usbh_video_open(struct usbh_video *video_class, return ret; } - ep_desc = &video_class->hport->config.intf[video_class->data_intf].altsetting[altsetting].ep[0].ep_desc; - mult = (ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_MASK) >> USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_SHIFT; - mps = ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_MASK; - if (ep_desc->bEndpointAddress & 0x80) { - video_class->isoin_mps = mps * (mult + 1); - usbh_hport_activate_epx(&video_class->isoin, video_class->hport, ep_desc); - } else { - video_class->isoout_mps = mps * (mult + 1); - usbh_hport_activate_epx(&video_class->isoout, video_class->hport, ep_desc); - } - setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = USB_REQUEST_SET_INTERFACE; setup->wValue = altsetting; @@ -238,6 +227,17 @@ int usbh_video_open(struct usbh_video *video_class, return ret; } + ep_desc = &video_class->hport->config.intf[video_class->data_intf].altsetting[altsetting].ep[0].ep_desc; + mult = (ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_MASK) >> USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_SHIFT; + mps = ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_MASK; + if (ep_desc->bEndpointAddress & 0x80) { + video_class->isoin_mps = mps * (mult + 1); + usbh_hport_activate_epx(&video_class->isoin, video_class->hport, ep_desc); + } else { + video_class->isoout_mps = mps * (mult + 1); + usbh_hport_activate_epx(&video_class->isoout, video_class->hport, ep_desc); + } + USB_LOG_INFO("Open video and select formatidx:%u, frameidx:%u, altsetting:%u\r\n", formatidx, frameidx, altsetting); video_class->is_opened = true; video_class->current_format = format_type; @@ -288,9 +288,13 @@ void usbh_video_list_info(struct usbh_video *video_class) USB_LOG_INFO("============= Video device information ===================\r\n"); USB_LOG_INFO("bcdVDC:%04x\r\n", video_class->bcdVDC); - USB_LOG_INFO("Num of altsettings:%02x\r\n", video_class->num_of_intf_altsettings); + USB_LOG_INFO("Num of altsettings:%u\r\n", video_class->num_of_intf_altsettings); - for (uint8_t i = 1; i < video_class->num_of_intf_altsettings; i++) { + for (uint8_t i = 0; i < video_class->num_of_intf_altsettings; i++) { + if (i == 0) { + USB_LOG_INFO("Ingore altsetting 0\r\n"); + continue; + } ep_desc = &video_class->hport->config.intf[video_class->data_intf].altsetting[i].ep[0].ep_desc; mult = (ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_MASK) >> USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_SHIFT; @@ -631,4 +635,4 @@ CLASS_INFO_DEFINE const struct usbh_class_info video_streaming_class_info = { .vid = 0x00, .pid = 0x00, .class_driver = &video_streaming_class_driver -};
\ No newline at end of file +}; |
