📄 image_sensor.c
字号:
}
}
}
if (iExp <= 8) {
//iTemp >>= 1;
write_cmos_sensor(0x30, 0x00);
write_cmos_sensor(0x31, 0x01);
}else {
iExp >>= 3; // iExp / 8
if (iExp < 1) { // make sure nonzero exposure
iExp = 1;
}
write_cmos_sensor(0x30, (iExp >> 8) & 0x00FF);
write_cmos_sensor(0x31, iExp & 0x00FF);
}
kal_sleep_task(1); //Brad.Oh 070914
write_cmos_sensor(0x03, 0xC5); //Brad.Oh 070914
}
}
pImage_Window->grab_start_x = iStartX;
pImage_Window->grab_start_y = iStartY;
pImage_Window->exposure_window_width = IMAGE_SENSOR_VGA_WIDTH - iStartX;
pImage_Window->exposure_window_height = IMAGE_SENSOR_VGA_HEIGHT - iStartY;
kal_prompt_trace(MOD_CC,"SIV100B_Capture==2===%s"," end ");
} /* SIV100B_Capture() */
/*************************************************************************
* FUNCTION
* SIV100B_WriteReg
*
* DESCRIPTION
* This function set the register of SIV100B.
*
* PARAMETERS
* iAddr : the register index of SIV100B
* iPara : setting parameter of the specified register of SIV100B
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV100B_WriteReg(kal_uint32 iAddr, kal_uint32 iPara)
{
write_cmos_sensor(iAddr, iPara);
} /* SIV100B_WriteReg() */
/*************************************************************************
* FUNCTION
* read_cmos_sensor
*
* DESCRIPTION
* This function read parameter of specified register from SIV100B.
*
* PARAMETERS
* iAddr: the register index of SIV100B
*
* RETURNS
* the data that read from SIV100B
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV100B_ReadReg(kal_uint32 iAddr)
{
return read_cmos_sensor(iAddr);
} /* SIV100B_ReadReg() */
/*************************************************************************
* FUNCTION
* SIV100B_SetShutter
*
* DESCRIPTION
* This function set e-shutter of SIV100B to change exposure time.
*
* PARAMETERS
* shutter : exposured lines
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV100B_SetShutter(kal_uint16 shutter)
{
} /* SIV100B_SetShutter */
/*************************************************************************
* FUNCTION
* SIV100B_SetGain
*
* DESCRIPTION
* This function is to set global gain to sensor.
*
* PARAMETERS
* iGain : sensor global gain(base: 0x40)
*
* RETURNS
* the actually gain set to sensor.
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint16 SIV100B_SetGain(kal_uint16 iGain)
{
return iGain;
} /* SIV100B_SetGain */
/*************************************************************************
* FUNCTION
* SIV100B_NightMode
*
* DESCRIPTION
* This function switch on/off night mode of SIV100B.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV100B_NightMode(kal_bool bEnable)
{
static kal_uint32 iDelay = 0x001FFFFF;
volatile kal_uint32 iI = 0;
g_bNightMode = bEnable;
if (g_bCaptureMode == KAL_TRUE)
{
return;
}
/************************************************************
* AE must be off to do the following mode change setting. *
* If not off, the covered EV range will be the same for *
* normal/night modes. *
************************************************************/
write_cmos_sensor(0x40, 0x00);
write_cmos_sensor(0x03, 0x00);
/********************************************************
* MUST delay after turn off AE. *
* If no such delay, AE will not work after re-enable *
********************************************************/
for (iI = 0; iI < iDelay; iI++);
if (bEnable == KAL_TRUE)
{
if (g_bVideoMode == KAL_TRUE)
{ /* video preview mode */
if (g_iBanding == CAM_BANDING_50HZ)
{
ConfigVBlank(VIDEO_MODE_VBLANK_50HZ_NIGHT, CAM_BANDING_50HZ);
ConfigHBlank(VIDEO_MODE_HBLANK_50HZ_NIGHT, CAM_BANDING_50HZ);
write_cmos_sensor(0x33, VIDEO_MODE_FRCNT_50HZ_NIGHT);
write_cmos_sensor(0x34, VIDEO_MODE_STSTN_50HZ_NIGHT);
write_cmos_sensor(0xD7, 0x18);
}
else
{
ConfigVBlank(VIDEO_MODE_VBLANK_60HZ_NIGHT, CAM_BANDING_60HZ);
ConfigHBlank(VIDEO_MODE_HBLANK_60HZ_NIGHT, CAM_BANDING_60HZ);
write_cmos_sensor(0x33, VIDEO_MODE_FRCNT_60HZ_NIGHT);
write_cmos_sensor(0x34, VIDEO_MODE_STSTN_60HZ_NIGHT);
write_cmos_sensor(0xD7, 0x18);
}
}
else
{ /* camera preview mode */
if (g_iBanding == CAM_BANDING_50HZ)
{
ConfigVBlank(PV_MODE_VBLANK_50HZ_NIGHT, CAM_BANDING_50HZ);
ConfigHBlank(PV_MODE_HBLANK_50HZ_NIGHT, CAM_BANDING_50HZ);
write_cmos_sensor(0x33, PV_MODE_FRCNT_50HZ_NIGHT);
write_cmos_sensor(0x34, PV_MODE_STSTN_50HZ_NIGHT);
write_cmos_sensor(0xD7, 0x18);
if( ((read_cmos_sensor(0x30) << 8) | read_cmos_sensor(0x31)) // this judgement is needed to fix the sensor's bug
>= PV_MODE_FRCNT_50HZ_NORMAL * PV_MODE_STSTN_50HZ_NORMAL)
{
kal_uint16 iTemp;
iTemp = PV_MODE_FRCNT_50HZ_NIGHT * PV_MODE_STSTN_50HZ_NIGHT;
write_cmos_sensor(0x30, iTemp>>8);
write_cmos_sensor(0x31, iTemp&0x00FF);
write_cmos_sensor(0x32,0x05);
}
}
else
{
ConfigVBlank(PV_MODE_VBLANK_60HZ_NIGHT, CAM_BANDING_60HZ);
ConfigHBlank(PV_MODE_HBLANK_60HZ_NIGHT, CAM_BANDING_60HZ);
write_cmos_sensor(0x33, PV_MODE_FRCNT_60HZ_NIGHT);
write_cmos_sensor(0x34, PV_MODE_STSTN_60HZ_NIGHT);
write_cmos_sensor(0xD7, 0x18);
if( ((read_cmos_sensor(0x30) << 8) | read_cmos_sensor(0x31))
>= PV_MODE_FRCNT_50HZ_NORMAL * PV_MODE_STSTN_50HZ_NORMAL)
{
kal_uint16 iTemp;
iTemp = PV_MODE_FRCNT_50HZ_NIGHT * PV_MODE_STSTN_50HZ_NIGHT;
write_cmos_sensor(0x30, iTemp>>8);
write_cmos_sensor(0x31, iTemp&0x00FF);
write_cmos_sensor(0x32,0x05);
}
}
}
}
else
{
if (g_bVideoMode == KAL_TRUE)
{ /* video preview mode */
if (g_iBanding == CAM_BANDING_50HZ)
{
ConfigVBlank(VIDEO_MODE_VBLANK_50HZ_NORMAL, CAM_BANDING_50HZ);
ConfigHBlank(VIDEO_MODE_HBLANK_50HZ_NORMAL, CAM_BANDING_50HZ);
write_cmos_sensor(0x33, VIDEO_MODE_FRCNT_50HZ_NORMAL);
write_cmos_sensor(0x34, VIDEO_MODE_STSTN_50HZ_NORMAL);
write_cmos_sensor(0xD7, 0x00);
}
else
{
ConfigVBlank(VIDEO_MODE_VBLANK_60HZ_NORMAL, CAM_BANDING_60HZ);
ConfigHBlank(VIDEO_MODE_HBLANK_60HZ_NORMAL, CAM_BANDING_60HZ);
write_cmos_sensor(0x33, VIDEO_MODE_FRCNT_60HZ_NORMAL);
write_cmos_sensor(0x34, VIDEO_MODE_STSTN_60HZ_NORMAL);
write_cmos_sensor(0xD7, 0x00);
}
}
else
{ /* camera preview mode */
if (g_iBanding == CAM_BANDING_50HZ)
{
ConfigVBlank(PV_MODE_VBLANK_50HZ_NORMAL, CAM_BANDING_50HZ);
ConfigHBlank(PV_MODE_HBLANK_50HZ_NORMAL, CAM_BANDING_50HZ);
write_cmos_sensor(0x33, PV_MODE_FRCNT_50HZ_NORMAL);
write_cmos_sensor(0x34, PV_MODE_STSTN_50HZ_NORMAL);
write_cmos_sensor(0xD7, 0x00);
if( ((read_cmos_sensor(0x30) << 8) | read_cmos_sensor(0x31))
>= PV_MODE_FRCNT_50HZ_NORMAL * PV_MODE_STSTN_50HZ_NORMAL)
{
kal_uint16 iTemp;
iTemp = PV_MODE_FRCNT_50HZ_NORMAL * PV_MODE_STSTN_50HZ_NORMAL;
write_cmos_sensor(0x30, iTemp>>8);
write_cmos_sensor(0x31, iTemp&0x00FF);
write_cmos_sensor(0x32,0x05);
}
}
else
{
ConfigVBlank(PV_MODE_VBLANK_60HZ_NORMAL, CAM_BANDING_60HZ);
ConfigHBlank(PV_MODE_HBLANK_60HZ_NORMAL, CAM_BANDING_60HZ);
write_cmos_sensor(0x33, PV_MODE_FRCNT_60HZ_NORMAL);
write_cmos_sensor(0x34, PV_MODE_STSTN_60HZ_NORMAL);
write_cmos_sensor(0xD7, 0x00);
if( ((read_cmos_sensor(0x30) << 8) | read_cmos_sensor(0x31))
>= PV_MODE_FRCNT_50HZ_NORMAL * PV_MODE_STSTN_50HZ_NORMAL)
{
kal_uint16 iTemp;
iTemp = PV_MODE_FRCNT_50HZ_NORMAL * PV_MODE_STSTN_50HZ_NORMAL;
write_cmos_sensor(0x30, iTemp>>8);
write_cmos_sensor(0x31, iTemp&0x00FF);
write_cmos_sensor(0x32,0x05);
}
}
}
}
/************************************************************
* After the above mode change setting, turn on AE again *
************************************************************/
write_cmos_sensor(0x40, g_iAE_Meter == CAM_AE_METER_AUTO ? 0x80 : 0xA0);
write_cmos_sensor(0x03, 0xC5);
} /* SIV100B_NightMode */
/*************************************************************************
* FUNCTION
* SIV100B_SetFlash
*
* DESCRIPTION
* turn on/off SIV100B flashlight .
*
* PARAMETERS
* bEnable:
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV100B_SetFlash(kal_bool bEnable)
{
} /* SIV100B_SetFlash */
/*************************************************************************
* FUNCTION
* SIV100B_Set_Param_Zoom
*
* DESCRIPTION
* SIV100B zoom setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV100B_Set_Para_Zoom(kal_uint32 iPara)
{
switch (iPara)
{
case CAM_ZOOM_1X:
case CAM_ZOOM_2X:
case CAM_ZOOM_4X:
default:
return KAL_FALSE;
}
return KAL_FALSE;
} /* SIV100B_Set_Param_Zoom */
/*************************************************************************
* FUNCTION
* SIV100B_Set_Para_Contrast
*
* DESCRIPTION
* SIV100B contrast setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV100B_Set_Para_Contrast(kal_uint32 iPara)
{
return KAL_FALSE;
} /* SIV100B_Set_Para_Contrast */
/*************************************************************************
* FUNCTION
* SIV100B_Set_Para_Brightness
*
* DESCRIPTION
* SIV100B brightness setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV100B_Set_Para_Brightness(kal_uint32 iPara)
{
return KAL_FALSE;
} /* SIV100B_Set_Para_Brightness */
/*************************************************************************
* FUNCTION
* SIV100B_Set_Para_Hue
*
* DESCRIPTION
* SIV100B hue setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV100B_Set_Para_Hue(kal_uint32 iPara)
{
return KAL_FALSE;
} /* SIV100B_Set_Para_Hue */
/*************************************************************************
* FUNCTION
* SIV100B_Set_Para_Gamma
*
* DESCRIPTION
* SIV100B gamma setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV100B_Set_Para_Gamma(kal_uint32 iPara)
{
return KAL_FALSE;
} /* SIV100B_Set_Para_Gamma */
/*************************************************************************
* FUNCTION
* SIV100B_Set_Para_WB
*
* DESCRIPTION
* SIV100B WB setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV100B_Set_Para_WB(kal_uint32 iPara)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -