USB Video Class Support

This patch holds USB constants and structures defined
by the USB Device Class Definition for Video Devices.
 
Signed-off-by: Ragner N Magalhaes <[EMAIL PROTECTED]>
---

Index: 2.6-dev/include/linux/usb/video.h
===================================================================
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
+++ 2.6-dev/include/linux/usb/video.h   2007-03-20 14:17:56.000000000
-0400
@@ -0,0 +1,423 @@
+/*
+ * <linux/usb/video.h> -- USB Video definitions.
+ *
+ * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT
+ * Developed for INdT by Ragner N Magalhaes
+ * Ragner N Magalhaes <[EMAIL PROTECTED]>
+ *
+ * This software is distributed under the terms of the GNU General
Public
+ * License ("GPL") version 2, as published by the Free Software
Foundation.
+ *
+ * This file holds USB constants and structures defined
+ * by the USB Device Class Definition for Video Devices.
+ * Comments below reference relevant sections of that document:
+ *
+ * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip
+ */
+
+#ifndef __LINUX_USB_VIDEO_H
+#define __LINUX_USB_VIDEO_H
+
+#include <linux/types.h>
+
+/* Video Interface Subclass Codes */
+#define USB_SC_VIDEOCONTROL            0x01
+#define USB_SC_VIDEOSTREAMING          0x02
+#define USB_SC_INTERFACE_COLLECTION    0x03
+
+/* Video Interface Protocol Codes */
+#define USB_PROTOCOL_UNDEFINED         0x00
+
+/* Video Class-Specific VC Interface Descriptor Subtypes */
+#define USB_VC_HEADER                  0x01
+#define USB_VC_INPUT_TERMINAL          0x02
+#define USB_VC_OUTPUT_TERMINAL         0x03
+#define USB_VC_SELECTOR_UNIT           0x04
+#define USB_VC_PROCESSING_UNIT         0x05
+#define USB_VC_EXTERNSION_UNIT         0x06
+
+/* Video Class-Specific VS Interface Descriptor Subtype */
+#define USB_VS_INPUT_HEADER            0x01
+#define USB_VS_OUTPUT_HEADER           0x02
+#define USB_VS_STILL_IMAGE_FRAME       0x03
+#define USB_VS_FORMAT_UNCOMPRESSED     0x04
+#define USB_VS_FRAME_UNCOMPRESSED      0x05
+#define USB_VS_FORMAT_MJPEG            0x06
+#define USB_VS_FRAME_MJPEG             0x07
+/* Reserved 0x08 */
+/* Reserved 0x09 */
+#define USB_VS_FORMAT_MPEG2TS          0x0a
+/* Reserved 0x0B */
+#define USB_VS_FORMAT_DV               0x0c
+#define USB_VS_COLORFORMAT             0x0d
+/* Reserved 0x0e */
+/* Reserved 0x0f */
+#define USB_VS_FORMAT_FRAME_BASED      0x10
+#define USB_VS_FRAME_FRAME_BASED       0x11
+#define USB_VS_FORMAT_STREAM_BASED     0x12
+
+/* Video Class-Specific Endpoint Descriptor Subtype */
+#define USB_EP_GENERAL                 0x01
+#define USB_EP_ENDPOINT                0x02
+#define USB_EP_INTERRUPT               0x03
+
+/* Video Class-Specific Request Codes */
+#define USB_REQ_SET_CUR                0x01
+#define USB_REQ_GET_CUR                0x81
+#define USB_REQ_GET_MIN                0x82
+#define USB_REQ_GET_MAX                0x83
+#define USB_REQ_GET_RES                0x84
+#define USB_REQ_GET_LEN                0x85
+#define USB_REQ_GET_INFO               0x86
+#define USB_REQ_GET_DEF                0x87
+
+/* VideoControl Interface Control Selectors */
+#define USB_VC_VID_POWER_MOD_CONTROL   0x01
+#define USB_VC_REQ_ERROR_CODE_CONTROL  0x02
+/* Reserved 0x03 */
+
+/* Selector Unit Control Selectors */
+#define USB_INPUT_SELECT_CONTROL       0x01
+
+/* Camera Terminal Controls Selectors */
+#define USB_CT_SCANNING_MOD_CONTROL    0x01
+#define USB_CT_AE_MOD_CONTROL          0x02
+#define USB_CT_AE_PRIORITY_CONTROL     0x03
+#define USB_CT_EXPO_TIME_ABS_CONTROL   0x04
+#define USB_CT_EXPO_TIME_REL_CONTROL   0x05
+#define USB_CT_FOCUS_ABS_CONTROL       0x06
+#define USB_CT_FOCUS_REL_CONTROL       0x07
+#define USB_CT_IRIS_ABS_CONTROL        0x08
+#define USB_CT_IRIS_REL_CONTROL        0x0a
+#define USB_CT_ZOOM_ABS_CONTROL        0x0b
+#define USB_CT_ZOOM_REL_CONTROL        0x0c
+#define USB_CT_PANTILT_ABS_CONTROL     0x0d
+#define USB_CT_PANTILT_REL_CONTROL     0x0e
+#define USB_CT_ROLL_ABS_CONTROL        0x0f
+#define USB_CT_ROLL_REL_CONTROL        0x10
+#define USB_CT_PRIVACY_CONTROL         0x11
+
+/* Processing Unit Control Selectors */
+#define USB_PU_BL_CMPENSATION_CONTROL  0x01
+#define USB_PU_BRIGHTNESS_CONTROL      0x02
+#define USB_PU_CONTRAST_CONTROL        0x03
+#define USB_PU_GAIN_CONTROL            0x04
+#define USB_PU_POWER_LINE_FREQ_CONTROL 0x05
+#define USB_PU_HUE_CONTROL             0x06
+#define USB_PU_SATURATION_CONTROL      0x07
+#define USB_PU_SHARPNESS_CONTROL       0x08
+#define USB_PU_GAMMA_CONTROL           0x09
+#define USB_PU_WT_BL_TMP_CONTROL       0x0a
+#define USB_PU_WT_BL_TMP_AUT_CONTROL   0x0b
+#define USB_PU_WT_BL_CMP_CONTROL       0x0c
+#define USB_PU_WT_BL_CMP_AUT_CONTROL   0x0d
+#define USB_PU_DIG_MULT_CONTROL        0x0e
+#define USB_PU_DIG_MULT_LIM_CONTROL    0x0f
+#define USB_PU_HUE_AUTO_CONTROL        0x10
+#define USB_PU_ANALOG_V_STAND_CONTROL  0x11
+#define USB_PU_ANALOG_LCK_STAT_CONTROL 0x12
+
+/* VideoStream Interface Control Selectors */
+#define USB_VS_PROBE_CONTROL           0x01
+#define USB_VS_COMMIT_CONTROL          0x02
+#define USB_VS_STILL_PROBE_CONTROL     0x03
+#define USB_VS_STILL_COMMIT_CONTROL    0x04
+#define USB_VS_STILL_IMG_TRIGG_CONTROL 0x05
+#define USB_VS_STRM_ERR_CONDE_CONTROL  0x06
+#define USB_VS_GEN_KEY_FRAME_CONTROL   0x07
+#define USB_VS_UPDT_FRAME_SEG_CONTROL  0x08
+#define USB_VS_SYNCH_DELAY_CONTROL     0x09
+
+/* USB Terminal Types */
+#define USB_TT_VENDOR_SPECIFIC         0x0100
+#define USB_TT_STREAMING               0x0101
+
+/* Input Terminal Types */
+#define USB_ITT_VENDOR_SPECIFIC        0x0200
+#define USB_ITT_CAMERA                 0x0201
+#define SUB_ITT_MEDIA_TRANSP_INPUT     0x0202
+
+/* Output Terminal Types */
+#define USB_OTT_VENDOR_SPECIFIC        0x0300
+#define USB_OTT_DISPLAY                0x0301
+#define USB_OTT_MEDIA_TRANSP_OUTPUT    0x0302
+
+/* External Terminal Types */
+#define USB_EXTERNAL_VENDOR_SPECIFIC   0x0400
+#define USB_COMPOSITE_CONNECTOR        0x0401
+#define USB_SVIDEO_CONNECTOR           0x0402
+#define USB_COMPONENT_CONNECTOR        0x0403
+
+/* Class-specific VC Interface Header Descriptor */
+struct usb_vc_header_descriptor {
+       __u8  bLength;                  /* 12+n  bytes */
+       __u8  bDescriptorType;          /* CS_INTERFACE */
+
+       __u8  bDescriptorSubtype;       /* VC_HEADER */
+       __le16  bcdUVC;
+       __le16  wTotalLength;
+       __le32  dwClockFrequency;
+       __u8  bInCollection;            /* n */
+       __u8  baInterfaceNr[];          /* [n] */
+} __attribute__ ((packed));
+
+#define USB_VC_HEADER_SIZE(n)          (12+(n))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_USB_VC_HEADER_DESCRIPTOR(n)                    \
+struct usb_vc_header_descriptor_##n {                          \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __le16 bcdUVC;                                          \
+       __le16 wTotalLength;                                    \
+       __le32 dwClockFrequency;                                \
+       __u8  bInCollection;                                    \
+       __u8  baInterfaceNr[n];                                 \
+} __attribute__ ((packed))
+
+#endif
+
+/* Input Terminal Descriptor */
+struct usb_input_terminal_descriptor {
+       __u8  bLength;                  /* 8  bytes */
+       __u8  bDescriptorType;          /* CS_INTERFACE */
+
+       __u8  bDescriptorSubtype;       /* VC_INPUT_TERMINAL */
+       __u8  bTerminalID;
+       __le16 wTerminalType;
+       __u8  bAssocTerminal;
+       __u8  iTerminal;
+
+/* Depending on the Terminal Type, certain Input Terminal descriptors
have
+ * additional fields. The descriptors for these special Terminal types
are
+ * described in separate sections specific to those Terminals, and in
+ * accompanying documents.
+ */
+} __attribute__ ((packed));
+
+#define USB_INPUT_TERMINAL_SIZE        8
+
+/* Output Terminal Descriptor */
+struct usb_output_terminal_descriptor {
+       __u8  bLength;                  /* 9  bytes */
+       __u8  bDescriptorType;          /* CS_INTERFACE */
+
+       __u8  bDescriptorSubtype;       /* VC_OUTPUT_TERMINAL */
+       __u8  bTerminalID;
+       __le16 wTerminalType;
+       __u8  bAssocTerminal;
+       __u8  bSourceID;
+       __u8  iTerminal;
+
+/* Depending on the Terminal Type, certain Output Terminal descriptors
have
+ * additional fields. The descriptors for these special Terminal types
are
+ * described in separate sections specific to those Terminals, and in
+ * accompanying documents.
+ */
+} __attribute__ ((packed));
+
+#define USB_OUTPUT_TERMINAL_SIZE       9
+
+/* Camera Terminal Descriptor */
+struct usb_cam_terminal_descriptor {
+       __u8  bLength;                  /* 15+n bytes */
+       __u8  bDescriptorType;          /* CS_INTERFACE */
+
+       __u8  bDescriptorSubType;       /* VC_INPUT_TERMINAL */
+       __u8  bTerminalID;
+       __le16 wTerminalType;           /* ITT_CAMERA */
+       __u8  bAssocTerminal;
+       __u8  iTerminal;
+       __le16 wObjectFocalLengthMin;
+       __le16 wObjectFocalLengthMax;
+       __le16 wOcularFocalLength;
+       __u8  bControlSize;             /* n */
+       __u8  bmControls[];             /* [n] */
+} __attribute__ ((packed));
+
+#define USB_CAM_TERMINAL_SIZE(n)       (15+(n))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_USB_CAM_TERMINAL_DESCRIPTOR(n)                 \
+struct usb_cam_terminal_descriptor_##n {                       \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubType;                               \
+       __u8  bTerminalID;                                      \
+       __le16 wTerminalType;                                   \
+       __u8  bAssocTerminal;                                   \
+       __u8  iTerminal;                                        \
+       __le16 wObjectFocalLengthMin;                           \
+       __le16 wObjectFocalLengthMax;                           \
+       __le16 wOcularFocalLength;                              \
+       __u8  bControlSize;                                     \
+       __u8  bmControls[n];                                    \
+} __attribute__ ((packed))
+
+/* Selector Unit Descriptor */
+#define USB_SELECTOR_UNIT_SIZE(p)      (6+(p))
+
+#define DECLARE_USB_SELECTOR_UNIT_DESCRIPTOR(p)                \
+struct usb_selector_unit_descriptor_##p {                      \
+       __u8  bLength;                  /* 6+p bytes */         \
+       __u8  bDescriptorType;          /* CS_INTERFACE */      \
+                                                               \
+       __u8  bDescriptorSubType;       /* VC_SELECTOR_UNIT */  \
+       __u8  bUnitID;                                          \
+       __u8  bNrInPins;                /* p */                 \
+       __u8  baSourceID[p];                                    \
+       __u8 iSelector;                                         \
+} __attribute__ ((packed))
+
+/* Processing Unit Descriptor */
+#define USB_PROCESSING_UNIT_SIZE(n)    (10+(n))
+
+#define DECLARE_USB_PROCESSING_UNIT_DESCRIPTOR(n)              \
+struct usb_processing_unit_descriptor_##n {                    \
+       __u8  bLength;                  /* 10+n bytes */        \
+       __u8  bDescriptorType;          /* CS_INTERFACE */      \
+                                                               \
+       __u8  bDescriptorSubType;       /* VC_PROCESSING_UNIT */\
+       __u8  bUnitID;                                          \
+       __u8  bSourceID;                                        \
+       __le16 wMaxMultiplier;                                  \
+       __u8  bControlSize;             /* n */                 \
+       __u8  bmControls[n];                                    \
+       __u8  iProcessing;                                      \
+       __u8  bmVideoStandards;                                 \
+} __attribute__ ((packed))
+
+/* Extension Unit Descriptor */
+#define USB_EXTENSION_UNIT_SIZE(p,n)   (24+(p)+(n))
+
+#define DECLARE_USB_EXTENSION_UNIT_DESCRIPTOR(p,n)             \
+struct usb_extension_unit_desciptor_##p_##n {                  \
+       __u8  bLength;                  /* 24+p+n bytes */      \
+       __u8  bDescriptorType;          /* CS_INTERFACE */      \
+                                                               \
+       __u8  bDescriptorSubType;       /* VC_EXTENSION_UNIT */ \
+       __u8  bUnitID;                                          \
+       __u8  guidExtensionCode[16];                            \
+       __u8  bNumControls;                                     \
+       __u8  bNrInPins;                /* p */                 \
+       __u8  baSouceID[p];                                     \
+       __u8  bControlSize;             /* n */                 \
+       __u8  bmControls[n];                                    \
+       __u8  iExtension;                                       \
+} __attribute__ ((packed))
+
+/* Class-specific VC Interrupt Endpoint Descriptor */
+struct usb_vc_interrupt_endpoint_descriptor {
+       __u8  bLength;                  /* 5 bytes */
+       __u8  bDescriptorType;          /* CS_ENDPOINT */
+
+       __u8  bDescriptorSubType;       /* EP_INTERRUPT */
+       __le16 wMaxTransferSize;
+} __attribute__ ((packed));
+
+#define USB_VC_INTERRUPT_ENDPOINT_SIZE 5
+
+/* Class-specific VS Interface Input Header Descriptor */
+struct usb_vs_input_header_descriptor {
+       __u8  bLength;                  /* 13+(p*n) bytes */
+       __u8  bDescriptorType;          /* CS_INTERFACE */
+
+       __u8  bDescriptorSubType;       /* VS_INPUT_HEADER */
+       __u8  bNumFormats;              /* p */
+       __le16 wTotalLength;
+       __u8  bEndpointAddress;
+       __u8  bmInfo;
+       __u8  bTerminalLink;
+       __u8  bStillCaptureMethod;
+       __u8  bTriggerSupport;
+       __u8  bTriggerUsage;
+       __u8  bControlSize;             /* n */
+       __u8  bmaControls[];            /* [p][n] */
+} __attribute__ ((packed));
+
+#define USB_VS_INPUT_HEADER_SIZE(p,n)  (13+((p)*(n)))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_USB_VS_INPUT_HEADER_DESCRIPTOR(p,n)            \
+struct usb_vs_input_header_descriptor_##px##n {                \
+       __u8  bLength;                  /* 13+(p*n) bytes */    \
+       __u8  bDescriptorType;          /* CS_INTERFACE */      \
+                                                               \
+       __u8  bDescriptorSubType;       /* VS_INPUT_HEADER */   \
+       __u8  bNumFormats;              /* p */                 \
+       __le16 wTotalLength;                                    \
+       __u8  bEndpointAddress;                                 \
+       __u8  bmInfo;                                           \
+       __u8  bTerminalLink;                                    \
+       __u8  bStillCaptureMethod;                              \
+       __u8  bTriggerSupport;                                  \
+       __u8  bTriggerUsage;                                    \
+       __u8  bControlSize;             /* n */                 \
+       __u8  bmaControls[p*n];         /* [p][n] */            \
+} __attribute__ ((packed))
+
+/* Class-specific VS Interface Output Header Descriptor */
+struct usb_vs_output_header_descriptor {               \
+       __u8  bLength;                  /* 9+(p*n) bytes */
+       __u8  bDescriptorType;          /* CS_INTERFACE */
+
+       __u8  bDescriptorSubType;       /* VS_OUTPUT_HEADER */
+       __u8  bNumFormats;              /* p */
+       __le16 wTotalLength;
+       __u8  bEndpointAddress;
+       __u8  bTerminalLink;
+       __u8  bControlSize;             /* n */
+       __u8  bmaControls[];            /* [p][n] */
+} __attribute__ ((packed));
+
+#define USB_VS_OUTPUT_HEADER_SIZE(p,n) (9+((p)*(n)))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_USB_VS_OUTPUT_HEADER_DESCRIPTOR(p,n)           \
+struct usb_vs_output_header_descriptor_##px##n {               \
+       __u8  bLength;                  /* 9+(p*n) bytes */     \
+       __u8  bDescriptorType;          /* CS_INTERFACE */      \
+                                                               \
+       __u8  bDescriptorSubType;       /* VS_OUTPUT_HEADER */  \
+       __u8  bNumFormats;              /* p */                 \
+       __le16 wTotalLength;                                    \
+       __u8  bEndpointAddress;                                 \
+       __u8  bTerminalLink;                                    \
+       __u8  bControlSize;             /* n */                 \
+       __u8  bmaControls[p*n];         /* [p][n] */            \
+} __attribute__ ((packed))
+
+/* Still Image Frame Descriptor */
+#define USB_STILL_IMAGE_FRAME_SIZE(n,m)        (5+(4*(n))+(m))
+
+struct usb_image_pattern {
+       __le16  wWidth;
+       __le16  wHeight;
+};
+
+#define DECLARE_USB_STILL_IMAGE_FRAME_DESCRIPTOR(n,m)          \
+struct usb_still_image_frame_descriptor_##n_##m {              \
+       __u8  bLength;          /* 10+(4*n)-4+m-1 bytes */      \
+       __u8  bDescriptorType;          /* CS_INTERFACE */      \
+                                                               \
+       __u8  bDescriptorSubType; /* VS_STILL_IMAGE_FRAME */    \
+       __u8  bNumImageSizePatterns;    /* n */                 \
+       struct usb_image_pattern p[n];  /* [n] */               \
+       __u8  bNumCompressionPattern;   /* m */                 \
+       __u8  bCompression[m];          /* [m] */               \
+} __attribute__ ((packed))
+
+/* Color Matching Descriptor */
+struct usb_color_matching_descriptor {
+       __u8  bLength;                  /* 6 bytes */
+       __u8  bDescriptorType;          /* CS_INTERFACE */
+
+       __u8  bDescriptorSubType;       /* VS_COLORFORMAT */
+       __u8  bColorPrimaries;
+       __u8  bTransferCharacteristics;
+       __u8  bMatrixCoefficients;
+} __attribute__ ((packed));
+
+#define USB_COLOR_MATCHING_SIZE        6
+



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to