summaryrefslogtreecommitdiff
path: root/class
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2023-02-05 14:38:14 +0800
committersakumisu <[email protected]>2023-02-05 14:38:14 +0800
commitaf88c8e90b62baf47f06cd579261ebcce4f965c8 (patch)
tree5bc95af4d84347995f5abf58d1d4512d0c8c2639 /class
parentb00fd55aff2f30f6499c26da172ab551158b1cbb (diff)
config ep pipe after set_interface
Diffstat (limited to 'class')
-rw-r--r--class/video/usbh_video.c32
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
+};