⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image_sensor.c

📁 iv100b 驱动。。。 MTK6226的原始代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                    }
                }
            }

            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 + -