/******************************************************************************
Copyright (C), 2014-2017, smartsens Tech. Co., Ltd.
******************************************************************************
File Name : sc1235_cmos.c
Version : Initial Draft
Author :
Created : 2017/07/06
Modified : 2017/09/12
Description : Grouphold+Logic+DPC
INIFile : SC1235_27Minput_54MPCLK_960P_25fps_20170830_V2P1
******************************************************************************/
#if !defined(__SC1235_CMOS_H_)
#define __SC1235_CMOS_H_
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include "hi_comm_sns.h"
#include "hi_comm_video.h"
#include "hi_sns_ctrl.h"
#include "mpi_isp.h"
#include "mpi_ae.h"
#include "mpi_awb.h"
#include "mpi_af.h"
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* End of #ifdef __cplusplus */
#define SC1235_ID 1235
/* To change the mode of config. ifndef INIFILE_CONFIG_MODE, quick config mode.*/
/* else, cmos_cfg.ini file config mode*/
#ifdef INIFILE_CONFIG_MODE
extern AE_SENSOR_DEFAULT_S g_AeDft[];
extern AWB_SENSOR_DEFAULT_S g_AwbDft[];
extern ISP_CMOS_DEFAULT_S g_IspDft[];
extern HI_S32 Cmos_LoadINIPara(const HI_CHAR *pcName);
#else
#endif
/****************************************************************************
* local variables *
****************************************************************************/
extern const unsigned int sensor_i2c_addr;
extern unsigned int sensor_addr_byte;
extern unsigned int sensor_data_byte;
#define FULL_LINES_MAX (0xFFFF)
#define SENSOR_2M_960p25_MODE (1)
#define SENSOR_2M_960p30_MODE (2)
#define INCREASE_LINES (0) /* make real fps less than stand fps because NVR require*/
#define FRAME_LINES_2M_960p (1000+INCREASE_LINES)
#define DAY (1)
#define NIGHT (0)
// Max integration time for HDR mode: T1 max = min ( 70* 16, FLL*16/17), when ratio=16;
// we use a constant full lines in build-in wdr mode
#define LONG_EXP_SHT_CLIP (FRAME_LINES_2M_960p*16/17)
HI_U8 gu8SensorImageMode = SENSOR_2M_960p25_MODE;
WDR_MODE_E genSensorMode = WDR_MODE_NONE;
static HI_U8 guCurrentGammaStatus = 0;
static HI_U32 gu32FullLinesStd = FRAME_LINES_2M_960p;
static HI_U32 gu32FullLines = FRAME_LINES_2M_960p;
static HI_BOOL bInit = HI_FALSE;
HI_BOOL bSensorInit = HI_FALSE;
ISP_SNS_REGS_INFO_S g_stSnsRegsInfo = {0};
ISP_SNS_REGS_INFO_S g_stPreSnsRegsInfo = {0};
/* Piris attr */
#if 0
static ISP_PIRIS_ATTR_S gstPirisAttr=
{
0, // bStepFNOTableChange
1, // bZeroIsMax
93, // u16TotalStep
62, // u16StepCount
/* Step-F number mapping table. Must be from small to large. F1.0 is 1024 and F32.0 is 1 */
{30,35,40,45,50,56,61,67,73,79,85,92,98,105,112,120,127,135,143,150,158,166,174,183,191,200,208,217,225,234,243,252,261,270,279,289,298,307,316,325,335,344,353,362,372,381,390,399,408,417,426,435,444,453,462,470,478,486,493,500,506,512},
ISP_IRIS_F_NO_1_4, // enMaxIrisFNOTarget
ISP_IRIS_F_NO_5_6 // enMinIrisFNOTarget
};
#endif
#define PATHLEN_MAX 256
#define CMOS_CFG_INI "sc1235_cfg.ini"
static char pcName[PATHLEN_MAX] = "configs/sc1235_cfg.ini";
static ISP_CMOS_GAMMA_S g_stIspGamma =
{
/* bvalid */
1,
{//4xx_modify
0x000,
0x053,0x0A4,0x0ED,0x132,0x17A,0x1BD,0x1F5,0x22A,0x264,0x299,0x2BF,0x2E0,0x306,0x32C,0x350,0x373,
0x399,0x3BF,0x3E1,0x401,0x421,0x440,0x460,0x480,0x4A1,0x4C1,0x4DC,0x4F8,0x51A,0x53B,0x556,0x570,
0x58C,0x5A7,0x5C2,0x5DB,0x5F4,0x60C,0x623,0x63A,0x651,0x667,0x67D,0x693,0x6A8,0x6BD,0x6D3,0x6E8,
0x6FD,0x712,0x727,0x73B,0x74F,0x762,0x775,0x789,0x79C,0x7AE,0x7C1,0x7D4,0x7E6,0x7F9,0x80B,0x81E,
0x831,0x843,0x855,0x868,0x87A,0x88C,0x89E,0x8B0,0x8C2,0x8D3,0x8E5,0x8F7,0x908,0x91A,0x92B,0x93C,
0x94D,0x95E,0x96F,0x980,0x991,0x9A2,0x9B3,0x9C3,0x9D4,0x9E4,0x9F4,0xA04,0xA14,0xA24,0xA34,0xA43,
0xA52,0xA61,0xA70,0xA7F,0xA8D,0xA9B,0xAA9,0xAB8,0xAC5,0xAD3,0xAE1,0xAEF,0xAFD,0xB0A,0xB18,0xB26,
0xB34,0xB42,0xB50,0xB5E,0xB6B,0xB79,0xB87,0xB95,0xBA2,0xBB0,0xBBD,0xBCA,0xBD7,0xBE4,0xBF1,0xBFD,
0xC09,0xC15,0xC20,0xC2C,0xC37,0xC42,0xC4C,0xC57,0xC62,0xC6C,0xC77,0xC81,0xC8B,0xC96,0xCA0,0xCAB,
0xCB6,0xCC0,0xCCB,0xCD6,0xCE0,0xCEB,0xCF5,0xD00,0xD0A,0xD15,0xD1F,0xD29,0xD33,0xD3D,0xD47,0xD51,
0xD5B,0xD64,0xD6D,0xD77,0xD80,0xD89,0xD92,0xD9B,0xDA3,0xDAC,0xDB5,0xDBE,0xDC7,0xDCF,0xDD8,0xDE1,
0xDEA,0xDF3,0xDFC,0xE05,0xE0E,0xE17,0xE20,0xE29,0xE32,0xE3B,0xE43,0xE4C,0xE55,0xE5D,0xE66,0xE6E,
0xE76,0xE7E,0xE86,0xE8E,0xE96,0xE9E,0xEA5,0xEAD,0xEB5,0xEBC,0xEC4,0xECB,0xED2,0xEDA,0xEE1,0xEE8,
0xEEF,0xEF6,0xEFE,0xF05,0xF0C,0xF13,0xF1A,0xF21,0xF28,0xF2F,0xF35,0xF3C,0xF42,0xF48,0xF4E,0xF54,
0xF5A,0xF5F,0xF64,0xF69,0xF6D,0xF72,0xF76,0xF7B,0xF7F,0xF83,0xF88,0xF8C,0xF90,0xF94,0xF99,0xF9D,
0xFA1,0xFA6,0xFAA,0xFAF,0xFB3,0xFB8,0xFBC,0xFC1,0xFC5,0xFC9,0xFCE,0xFD2,0xFD7,0xFDB,0xFE0,0xFE4
}
};
static ISP_GAMMA_ATTR_S g_stIspGamma_day =
{
/* bvalid */
1,
ISP_GAMMA_CURVE_USER_DEFINE,
{//4xx_modify
0x000,
0x053,0x0A4,0x0ED,0x132,0x17A,0x1BD,0x1F5,0x22A,0x264,0x299,0x2BF,0x2E0,0x306,0x32C,0x350,0x373,
0x399,0x3BF,0x3E1,0x401,0x421,0x440,0x460,0x480,0x4A1,0x4C1,0x4DC,0x4F8,0x51A,0x53B,0x556,0x570,
0x58C,0x5A7,0x5C2,0x5DB,0x5F4,0x60C,0x623,0x63A,0x651,0x667,0x67D,0x693,0x6A8,0x6BD,0x6D3,0x6E8,
0x6FD,0x712,0x727,0x73B,0x74F,0x762,0x775,0x789,0x79C,0x7AE,0x7C1,0x7D4,0x7E6,0x7F9,0x80B,0x81E,
0x831,0x843,0x855,0x868,0x87A,0x88C,0x89E,0x8B0,0x8C2,0x8D3,0x8E5,0x8F7,0x908,0x91A,0x92B,0x93C,
0x94D,0x95E,0x96F,0x980,0x991,0x9A2,0x9B3,0x9C3,0x9D4,0x9E4,0x9F4,0xA04,0xA14,0xA24,0xA34,0xA43,
0xA52,0xA61,0xA70,0xA7F,0xA8D,0xA9B,0xAA9,0xAB8,0xAC5,0xAD3,0xAE1,0xAEF,0xAFD,0xB0A,0xB18,0xB26,
0xB34,0xB42,0xB50,0xB5E,0xB6B,0xB79,0xB87,0xB95,0xBA2,0xBB0,0xBBD,0xBCA,0xBD7,0xBE4,0xBF1,0xBFD,
0xC09,0xC15,0xC20,0xC2C,0xC37,0xC42,0xC4C,0xC57,0xC62,0xC6C,0xC77,0xC81,0xC8B,0xC96,0xCA0,0xCAB,
0xCB6,0xCC0,0xCCB,0xCD6,0xCE0,0xCEB,0xCF5,0xD00,0xD0A,0xD15,0xD1F,0xD29,0xD33,0xD3D,0xD47,0xD51,
0xD5B,0xD64,0xD6D,0xD77,0xD80,0xD89,0xD92,0xD9B,0xDA3,0xDAC,0xDB5,0xDBE,0xDC7,0xDCF,0xDD8,0xDE1,
0xDEA,0xDF3,0xDFC,0xE05,0xE0E,0xE17,0xE20,0xE29,0xE32,0xE3B,0xE43,0xE4C,0xE55,0xE5D,0xE66,0xE6E,
0xE76,0xE7E,0xE86,0xE8E,0xE96,0xE9E,0xEA5,0xEAD,0xEB5,0xEBC,0xEC4,0xECB,0xED2,0xEDA,0xEE1,0xEE8,
0xEEF,0xEF6,0xEFE,0xF05,0xF0C,0xF13,0xF1A,0xF21,0xF28,0xF2F,0xF35,0xF3C,0xF42,0xF48,0xF4E,0xF54,
0xF5A,0xF5F,0xF64,0xF69,0xF6D,0xF72,0xF76,0xF7B,0xF7F,0xF83,0xF88,0xF8C,0xF90,0xF94,0xF99,0xF9D,
0xFA1,0xFA6,0xFAA,0xFAF,0xFB3,0xFB8,0xFBC,0xFC1,0xFC5,0xFC9,0xFCE,0xFD2,0xFD7,0xFDB,0xFE0,0xFE4
}
};
static ISP_GAMMA_ATTR_S g_stIspGamma_night =
{
/* bvalid */
1,
ISP_GAMMA_CURVE_USER_DEFINE,
{ //11111222222
0x000,
0x033,0x066,0x099,0x0CA,0x0F8,0x124,0x150,0x17E,0x1AF,0x1E3,0x216,0x246,0x273,0x29E,0x2C8,0x2F0,
0x317,0x33C,0x35F,0x381,0x3A0,0x3BC,0x3D8,0x3F4,0x411,0x42F,0x44D,0x469,0x484,0x49E,0x4B8,0x4D1,
0x4EA,0x503,0x51B,0x532,0x546,0x559,0x56B,0x57E,0x593,0x5A9,0x5BF,0x5D5,0x5EC,0x603,0x61B,0x631,
0x646,0x65A,0x66E,0x682,0x695,0x6A8,0x6BB,0x6D0,0x6E8,0x702,0x71C,0x733,0x747,0x759,0x76A,0x77C,
0x790,0x7A4,0x7B8,0x7CC,0x7DF,0x7F2,0x805,0x81A,0x831,0x849,0x861,0x877,0x889,0x89A,0x8A9,0x8BA,
0x8CC,0x8DF,0x8F2,0x905,0x919,0x92E,0x943,0x957,0x96B,0x97F,0x993,0x9A6,0x9BA,0x9CD,0x9E0,0x9F2,
0xA04,0xA16,0xA27,0xA39,0xA4A,0xA5A,0xA6B,0xA7B,0xA8C,0xA9C,0xAAC,0xABC,0xACC,0xADB,0xAEB,0xAFB,
0xB0B,0xB1B,0xB2A,0xB3A,0xB4A,0xB59,0xB69,0xB78,0xB87,0xB96,0xBA5,0xBB3,0xBC2,0xBD0,0xBDE,0xBEC,
0xBFA,0xC07,0xC14,0xC21,0xC2D,0xC39,0xC46,0xC52,0xC5E,0xC6A,0xC75,0xC81,0xC8D,0xC99,0xCA4,0xCB0,
0xCBC,0xCC8,0xCD3,0xCDF,0xCEB,0xCF6,0xD02,0xD0D,0xD18,0xD24,0xD2F,0xD3A,0xD45,0xD50,0xD5A,0xD65,
0xD6F,0xD7A,0xD