📄 image_sensor.h
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* image_sensor.h
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#ifndef _IMAGE_SENSOR_H
#define _IMAGE_SENSOR_H
#include "isp_if.h"
//------------------------Engineer mode---------------------------------
#define FACTORY_START_ADDR (70)
typedef enum register_index {
AWB_GAIN_R_INDEX=FACTORY_START_ADDR,
AWB_GAIN_B_INDEX,
SENSOR_DBLC_INDEX,
GAMMA_ENABLE_INDEX,
CMMCLK_CURRENT_INDEX,
FACTORY_END_ADDR
} FACTORY_REGISTER_INDEX;
typedef enum cct_register_index {
GLOBAL_GAIN_INDEX = 0,
PRE_GAIN_R_INDEX,
PRE_GAIN_B_INDEX,
CCT_END_ADDR
} CCT_REGISTER_INDEX;
typedef struct {
kal_uint8 item_name_ptr[50]; // item name
kal_int32 item_value; // item value
kal_bool is_true_false; // is this item for enable/disable functions
kal_bool is_read_only; // is this item read only
kal_bool is_need_restart; // after set this item need restart
kal_int32 min; // min value of item value
kal_int32 max; // max value of item value
} ENG_sensor_info;
// Prototypes FOR ENGINEER FACTORY MODE
void get_sensor_group_count(kal_int32* sensor_count_ptr);
void get_sensor_group_info(kal_uint16 group_idx, kal_int8* group_name_ptr, kal_int32* item_count_ptr);
void get_sensor_item_info(kal_uint16 group_idx,kal_uint16 item_idx, ENG_sensor_info* info_ptr);
kal_bool set_sensor_item_info(kal_uint16 group_idx, kal_uint16 item_idx, kal_int32 item_value);
//------------------------Engineer mode---------------------------------
typedef struct {
kal_uint32 addr;
kal_uint32 para;
} sensor_reg_struct;
typedef struct {
sensor_reg_struct reg[FACTORY_END_ADDR];
sensor_reg_struct cct[CCT_END_ADDR];
} sensor_data_struct;
// write camera_para to sensor register
void camera_para_to_sensor(void);
// update camera_para from sensor register
void sensor_to_camera_para(void);
// config sensor callback function
void image_sensor_func_config(void);
// Compact Image Sensor Module Power ON/OFF
void cis_module_power_on(kal_bool on);
/* HW PRODUCE I2C SIGNAL TO CONTROL SENSOR REGISTER */
//#define HW_SCCB
typedef enum _SENSOR_TYPE {
CMOS_SENSOR = 0,
CCD_SENSOR
} SENSOR_TYPE;
typedef struct {
kal_uint16 id;
SENSOR_TYPE type;
} SensorInfo;
/* MAXIMUM EXPLOSURE LINES USED BY AE */
extern kal_uint16 MAX_EXPOSURE_LINES; // must be defined but not referenced by YUV driver
extern kal_uint8 MIN_EXPOSURE_LINES; // must be defined but not referenced by YUV driver
/* DEFINITION USED BY CCT */
extern SensorInfo g_CCT_MainSensor; // must be defined but not referenced by YUV driver
extern kal_uint8 g_CCT_FirstGrabColor; // must be defined but not referenced by YUV driver
// these two have no effect in YUV sensor driver
#define VGA_PERIOD_PIXEL_NUMS (0) // # of PCLK in one HSYNC
#define VGA_PERIOD_LINE_NUMS (0) // # of HSYNC in one VSYNC
// Blank size setting for Webcam mode
#define WEBCAM_MODE_VBLANK (150)
#define WEBCAM_MODE_VBLANK_CLIP (WEBCAM_MODE_VBLANK / 2)
#define WEBCAM_MODE_HBLANK (300)
// sensor size
#define IMAGE_SENSOR_VGA_WIDTH (640)
#define IMAGE_SENSOR_VGA_HEIGHT (480)
// total HBLANK period = (HBLANK_DEFAULT + HBLANK_EXTRA_XXXXX) RAW pixels
// total one line time = [(HBLANK_DEFAULT + HBLANK_EXTRA_XXXXX) + IMAGE_SENSOR_VGA_WIDTH]
// in RAW pixel unit
#define HBLANK_DEFAULT (24) // RAW pixels, always has this count in HBLANK period
#define HBLANK_EXTRA_CAMERA_PREVIEW (108) // extra HBLANK RAW pixels for preview
#define HBLANK_EXTRA_VIDEO_PREVIEW (108) // extra HBLANK RAW pixels for preview
#define HBLANK_EXTRA_CAMERA_PREVIEW_WITH_240x320_LCD (640) // extra HBLANK RAW pixels for preview with 240x320 LCD
#define PIXELS_PER_LINE_CAMERA (HBLANK_EXTRA_VIDEO_PREVIEW + HBLANK_DEFAULT + IMAGE_SENSOR_VGA_WIDTH)
#define HBLANK_EXTRA_CAMERA_VGA_CAPTURE (220) // extra HBLANK RAW pixels for VGA capture
#define HBLANK_EXTRA_CAMERA_VGA_CAPTURE_WITH_240x320_LCD (400) // extra HBLANK RAW pixels for VGA capture with 240x320 LCD
#define HBLANK_EXTRA_CAMERA_SXGA_1xZOOM_CAPTURE (270) // extra HBLANK RAW pixels for SXGA 1x zoom capture
#define HBLANK_EXTRA_CAMERA_SXGA_2xZOOM_CAPTURE (270) // extra HBLANK RAW pixels for SXGA <=2x zoom capture
#define HBLANK_EXTRA_CAMERA_SXGA_3xZOOM_CAPTURE (750) // extra HBLANK RAW pixels for SXGA <=3x zoom capture
#define HBLANK_EXTRA_CAMERA_SXGA_4xZOOM_CAPTURE (1225) // extra HBLANK RAW pixels for SXGA <=4x zoom capture
#define PIXELS_PER_LINE_VIDEO (HBLANK_EXTRA_VIDEO_PREVIEW + HBLANK_DEFAULT + IMAGE_SENSOR_VGA_WIDTH)
// VBLANK period means the period of VSYNC signal high period
// if 0x12, page 0, SYNCCTL[3] = 0, VSYNC[0x1D, 0x1E] = VBLANK period
// if 0x12, page 0, SYNCCTL[3] = 1, VSYNC[0x1D, 0x1E] = VBLANK period + VSCLIP[0x1F]
// total frame time = VSYNC[0x1D, 0x1E] + IMAGE_SENSOR_VGA_HEIGHT
#define VBLANK_CAMERA_PREVIEW (20) // (VBLANK period + VSCLIP) for camera preview
#define VBLANK_CAMERA_CLIPPING (9) // VSCLIP size for CAMERA
#define VBLANK_VIDEO_PREVIEW (20) // (VBLANK period + VSCLIP) for video preview
#define VBLANK_VIDEO_CLIPPING (9) // VSCLIP size for VIDEO
#define FPS_VIDEO_NORMAL (15)
#define FPS_VIDEO_NIGHT (7.5)
#define FPS_MJPEG_NORMAL (7.5)
#define FPS_MJPEG_NIGHT (5)
#define MCLK_FOR_MC501CB (26000000)
#define CLOCK_DIVIDER_FOR_VIDEO (2)
#define MIN_FPS_CAMERA_NORMAL (10) // MIN. FPS for normal camera preview
#define MIN_FPS_CAMERA_NIGHT (7.5) // MIN. FPS for night camera preview
#define CLOCK_DIVIDER_FOR_CAMERA (1)
// BB's reset pin high low control MACROs
#define RESET_PIN_LOW (REG_ISP_CMOS_SENSOR_MODE_CONFIG &= ~REG_CMOS_SENSOR_RESET_BIT)
#define RESET_PIN_HIGH (REG_ISP_CMOS_SENSOR_MODE_CONFIG |= REG_CMOS_SENSOR_RESET_BIT)
// set chip enable pin, OENB, to high
#define SET_CHIP_ENABLE_HIGH (REG_ISP_CMOS_SENSOR_MODE_CONFIG |= REG_CMOS_SENSOR_POWER_ON_BIT)
#define SET_CHIP_ENABLE_LOW (REG_ISP_CMOS_SENSOR_MODE_CONFIG |= REG_CMOS_SENSOR_POWER_ON_BIT)
// sensor's I2C read/write IDs
#define MC501CB_I2C_WRITE_ID (0x60)
#define MC501CB_I2C_READ_ID (0x61)
/************************************************************************************
* MC501CB & MC501CC are fully compatibale except sensor ID *
* The driver can be shared for these two sensors *
************************************************************************************/
// sensor's chip ID
#define MC501CB_SENSOR_ID (0x62)
#define MC501CC_SENSOR_ID (0x74)
#define CHANGE_TO_PAGE(iPage) { \
ASSERT(iPage < 5); \
write_cmos_sensor(0x03, iPage); \
}
#endif /* _IMAGE_SENSOR_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -