blob: 7c6bca1d40f5f82db9627afcfbd2520763cae47b [file] [log] [blame]
#ifndef LINUX_SENSOR_H
#define LINUX_SENSOR_H
/****************************************************************************
* Include files
****************************************************************************/
#include <linux/ioctl.h>
/****************************************************************************
* Macros
****************************************************************************/
#define CAMERA_ALLOC_BIG_MEM 1
#define CAMERA_PIXEL_WIDTH_MAX (640)
#define CAMERA_PIXEL_HEIGHT_MAX (480)
#define CAMERA_BYTES_PER_PIXEL (2)
#define CAMERA_BUFFER_NUM (3)
#define SSP_DMA_COUNT_LIMIT (60 * 1024)
#define CAMERA_PICTURE_SIZE (CAMERA_PIXEL_WIDTH_MAX * CAMERA_PIXEL_HEIGHT_MAX * CAMERA_BYTES_PER_PIXEL)
#define CAMERA_DMA_COUNT_PER_PICTURE1 (CAMERA_PICTURE_SIZE / SSP_DMA_COUNT_LIMIT)
#define CAMERA_DMA_COUNT_PER_PICTURE2 (CAMERA_PICTURE_SIZE % SSP_DMA_COUNT_LIMIT ? 1 : 0)
#define CAMERA_DMA_COUNT_PER_PICTURE (CAMERA_DMA_COUNT_PER_PICTURE1 + CAMERA_DMA_COUNT_PER_PICTURE2)
#define CAMERA_GC0310_PICTURE_SIZE CAMERA_PICTURE_SIZE
#define CAMERA_GC0310_DMA_COUNT_PER_PICTURE1 CAMERA_DMA_COUNT_PER_PICTURE1
#define CAMERA_GC0310_DMA_COUNT_PER_PICTURE2 CAMERA_DMA_COUNT_PER_PICTURE2
#define CAMERA_GC0310_DMA_COUNT_PER_PICTURE CAMERA_DMA_COUNT_PER_PICTURE
#define CAMERA_GC6133_PIXEL_WIDTH_MAX (320)
#define CAMERA_GC6133_PIXEL_HEIGHT_MAX (240)
#define CAMERA_GC6133_PICTURE_SIZE (CAMERA_GC6133_PIXEL_WIDTH_MAX * CAMERA_GC6133_PIXEL_HEIGHT_MAX * CAMERA_BYTES_PER_PIXEL)
#define CAMERA_GC6133_DMA_COUNT_PER_PICTURE1 (CAMERA_GC6133_PICTURE_SIZE / SSP_DMA_COUNT_LIMIT)
#define CAMERA_GC6133_DMA_COUNT_PER_PICTURE2 (CAMERA_GC6133_PICTURE_SIZE % SSP_DMA_COUNT_LIMIT ? 1 : 0)
#define CAMERA_GC6133_DMA_COUNT_PER_PICTURE (CAMERA_GC6133_DMA_COUNT_PER_PICTURE1 + CAMERA_GC6133_DMA_COUNT_PER_PICTURE2)
#if CAMERA_ALLOC_BIG_MEM
typedef unsigned char* sensor_buff_addr;
#else
typedef unsigned char* sensor_buff_addr[CAMERA_BUFFER_NUM][CAMERA_DMA_COUNT_PER_PICTURE];
#endif
typedef unsigned int u32;
typedef unsigned short u16;
/****************************************************************************
* Types
****************************************************************************/
enum sensor_id {
SENSOR_MAIN, /* main sensor */
SENSOR_SUB, /* sub sensor */
MAX_SENSOR_ID
};
enum sensor_type {
SENSOR_OV9656,
SENSOR_OV7670,
SENSOR_MT9D113,
SENSOR_MT9V113,
SENSOR_HI704,
SENSOR_GC6133,
SENSOR_GC0310,
MAX_SENSOR_DEV_TYPE
};
enum sensor_pixel_fmt {
PIXEL_YCbCr400,
PIXEL_YCbCr420,
PIXEL_YUYV,
// PIXEL_YCbCr422 = PIXEL_YUYV,
// PIXEL_YCbCr422H = PIXEL_YUYV,
// PIXEL_YCbCr422V = PIXEL_YUYV,
PIXEL_YCbCr444,
PIXEL_RGB_PLANAR,
PIXEL_RGB555,
PIXEL_RGB565,
PIXEL_RGB666,
PIXEL_RGB888,
PIXEL_ARGB888,
MAX_PIXEL_FORMAT
};
enum sensor_buff_nr
{
FRAME_BUFFER0,
FRAME_BUFFER1,
FRAME_BUFFER2,
FRAME_BUFFERNUM
};
enum sensor_state {
SENSOR_OPEN= 0x0,
SENSOR_START = 0x1,
SENSOR_STANDBY = 0x2,
SENSOR_PREP_CLOSE = 0x3,
SENSOR_CLOSE = 0x4,
MAX_SENSOR_STATE
};
enum sensor_output_size {
OUTPUT_IMG_SXGA =0,
OUTPUT_IMG_VGA,
OUTPUT_IMG_QVGA,
OUTPUT_IMG_QQVGA,
OUTPUT_IMG_CIF ,
OUTPUT_IMG_QCIF,
OUTPUT_IMG_QQCIF ,
OUTPUT_IMG_USVGA,
MAX_OUTPUT_IMG_SIZE
};
enum sensor_night_level {
NIGHT_LEVEL_0, /* level 0*/
NIGHT_LEVEL_1, /* level 1 */
NIGHT_LEVEL_2, /* level 2 */
MAX_NIGHT_LEVEL
};
enum sensor_zoom_level {
ZOOM_LEVEL_0, /* level 0 */
ZOOM_LEVEL_1, /* level 1 */
ZOOM_LEVEL_2, /* level 2 */
ZOOM_LEVEL_3, /* level 3 */
ZOOM_LEVEL_4, /* level 4 */
MAX_ZOOM_LEVEL
};
enum sensor_bright_level {
BRI_LEVEL_0 = 0, /* level 0 (darkest) */
BRI_LEVEL_1, /* level 1 */
BRI_LEVEL_2, /* level 2 */
BRI_LEVEL_3, /* level 3 */
BRI_LEVEL_4, /* level 4 */
BRI_LEVEL_5, /* level 5 */
BRI_LEVEL_6, /* level 6 */
MAX_BRI_LEVEL
};
enum sensor_contrast_level {
CON_LEVEL_0 = 0, /* level 0 (thinnest) */
CON_LEVEL_1, /* level 1 */
CON_LEVEL_2, /* level 2 */
CON_LEVEL_3, /* level 3 */
CON_LEVEL_4, /* level 4 */
CON_LEVEL_5, /* level 5 */
CON_LEVEL_6, /* level 6 (sharpest) */
MAX_CON_LEVEL
};
enum sensor_saturation_level {
SAT_LEVEL_0,
SAT_LEVEL_1,
SAT_LEVEL_2,
SAT_LEVEL_3,
SAT_LEVEL_4,
MAX_SAT_LEVEL
};
enum sensor_effect_mode {
EFF_NORMAL = 0,
EFF_ANTIQUE,
EFF_BLUISH,
EFF_GREENISH,
EFF_REDISH,
EFF_YELLOW,
EFF_NEGATIVE,
EFF_BLACK_AND_WHITE,
EFF_BW_NEGATIVE,
EFF_SEPIA_GREEN,
MAX_EFF_TYPE
};
enum sensor_white_balance_mode {
WB_AUTO = 0,
WB_INSCANDSENCE,
WB_FLUORESCENT,//CWF
// WB_FLUORECWF, //cool white FLUORESCENT
WB_TUNGSTEN,
WB_SUNNY,
WB_CLOUDY,
MAX_WB_MODE
};
enum sensor_light_mode {
LIGTH_AUTO, /* auto */
LIGTH_SUNNY, /* sunny */
LIGTH_CLOUDY, /* cloudy */
LIGTH_OFFICE, /* office */
LIGTH_HOME, /* home */
LIGTH_NIGHT, /* night */
MAX_LIGTH_MODE
};
enum sensor_expo_level {
EV_NEG_4_3 = 0, /* EV -2 */
EV_NEG_3_3, /* EV -1.5 */
EV_NEG_2_3, /* EV -1 */
EV_NEG_1_3, /* EV -0.5 */
EV_ZERO, /* EV 0 */
EV_POS_1_3, /* EV +0.5 */
EV_POS_2_3, /* EV +1 */
EV_POS_3_3, /* EV +1.5 */
EV_POS_4_3, /* EV +2 */
MAX_EV_LEVEL
};
enum sensor_data_fmt {
HAL_CAM_WORD_MODE_YUV,
HAL_CAM_WORD_MODE_RGB,
MAX_HAL_CAM_WORD_MODE
};
enum sensor_mirror_mode {
MIR_NONE,
MIR_V,
MIR_H,
MIR_V_H,
MAX_MIR_TYPE
};
enum sensor_antiflicker_mode {
FLICKER_50HZ,
FLICKER_60HZ,
MAX_FLICKER_TYPE
};
enum sensor_frame_rate {
fps714 = 0,
fps75 ,
fps143 ,
fps15 ,
fps25 ,
fps30 ,
MAX_FPS_SIZE
};
struct sensor_yuv_buff {
u32 *y;
u32 *cb;
u32 *cr;
};
union sensor_image_data{
struct sensor_yuv_buff yuv;
u32* stream_databuf;
u32* argb_databuf;
};
struct sensor_dev_info {
enum sensor_type dev_type; /* the sensor now using*/
enum sensor_id active_sensor; /* the sensor now using*/
u16 width; /* max pixel width of the actived sensor */
u16 height; /* max pixel height of the actived sensor */
u16 pixel_bytes;
int fuc_set_zoom; /*whether to support set_zoom function */
int fuc_set_imgsize; /*whether to support set_img_Size function */
int fuc_set_effect; /*whether to support set_effect function */
int fuc_set_mirrorflip; /*whether to support set MirrorFlip function */
int fuc_set_brightness; /*whether to support set Brightness function */
int fuc_set_contrast; /*whether to support SetContrast function */
int fuc_set_saturation; /*whether to support SetSaturation function */
int fuc_set_whitebalance; /*whether to support SetWhiteBalance function */
int fuc_set_lightmode; /*whether to support SetLightMode function */
int fuc_set_nightmode; /*whether to support SetNightMode function */
int fuc_set_framerate; /*whether to support SetFrameRate function */
int fuc_set_antiflicker;
};
struct sensor_data_info {
u32 width;
u32 height;
enum sensor_pixel_fmt fmt;
enum sensor_buff_nr nr;
union sensor_image_data buff;
};
struct sensor_yuv_buff_size {
unsigned int y_size;
unsigned int u_size;
unsigned int v_size;
};
union sensor_image_buff_size{
unsigned int stream_buff_size;
unsigned int argb_buff_size;
struct sensor_yuv_buff_size buff_size;
};
#define IOCTL_CAM_START _IO('c', 1)
#define IOCTL_CAM_STOP _IO('c', 2)
#define IOCTL_CAM_SENSOR_GET_INFO _IOR('c', 3,struct sensor_dev_info)
#define IOCTL_CAM_SET_EFFECT _IOW('c',4,enum sensor_effect_mode)
#define IOCTL_CAM_SET_MIRRORFLIP _IOW('c',5,enum sensor_mirror_mode)
#define IOCTL_CAM_SET_BRIGHTNESS _IOW('c',6,enum sensor_bright_level)
#define IOCTL_CAM_SET_CONTRAST _IOW('c',7,enum sensor_contrast_level)
#define IOCTL_CAM_SET_WHITE_BALANCE _IOW('c',8,enum sensor_white_balance_mode)
#define IOCTL_CAM_GET_ONEFRAME _IOR('c',9,struct sensor_data_info)
#define IOCTL_CAM_FREE_FRAME_BUFFER _IOW('c',10,enum sensor_buff_nr)
#define IOCTL_CAM_SET_ANTIFLICKER _IOW('c',11,enum sensor_antiflicker_mode)
#define IOCTL_CAM_SET_PREVIEW _IO('c',12)
#define IOCTL_CAM_SET_CAPTURE _IO('c',13)
#endif /*LINUX_SENSOR_H*/