1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
|
/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
* Copyright (c) 2026-present Eclipse ThreadX contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
*
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** USBX Component */
/** */
/** Video Class */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_video.h PORTABLE C */
/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This file contains all the header and extern functions used by the */
/* USBX device video class. */
/* */
/**************************************************************************/
#ifndef UX_DEVICE_CLASS_VIDEO_H
#define UX_DEVICE_CLASS_VIDEO_H
/* Determine if a C++ compiler is being used. If so, ensure that standard
C is used to process the API information. */
#ifdef __cplusplus
/* Yes, C++ compiler is present. Use standard C. */
extern "C" {
#endif
/* Internal option: enable the basic USBX error checking. This define is typically used
while debugging application. */
#if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING)
#define UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING
#endif
/* Define options. */
#define UX_DEVICE_CLASS_VIDEO_THREAD_STACK_SIZE UX_THREAD_STACK_SIZE
/* Define external static data. */
extern UCHAR _ux_system_device_class_video_name[];
/* Define IOCTL code.
ux_device_class_video_ioctl(video, IOCTL_CODE, parameter).
*/
#define UX_DEVICE_CLASS_VIDEO_IOCTL_GET_ARG 0x01
/* Define Video Class main constants. */
#define UX_DEVICE_CLASS_VIDEO_CLASS 0x0e
#define UX_DEVICE_CLASS_VIDEO_SUBCLASS_UNDEFINED 0
#define UX_DEVICE_CLASS_VIDEO_SUBCLASS_CONTROL 1
#define UX_DEVICE_CLASS_VIDEO_SUBCLASS_STREAMING 2
#define UX_DEVICE_CLASS_VIDEO_SUBCLASS_INTERFACE_COLLECTION 3
/* Class Code (CC). */
#define UX_DEVICE_CLASS_VIDEO_CC_VIDEO 0x0e
/* Subclass Code (SC). */
#define UX_DEVICE_CLASS_VIDEO_SC_UNDEFINED 0
#define UX_DEVICE_CLASS_VIDEO_SC_CONTROL 1
#define UX_DEVICE_CLASS_VIDEO_SC_STREAMING 2
#define UX_DEVICE_CLASS_VIDEO_SC_INTERFACE_COLLECTION 3
/* Protocol Code. */
#define UX_DEVICE_CLASS_VIDEO_PC_PROTOCOL_UNDEFINED 0
#define UX_DEVICE_CLASS_VIDEO_PC_PROTOCOL_15 0
/* Define Video Class-Specific (CS) descriptor types. */
#define UX_DEVICE_CLASS_VIDEO_CS_UNDEFINED 0x20
#define UX_DEVICE_CLASS_VIDEO_CS_DEVICE 0x21
#define UX_DEVICE_CLASS_VIDEO_CS_CONFIGURATION 0x22
#define UX_DEVICE_CLASS_VIDEO_CS_STRING 0x23
#define UX_DEVICE_CLASS_VIDEO_CS_INTERFACE 0x24
#define UX_DEVICE_CLASS_VIDEO_CS_ENDPOINT 0x25
/* Define Video Class specific Video Control (VC) interface descriptor subtypes. */
#define UX_DEVICE_CLASS_VIDEO_VC_DESCRIPTOR_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_VC_HEADER 0x01
#define UX_DEVICE_CLASS_VIDEO_VC_INPUT_TERMINAL 0x02
#define UX_DEVICE_CLASS_VIDEO_VC_OUTPUT_TERMINAL 0x03
#define UX_DEVICE_CLASS_VIDEO_VC_SELECTOR_UNIT 0x04
#define UX_DEVICE_CLASS_VIDEO_VC_PROCESSING_UNIT 0x05
#define UX_DEVICE_CLASS_VIDEO_VC_EXTENSION_UNIT 0x06
#define UX_DEVICE_CLASS_VIDEO_VC_ENCODING_UNIT 0x07
/* Define Video Class specific Video Stream (VS) interface descriptor subtypes. */
#define UX_DEVICE_CLASS_VIDEO_VS_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_VS_INPUT_HEADER 0x01
#define UX_DEVICE_CLASS_VIDEO_VS_OUTPUT_HEADER 0x02
#define UX_DEVICE_CLASS_VIDEO_VS_STILL_IMAGE_FRAME 0x03
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_UNCOMPRESSED 0x04
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_UNCOMPRESSED 0x05
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_MJPEG 0x06
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_MJPEG 0x07
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_MPEG2TS 0x0A
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_DV 0x0C
#define UX_DEVICE_CLASS_VIDEO_VS_COLORFORMAT 0x0D
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_FRAME_BASED 0x10
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_FRAME_BASED 0x11
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_STREAM_BASED 0x12
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_H264 0x13
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_H264 0x14
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_H264_SIMULCAST 0x15
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_VP8 0x16
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_VP8 0x17
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_VP8_SIMULCAST 0x18
/* Define Video Class specific Endpoint (EP) descriptor subtypes. */
#define UX_DEVICE_CLASS_VIDEO_EP_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_EP_GENERAL 0x01
#define UX_DEVICE_CLASS_VIDEO_EP_ENDPOINT 0x02
#define UX_DEVICE_CLASS_VIDEO_EP_INTERRUPT 0x03
/* Define Video Control Selector Codes. */
/* Define VideoControl (VC) Interface Control Selector Codes. */
#define UX_DEVICE_CLASS_VIDEO_VC_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_VC_VIDEO_POWER_MODE_CONTROL 0x01
#define UX_DEVICE_CLASS_VIDEO_VC_REQUEST_ERROR_CODE_CONTROL 0x02
/* Define Terminal Control (TE) Selectors. */
#define UX_DEVICE_CLASS_VIDEO_TE_CONTROL_UNDEFINED 0x00
/* Define Selector Unit (SU) Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_SU_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_SU_INPUT_SELECT_CONTROL 0x01
/* Define Camera Terminal (CT) Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_CT_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_CT_SCANNING_MODE_CONTROL 0x01
#define UX_DEVICE_CLASS_VIDEO_CT_AE_MODE_CONTROL 0x02
#define UX_DEVICE_CLASS_VIDEO_CT_AE_PRIORITY_CONTROL 0x03
#define UX_DEVICE_CLASS_VIDEO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04
#define UX_DEVICE_CLASS_VIDEO_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05
#define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_ABSOLUTE_CONTROL 0x06
#define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_RELATIVE_CONTROL 0x07
#define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_AUTO_CONTROL 0x08
#define UX_DEVICE_CLASS_VIDEO_CT_IRIS_ABSOLUTE_CONTROL 0x09
#define UX_DEVICE_CLASS_VIDEO_CT_IRIS_RELATIVE_CONTROL 0x0A
#define UX_DEVICE_CLASS_VIDEO_CT_ZOOM_ABSOLUTE_CONTROL 0x0B
#define UX_DEVICE_CLASS_VIDEO_CT_ZOOM_RELATIVE_CONTROL 0x0C
#define UX_DEVICE_CLASS_VIDEO_CT_PANTILT_ABSOLUTE_CONTROL 0x0D
#define UX_DEVICE_CLASS_VIDEO_CT_PANTILT_RELATIVE_CONTROL 0x0E
#define UX_DEVICE_CLASS_VIDEO_CT_ROLL_ABSOLUTE_CONTROL 0x0F
#define UX_DEVICE_CLASS_VIDEO_CT_ROLL_RELATIVE_CONTROL 0x10
#define UX_DEVICE_CLASS_VIDEO_CT_PRIVACY_CONTROL 0x11
#define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_SIMPLE_CONTROL 0x12
#define UX_DEVICE_CLASS_VIDEO_CT_WINDOW_CONTROL 0x13
#define UX_DEVICE_CLASS_VIDEO_CT_REGION_OF_INTEREST_CONTROL 0x14
/* Define Processing Unit (PU) Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_PU_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01
#define UX_DEVICE_CLASS_VIDEO_PU_BRIGHTNESS_CONTROL 0x02
#define UX_DEVICE_CLASS_VIDEO_PU_CONTRAST_CONTROL 0x03
#define UX_DEVICE_CLASS_VIDEO_PU_GAIN_CONTROL 0x04
#define UX_DEVICE_CLASS_VIDEO_PU_POWER_LINE_FREQUENCY_CONTROL 0x05
#define UX_DEVICE_CLASS_VIDEO_PU_HUE_CONTROL 0x06
#define UX_DEVICE_CLASS_VIDEO_PU_SATURATION_CONTROL 0x07
#define UX_DEVICE_CLASS_VIDEO_PU_SHARPNESS_CONTROL 0x08
#define UX_DEVICE_CLASS_VIDEO_PU_GAMMA_CONTROL 0x09
#define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0A
#define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0B
#define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0C
#define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0D
#define UX_DEVICE_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_CONTROL 0x0E
#define UX_DEVICE_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0F
#define UX_DEVICE_CLASS_VIDEO_PU_HUE_AUTO_CONTROL 0x10
#define UX_DEVICE_CLASS_VIDEO_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11
#define UX_DEVICE_CLASS_VIDEO_PU_ANALOG_LOCK_STATUS_CONTROL 0x12
#define UX_DEVICE_CLASS_VIDEO_PU_CONTRAST_AUTO_CONTROL 0x13
/* Define eXtension Unit (XU) Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_XU_CONTROL_UNDEFINED 0x00
/* Define VideoStreaming (VS) Interface Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_VS_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_VS_PROBE_CONTROL 0x01
#define UX_DEVICE_CLASS_VIDEO_VS_COMMIT_CONTROL 0x02
#define UX_DEVICE_CLASS_VIDEO_VS_STILL_PROBE_CONTROL 0x03
#define UX_DEVICE_CLASS_VIDEO_VS_STILL_COMMIT_CONTROL 0x04
#define UX_DEVICE_CLASS_VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05
#define UX_DEVICE_CLASS_VIDEO_VS_STREAM_ERROR_CODE_CONTROL 0x06
#define UX_DEVICE_CLASS_VIDEO_VS_GENERATE_KEY_FRAME_CONTROL 0x07
#define UX_DEVICE_CLASS_VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
#define UX_DEVICE_CLASS_VIDEO_VS_SYNCH_DELAY_CONTROL 0x09
/* Define USB Video Class terminal types. */
/* Define USB Terminal Types (TT). */
#define UX_DEVICE_CLASS_VIDEO_TT_VENDOR_SPECIFIC 0x0100
#define UX_DEVICE_CLASS_VIDEO_TT_STREAMING 0x0101
/* Define USB Input Terminal Types (ITT). */
#define UX_DEVICE_CLASS_VIDEO_ITT_VENDOR_SPECIFIC 0x0200
#define UX_DEVICE_CLASS_VIDEO_ITT_CAMERA 0x0201
#define UX_DEVICE_CLASS_VIDEO_ITT_MEDIA_TRANSPORT_INPUT 0x0202
/* Define USB Output Terminal Types (OTT). */
#define UX_DEVICE_CLASS_VIDEO_OTT_VENDOR_SPECIFIC 0x0300
#define UX_DEVICE_CLASS_VIDEO_OTT_DISPLAY 0x0301
#define UX_DEVICE_CLASS_VIDEO_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302
/* Define USB External Terminal Types (XTT). */
#define UX_DEVICE_CLASS_VIDEO_XTT_EXTERNAL_VENDOR_SPECIFIC 0x0400
#define UX_DEVICE_CLASS_VIDEO_XTT_COMPOSITE_CONNECTOR 0x0401
#define UX_DEVICE_CLASS_VIDEO_XTT_SVIDEO_CONNECTOR 0x0402
#define UX_DEVICE_CLASS_VIDEO_XTT_COMPONENT_CONNECTOR 0x0403
/* Video Class GET_INFO Capabilities and status structs and definitions. */
#define UX_DEVICE_CLASS_VIDEO_INFO_GET_REQUEST_SUPPORT (1u << 0)
#define UX_DEVICE_CLASS_VIDEO_INFO_SET_REQUEST_SUPPORT (1u << 1)
#define UX_DEVICE_CLASS_VIDEO_INFO_DISABLED_DUE_TO_AUTO_MODE (1u << 2)
#define UX_DEVICE_CLASS_VIDEO_INFO_AUTOUPDATE_CONTROL (1u << 3)
#define UX_DEVICE_CLASS_VIDEO_INFO_ASYNCHRONOUS_CONTROL (1u << 4)
#define UX_DEVICE_CLASS_VIDEO_INFO_DISABLED_DUE_TO_STATE (1u << 5)
/* Video Class Probe and Commit Controls structs and definitions. */
typedef struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_STRUCT
{
union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmHint_UNION {
USHORT value;
struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmHint_STRUCT {
USHORT dwFrameInterval:1;
USHORT wKeyFrameRate:1;
USHORT wPFrameRate:1;
USHORT wCompQuality:1;
USHORT wCompWindowSize:1;
} bm;
} bmHint;
UCHAR bFormatIndex;
UCHAR bFrameIndex;
ULONG dwFrameInterval;
USHORT wKeyFrameRate;
USHORT wPFrameRate;
USHORT wCompQuality;
USHORT wCompWindowSize;
USHORT wDelay;
UCHAR dwMaxVideoFrameSize[4]; /* Not alignend from now on. */
UCHAR dwMaxPayloadTransferSize[4];
UCHAR dwClockFrequency[4];
union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmFramingInfo_UNION {
UCHAR value;
struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmFramingInfo_STRUCT {
UCHAR FID_required:1;
UCHAR EOF_may_present:1;
UCHAR EOS_may_present:1;
} bm;
} bmFramingInfo;
UCHAR bPreferedVersion;
UCHAR bMinVersion;
UCHAR bMaxVersion;
/* Start from offset 34, additional fields introduced in UVC 1.5. */
UCHAR bUsage;
UCHAR bBitDepthLuma;
UCHAR bmSettings;
UCHAR bMaxNumberOfRefFramesPlus1;
union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmRateControlModes_UNION {
USHORT value;
struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmRateControlModes_STRUCT {
USHORT rate_ctrl_mode_0:4;
USHORT rate_ctrl_mode_1:4;
USHORT rate_ctrl_mode_2:4;
USHORT rate_ctrl_mode_3:4;
} bm;
} bmRateControlModes;
UCHAR bmLayoutPerStream;
} UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL;
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_FRAME_INTERVAL (1U<<0)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_KEY_FRAME_RATE (1U<<1)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_KEY_P_FRAME_RATE (1U<<2)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_COMP_QUALITY (1U<<3)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_COMP_WINDOW_SIZE (1U<<4)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FORMAT_INDEX_OFFSET 2
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAME_INDEX_OFFSET 3
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAME_INTERVAL_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_KEY_FRAME_RATE_OFFSET 8
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_P_FRAME_RATE_OFFSET 10
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_COMP_QUALITY_OFFSET 12
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_COMP_WINDOW_SIZE_OFFSET 14
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_DELAY_OFFSET 16
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_VIDEO_FRAME_SIZE_OFFSET 18
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 22
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_CLOCK_FREQUENCY_OFFSET 26
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_OFFSET 30
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_FID_REQUIRED (1U<<0)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_EOF_MAY_PRESENT (1U<<1)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_EOS_MAY_PRESENT (1U<<2)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_PREFERED_VERSION_OFFSET 31
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MIN_VERSION_OFFSET 32
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_VERSION_OFFSET 33
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_USAGE_OFFSET 34
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_BIT_DEPTH_LUMA_OFFSET 35
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_SETTINGS_OFFSET 36
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_N_OF_FRAMES_PLUS1_OFFSET 37
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODES_OFFSET 38
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_NOT_APPLICABLE 0U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_VBR_WITH_UNDERFLOW 1U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_CBR 2U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_CONSTANT_QP 3U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_GLOBAL_VBR_WITH_UNDERFLOW 4U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_VBR 5U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_GLOBAL_VBR 6U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_LAYOUT_PER_STREAM_OFFSET 40
/* Video Class Still Probe and Commit Controls structs and definitions. */
typedef struct UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_STRUCT
{
UCHAR bFormatIndex;
UCHAR bFrameIndex;
UCHAR bCompressionIndex;
UCHAR dwMaxVideoFrameSize[4]; /* Not aligned from now. */
UCHAR dwMaxPayloadTransferSize[4];
} UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL;
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_FORMAT_INDEX_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_FRAME_INDEX_OFFSET 1
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_COMPRESSION_INDEX_OFFSET 2
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_MAX_VIDEO_FRAME_SIZE_OFFSET 3
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 7
/* Video Class Status Packet structs and definitions. */
/* Offsets and possible values. */
typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_HEADER_STRUCT
{
UCHAR bStatusType;
UCHAR bOriginator;
} UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_HEADER;
typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_STRUCT
{
UCHAR bStatusType;
UCHAR bOriginator;
UCHAR bEvent;
UCHAR bSelector;
UCHAR bAttribute;
UCHAR bValue[1]; /* varies on bAttribute. */
} UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC;
typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS_STRUCT
{
UCHAR bStatusType;
UCHAR bOriginator;
UCHAR bEvent;
UCHAR bValue[1]; /* varies on bEvent. */
} UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS;
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_VC 1
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_VS 2
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_ORIGINATOR_OFFSET 1
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_EVENT_OFFSET 2
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_SELECTOR_OFFSET 3
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_ATTRIBUTE_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_VALUE_OFFSET 5
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS_VALUE_OFFSET 3
/* Define Video Class Payload Header structs and definitions. */
typedef struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_STRUCT
{
UCHAR bHeaderLength;
union UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_UNION {
UCHAR value;
struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_STRUCT {
UCHAR bFID:1; /* Frame ID. */
UCHAR bEOF:1; /* End of Frame. */
UCHAR bPTS:1; /* Presentation Time. */
UCHAR bSCR:1; /* Source Clock Reference. */
UCHAR bRES:1; /* Reserved, Payload Specific. */
UCHAR bSTI:1; /* Still Image. */
UCHAR bERR:1; /* Error. */
UCHAR bEOH:1; /* End of Header. */
} bm;
} bmHeaderInfo;
UCHAR dwPresentationTime[4];
union UX_DEVICE_CLASS_VIDEO_PAYLOAD_SCR_UNION {
UCHAR byte_array[6];
struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_SCR_STRUCT {
UCHAR STC[4]; /* SourceTimeClock. */
USHORT SCR; /* 1KHz SOF token counter. */
} bm;
} scrSourceClock;
} UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER;
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_LENGTH_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_OFFSET 1
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_PRESENTATION_TIME_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_PTS_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_SCR_SOURCE_CLOCK_OFFSET 6
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_SCR_OFFSET 6
/* Define Video Class specific request codes. */
#define UX_DEVICE_CLASS_VIDEO_REQUEST_CODE_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_RC_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_SET_CUR 0x01
#define UX_DEVICE_CLASS_VIDEO_GET_CUR 0x81
#define UX_DEVICE_CLASS_VIDEO_GET_MIN 0x82
#define UX_DEVICE_CLASS_VIDEO_GET_MAX 0x83
#define UX_DEVICE_CLASS_VIDEO_GET_RES 0x84
#define UX_DEVICE_CLASS_VIDEO_GET_INFO 0x86
#define UX_DEVICE_CLASS_VIDEO_GET_DEF 0x87
#define UX_DEVICE_CLASS_VIDEO_GET_CUR_ALL 0x91
#define UX_DEVICE_CLASS_VIDEO_GET_MIN_ALL 0x92
#define UX_DEVICE_CLASS_VIDEO_GET_MAX_ALL 0x93
#define UX_DEVICE_CLASS_VIDEO_GET_RES_ALL 0x94
#define UX_DEVICE_CLASS_VIDEO_GET_GET_DEF_ALL 0x97
/* Define Video Class Device Power Modes. */
#define UX_DEVICE_CLASS_VIDEO_POWER_MODE_MASK 0x0Fu
#define UX_DEVICE_CLASS_VIDEO_POWER_MODE_FULL 0x00u
#define UX_DEVICE_CLASS_VIDEO_POWER_MODE_DEVICE_DEPENDENT 0x01u
#define UX_DEVICE_CLASS_VIDEO_POWER_DEPENDENT_MODE_SUPPORTED 0x10u
#define UX_DEVICE_CLASS_VIDEO_POWER_USES_USB 0x20u
#define UX_DEVICE_CLASS_VIDEO_POWER_USES_BATTERY 0x40u
#define UX_DEVICE_CLASS_VIDEO_POWER_USES_AC 0x80u
/* Define Video Class Request Error Codes. */
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_NO_ERROR 0x00
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_NOT_READY 0x01
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_WRONG_STATE 0x02
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_POWER 0x03
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_OUT_OF_RANGE 0x04
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_INPUT 0x05
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_CONTROL 0x06
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_REQUEST 0x07
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_VALUE_WITHIN_RANGE 0x08
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_UNKNOWN 0xFF
/* Define Video Class Probe and Commit Controls */
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LENGTH_1_1 34
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LENGTH_1_5 48
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_HINT_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FORMAT_INDEX_OFFSET 2
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAME_INDEX_OFFSET 3
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAME_INTERVAL_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_KEY_FRAME_RATE_OFFSET 8
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_PFRAME_RAE_OFFSET 10
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_COMP_QUALITY_OFFSET 12
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_COMP_WINDOW_SIZE_OFFSET 14
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_DELAY_OFFSET 16
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_VIDEO_FRAME_SIZE_OFFSET 18
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 22
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CLOCK_FREQUENCY_OFFSET 26
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAMING_INFO_OFFSET 30
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_PREFERED_VERSION_OFFSET 31
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MIN_VERSION_OFFSET 32
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_VERSION_OFFSET 33
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_USAGE_OFFSET 34
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_BIT_DEPTH_LUMA_OFFSET 35
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_SETTINGS_OFFSET 36
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_NUMBER_OF_REF_FRAMES_PLUS1_OFFSET 37
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_RATE_CONTROL_MODES_OFFSET 38
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LAYOUT_PER_STREAM_OFFSET 40
/* Define Video Class Stream Error Codes. */
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_NO_ERROR 0
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_PROTECTED_CONTENT 1
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_INPUT_BUFFER_UNDERRUN 2
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_DATA_DISCONTINUITY 3
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_OUTPUT_BUFFER_UNDERRUN 4
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_OUTPUT_BUFFER_OVERRUN 5
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_FORMAT_CHANGE 6
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_STILL_IMAGE_CAPTURE_ERROR 7
/* Define Video Class Task states. */
#define UX_DEVICE_CLASS_VIDEO_STREAM_RW_STOP (UX_STATE_RESET)
#define UX_DEVICE_CLASS_VIDEO_STREAM_RW_START (UX_STATE_STEP + 1)
#define UX_DEVICE_CLASS_VIDEO_STREAM_RW_WAIT (UX_STATE_STEP + 2)
/* Define Video Class callback structure. */
struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT;
struct UX_DEVICE_CLASS_VIDEO_STRUCT;
typedef struct UX_DEVICE_CLASS_VIDEO_CALLBACKS_STRUCT
{
VOID (*ux_slave_class_video_instance_activate)(VOID *);
VOID (*ux_slave_class_video_instance_deactivate)(VOID *);
UINT (*ux_device_class_video_request)(struct UX_DEVICE_CLASS_VIDEO_STRUCT *, UX_SLAVE_TRANSFER *);
VOID *ux_device_class_video_arg;
} UX_DEVICE_CLASS_VIDEO_CALLBACKS;
typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS_STRUCT
{
VOID (*ux_device_class_video_stream_change)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, ULONG);
UINT (*ux_device_class_video_stream_request)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, UX_SLAVE_TRANSFER *);
VOID (*ux_device_class_video_stream_payload_done)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, ULONG);
} UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS;
/* Define Video Class Calling Parameter structure */
typedef struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_STRUCT
{
ULONG ux_device_class_video_payload_length;
UCHAR ux_device_class_video_payload_data[4]; /* Actually size of length. */
} UX_DEVICE_CLASS_VIDEO_PAYLOAD;
typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER_STRUCT
{
#if defined(UX_DEVICE_STANDALONE)
UINT (*ux_device_class_video_stream_parameter_task_function)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT*);
#else
ULONG ux_device_class_video_stream_parameter_thread_stack_size;
VOID (*ux_device_class_video_stream_parameter_thread_entry)(ULONG id);
#endif
UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS ux_device_class_video_stream_parameter_callbacks;
ULONG ux_device_class_video_stream_parameter_max_payload_buffer_size;
ULONG ux_device_class_video_stream_parameter_max_payload_buffer_nb;
} UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER;
typedef struct UX_DEVICE_CLASS_VIDEO_PARAMETER_STRUCT
{
ULONG ux_device_class_video_parameter_master_interface;
UX_DEVICE_CLASS_VIDEO_CALLBACKS ux_device_class_video_parameter_callbacks;
ULONG ux_device_class_video_parameter_streams_nb;
UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER *ux_device_class_video_parameter_streams;
} UX_DEVICE_CLASS_VIDEO_PARAMETER;
typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT
{
struct UX_DEVICE_CLASS_VIDEO_STRUCT *ux_device_class_video_stream_video;
UX_SLAVE_INTERFACE *ux_device_class_video_stream_interface;
UX_SLAVE_ENDPOINT *ux_device_class_video_stream_endpoint;
ULONG ux_device_class_video_stream_error;
UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS ux_device_class_video_stream_callbacks;
#if !defined(UX_DEVICE_STANDALONE)
UCHAR *ux_device_class_video_stream_thread_stack;
UX_THREAD ux_device_class_video_stream_thread;
#else
UINT (*ux_device_class_video_stream_task_function)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT*);
UINT ux_device_class_video_stream_task_state;
UINT ux_device_class_video_stream_task_status;
#endif
ULONG ux_device_class_video_stream_buffer_error_count;
UCHAR *ux_device_class_video_stream_buffer;
ULONG ux_device_class_video_stream_buffer_size;
ULONG ux_device_class_video_stream_payload_buffer_size;
UX_DEVICE_CLASS_VIDEO_PAYLOAD *ux_device_class_video_stream_transfer_pos;
UX_DEVICE_CLASS_VIDEO_PAYLOAD *ux_device_class_video_stream_access_pos;
} UX_DEVICE_CLASS_VIDEO_STREAM;
#define _ux_device_class_video_stream_error_set(s,e) do { \
(s)->ux_device_class_video_stream_error = (e); \
} while(0)
typedef struct UX_DEVICE_CLASS_VIDEO_STRUCT
{
UX_SLAVE_CLASS *ux_device_class_video_class;
UX_SLAVE_DEVICE *ux_device_class_video_device;
UX_SLAVE_INTERFACE *ux_device_class_video_interface;
ULONG ux_device_class_video_error;
UX_DEVICE_CLASS_VIDEO_CALLBACKS ux_device_class_video_callbacks;
ULONG ux_device_class_video_streams_nb;
UX_DEVICE_CLASS_VIDEO_STREAM *ux_device_class_video_streams;
} UX_DEVICE_CLASS_VIDEO;
#define _ux_device_class_video_request_error_set(v,e) do { \
(v)->ux_device_class_video_error = (e); \
} while(0)
/* Define Video Class function prototypes. */
UINT _ux_device_class_video_initialize(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_uninitialize(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_activate(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_change(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_deactivate(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_control_request(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_entry(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_ioctl(UX_DEVICE_CLASS_VIDEO *video, ULONG ioctl_function,
VOID *parameter);
UINT _ux_device_class_video_stream_get(UX_DEVICE_CLASS_VIDEO *video, ULONG stream_index, UX_DEVICE_CLASS_VIDEO_STREAM **stream);
VOID _ux_device_class_video_write_thread_entry(ULONG video_stream);
VOID _ux_device_class_video_read_thread_entry(ULONG video_stream);
ULONG _ux_device_class_video_max_payload_length(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _ux_device_class_video_reception_start(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _ux_device_class_video_read_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **payload_data, ULONG *payload_length);
UINT _ux_device_class_video_read_payload_free(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _ux_device_class_video_transmission_start(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _ux_device_class_video_write_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **buffer, ULONG *max_length);
UINT _ux_device_class_video_write_payload_commit(UX_DEVICE_CLASS_VIDEO_STREAM *video, ULONG length);
UINT _ux_device_class_video_tasks_run(VOID *instance);
UINT _ux_device_class_video_read_task_function(UX_DEVICE_CLASS_VIDEO_STREAM *stream);
UINT _ux_device_class_video_write_task_function(UX_DEVICE_CLASS_VIDEO_STREAM *stream);
UINT _uxe_device_class_video_initialize(UX_SLAVE_CLASS_COMMAND *command);
ULONG _uxe_device_class_video_max_payload_length(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _uxe_device_class_video_reception_start(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _uxe_device_class_video_read_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **payload_data, ULONG *payload_length);
UINT _uxe_device_class_video_read_payload_free(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _uxe_device_class_video_transmission_start(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _uxe_device_class_video_write_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **buffer, ULONG *max_length);
UINT _uxe_device_class_video_write_payload_commit(UX_DEVICE_CLASS_VIDEO_STREAM *video, ULONG length);
UINT _uxe_device_class_video_ioctl(UX_DEVICE_CLASS_VIDEO *video, ULONG ioctl_function, VOID *parameter);
/* Define Video Class API prototypes. */
#if defined(UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING)
#define ux_device_class_video_entry _ux_device_class_video_entry
#define ux_device_class_video_read_thread_entry _ux_device_class_video_read_thread_entry
#define ux_device_class_video_write_thread_entry _ux_device_class_video_write_thread_entry
#define ux_device_class_video_request_error_set _ux_device_class_video_request_error_set
#define ux_device_class_video_stream_error_set _ux_device_class_video_stream_error_set
#define ux_device_class_video_stream_get _ux_device_class_video_stream_get
#define ux_device_class_video_max_payload_length _uxe_device_class_video_max_payload_length
#define ux_device_class_video_reception_start _uxe_device_class_video_reception_start
#define ux_device_class_video_read_payload_get _uxe_device_class_video_read_payload_get
#define ux_device_class_video_read_payload_free _uxe_device_class_video_read_payload_free
#define ux_device_class_video_transmission_start _uxe_device_class_video_transmission_start
#define ux_device_class_video_write_payload_get _uxe_device_class_video_write_payload_get
#define ux_device_class_video_write_payload_commit _uxe_device_class_video_write_payload_commit
#define ux_device_class_video_ioctl _uxe_device_class_video_ioctl
#define ux_device_class_video_read_task_function _ux_device_class_video_read_task_function
#define ux_device_class_video_write_task_function _ux_device_class_video_write_task_function
#else
#define ux_device_class_video_entry _ux_device_class_video_entry
#define ux_device_class_video_read_thread_entry _ux_device_class_video_read_thread_entry
#define ux_device_class_video_write_thread_entry _ux_device_class_video_write_thread_entry
#define ux_device_class_video_request_error_set _ux_device_class_video_request_error_set
#define ux_device_class_video_stream_error_set _ux_device_class_video_stream_error_set
#define ux_device_class_video_stream_get _ux_device_class_video_stream_get
#define ux_device_class_video_max_payload_length _ux_device_class_video_max_payload_length
#define ux_device_class_video_reception_start _ux_device_class_video_reception_start
#define ux_device_class_video_read_payload_get _ux_device_class_video_read_payload_get
#define ux_device_class_video_read_payload_free _ux_device_class_video_read_payload_free
#define ux_device_class_video_transmission_start _ux_device_class_video_transmission_start
#define ux_device_class_video_write_payload_get _ux_device_class_video_write_payload_get
#define ux_device_class_video_write_payload_commit _ux_device_class_video_write_payload_commit
#define ux_device_class_video_ioctl _ux_device_class_video_ioctl
#define ux_device_class_video_read_task_function _ux_device_class_video_read_task_function
#define ux_device_class_video_write_task_function _ux_device_class_video_write_task_function
#endif /* UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING */
/* Determine if a C++ compiler is being used. If so, complete the standard
C conditional started above. */
#ifdef __cplusplus
}
#endif
#endif
|