Re: [patch] usb video class support

Ragner Magalhaes <[email protected]>
Newsgroups gmane.linux.usb.devel
Message-ID <[email protected]>
-------------------------------------------------------------------------
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

_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
patch-usb_video.diff (text/plain, 13.7 KB)
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 15:04:44.000000000 -0400
@@ -0,0 +1,422 @@
+/*
+ * <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))
+
+/* 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
+
+#endif /* __LINUX_USB_VIDEO_H */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.