コード例 #1
0
ファイル: bh1750.c プロジェクト: peter-mount/piweather.center
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();
    }
}
コード例 #2
0
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;
}
コード例 #3
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;
}
コード例 #4
0
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;
}
コード例 #5
0
ファイル: CalBurnIn.c プロジェクト: github188/NT9665X_GMD_V18
/**
  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);
    }
    */
}
コード例 #6
0
ファイル: Gsensor_DA380.c プロジェクト: magic-gjh/NT96650_K12
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;
}