#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
