Skip to content

Commit 389babf

Browse files
committed
Add descriptor for a bulk endpoint as a streaming endpoint
1 parent e508831 commit 389babf

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

examples/device/video_capture/src/tusb_config.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@
100100
// video streaming endpoint size
101101
#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256
102102

103+
// use bulk endpoint for streaming interface
104+
#define CFG_TUD_VIDEO_STREAMING_BULK 0
105+
103106
#ifdef __cplusplus
104107
}
105108
#endif

examples/device/video_capture/src/usb_descriptors.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,20 @@ uint8_t const * tud_descriptor_device_cb(void)
7777

7878
#if defined(CFG_EXAMPLE_VIDEO_READONLY) && !defined(CFG_EXAMPLE_VIDEO_DISABLE_MJPEG)
7979
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_VIDEO_CAPTURE_DESC_MJPEG_LEN)
80+
#elif 1 == CFG_TUD_VIDEO_STREAMING_BULK
81+
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN)
8082
#else
8183
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_VIDEO_CAPTURE_DESC_UNCOMPR_LEN)
8284
#endif
8385

8486
#if TU_CHECK_MCU(OPT_MCU_LPC175X_6X, OPT_MCU_LPC177X_8X, OPT_MCU_LPC40XX)
8587
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
8688
// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ...
89+
#if 1 == CFG_TUD_VIDEO_STREAMING_BULK
90+
#define EPNUM_VIDEO_IN 0x82
91+
#else
8792
#define EPNUM_VIDEO_IN 0x83
93+
#endif
8894

8995
#elif TU_CHECK_MCU(OPT_MCU_NRF5X)
9096
// nRF5x ISO can only be endpoint 8
@@ -105,6 +111,10 @@ uint8_t const desc_fs_configuration[] =
105111
TUD_VIDEO_CAPTURE_DESCRIPTOR_MJPEG(4, EPNUM_VIDEO_IN,
106112
FRAME_WIDTH, FRAME_HEIGHT, FRAME_RATE,
107113
CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE)
114+
#elif 1 == CFG_TUD_VIDEO_STREAMING_BULK
115+
TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(4, EPNUM_VIDEO_IN,
116+
FRAME_WIDTH, FRAME_HEIGHT, FRAME_RATE,
117+
64)
108118
#else
109119
TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR(4, EPNUM_VIDEO_IN,
110120
FRAME_WIDTH, FRAME_HEIGHT, FRAME_RATE,

examples/device/video_capture/src/usb_descriptors.h

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,22 @@ enum {
7979
+ 7/* Endpoint */\
8080
)
8181

82+
#define TUD_VIDEO_CAPTURE_DESC_UNCOMPR_BULK_LEN (\
83+
TUD_VIDEO_DESC_IAD_LEN\
84+
/* control */\
85+
+ TUD_VIDEO_DESC_STD_VC_LEN\
86+
+ (TUD_VIDEO_DESC_CS_VC_LEN + 1/*bInCollection*/)\
87+
+ TUD_VIDEO_DESC_CAMERA_TERM_LEN\
88+
+ TUD_VIDEO_DESC_OUTPUT_TERM_LEN\
89+
/* Interface 1, Alternate 0 */\
90+
+ TUD_VIDEO_DESC_STD_VS_LEN\
91+
+ (TUD_VIDEO_DESC_CS_VS_IN_LEN + 1/*bNumFormats x bControlSize*/)\
92+
+ TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\
93+
+ TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\
94+
+ TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN\
95+
+ 7/* Endpoint */\
96+
)
97+
8298
/* Windows support YUY2 and NV12
8399
* https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-video-class-driver-overview */
84100

@@ -165,4 +181,39 @@ enum {
165181
/* EP */ \
166182
TUD_VIDEO_DESC_EP_ISO(_epin, _epsize, 1)
167183

184+
185+
#define TUD_VIDEO_CAPTURE_DESCRIPTOR_UNCOMPR_BULK(_stridx, _epin, _width, _height, _fps, _epsize) \
186+
TUD_VIDEO_DESC_IAD(ITF_NUM_VIDEO_CONTROL, /* 2 Interfaces */ 0x02, _stridx), \
187+
/* Video control 0 */ \
188+
TUD_VIDEO_DESC_STD_VC(ITF_NUM_VIDEO_CONTROL, 0, _stridx), \
189+
TUD_VIDEO_DESC_CS_VC( /* UVC 1.5*/ 0x0150, \
190+
/* wTotalLength - bLength */ \
191+
TUD_VIDEO_DESC_CAMERA_TERM_LEN + TUD_VIDEO_DESC_OUTPUT_TERM_LEN, \
192+
UVC_CLOCK_FREQUENCY, ITF_NUM_VIDEO_STREAMING), \
193+
TUD_VIDEO_DESC_CAMERA_TERM(UVC_ENTITY_CAP_INPUT_TERMINAL, 0, 0,\
194+
/*wObjectiveFocalLengthMin*/0, /*wObjectiveFocalLengthMax*/0,\
195+
/*wObjectiveFocalLength*/0, /*bmControls*/0), \
196+
TUD_VIDEO_DESC_OUTPUT_TERM(UVC_ENTITY_CAP_OUTPUT_TERMINAL, VIDEO_TT_STREAMING, 0, 1, 0), \
197+
/* Video stream alt. 0 */ \
198+
TUD_VIDEO_DESC_STD_VS(ITF_NUM_VIDEO_STREAMING, 0, 1, _stridx), \
199+
/* Video stream header for without still image capture */ \
200+
TUD_VIDEO_DESC_CS_VS_INPUT( /*bNumFormats*/1, \
201+
/*wTotalLength - bLength */\
202+
TUD_VIDEO_DESC_CS_VS_FMT_UNCOMPR_LEN\
203+
+ TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT_LEN\
204+
+ TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING_LEN,\
205+
_epin, /*bmInfo*/0, /*bTerminalLink*/UVC_ENTITY_CAP_OUTPUT_TERMINAL, \
206+
/*bStillCaptureMethod*/0, /*bTriggerSupport*/0, /*bTriggerUsage*/0, \
207+
/*bmaControls(1)*/0), \
208+
/* Video stream format */ \
209+
TUD_VIDEO_DESC_CS_VS_FMT_YUY2(/*bFormatIndex*/1, /*bNumFrameDescriptors*/1, \
210+
/*bDefaultFrameIndex*/1, 0, 0, 0, /*bCopyProtect*/0), \
211+
/* Video stream frame format */ \
212+
TUD_VIDEO_DESC_CS_VS_FRM_UNCOMPR_CONT(/*bFrameIndex */1, 0, _width, _height, \
213+
_width * _height * 16, _width * _height * 16 * _fps, \
214+
_width * _height * 16, \
215+
(10000000/_fps), (10000000/_fps), (10000000/_fps)*_fps, (10000000/_fps)), \
216+
TUD_VIDEO_DESC_CS_VS_COLOR_MATCHING(VIDEO_COLOR_PRIMARIES_BT709, VIDEO_COLOR_XFER_CH_BT709, VIDEO_COLOR_COEF_SMPTE170M), \
217+
TUD_VIDEO_DESC_EP_BULK(_epin, _epsize, 1)
218+
168219
#endif

0 commit comments

Comments
 (0)