123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- #ifndef PWC_IOCTL_H
- #define PWC_IOCTL_H
- /* (C) 2001-2004 Nemosoft Unv.
- (C) 2004-2006 Luc Saillard (luc@saillard.org)
- NOTE: this version of pwc is an unofficial (modified) release of pwc & pcwx
- driver and thus may have bugs that are not present in the original version.
- Please send bug reports and support requests to <luc@saillard.org>.
- The decompression routines have been implemented by reverse-engineering the
- Nemosoft binary pwcx module. Caveat emptor.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- /* This is pwc-ioctl.h belonging to PWC 10.0.10
- It contains structures and defines to communicate from user space
- directly to the driver.
- */
- /*
- Changes
- 2001/08/03 Alvarado Added ioctl constants to access methods for
- changing white balance and red/blue gains
- 2002/12/15 G. H. Fernandez-Toribio VIDIOCGREALSIZE
- 2003/12/13 Nemosft Unv. Some modifications to make interfacing to
- PWCX easier
- 2006/01/01 Luc Saillard Add raw format definition
- */
- /* These are private ioctl() commands, specific for the Philips webcams.
- They contain functions not found in other webcams, and settings not
- specified in the Video4Linux API.
- The #define names are built up like follows:
- VIDIOC VIDeo IOCtl prefix
- PWC Philps WebCam
- G optional: Get
- S optional: Set
- ... the function
- */
- #include <linux/types.h>
- #include <linux/version.h>
- /* Enumeration of image sizes */
- #define PSZ_SQCIF 0x00
- #define PSZ_QSIF 0x01
- #define PSZ_QCIF 0x02
- #define PSZ_SIF 0x03
- #define PSZ_CIF 0x04
- #define PSZ_VGA 0x05
- #define PSZ_MAX 6
- /* The frame rate is encoded in the video_window.flags parameter using
- the upper 16 bits, since some flags are defined nowadays. The following
- defines provide a mask and shift to filter out this value.
- This value can also be passing using the private flag when using v4l2 and
- VIDIOC_S_FMT ioctl.
- In 'Snapshot' mode the camera freezes its automatic exposure and colour
- balance controls.
- */
- #define PWC_FPS_SHIFT 16
- #define PWC_FPS_MASK 0x00FF0000
- #define PWC_FPS_FRMASK 0x003F0000
- #define PWC_FPS_SNAPSHOT 0x00400000
- #define PWC_QLT_MASK 0x03000000
- #define PWC_QLT_SHIFT 24
- /* structure for transferring x & y coordinates */
- struct pwc_coord
- {
- int x, y; /* guess what */
- int size; /* size, or offset */
- };
- /* Used with VIDIOCPWCPROBE */
- struct pwc_probe
- {
- char name[32];
- int type;
- };
- struct pwc_serial
- {
- char serial[30]; /* String with serial number. Contains terminating 0 */
- };
- /* pwc_whitebalance.mode values */
- #define PWC_WB_INDOOR 0
- #define PWC_WB_OUTDOOR 1
- #define PWC_WB_FL 2
- #define PWC_WB_MANUAL 3
- #define PWC_WB_AUTO 4
- /* Used with VIDIOCPWC[SG]AWB (Auto White Balance).
- Set mode to one of the PWC_WB_* values above.
- *red and *blue are the respective gains of these colour components inside
- the camera; range 0..65535
- When 'mode' == PWC_WB_MANUAL, 'manual_red' and 'manual_blue' are set or read;
- otherwise undefined.
- 'read_red' and 'read_blue' are read-only.
- */
- struct pwc_whitebalance
- {
- int mode;
- int manual_red, manual_blue; /* R/W */
- int read_red, read_blue; /* R/O */
- };
- /*
- 'control_speed' and 'control_delay' are used in automatic whitebalance mode,
- and tell the camera how fast it should react to changes in lighting, and
- with how much delay. Valid values are 0..65535.
- */
- struct pwc_wb_speed
- {
- int control_speed;
- int control_delay;
- };
- /* Used with VIDIOCPWC[SG]LED */
- struct pwc_leds
- {
- int led_on; /* Led on-time; range = 0..25000 */
- int led_off; /* Led off-time; range = 0..25000 */
- };
- /* Image size (used with GREALSIZE) */
- struct pwc_imagesize
- {
- int width;
- int height;
- };
- /* Defines and structures for Motorized Pan & Tilt */
- #define PWC_MPT_PAN 0x01
- #define PWC_MPT_TILT 0x02
- #define PWC_MPT_TIMEOUT 0x04 /* for status */
- /* Set angles; when absolute != 0, the angle is absolute and the
- driver calculates the relative offset for you. This can only
- be used with VIDIOCPWCSANGLE; VIDIOCPWCGANGLE always returns
- absolute angles.
- */
- struct pwc_mpt_angles
- {
- int absolute; /* write-only */
- int pan; /* degrees * 100 */
- int tilt; /* degress * 100 */
- };
- /* Range of angles of the camera, both horizontally and vertically.
- */
- struct pwc_mpt_range
- {
- int pan_min, pan_max; /* degrees * 100 */
- int tilt_min, tilt_max;
- };
- struct pwc_mpt_status
- {
- int status;
- int time_pan;
- int time_tilt;
- };
- /* This is used for out-of-kernel decompression. With it, you can get
- all the necessary information to initialize and use the decompressor
- routines in standalone applications.
- */
- struct pwc_video_command
- {
- int type; /* camera type (645, 675, 730, etc.) */
- int release; /* release number */
- int size; /* one of PSZ_* */
- int alternate;
- int command_len; /* length of USB video command */
- unsigned char command_buf[13]; /* Actual USB video command */
- int bandlength; /* >0 = compressed */
- int frame_size; /* Size of one (un)compressed frame */
- };
- /* Flags for PWCX subroutines. Not all modules honour all flags. */
- #define PWCX_FLAG_PLANAR 0x0001
- #define PWCX_FLAG_BAYER 0x0008
- /* IOCTL definitions */
- /* Restore user settings */
- #define VIDIOCPWCRUSER _IO('v', 192)
- /* Save user settings */
- #define VIDIOCPWCSUSER _IO('v', 193)
- /* Restore factory settings */
- #define VIDIOCPWCFACTORY _IO('v', 194)
- /* You can manipulate the compression factor. A compression preference of 0
- means use uncompressed modes when available; 1 is low compression, 2 is
- medium and 3 is high compression preferred. Of course, the higher the
- compression, the lower the bandwidth used but more chance of artefacts
- in the image. The driver automatically chooses a higher compression when
- the preferred mode is not available.
- */
- /* Set preferred compression quality (0 = uncompressed, 3 = highest compression) */
- #define VIDIOCPWCSCQUAL _IOW('v', 195, int)
- /* Get preferred compression quality */
- #define VIDIOCPWCGCQUAL _IOR('v', 195, int)
- /* Retrieve serial number of camera */
- #define VIDIOCPWCGSERIAL _IOR('v', 198, struct pwc_serial)
- /* This is a probe function; since so many devices are supported, it
- becomes difficult to include all the names in programs that want to
- check for the enhanced Philips stuff. So in stead, try this PROBE;
- it returns a structure with the original name, and the corresponding
- Philips type.
- To use, fill the structure with zeroes, call PROBE and if that succeeds,
- compare the name with that returned from VIDIOCGCAP; they should be the
- same. If so, you can be assured it is a Philips (OEM) cam and the type
- is valid.
- */
- #define VIDIOCPWCPROBE _IOR('v', 199, struct pwc_probe)
- /* Set AGC (Automatic Gain Control); int < 0 = auto, 0..65535 = fixed */
- #define VIDIOCPWCSAGC _IOW('v', 200, int)
- /* Get AGC; int < 0 = auto; >= 0 = fixed, range 0..65535 */
- #define VIDIOCPWCGAGC _IOR('v', 200, int)
- /* Set shutter speed; int < 0 = auto; >= 0 = fixed, range 0..65535 */
- #define VIDIOCPWCSSHUTTER _IOW('v', 201, int)
- /* Color compensation (Auto White Balance) */
- #define VIDIOCPWCSAWB _IOW('v', 202, struct pwc_whitebalance)
- #define VIDIOCPWCGAWB _IOR('v', 202, struct pwc_whitebalance)
- /* Auto WB speed */
- #define VIDIOCPWCSAWBSPEED _IOW('v', 203, struct pwc_wb_speed)
- #define VIDIOCPWCGAWBSPEED _IOR('v', 203, struct pwc_wb_speed)
- /* LEDs on/off/blink; int range 0..65535 */
- #define VIDIOCPWCSLED _IOW('v', 205, struct pwc_leds)
- #define VIDIOCPWCGLED _IOR('v', 205, struct pwc_leds)
- /* Contour (sharpness); int < 0 = auto, 0..65536 = fixed */
- #define VIDIOCPWCSCONTOUR _IOW('v', 206, int)
- #define VIDIOCPWCGCONTOUR _IOR('v', 206, int)
- /* Backlight compensation; 0 = off, otherwise on */
- #define VIDIOCPWCSBACKLIGHT _IOW('v', 207, int)
- #define VIDIOCPWCGBACKLIGHT _IOR('v', 207, int)
- /* Flickerless mode; = 0 off, otherwise on */
- #define VIDIOCPWCSFLICKER _IOW('v', 208, int)
- #define VIDIOCPWCGFLICKER _IOR('v', 208, int)
- /* Dynamic noise reduction; 0 off, 3 = high noise reduction */
- #define VIDIOCPWCSDYNNOISE _IOW('v', 209, int)
- #define VIDIOCPWCGDYNNOISE _IOR('v', 209, int)
- /* Real image size as used by the camera; tells you whether or not there's a gray border around the image */
- #define VIDIOCPWCGREALSIZE _IOR('v', 210, struct pwc_imagesize)
- /* Motorized pan & tilt functions */
- #define VIDIOCPWCMPTRESET _IOW('v', 211, int)
- #define VIDIOCPWCMPTGRANGE _IOR('v', 211, struct pwc_mpt_range)
- #define VIDIOCPWCMPTSANGLE _IOW('v', 212, struct pwc_mpt_angles)
- #define VIDIOCPWCMPTGANGLE _IOR('v', 212, struct pwc_mpt_angles)
- #define VIDIOCPWCMPTSTATUS _IOR('v', 213, struct pwc_mpt_status)
- /* Get the USB set-video command; needed for initializing libpwcx */
- #define VIDIOCPWCGVIDCMD _IOR('v', 215, struct pwc_video_command)
- struct pwc_table_init_buffer {
- int len;
- char *buffer;
- };
- #define VIDIOCPWCGVIDTABLE _IOR('v', 216, struct pwc_table_init_buffer)
- /*
- * This is private command used when communicating with v4l2.
- * In the future all private ioctl will be remove/replace to
- * use interface offer by v4l2.
- */
- #define V4L2_CID_PRIVATE_SAVE_USER (V4L2_CID_PRIVATE_BASE + 0)
- #define V4L2_CID_PRIVATE_RESTORE_USER (V4L2_CID_PRIVATE_BASE + 1)
- #define V4L2_CID_PRIVATE_RESTORE_FACTORY (V4L2_CID_PRIVATE_BASE + 2)
- #define V4L2_CID_PRIVATE_COLOUR_MODE (V4L2_CID_PRIVATE_BASE + 3)
- #define V4L2_CID_PRIVATE_AUTOCONTOUR (V4L2_CID_PRIVATE_BASE + 4)
- #define V4L2_CID_PRIVATE_CONTOUR (V4L2_CID_PRIVATE_BASE + 5)
- #define V4L2_CID_PRIVATE_BACKLIGHT (V4L2_CID_PRIVATE_BASE + 6)
- #define V4L2_CID_PRIVATE_FLICKERLESS (V4L2_CID_PRIVATE_BASE + 7)
- #define V4L2_CID_PRIVATE_NOISE_REDUCTION (V4L2_CID_PRIVATE_BASE + 8)
- struct pwc_raw_frame {
- __le16 type; /* type of the webcam */
- __le16 vbandlength; /* Size of 4lines compressed (used by the decompressor) */
- __u8 cmd[4]; /* the four byte of the command (in case of nala,
- only the first 3 bytes is filled) */
- __u8 rawframe[0]; /* frame_size = H/4*vbandlength */
- } __attribute__ ((packed));
- #endif
|