📄 sensor_mega_ov9650.c
字号:
***************************************************************************/
int OV9650_Set_QVGA(void)
{
return OV9650_Write( (UINT8 *)ChangeQVGAData, sizeof(ChangeQVGAData) );
}
/**************************************************************************
* 函数描述: 设置sensor 的特效
* 入口参数: 无
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_Set_Effect(INT8U nEffect)
{
UINT8 sensorData[3][2];
switch (nEffect)
{
case SENSOR_EF_NORMAL://EFFECT_NORMAL:
sensorData[0][0]=0x3a;
sensorData[0][1]=0x0c;
sensorData[1][0]=0x67;
sensorData[1][1]=0x80;
sensorData[2][0]=0x68;
sensorData[2][1]=0x80;
break;
case SENSOR_EF_GRAY: //Black/white
sensorData[0][0]=0x3a;
sensorData[0][1]=0x1c;
sensorData[1][0]=0x67;
sensorData[1][1]=0x80;
sensorData[2][0]=0x68;
sensorData[2][1]=0x80;
break;
case SENSOR_EF_COOL: //Bulish
sensorData[0][0]=0x3a;
sensorData[0][1]=0x1c;
sensorData[1][0]=0x67;
sensorData[1][1]=0xc0;
sensorData[2][0]=0x68;
sensorData[2][1]=0x80;
break;
case SENSOR_EF_ANTIQUE: //Antique
sensorData[0][0]=0x3a;
sensorData[0][1]=0x1c;
sensorData[1][0]=0x67;
sensorData[1][1]=0x40;
sensorData[2][0]=0x68;
sensorData[2][1]=0xb0;
break;
case SENSOR_EF_SEPHIA: //sepia
sensorData[0][0]=0x3a;
sensorData[0][1]=0x1c;
sensorData[1][0]=0x67;
sensorData[1][1]=0x40;
sensorData[2][0]=0x68;
sensorData[2][1]=0xa0;
break;
case SENSOR_EF_NEGATION: //Negative
sensorData[0][0]=0x3a;
sensorData[0][1]=0x2c;
sensorData[1][0]=0x67;
sensorData[1][1]=0x80;
sensorData[2][0]=0x68;
sensorData[2][1]=0x80;
break;
// <-Ef Mode->
/*
case SENSOR_EF_FOG: //Greenish
sensorData[0][0]=0x3a;
sensorData[0][1]=0x1c;
sensorData[1][0]=0x67;
sensorData[1][1]=0x40;
sensorData[2][0]=0x68;
sensorData[2][1]=0x40;
break;
*/
case SENSOR_EF_WARM: //Reddish
sensorData[0][0]=0x3a;
sensorData[0][1]=0x1c;
sensorData[1][0]=0x67;
sensorData[1][1]=0x80;
sensorData[2][0]=0x68;
sensorData[2][1]=0xc0;
break;
/*
case 8: //Black/White Negative
sensorData[0][0]=0x3a;
sensorData[0][1]=0x3c;
sensorData[1][0]=0x67;
sensorData[1][1]=0x80;
sensorData[2][0]=0x68;
sensorData[2][1]=0x80;
break;
*/
default:
return 1;
}
return OV9650_Write( (UINT8 *)sensorData, sizeof(sensorData) );
}
/**************************************************************************
* 函数描述: 设置sensor 的亮度
* 入口参数: nLevel 亮度级别 ( 0 ~ 5 )
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_Set_Brightness(INT8U nLevel)
{
UINT8 nRegCount = 0;
UINT8* pArrayData = NULL;
switch (nLevel)
{
case 0:
pArrayData = &Brightness0[0][0];
nRegCount = sizeof(Brightness0);
break;
case 1:
pArrayData = &Brightness1[0][0];
nRegCount = sizeof(Brightness1);
break;
case 2: //default
pArrayData = &Brightness2[0][0];
nRegCount = sizeof(Brightness2);
break;
case 3:
pArrayData = &Brightness3[0][0];
nRegCount = sizeof(Brightness3);
break;
case 4:
pArrayData = &Brightness4[0][0];
nRegCount = sizeof(Brightness4);
break;
case 5:
pArrayData = &Brightness5[0][0];
nRegCount = sizeof(Brightness5);
break;
default:
return 1;
}
return OV9650_Write( pArrayData, nRegCount );
}
/**************************************************************************
* 函数描述: 设置sensor 的饱和度
* 入口参数: nLevel 饱和度级别 ( 0 ~ 5 )
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_Set_Saturation(INT8U nLevel)
{
UINT8* pArrayData = NULL;
UINT8 nRegCount = 0;
switch (nLevel)
{
case 0:
pArrayData = &Saturation0[0][0];
nRegCount = sizeof(Saturation0);
break;
case 1:
pArrayData = &Saturation1[0][0];
nRegCount = sizeof(Saturation1);
break;
case 2:
pArrayData = &Saturation2[0][0];
nRegCount = sizeof(Saturation2);
break;
case 3:
pArrayData = &Saturation3[0][0];
nRegCount = sizeof(Saturation3);
break;
case 4:
pArrayData = &Saturation4[0][0];
nRegCount = sizeof(Saturation4);
break;
case 5:
pArrayData = &Saturation5[0][0];
nRegCount = sizeof(Saturation5);
break;
default:
return 1;
}
return OV9650_Write( pArrayData, nRegCount );
}
/**************************************************************************
* 函数描述: 设置sensor 的对比度
* 入口参数: nLevel 对比度级别 ( 0 ~ 6 )
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_Set_Contrast(INT8U nLevel)
{
UINT8* pArrayData = NULL;
UINT8 nRegCount = 0;
switch (nLevel)
{
case 0:
pArrayData = &Contrast0[0][0];
nRegCount = sizeof(Contrast0);
break;
case 1:
pArrayData = &Contrast1[0][0];
nRegCount = sizeof(Contrast1);
break;
case 2:
pArrayData = &Contrast2[0][0];
nRegCount = sizeof(Contrast2);
break;
case 3:
pArrayData = &Contrast3[0][0];
nRegCount = sizeof(Contrast3);
break;
case 4:
pArrayData = &Contrast4[0][0];
nRegCount = sizeof(Contrast4);
break;
case 5:
pArrayData = &Contrast5[0][0];
nRegCount = sizeof(Contrast5);
break;
case 6:
pArrayData = &Contrast6[0][0];
nRegCount = sizeof(Contrast6);
break;
default:
return 1;
}
return OV9650_Write( pArrayData, nRegCount );
}
int OV9650_Set_VgaZoom(INT8U nLevel)
{
UINT8* pArrayData = NULL;
UINT8 nRegCount = 0;
switch (nLevel)
{
case 0:
pArrayData = &ZoomVgaLevel1[0][0];
nRegCount = sizeof(ZoomVgaLevel1);
break;
case 1:
pArrayData = &ZoomVgaLevel2[0][0];
nRegCount = sizeof(ZoomVgaLevel2);
break;
case 2:
pArrayData = &ZoomVgaLevel3[0][0];
nRegCount = sizeof(ZoomVgaLevel3);
break;
case 3:
pArrayData = &ZoomVgaLevel4[0][0];
nRegCount = sizeof(ZoomVgaLevel4);
break;
default:
return 1;
}
return OV9650_Write( pArrayData, nRegCount );
}
int OV9650_SetZoom( INT8U level )
{
int ret;
switch (level)
{
case 0:
return OV9650_Set_QVGA( );
case 1:
case 2:
ret = OV9650_Set_VGA( );
if ( !ret )
ret = OV9650_Set_VgaZoom(level-1);
return ret;
default:
return 1;
}
}
/**************************************************************************
* 函数描述: 设置sensor 的旋转模式
* 入口参数: nRotation 见 ImgRotationType
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_SetRot( INT8U rotate )
{
UINT8 SensorData[2][2];
UINT8 nRegCount = 1;
switch (rotate)
{
case RT_NORMAL:
SensorData[0][0]=0x1e;
SensorData[0][1]=0x04;
break;
case RT_180:
SensorData[0][0]=0x1e;
SensorData[0][1]=0x34;
break;
case RT_HFLIP:
SensorData[0][0]=0x1e;
SensorData[0][1]=0x24;
break;
case RT_VFLIP:
SensorData[0][0]=0x1e;
SensorData[0][1]=0x14;
break;
case RT_90:
case RT_270:
return 0;
default:
return 1;
}
return OV9650_Write( (UINT8 *)SensorData, nRegCount );
}
/**************************************************************************
* 函数描述: set frame rate for different resolution when encode MPEG4
* 入口参数: nRate : frame rate
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_SetRate(INT8U nRate)
{
/*
switch(nRate)
{
case 0://MPEG_RATE_CIF:
case 1://MPEG_RATE_QVGA:// about 12.5fps
mv3I2CWrite(0xff, 0xb0);
mv3I2CWrite(0xf8, 0x01);
mv3I2CWrite(0x2a, 0x00);
mv3I2CWrite(0x2b, 0x70);
mv3I2CWrite(0x2d ,0x50);
mv3I2CWrite(0x2e ,0x00);
break;
case 2://MPEG_RATE_QCIF:
case 3://MPEG_RATE_LCDSIZE:
case 4://MPEG_RATE_SubQCIF:// about 15.0fps
mv3I2CWrite(0xff, 0xb0);
mv3I2CWrite(0xf8, 0x01);
mv3I2CWrite(0x2a, 0x00);
mv3I2CWrite(0x2b, 0x08);
mv3I2CWrite(0x2d ,0x08);
mv3I2CWrite(0x2e ,0x00);
break;
default:
return FALSE;
}
*/
return 0;
}
/**************************************************************************
* 函数描述: 设置sensor 的锐度
* 入口参数: nLevel : 锐度参数
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_SetSharpness(INT8U nLevel)
{
return 0;
}
/**************************************************************************
* 函数描述: 设置sensor 的白平衡模式
* 入口参数: mode : sensor 的白平衡模式参数
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_SetWhiteBlanceMode(INT8U mode)
{
return 0;
}
/**************************************************************************
* 函数描述: 设置sensor 的风景模式
* 入口参数: mode : sensor 的风景模式参数
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_SetSceneryMode(INT8U mode)
{
return 1;
}
/**************************************************************************
* 函数描述: 设置sensor 的曝光补偿
* 入口参数: value :sensor 的曝光补偿参数
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_SetrExposureCompensate(INT8U value)
{
return 1;
}
/**************************************************************************
* 函数描述: 设置sensor 的拍照模式
* 入口参数:
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_Set_Capture(INT8U level)
{
#if 0
switch (level)
{
case 0:
return OV9650_Set_QVGA( );
case 1:
return OV9650_Set_VGA( );
case 2:
return OV9650_Set_Mega( );
default:
return 1;
}
#endif
return 0;
}
/**************************************************************************
* 函数描述: 设置sensor 的拍照模式
* 入口参数:
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_Set_Preveiw(void)
{
return OV9650_Set_QVGA( );
}
/**************************************************************************
* 函数描述: 注册sensor,模块初始化调用,添加的每个sensor必须要这个接口
* 入口参数: 无
* 出口参数: sif:获得的sensor功能接口
* 返回值: 无
***************************************************************************/
void SensorGetDriver(SENSOR_INTERFACE * sif )
{
sif->Sensor_Init = OV9650_Init;
sif->Sensor_CheckId = OV9650_CheckID;
sif->Sensor_Set_SXGA = OV9650_Set_Mega;
sif->Sensor_Set_VGA = OV9650_Set_VGA;
sif->Sensor_Set_CIF = OV9650_Set_CIF;
sif->Sensor_Set_QVGA = OV9650_Set_QVGA;
sif->Sensor_Set_Effect = OV9650_Set_Effect;
sif->Sensor_Set_Brightness = OV9650_Set_Brightness;
sif->Sensor_Set_Saturation = OV9650_Set_Saturation;
sif->Sensor_Set_Contrast = OV9650_Set_Contrast;
sif->Sensor_Set_Rot = OV9650_SetRot;
sif->Sensor_Set_Rate = OV9650_SetRate;
sif->Sensor_Set_Sharpness = OV9650_SetSharpness;
sif->Sensor_Set_WhiteBlanceMode = OV9650_SetWhiteBlanceMode;
sif->Sensor_Set_SceneryMode = OV9650_SetSceneryMode;
sif->Sensor_Set_Zoom = OV9650_SetZoom;
sif->Sensor_Set_ExposureCompensate = OV9650_SetrExposureCompensate;
sif->Sensor_Set_Preview = OV9650_Set_Preveiw;
sif->Sensor_Set_Capture = OV9650_Set_Capture;
sif->Sensor_Reset = OV9650_Reset;
sif->Sensor_PowerOn = OV9650_PowerOn;
sif->Sensor_PowerDown = OV9650_PowerDown;
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -