add high speed into examples\device\video_capture
This commit is contained in:
parent
aa5accae23
commit
1117880411
|
@ -37,6 +37,9 @@
|
||||||
#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \
|
#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \
|
||||||
_PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6) )
|
_PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VIDEO, 5) | _PID_MAP(VENDOR, 6) )
|
||||||
|
|
||||||
|
#define USB_VID 0xCafe
|
||||||
|
#define USB_BCD 0x0200
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Device Descriptors
|
// Device Descriptors
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -44,7 +47,7 @@ tusb_desc_device_t const desc_device =
|
||||||
{
|
{
|
||||||
.bLength = sizeof(tusb_desc_device_t),
|
.bLength = sizeof(tusb_desc_device_t),
|
||||||
.bDescriptorType = TUSB_DESC_DEVICE,
|
.bDescriptorType = TUSB_DESC_DEVICE,
|
||||||
.bcdUSB = 0x0200,
|
.bcdUSB = USB_BCD,
|
||||||
|
|
||||||
// Use Interface Association Descriptor (IAD) for Video
|
// Use Interface Association Descriptor (IAD) for Video
|
||||||
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
|
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
|
||||||
|
@ -54,7 +57,7 @@ tusb_desc_device_t const desc_device =
|
||||||
|
|
||||||
.bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,
|
.bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,
|
||||||
|
|
||||||
.idVendor = 0xCafe,
|
.idVendor = USB_VID,
|
||||||
.idProduct = USB_PID,
|
.idProduct = USB_PID,
|
||||||
.bcdDevice = 0x0100,
|
.bcdDevice = 0x0100,
|
||||||
|
|
||||||
|
@ -137,6 +140,76 @@ uint8_t const desc_fs_configuration[] =
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if TUD_OPT_HIGH_SPEED
|
||||||
|
// Per USB specs: high speed capable device must report device_qualifier and other_speed_configuration
|
||||||
|
|
||||||
|
uint8_t const desc_hs_configuration[] =
|
||||||
|
{
|
||||||
|
// Config number, interface count, string index, total length, attribute, power in mA
|
||||||
|
TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0, 500),
|
||||||
|
|
||||||
|
// IAD for Video Control
|
||||||
|
#if defined(CFG_EXAMPLE_VIDEO_READONLY) && !defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG)
|
||||||
|
# if 1 == CFG_TUD_VIDEO_STREAMING_BULK
|
||||||
|
TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG_BULK(4, EPNUM_VIDEO_IN,
|
||||||
|
FRAME_WIDTH, FRAME_HEIGHT, FRAME_RATE,
|
||||||
|
512)
|
||||||
|
# else
|
||||||
|
TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(4, EPNUM_VIDEO_IN,
|
||||||
|
FRAME_WIDTH, FRAME_HEIGHT, FRAME_RATE,
|
||||||
|
CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE)
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# if 1 == CFG_TUD_VIDEO_STREAMING_BULK
|
||||||
|
TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(4, EPNUM_VIDEO_IN,
|
||||||
|
FRAME_WIDTH, FRAME_HEIGHT, FRAME_RATE,
|
||||||
|
512)
|
||||||
|
# else
|
||||||
|
TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(4, EPNUM_VIDEO_IN,
|
||||||
|
FRAME_WIDTH, FRAME_HEIGHT, FRAME_RATE,
|
||||||
|
CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
// device qualifier is mostly similar to device descriptor since we don't change configuration based on speed
|
||||||
|
tusb_desc_device_qualifier_t const desc_device_qualifier =
|
||||||
|
{
|
||||||
|
.bLength = sizeof(tusb_desc_device_t),
|
||||||
|
.bDescriptorType = TUSB_DESC_DEVICE,
|
||||||
|
.bcdUSB = USB_BCD,
|
||||||
|
|
||||||
|
.bDeviceClass = TUSB_CLASS_MISC,
|
||||||
|
.bDeviceSubClass = MISC_SUBCLASS_COMMON,
|
||||||
|
.bDeviceProtocol = MISC_PROTOCOL_IAD,
|
||||||
|
|
||||||
|
.bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,
|
||||||
|
.bNumConfigurations = 0x01,
|
||||||
|
.bReserved = 0x00
|
||||||
|
};
|
||||||
|
|
||||||
|
// Invoked when received GET DEVICE QUALIFIER DESCRIPTOR request
|
||||||
|
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete.
|
||||||
|
// device_qualifier descriptor describes information about a high-speed capable device that would
|
||||||
|
// change if the device were operating at the other speed. If not highspeed capable stall this request.
|
||||||
|
uint8_t const* tud_descriptor_device_qualifier_cb(void)
|
||||||
|
{
|
||||||
|
return (uint8_t const*) &desc_device_qualifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when received GET OTHER SEED CONFIGURATION DESCRIPTOR request
|
||||||
|
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
|
||||||
|
// Configuration descriptor in the other speed e.g if high speed then this is for full speed and vice versa
|
||||||
|
uint8_t const* tud_descriptor_other_speed_configuration_cb(uint8_t index)
|
||||||
|
{
|
||||||
|
(void) index; // for multiple configurations
|
||||||
|
|
||||||
|
// if link speed is high return fullspeed config, and vice versa
|
||||||
|
return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_fs_configuration : desc_hs_configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // highspeed
|
||||||
|
|
||||||
// Invoked when received GET CONFIGURATION DESCRIPTOR
|
// Invoked when received GET CONFIGURATION DESCRIPTOR
|
||||||
// Application return pointer to descriptor
|
// Application return pointer to descriptor
|
||||||
// Descriptor contents must exist long enough for transfer to complete
|
// Descriptor contents must exist long enough for transfer to complete
|
||||||
|
@ -144,7 +217,12 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
|
||||||
{
|
{
|
||||||
(void) index; // for multiple configurations
|
(void) index; // for multiple configurations
|
||||||
|
|
||||||
|
#if TUD_OPT_HIGH_SPEED
|
||||||
|
// Although we are highspeed, host may be fullspeed.
|
||||||
|
return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration;
|
||||||
|
#else
|
||||||
return desc_fs_configuration;
|
return desc_fs_configuration;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
Loading…
Reference in New Issue