LOCAL uint32_t OV9660_Identify(uint32_t param) { #define OV9660_PID_VALUE 0x96 #define OV9660_PID_ADDR 0x0A #define OV9660_VER_VALUE 0x63 #define OV9660_VER_ADDR 0x0B uint8_t pid_value = 0; uint8_t ver_value = 0; BOOLEAN ret_value = 0XFF; pid_value = Sensor_ReadReg(OV9660_PID_ADDR); // Get Version Code ver_value = Sensor_ReadReg(OV9660_VER_ADDR); if(OV9660_PID_VALUE == pid_value) { // Get Device Code if(OV9660_VER_VALUE == ver_value) { SENSOR_PRINT("That is OV9660 sensor !"); } else { SENSOR_PRINT("OV9660_Identify: That is OV%x%x sensor !", pid_value, ver_value); } ret_value = 0; } SENSOR_PRINT("OV9660_Identify: PID = %x, VER = %x",pid_value, ver_value); return (uint32_t)ret_value; }
LOCAL uint32_t _ov8830_Identify(uint32_t param) { #define ov8830_PID_VALUE 0x88 #define ov8830_PID_ADDR 0x300A #define ov8830_VER_VALUE 0x30 #define ov8830_VER_ADDR 0x300B uint8_t pid_value = 0x00; uint8_t ver_value = 0x00; uint32_t ret_value = SENSOR_FAIL; SENSOR_PRINT("SENSOR_ov8830: mipi raw identify\n"); pid_value = Sensor_ReadReg(ov8830_PID_ADDR); if (ov8830_PID_VALUE == pid_value) { ver_value = Sensor_ReadReg(ov8830_VER_ADDR); SENSOR_PRINT("SENSOR_ov8830: Identify: PID = %x, VER = %x", pid_value, ver_value); if (ov8830_VER_VALUE == ver_value) { Sensor_InitRawTuneInfo(); ret_value = SENSOR_SUCCESS; SENSOR_PRINT("SENSOR_ov8830: this is ov8830 sensor !"); } else { SENSOR_PRINT("SENSOR_ov8830: Identify this is OV%x%x sensor !", pid_value, ver_value); } } else { SENSOR_PRINT("SENSOR_ov8830: identify fail,pid_value=%d", pid_value); } return ret_value; }
LOCAL uint32_t _ov8830_write_exposure(uint32_t param) { uint32_t ret_value = SENSOR_SUCCESS; SENSOR_PRINT("SENSOR_ov8830: _ov8830_write_exposure= 0x%x", param); return ret_value; }
LOCAL uint32_t set_OV9660_ev(uint32_t level) { uint16_t i; SENSOR_REG_T* sensor_reg_ptr = (SENSOR_REG_T*)OV9660_ev_tab[level]; if(level >= 7) { SENSOR_PRINT("set_OV9660_ev:param error,level=%d .\n",level); return SENSOR_FAIL; } for(i = 0;(0xFF != sensor_reg_ptr[i].reg_addr) || (0xFF != sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } msleep(100); SENSOR_PRINT("SENSOR: set_ev: level = %d", level); return 0; }
LOCAL uint32_t _ov8830_PowerOn(uint32_t power_on) { SENSOR_AVDD_VAL_E dvdd_val = g_ov8830_mipi_raw_info.dvdd_val; SENSOR_AVDD_VAL_E avdd_val = g_ov8830_mipi_raw_info.avdd_val; SENSOR_AVDD_VAL_E iovdd_val = g_ov8830_mipi_raw_info.iovdd_val; BOOLEAN power_down = g_ov8830_mipi_raw_info.power_down_level; BOOLEAN reset_level = g_ov8830_mipi_raw_info.reset_pulse_level; if (SENSOR_TRUE == power_on) { Sensor_PowerDown(power_down); // Open power Sensor_SetMonitorVoltage(SENSOR_AVDD_2800MV); Sensor_SetVoltage(dvdd_val, avdd_val, iovdd_val); usleep(20*1000); Sensor_SetMCLK(SENSOR_DEFALUT_MCLK); usleep(10*1000); Sensor_PowerDown(!power_down); // Reset sensor Sensor_Reset(reset_level); } else { Sensor_PowerDown(power_down); Sensor_SetMCLK(SENSOR_DISABLE_MCLK); Sensor_SetVoltage(SENSOR_AVDD_CLOSED, SENSOR_AVDD_CLOSED, SENSOR_AVDD_CLOSED); Sensor_SetMonitorVoltage(SENSOR_AVDD_CLOSED); } SENSOR_PRINT("SENSOR_ov8830: _ov8830_Power_On(1:on, 0:off): %d", power_on); return SENSOR_SUCCESS; }
LOCAL uint32_t _ov8830_after_snapshot(uint32_t param) { SENSOR_PRINT("SENSOR_ov8830: after_snapshot mode:%d", param); return SENSOR_SUCCESS; }
LOCAL uint32_t _ov8830_write_gain(uint32_t param) { uint32_t ret_value = SENSOR_SUCCESS; uint16_t value=0x00; SENSOR_PRINT("SENSOR_ov8830: _ov8830_write_gain = 0x%x", param); return ret_value; }
LOCAL uint32_t _ov8830_flash(uint32_t param) { SENSOR_PRINT("Start:param=%d", param); SENSOR_PRINT_HIGH("end"); return SENSOR_SUCCESS; }
LOCAL uint32_t _ov8830_StreamOn(uint32_t param) { SENSOR_PRINT("SENSOR_ov8830: StreamOn"); Sensor_WriteReg(0x0100, 0x01); return 0; }
LOCAL uint32_t set_OV9660_awb(uint32_t mode) { uint16_t i; SENSOR_REG_T* sensor_reg_ptr = (SENSOR_REG_T*)OV9660_awb_tab[mode]; if(mode >= 7) { SENSOR_PRINT("set_OV9660_awb:param error,mode=%d\n",mode); return SENSOR_FAIL; } for(i = 0; (0xFF != sensor_reg_ptr[i].reg_addr) || (0xFF != sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } msleep(100); SENSOR_PRINT("SENSOR: set_awb_mode: mode = %d", mode); return 0; }
LOCAL uint32_t _BF3905_StreamOff(uint32_t param) { SENSOR_PRINT("SENSOR: _BF3905_StreamOff"); int ret = 0; ret = Sensor_WriteReg(0x09, 0x01); //81 SENSOR_Sleep(20); return ret; }
LOCAL uint32_t _ov8830_StreamOff(uint32_t param) { SENSOR_PRINT("SENSOR_ov8830: StreamOff"); Sensor_WriteReg(0x0100, 0x00); usleep(50*1000); return 0; }
LOCAL uint32_t _ov8830_BeforeSnapshot(uint32_t param) { uint32_t rtn = SENSOR_SUCCESS; param = param & 0xffff; SENSOR_PRINT("SENSOR_ov8830: BeforeSnapshot : %d",param); return SENSOR_SUCCESS; }
LOCAL uint32_t _BF3905_StreamOn(uint32_t param) { SENSOR_PRINT("SENSOR: _BF3905_StreamOn"); int ret = 0; uint16_t read_val = 0; ret = Sensor_WriteReg(0x09, 0x01); SENSOR_Sleep(20); //SENSOR_PRINT("SENSOR: read_BF3905, reg:0x3012 val: 0x%x.\n", read_val); return ret; }
LOCAL uint32_t _BF3905_After_Snapshot(uint32_t param) { SENSOR_PRINT("SENSOR: _BF3905_After_Snapshot =%d \n",param); // BF3905_WriteReg(0x1b,0x2e); BF3905_WriteReg(0x13,0x07); SENSOR_Sleep(100); Sensor_SetMode(param); return SENSOR_SUCCESS; }
LOCAL uint32_t OV9660_set_ae_enable(uint32_t enable) { unsigned char value; SENSOR_PRINT("OV9660_set_ae_enable: enable = %d", enable); value = Sensor_ReadReg(0x13); value &= 0xFE; value |= enable; Sensor_WriteReg(0x13, value); return 0; }
LOCAL uint32_t _ov7675_PowerOn(uint32_t power_on) { SENSOR_AVDD_VAL_E dvdd_val = g_OV7675_yuv_info.dvdd_val; SENSOR_AVDD_VAL_E avdd_val = g_OV7675_yuv_info.avdd_val; SENSOR_AVDD_VAL_E iovdd_val = g_OV7675_yuv_info.iovdd_val; BOOLEAN power_down = g_OV7675_yuv_info.power_down_level; BOOLEAN reset_level = g_OV7675_yuv_info.reset_pulse_level; //uint32_t reset_width=g_ov5640_yuv_info.reset_pulse_width; SENSOR_PRINT("dvdd_val %d, dvdd_val %d, avdd_val %d, iovdd_val %d", power_on, dvdd_val, avdd_val, iovdd_val); SENSOR_PRINT("power_down %d reset_level %d", power_down, reset_level); if (SENSOR_TRUE == power_on) { Sensor_PowerDown(power_down); usleep(10*1000); Sensor_SetIovddVoltage(iovdd_val); usleep(5*1000); Sensor_SetAvddVoltage(avdd_val); usleep(5*1000); Sensor_SetMCLK(SENSOR_DEFALUT_MCLK); Sensor_PowerDown(!power_down); usleep(20*1000); } else { Sensor_PowerDown(power_down); usleep(2*1000); Sensor_SetMCLK(SENSOR_DISABLE_MCLK); usleep(2*1000); Sensor_SetAvddVoltage(SENSOR_AVDD_CLOSED); Sensor_SetIovddVoltage(SENSOR_AVDD_CLOSED); usleep(20*1000); } SENSOR_PRINT("(1:on, 0:off): %d", power_on); return SENSOR_SUCCESS; }
LOCAL uint32_t set_OV9660_video_mode(uint32_t mode) { uint16_t i; SENSOR_REG_T* sensor_reg_ptr = PNULL; sensor_reg_ptr = (SENSOR_REG_T*)OV9660_video_mode_nand_tab[mode]; for(i = 0; (0xFF != sensor_reg_ptr[i].reg_addr)|| (0xFF != sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } msleep(100); SENSOR_PRINT("SENSOR: set_vodeo_mode: %d ",mode); return 0; }
LOCAL uint32_t set_brightness(uint32_t level) { uint16_t i; SENSOR_REG_T* sensor_reg_ptr = (SENSOR_REG_T*)ov7675_brightness_tab[level]; SENSOR_PRINT("0x%x.",OV7675_ReadReg(0x1e)); if(level>6) return 0; for(i = 0; (0xFF != sensor_reg_ptr[i].reg_addr) && (0xFF != sensor_reg_ptr[i].reg_value); i++) { OV7675_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } return 0; }
LOCAL uint32_t _BF3905_set_anti_flicker(uint32_t mode) { SENSOR_REG_T_PTR sensor_reg_ptr=(SENSOR_REG_T_PTR)BF3905_anti_banding_flicker_tab[mode]; uint16_t i=0x00; for(i=0x0; (0xff!=sensor_reg_ptr[i].reg_addr)||(0xff!=sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } SENSOR_PRINT("SENSOR: _BF3905_set_anti_flicker = 0x%02x \n", mode); return 0; }
LOCAL uint32_t set_OV9660_anti_flicker(uint32_t mode) {//107 us uint16_t i; SENSOR_REG_T* sensor_reg_ptr = (SENSOR_REG_T*)OV9660_banding_flicker_tab[mode]; // SCI_ASSERT(PNULL != sensor_reg_ptr); for(i = 0; (0xFF != sensor_reg_ptr[i].reg_addr)|| (0xFF != sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } msleep(100); SENSOR_PRINT("SENSOR: set_OV9660_flicker: 0x%x .\n", mode); return 0; }
LOCAL uint32_t _BF3905_set_ev(uint32_t level) { SENSOR_REG_T_PTR sensor_reg_ptr=(SENSOR_REG_T_PTR)BF3905_ev_tab[level]; uint16_t i=0x00; if(level>6) return 0; for(i=0x00; (0xff!=sensor_reg_ptr[i].reg_addr)||(0xFF!=sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } SENSOR_PRINT("SENSOR: _BF3905_set_ev = 0x%02x \n", level); return 0; }
LOCAL uint32_t _BF3905_set_brightness(uint32_t level) { uint16_t i=0x00; uint32_t reg_bits = 0; uint32_t reg_value = 0; SENSOR_REG_T* sensor_reg_ptr=(SENSOR_REG_T*)BF3905_brightness_tab[level]; if(level>6) return 0; for(i=0x00; (0xff!=sensor_reg_ptr[i].reg_addr)||(0xff!=sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } SENSOR_PRINT("SENSOR: _BF3905_set_brightness = 0x%02x,data=0x%x .\n", level,reg_value); return 0; }
LOCAL uint32_t OV9660_set_preview_mode(uint32_t preview_mode) { SENSOR_PRINT("set_preview_mode: preview_mode = %d", preview_mode); switch (preview_mode) { case SENSOR_PARAM_ENVIRONMENT_NORMAL: OV9660_set_work_mode(0); break; case SENSOR_PARAM_ENVIRONMENT_NIGHT: OV9660_set_work_mode(1); break; case SENSOR_PARAM_ENVIRONMENT_SUNNY: OV9660_set_work_mode(0); break; default: break; } msleep(300); return 0; }
LOCAL uint32_t set_ov7675_video_mode(uint32_t mode) { uint8_t data=0x00; uint8_t data1=0x00; uint16_t i; SENSOR_REG_T* sensor_reg_ptr = PNULL; if(mode>1) return 0; sensor_reg_ptr = (SENSOR_REG_T*)ov7675_video_mode_nand_tab[mode]; if(PNULL == sensor_reg_ptr){ SENSOR_PRINT("set_ov7675_video_mode: sensor_reg_ptr = NULL, return \n"); return 0; } data=OV7675_ReadReg(OV7675_COM11); data&=0x0f; OV7675_WriteReg(OV7675_COM11,data); data1=OV7675_ReadReg(OV7675_REGCF); data1&= 0xf7 ; OV7675_WriteReg(OV7675_COM11,data1); switch(mode) { case 0: //DCAMERA_NORMAL_MODE: OV7675_WriteReg(PLL_ADDR,0x81); break; case 1: //DCAMERA_VIDEO_MODE: OV7675_WriteReg(PLL_ADDR,0x80); break; default : break; } for(i = 0; (0xFF != sensor_reg_ptr[i].reg_addr) || (0xFF != sensor_reg_ptr[i].reg_value); i++) { OV7675_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } SENSOR_TRACE("SENSOR: set_video_mode: mode = %d", mode); return 0; }
LOCAL uint32_t _BF3905_set_awb(uint32_t mode) { uint16_t i=0x00; uint32_t reg_bits = 0; uint32_t reg_value = 0; SENSOR_REG_T* sensor_reg_ptr=(SENSOR_REG_T*)BF3905_awb_tab[mode]; if(mode>4) return 0; for(i=0; (0xff!=sensor_reg_ptr[i].reg_addr)||(0xFF!=sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } SENSOR_PRINT("SENSOR: _BF3905_set_awb = 0x%02x,reg_value=0x%x \n", mode,reg_value); return 0; }
LOCAL uint32_t _BF3905_set_contrast(uint32_t level) { uint16_t i=0x00; uint32_t reg_bits = 0; uint32_t reg_value = 0; SENSOR_REG_T* sensor_reg_ptr=(SENSOR_REG_T*)BF3905_contrast_tab[level]; if(level>6) return 0; for(i=0x00; (0xff!=sensor_reg_ptr[i].reg_addr)||(0xFF!=sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } //Sensor_SetSensorExifInfo(SENSOR_EXIF_CTRL_CONTRAST, (uint32)level); SENSOR_PRINT("SENSOR: _BF3905_set_contrast = 0x%02x,data=0x%x .\n", level,reg_value); return 0; }
LOCAL uint32_t _BF3905_set_image_effect(uint32_t effect_type) { uint16_t i=0x00; uint32_t reg_bits = 0; uint32_t reg_value = 0; SENSOR_REG_T* sensor_reg_ptr=(SENSOR_REG_T*)BF3905_image_effect_tab[effect_type]; if(effect_type>7) return 0; for(i=0x00; (0xff!=sensor_reg_ptr[i].reg_addr)||(0xff!=sensor_reg_ptr[i].reg_value); i++) { Sensor_WriteReg(sensor_reg_ptr[i].reg_addr, sensor_reg_ptr[i].reg_value); } SENSOR_PRINT("SENSOR: _BF3905_set_image_effect = 0x%02x,data=0x%x \n", effect_type,reg_value); return 0; }
LOCAL uint32_t _BF3905_BeforeSnapshot(uint32_t sensor_snapshot_mode) { sensor_snapshot_mode &= 0xffff; Sensor_SetMode(sensor_snapshot_mode); Sensor_SetMode_WaitDone(); switch (sensor_snapshot_mode) { case SENSOR_MODE_PREVIEW_ONE: //VGA SENSOR_PRINT("Capture VGA Size"); BF3905_WriteReg(0x13,0x02); SENSOR_Sleep(200); break; case SENSOR_MODE_SNAPSHOT_ONE_FIRST: // 1.3 M { // BF3905_set_shutter(); BF3905_WriteReg(0x13,0x02); SENSOR_Sleep(450); ///300 // SENSOR_PRINT("Capture 1.3M&2M Size"); break; } case SENSOR_MODE_SNAPSHOT_ONE_SECOND: // 2 M { // BF3905_set_shutter(); BF3905_WriteReg(0x13,0x02); SENSOR_Sleep(450); ///300 // SENSOR_PRINT("Capture 1.3M&2M Size"); break; } default: break; } return 0; }
LOCAL uint32_t _ov8830_GetResolutionTrimTab(uint32_t param) { SENSOR_PRINT("0x%x", (uint32_t)s_ov8830_Resolution_Trim_Tab); return (uint32_t) s_ov8830_Resolution_Trim_Tab; }