static void update(struct sensor *sensor) { if (!i2c_lock()) { struct state *state = (struct state *) sensor; uint8_t cmd[4]; int r = 0; int v; cmd[0] = state->level ? CMD_SAMP_HIRES2 : CMD_SAMP_LORES; r = i2c_write(state->slave, cmd, 1); if (!r) { i2c_sleep(state->level ? SPEED_HIRES2 : SPEED_LORES); r = i2c_read(state->slave, cmd, 2); } if (!r) { v = (cmd[0] << 8) | cmd[1]; // Scale is 0.1 but we need to convert to the correct value // So datasheet says / 1.2 but we use 0.12 as thats 10/1.2 giving // us the correct unit v = (int) ((double) v / 0.12); } // log the value if (!r) { sensor_log(sensor, v, "%s %.1f", state->format, ((double) v) * UNIT); } i2c_unlock(); } }
int pcf50605_write_multiple(int address, const unsigned char* buf, int count) { int i; i2c_lock(); for (i = 0; i < count; i++) pp_i2c_send(0x8, address + i, buf[i]); i2c_unlock(); return 0; }
RET_CODE i2c_raw_stop(i2c_bus_t *p_dev) { RET_CODE ret = ERR_NOFEATURE; lld_i2c_t *p_lld = (lld_i2c_t *)p_dev->p_priv; device_base_t *p_base = (device_base_t *)p_dev->p_base; if(drv_check_cond(p_dev) == SUCCESS) { MT_ASSERT(p_lld->std_read != NULL); i2c_lock(p_base); ret = p_lld->raw_stop(p_lld); i2c_unlock(p_base); } return ret; }
RET_CODE i2c_read(i2c_bus_t *p_dev, u8 slv_addr, u8 *p_buf, u32 len, u32 param) { RET_CODE ret = ERR_NOFEATURE; lld_i2c_t *p_lld = (lld_i2c_t *)p_dev->p_priv; device_base_t *p_base = (device_base_t *)p_dev->p_base; if(drv_check_cond(p_dev) == SUCCESS) { MT_ASSERT(p_lld->read != NULL); i2c_lock(p_base); ret = p_lld->read(p_lld, slv_addr, p_buf, len, param); i2c_unlock(p_base); } return ret; }
/** BurnIn main loop BurnIn main loop [CalBurnIn internal API] @param UINT32 uiOperation: Which operation you want to run BURNIN_OP_BURNIN (Burn In) BURNIN_OP_ZOOMAF (ZoomAF Lasting) BURNIN_OP_FLASH (Flash Lasting) BURNIN_OP_168H (168H) @return void */ static void Cal_BurnIn(UINT32 uiOperation) { UINT32 uiTimerID, uiFlag; UINT32 uiKeyFlagID, uiKeyEvent; // UINT32 uiOldPressConfig, uiOldReleaseConfig; UINT32 uiTotalIteration; UINT32 uiInterval; UINT32 uiEventCnt; PSIM_EVENT pSimEvent, pStartEvent; UINT8 uiKeyStatus, uiRepeatCnt; if(i2c_getLockStatus()) i2c_unlock(); // Open timer if (TIMEROpen((UINT *)&uiTimerID, Cal_BurnInTimerISR) != E_OK) { /* set_scankey_press_config(uiOldPressConfig); set_scankey_release_config(uiOldReleaseConfig); */ return; } switch (uiOperation) { case BURNIN_OP_BURNIN: //read cal status for check finish item ReadCalData(); FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE); FilesysWaitCmdFinish(FST_TIME_INFINITE); FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE); //if(Cal_CheckStatus()!= 0) // return ; uiTotalIteration = 40; //2hour //10 ; // 10*3 min = 30 mins pStartEvent = (PSIM_EVENT)&BurnInEvent; Primary_ChangeMode(PRIMARY_MODE_PHOTO); break; case BURNIN_OP_ZOOMAF: uiTotalIteration = 1000; pStartEvent = (PSIM_EVENT)&ZoomAFEvent; Primary_ChangeMode(PRIMARY_MODE_PHOTO); break; case BURNIN_OP_FLASH: FilesysWaitCmdFinish(FST_TIME_INFINITE); FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE); uiTotalIteration = 8; //15 min * 8 = 2 hr pStartEvent = (PSIM_EVENT)&FlashEvent; Primary_ChangeMode(PRIMARY_MODE_PHOTO); SysSetFlag(FL_FLASH, FLASH_ON); break; case BURNIN_OP_168H: //read cal status for check finish item ReadCalData(); FilesysWaitCmdFinish(FST_TIME_INFINITE); FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE); //if(Cal_CheckStatus()!= 0) // return ; uiTotalIteration = 0xFFFFFFFF; pStartEvent = (PSIM_EVENT)&BurnInEvent; Primary_ChangeMode(PRIMARY_MODE_PHOTO); break; case BURNIN_OP_10MIN: //read cal status for check finish item ReadCalData(); FilesysWaitCmdFinish(FST_TIME_INFINITE); FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE); //if(Cal_CheckStatus()!= 0) // return ; uiTotalIteration = 10; // 3 min * 10 =30 mins pStartEvent = (PSIM_EVENT)&BurnInEvent; Primary_ChangeMode(PRIMARY_MODE_PHOTO); break; } // Init variable uiTimeoutValue = 0; // Enable timer and clear all flags clr_flg(FLG_ID_BURNIN, FLGBURNIN_ALL); TIMERSet(uiTimerID, TIMER_INTERVAL, _TIMER_CTRL_FREE_RUN | _TIMER_CTRL_INT_ENABLE, _TIMER_PLAY); for (uiIteration=1; uiIteration<=uiTotalIteration; uiIteration++) { debug_ind(("\n\r ***Loop = %ld,Event= %ld ***\r\n", uiIteration, uiEventCnt)); pSimEvent = pStartEvent; uiRepeatCnt = 0; uiInterval = 0; uiEventCnt = 0; if(uiOperation == BURNIN_OP_FLASH) { Ux_SendEvent(&UIPlayObjCtrl,NVTEVT_EXE_SLIDE,1,SLIDE_5SEC); ImageInfoTable = FlashImageInfoTable; } else ImageInfoTable = BurnInImageInfoTable; Delay_DelayMs(2000); Cal_SetImageInfor_Value(uiRepeatCnt); while (1) { wai_flg((UINT *)&uiFlag, FLG_ID_BURNIN, FLGBURNIN_TIMER, TWF_ORW | TWF_CLR); uiInterval += TIMER_INTERVAL; //avoid display msg too much if(uiInterval%2000 == 0) Cal_BurnInShowLoop(uiIteration, uiEventCnt,uiRepeatCnt); //accumlate time until to interval;the post event if (uiInterval >= pSimEvent->uiInterval) { uiInterval = 0; #if 0 if((uiOperation == BURNIN_OP_BURNIN || uiOperation == BURNIN_OP_10MIN ) && (uiIteration == 4)) //about 10 min,run dark dp { Cal_BurnInLog(uiIteration,uiEventCnt,999); if(uiOperation == BURNIN_OP_10MIN) Cal_DPinBurnIn(FALSE); //not check dp status else Cal_DPinBurnIn(TRUE); // check dp status break; } #endif // End of event if (pSimEvent->uiKeyFlagID == SIM_END) { break; } // Wait for specific flag, or change mode else if (pSimEvent->uiKeyFlagID == FLG_ID_BURNIN) { if (pSimEvent->uiKeyEvent == FLGBURNIN_WAITING) { // Enable timeout uiTimeoutValue = pSimEvent->uiInterval; uiTimerCnt = 0; clr_flg(FLG_ID_BURNIN, FLGBURNIN_TIMEOUT); Cal_BurnInLog(uiIteration,uiEventCnt,uiRepeatCnt); wai_flg((UINT *)&uiFlag, FLG_ID_BURNIN, pSimEvent->uiKeyEvent | FLGBURNIN_TIMEOUT, TWF_ORW | TWF_CLR); if (uiFlag & FLGBURNIN_TIMEOUT) { debug_err(("Wait for specific flag timeout %d\r\n",pSimEvent->uiInterval)); } // Disable timeout uiTimeoutValue = 0; // Clear timer flag clr_flg(FLG_ID_BURNIN, FLGBURNIN_TIMER); uiRepeatCnt = 0; pSimEvent++; uiEventCnt++; debug_ind(("\n\rFLGBURNIN_WAITING ***Loop = %ld,Event= %ld ***\r\n", uiIteration, uiEventCnt)); continue; } } else // FLG_ID_KEY { //log current event Cal_BurnInLog(uiIteration,uiEventCnt,uiRepeatCnt); uiKeyFlagID = pSimEvent->uiKeyFlagID; uiKeyEvent = pSimEvent->uiKeyEvent; uiKeyStatus = pSimEvent->uiKeyStatus; // Set key event if (uiKeyFlagID != NULL && uiKeyEvent != NULL) { //change key event to post message if(uiKeyFlagID == FLG_ID_KEY) { /* NVTMSG msg; if(uiKeyStatus == KEY_STATUS_PRESS) SET_COMMAND(&msg, NVTEVT_KEY_PRESS); else SET_COMMAND(&msg, NVTEVT_KEY_RELEASE); debug_ind(("uiKeyEvent %x nvtcmd %x \r\n",uiKeyEvent ,Get_NVTCMD(uiKeyEvent))); SET_KEY_EVENT(&msg,Get_NVTCMD(uiKeyEvent)); PostMessage(&msg); */ if(uiKeyEvent & (Input_GetKeyMask(KEY_PRESS))) { debug_err(("Ux_PostEvent %d \r\n",uiKeyEvent)); Ux_PostEvent(Get_NVTCMD(uiKeyEvent), 1, Get_NVTCMD(uiKeyEvent)); } } else { set_flg(uiKeyFlagID, uiKeyEvent); } } } uiRepeatCnt++; // Move to next event if (uiRepeatCnt == pSimEvent->uiRepeatCnt) { uiRepeatCnt = 0; pSimEvent++; uiEventCnt++; debug_ind(("*****next event*Loop = %ld,Event= %ld ***************\r\n", uiIteration, uiEventCnt)); } if ((pSimEvent == pStartEvent)&&((uiOperation==BURNIN_OP_10MIN)||(uiOperation==BURNIN_OP_BURNIN) || (uiOperation==BURNIN_OP_168H) || (uiOperation==BURNIN_OP_FLASH)) ) { Delay_DelayMs(2000); //for set flash charg,so set capture index first Cal_SetImageInfor_Value(uiRepeatCnt); } } } } TIMERClose(uiTimerID); //tmp write to AAA for read cal data AAA_Adjust.ISO_Status = _ISO_Status; WriteCalData(); if(uiOperation == BURNIN_OP_FLASH) sprintf(LogStringBuf,"Flash O\r\n"); else sprintf(LogStringBuf,"BurnIn O\r\n"); Cal_ShowStringWithColor((INT8 *)LogStringBuf, 64,170, _OSD_INDEX_GREEN); #if 0 Menu_PowerOff(POWER_OFF); #endif while(1) ;; /* set_scankey_press_config(uiOldPressConfig); set_scankey_release_config(uiOldReleaseConfig); */ // Power off DSC after burn in done // Premier don't want to power off now (2005.10.16) /* if (uiOperation == BURNIN_OP_BURNIN) { PowerOffFlow(TRUE, FALSE); } */ }
static UINT32 GSensor_DA380_ReadReg_2Byte(UINT32 uiAddr, UINT32 uidata) { UINT32 ulWriteAddr, ulReadAddr, ulReg1; static UINT32 ulData1,ulData2; ulWriteAddr =0x30; ulReadAddr =0x31; ulReg1 =(uiAddr&0x000000ff); ulData1 = 0; ulData2 = 0; //debug_err((">>> read register\r\n")); if(i2c_lock(g_GsensorInfo.I2C_Channel) != E_OK) { debug_err(("GSensor: readReg I2C Lock Fail\r\n")); return ulData1; } if (GSensor_I2C_Transmit(ulWriteAddr, 1, 0) != I2C_STS_OK) { debug_err(("Error transmit data1!!\r\n")); i2c_unlock(g_GsensorInfo.I2C_Channel); return ulData1; } if (GSensor_I2C_Transmit(ulReg1, 0, 0) != I2C_STS_OK) { debug_err(("Error transmit data2!!\r\n")); i2c_unlock(g_GsensorInfo.I2C_Channel); return ulData1; } if (GSensor_I2C_Transmit(ulReadAddr, 1, 0) != I2C_STS_OK) { debug_err(("Error transmit data3!!\r\n")); i2c_unlock(g_GsensorInfo.I2C_Channel); return ulData1; } if (GSensor_I2C_Receive(&ulData1, 0, 0) != I2C_STS_OK) { debug_err(("Error Receive data!!\r\n")); i2c_unlock(g_GsensorInfo.I2C_Channel); return ulData1; } if (GSensor_I2C_Receive(&ulData2, 1, 1) != I2C_STS_OK) { debug_err(("Error Receive data!!\r\n")); i2c_unlock(g_GsensorInfo.I2C_Channel); return ulData1; } if(i2c_unlock(g_GsensorInfo.I2C_Channel) != E_OK) { debug_err(("GSensor: readReg I2C UnLock Fail\r\n")); return ulData1; } // debug_err((">>>>>uidata = %d %d\r\n",ulData1,ulData2)); uidata = (ulData1<<8) + ulData2; //debug_err((">>>uidata = %d\r\n",uidata)); return uidata; }