MTK平臺 camera兼容輪訓流程分析

1:

本文主要介紹下攝像頭   主攝和子攝(硬件)去匹配攝像頭驅動原則以及攝像頭匹配lens驅動原則。本文以現在所做的朵唯項目爲例,平臺82+90 kk版本。
其實非常簡單,明白兩個函數即可。

0,1,2,3  // i 輪訓
#define IMX179_MAIN_SY_ID                        0x1001
#define IMX179_MAIN_XL_ID                        0x1002
#define IMX179_SUB_SY_ID                         0x1003
#define IMX179_SUB_XL_ID                         0x1004


MSDK_SENSOR_INIT_FUNCTION_STRUCT SensorList[] =
{
#if defined(IMX179_MIPI_RAW_SY1_4LANE)
        RAW_INFO(IMX179_MAIN_SY_ID, SENSOR_DRVNAME_IMX179_MIPI_SY1_RAW, NULL),
#endif
#if defined(IMX179_MIPI_RAW_XL2_4LANE)
        RAW_INFO(IMX179_MAIN_XL_ID, SENSOR_DRVNAME_IMX179_MIPI_XL2_RAW, NULL),
#endif
#if defined(IMX179_MIPI_RAW_SY3_2LANE)
        RAW_INFO(IMX179_SUB_SY_ID, SENSOR_DRVNAME_IMX179_MIPI_SY3_RAW, NULL),
#endif
#if defined(IMX179_MIPI_RAW_XL4_2LANE)
        RAW_INFO(IMX179_SUB_XL_ID, SENSOR_DRVNAME_IMX179_MIPI_XL4_RAW, NULL),
#endif
}

攝像頭主攝和子攝(硬件)去匹配攝像頭驅動原則
參看文件                 Imgsensor_drv.cpp   (platform\mt6582\hardware\mtkcam\core\drv\imgsensor)  中的ImgSensorDrv類的 impSearchSensor成員函數
粘貼改函數如下:

MINT32  ImgSensorDrv::impSearchSensor(pfExIdChk pExIdChkCbf)
{
    MUINT32 SensorEnum = (MUINT32) DUAL_CAMERA_MAIN_SENSOR;            // 主攝還是子攝
    MUINT32 i,  id[KDIMGSENSOR_MAX_INVOKE_DRIVERS] = {0,0};                     // 只用到id[0]
    MUINT32   imx169_flag = 255;       // pxs_001
    MUINT32   imx169_tag = 0;
    MBOOL SensorConnect=TRUE;
    UCHAR cBuf[64];
    MINT32 err = SENSOR_NO_ERROR;
    MINT32 err2 = SENSOR_NO_ERROR;
    ACDK_SENSOR_INFO_STRUCT SensorInfo;                                             // 從底層獲取的信息,不用關心
    ACDK_SENSOR_CONFIG_STRUCT SensorConfigData;
    ACDK_SENSOR_RESOLUTION_INFO_STRUCT SensorResolution;
    MINT32 sensorDevs = SENSOR_NONE;
    IMAGE_SENSOR_TYPE sensorType = IMAGE_SENSOR_TYPE_UNKNOWN;
    IMGSENSOR_SOCKET_POSITION_ENUM socketPos = IMGSENSOR_SOCKET_POS_NONE;


    //! If imp sensor search process already done before,
    //! only need to return the sensorDevs, not need to
    //! search again.
    if (SENSOR_DOES_NOT_EXIST != m_mainSensorId) {      // 相等 不執行
        //been processed.
        LOG_MSG("[impSearchSensor] Already processed \n");
        if (BAD_SENSOR_INDEX != m_mainSensorIdx) {
            sensorDevs |= SENSOR_MAIN;
        }
        if (BAD_SENSOR_INDEX != m_subSensorIdx) {
            sensorDevs |= SENSOR_SUB;
        }
        #ifdef  ATVCHIP_MTK_ENABLE
            sensorDevs |= SENSOR_ATV;
        #endif
        return sensorDevs;
    }
   
//pxs_002 
    GetSensorInitFuncList(& m_pstSensorInitFunc );       // 獲取hal層的sensor列表,

    LOG_MSG("SENSOR search start \n");
    if (-1 != m_fdSensor) {
        ::close(m_fdSensor);
        m_fdSensor = -1;
    }

    sprintf(cBuf,"/dev/%s",CAMERA_HW_DEVNAME);
    m_fdSensor = ::open(cBuf, O_RDWR);                  // 打開設備節點    /dev/kd_camera_hw
    if (m_fdSensor < 0) {
         LOG_ERR("[impSearchSensor]: error opening %s: %s \n", cBuf, strerror(errno));
        return sensorDevs;
    }
    LOG_MSG("[impSearchSensor] m_fdSensor = %d  \n", m_fdSensor);

//pxs_003
    // search main/main_2/sub 3 sockets    開始進行枚舉

   #ifdef MTK_SUB_IMGSENSOR  該宏定義
                                                                                // for i = 1; i<=2 ; i ++  . main_sensor =1 ; 
        for (SensorEnum = DUAL_CAMERA_MAIN_SENSOR; SensorEnum <= DUAL_CAMERA_SUB_SENSOR;  SensorEnum <<= 1)  {    //表示主攝和子攝的輪訓
        LOG_MSG("impSearchSensor search to sub\n");
   #else
                                                                              // for i = 1; i<2 ; i ++  . main_sensor =1 ; 
       for (SensorEnum = DUAL_CAMERA_MAIN_SENSOR; SensorEnum <    DUAL_CAMERA_SUB_SENSOR;  SensorEnum <<= 1)  {
        LOG_MSG("impSearchSensor search to main\n");  
   #endif    

        //skip atv case
        if ( 0x04 == SensorEnum ) continue;           //不是3d攝像頭,所以該處不會走到
        //
        for (i = 0; i < MAX_NUM_OF_SUPPORT_SENSOR; i++) {                     //所支持的驅動
            //end of driver list
             if (imx169_flag == i) continue;
            if (m_pstSensorInitFunc[i].getCameraDefault == NULL) {                               //參看代碼,不會往下執行
                LOG_MSG("m_pstSensorInitFunc[i].getCameraDefault is NULL: %d \n", i);               
                break;
            }
                //set sensor driver 
            id[KDIMGSENSOR_INVOKE_DRIVER_0] = (SensorEnum << KDIMGSENSOR_DUAL_SHIFT) | i;                                       // 用第i  款驅動去匹配我們的主攝和子攝
            LOG_MSG("set sensor driver id =%x\n", id[KDIMGSENSOR_INVOKE_DRIVER_0]);

            err = ioctl( m_fdSensor,  KDIMGSENSORIOC_X_SET_DRIVER,  &id[ KDIMGSENSOR_INVOKE_DRIVER_0 ] );              // kd_sensorlist.c 設置我們的驅動,
                if (err < 0) {
                    LOG_ERR("ERROR:KDCAMERAHWIOC_X_SET_DRIVER\n");
                }

          
//pxs_004
                //err = open();
                err = ioctl(m_fdSensor,  KDIMGSENSORIOC_T_CHECK_IS_ALIVE );          //  執行讀sensor id的函數
           #if defined(DOOV_D1)
                 if(err ==0){
                      // 這裏很重要,有4顆模組,輪訓的時候 i>=2 的時候,那麼必將會是 sub,因爲i =0,1 的時候是 main 
                          if (i>=2)
                           {
                        imx169_sub = 1;     // i=2 ;i=3 的時候才跑到 sub 
                                  imx169_main =0;
                            }
                      else{
                                   imx169_main =1;
                                   imx169_sub = 0;
                    }
                    }
                 //    if(err ==0){
                 //        imx169_flag = i;
                 //      imx169_tag = 1;
                 //    }
          #endif

                if (err < 0) {
                    LOG_MSG("[impSearchSensor] Err-ctrlCode (%s) \n", strerror(errno));
                }

            //
            sensorType = this->getCurrentSensorType((SENSOR_DEV_ENUM)SensorEnum);                    //     獲取sensor類型            //
            socketPos 獲取位置   = this->getSocketPosition( (CAMERA_DUAL_CAMERA_SENSOR_ENUM ) SensorEnum  );

                //check extra ID , from EEPROM maybe
                //may need to keep power here
                if (NULL != pExIdChkCbf) {
                    err2 = pExIdChkCbf();
                    if (err2 < 0) {
                        LOG_ERR("Error:pExIdChkCbf() \n");
                    }
                }

                //power off sensor
                close();

                if (err < 0 || err2 < 0)     // 這裏很重要,如果上面的KDIMGSENSORIOC_X_SET_DRIVER  和   KDIMGSENSORIOC_T_CHECK_IS_ALIVE 不成功,說明沒有匹配ok 
                    LOG_MSG("sensor ID mismatch\n");
                 
               else {                          // // 這裏很重要,如果上面的KDIMGSENSORIOC_X_SET_DRIVER  和   KDIMGSENSORIOC_T_CHECK_IS_ALIVE 成功,匹配ok                   

//pxs_005
                //這裏表示攝像頭讀ID成功

             #if defined(DOOV_D1) // 主設輪訓完成
                    if (SensorEnum == DUAL_CAMERA_MAIN_SENSOR && imx169_main ==1) {
             #else
                    if (SensorEnum == DUAL_CAMERA_MAIN_SENSOR ) {
             #endif

          {      //若是主攝 進行初始化,即填充m_mainSensorDrv.

                //m_mainSensorIdx = i;
                //m_mainSensorId = m_pstSensorInitFunc[m_mainSensorIdx].SensorId;

                m_mainSensorDrv.index[m_mainSensorDrv.number] = i;
                m_mainSensorDrv.type[m_mainSensorDrv.number] = sensorType;
                if ( IMAGE_SENSOR_TYPE_RAW == sensorType && BAD_SENSOR_INDEX == m_mainSensorDrv.firstRawIndex ) {
                    m_mainSensorDrv.firstRawIndex = i;
                }

                else if ( IMAGE_SENSOR_TYPE_YUV == sensorType && BAD_SENSOR_INDEX == m_mainSensorDrv.firstYuvIndex ) {
                    m_mainSensorDrv.firstYuvIndex = i;
                }
                m_mainSensorDrv.position = socketPos;
                m_mainSensorDrv.sensorID = m_pstSensorInitFunc[ m_mainSensorDrv.index[  m_mainSensorDrv.number  ]  ].SensorId;
// LOG("MAIN sensor m_mainSensorDrv.number=%d,m_mainSensorDrv.index=%d\n",m_mainSensorDrv.number,m_mainSensorDrv.index[m_mainSensorDrv.number]);

                m_mainSensorDrv.number++;
                //
                m_pMainSensorInfo = m_pstSensorInitFunc[i].pSensorInfo  ;
                if  ( m_pMainSensorInfo )
                {
                    NSFeature::SensorInfoBase *  pSensorInfo =  m_pstSensorInitFunc[ i ].pSensorInfo  ;
   LOG_MSG("found <%#x/%s/%s>", pSensorInfo->GetID(), pSensorInfo->getDrvName(), pSensorInfo->getDrvMacroName());
// found <0x135/imx135mipiraw/SENSOR_DRVNAME_IMX135_MIPI_RAW>

                }
                else
                {
                    LOG_WRN("m_pMainSensorInfo==NULL\n");
                }
                 
LOG_MSG("MAIN sensor found:[%d]/[0x%x]/[%d]/[%d] \n" , i,  id[KDIMGSENSOR_INVOKE_DRIVER_0],    sensorType  ,socketPos  );
                //break;
            }


                //pxs_006
               #if defined(DOOV_D1)
                          else if (SensorEnum == DUAL_CAMERA_SUB_SENSOR && imx169_sub ==1) {  // 若是子攝,即填充成員變量m_subSensorDrv.
               #else
                           else if (SensorEnum == DUAL_CAMERA_SUB_SENSOR ) {
               #endif

                //m_subSensorIdx = i;
                //m_subSensorId = m_pstSensorInitFunc[m_subSensorIdx].SensorId;
                m_subSensorDrv.index[m_subSensorDrv.number] = i;
                m_subSensorDrv.type[m_subSensorDrv.number] = sensorType;
                if ( IMAGE_SENSOR_TYPE_RAW == sensorType && BAD_SENSOR_INDEX == m_subSensorDrv.firstRawIndex ) {
                    m_subSensorDrv.firstRawIndex = i;
                }
                else if ( IMAGE_SENSOR_TYPE_YUV == sensorType && BAD_SENSOR_INDEX == m_subSensorDrv.firstYuvIndex ) {
                    m_subSensorDrv.firstYuvIndex = i;
                }
                m_subSensorDrv.position = socketPos;
                m_subSensorDrv.sensorID = m_pstSensorInitFunc[m_subSensorDrv.index[m_subSensorDrv.number]].SensorId;
                //LOG_MSG("SUB sensor m_subSensorDrv.number=%d, m_subSensorDrv.index=%d\n",m_subSensorDrv.number,m_subSensorDrv.index[m_subSensorDrv.number]);
                m_subSensorDrv.number++;
                //
                m_pSubSensorInfo = m_pstSensorInitFunc[i].pSensorInfo;
                if  ( m_pSubSensorInfo )
                {
                    NSFeature::SensorInfoBase*   pSensorInfo  =   m_pstSensorInitFunc[ i ].pSensorInfo  ;
                    LOG_MSG(  "found <%#x/%s/%s>" ,   pSensorInfo->GetID(),    pSensorInfo->getDrvName(),     pSensorInfo->getDrvMacroName()   );
                }
                else
                {
                    LOG_WRN("m_pSubSensorInfo==NULL\n");
                }
                LOG_MSG("SUB sensor found:[%d]/[0x%x]/[%d]/[%d] \n",i,id[KDIMGSENSOR_INVOKE_DRIVER_0],sensorType,socketPos);
                //break;
            }
        }//
       
        if (imx169_tag ==1){
                imx169_tag = 0;
                break;
            
         }
             
        }

    }


//pxs_007
    //close system call may be off sensor power. check first!!!
    ::close(m_fdSensor);
    m_fdSensor = -1;
    //
    if (BAD_SENSOR_INDEX != m_mainSensorDrv.index[0]) {
        m_mainSensorId = m_mainSensorDrv.sensorID;
        //init to choose first
        m_mainSensorIdx = m_mainSensorDrv.index[0];                     // 重要
        sensorDevs |= SENSOR_MAIN;
    }

    if (BAD_SENSOR_INDEX != m_subSensorDrv.index[0]) {
        m_subSensorId = m_subSensorDrv.sensorID;
        //init to choose first
        m_subSensorIdx = m_subSensorDrv.index[0];                     //重要
        sensorDevs |= SENSOR_SUB;
    }

    #ifdef  ATVCHIP_MTK_ENABLE
   
        sensorDevs |= SENSOR_ATV;
   
    #endif


    if (sensorDevs == SENSOR_NONE) {
        LOG_ERR( "Error No sensor found!! \n");
    }

    LOG("SENSOR search end: 0x%x /[0x%x][%d]/[0x%x][%d]\n", sensorDevs, m_mainSensorId,m_mainSensorIdx,m_subSensorId,m_subSensorIdx);

//  01-01 12:54:14.914573   418   418 D ImgSensorDrv: [impSearchSensor]SENSOR search end: 0x3 /[0x230][0]/[0xffffff][255]/[0x30c8][1]

    return sensorDevs;
}

//其實,該函數最重要的目的即初始化了兩個非常重要的成員變量m_mainSensorIdx和 m_subSensorIdx ,分別表示主攝驅動和子攝驅動所在的索引。







=================================================================================================================================

攝像頭匹配lens驅動原則
文件 Mcu_drv.cpp (platform\mt6582\hardware\mtkcam\core\featureio\drv\lens)    中的    MCUDrv類的lensSearch成員函數

int MCUDrv::lensSearch(
    unsigned int a_u4CurrSensorDev,   主攝還是子攝
    unsigned int a_u4CurrSensorId        SENSOR ID
)
{
    INT32 i;
   
    int err;
    ACDK_SENSOR_FEATURECONTROL_STRUCT featureCtrl;              // 自定義一個featureCtrl命令
    MUINT32 FeaturePara = 0;
    MUINT32 FeatureParaLen = sizeof(MUINT32);

    MCU_DRV_DBG("lensSearch() - Entry \n");
    MCU_DRV_DBG("[CurrSensorDev]0x%04x [CurrSensorId]0x%04x\n", a_u4CurrSensorDev, a_u4CurrSensorId);

    LensCustomInit();
    LensCustomGetInitFunc(&MCUDrv::m_LensInitFunc[0]);
                                                                     // added by yangbo 0718
        
            MCUDrv::m_fdMCU = open("/dev/kd_camera_hw", O_RDWR); 打開設備節點
            if (MCUDrv::m_fdMCU < 0) {
                MCU_DRV_ERR("error opening %s", strerror(errno));
                return MCUDrv::MCU_INVALID_DRIVER;
            }         

                       初始化這個featureCtrl命令
            featureCtrl.InvokeCamera = (CAMERA_DUAL_CAMERA_SENSOR_ENUM)a_u4CurrSensorDev;  
//(CAMERA_DUAL_CAMERA_SENSOR_ENUM)a_u4CurrSensorDev;         //DUAL_CAMERA_MAIN_SENSOR;

            featureCtrl.FeatureId = SENSOR_FEATURE_GET_MID;             // 自定義
            featureCtrl.pFeaturePara = (MUINT8 *)&FeaturePara;
            featureCtrl.pFeatureParaLen = (MUINT32 *)&FeatureParaLen;
           
            err = ioctl(MCUDrv::m_fdMCU, KDIMGSENSORIOC_X_FEATURECONCTROL, &featureCtrl);
         
            if (err < 0) {
                MCU_DRV_ERR("[initMCU] ioctl - SENSOR_FEATURE_CHECK_SENSOR_ID, error %s",  strerror(errno));
            }      
             MCU_DRV_DBG("lens_Search()yangb0 -yangbo= FeaturePara=0x%04x\n",FeaturePara);                                          //  此時得到的爲底層區分好的模組ID
    
    MCU_DRV_DBG("lens_Search() -yangbo= FeaturePara=0x%04x\n",FeaturePara);     

    MCU_DRV_DBG("[LensInitTable-0][SensorId]0x%04x,[LensId]0x%04x\n", MCUDrv::m_LensInitFunc[0].SensorId, MCUDrv::m_LensInitFunc[0].LensId);
    MCU_DRV_DBG("[LensInitTable-1][SensorId]0x%04x,[LensId]0x%04x\n", MCUDrv::m_LensInitFunc[1].SensorId, MCUDrv::m_LensInitFunc[1].LensId);
    MCU_DRV_DBG("[LensInitTable-2][SensorId]0x%04x,[LensId]0x%04x\n", MCUDrv::m_LensInitFunc[2].SensorId, MCUDrv::m_LensInitFunc[2].LensId);   
    MCU_DRV_DBG("[LensInitTable-3][SensorId]0x%04x,[LensId]0x%04x\n", MCUDrv::m_LensInitFunc[3].SensorId, MCUDrv::m_LensInitFunc[3].LensId);

    MCUDrv::m_u4CurrLensIdx = 0;

    if (a_u4CurrSensorDev == SENSOR_DEV_MAIN)                         // only search for main sensor, dummy for sub sensor always -> need modify for support 3D
    {
        for (i=0; i<4; i++) {
            if ((MCUDrv::m_LensInitFunc[i].LensId == DUMMY_LENS_ID) ||
                (MCUDrv::m_LensInitFunc[i].LensId == SENSOR_DRIVE_LENS_ID) ||
                (MCUDrv::m_LensInitFunc[i].LensId == FM50AF_LENS_ID)
                )
            {
                MCUDrv::m_u4CurrLensIdx = i;
            }
        }

        // force assign LensIdx if SensorId != DUMMY_SENSOR_ID (to support backup lens/new lens driver)
        for (i=0; i<4; i++) {
             if ((MCUDrv::m_LensInitFunc[i].SensorId == a_u4CurrSensorId) && (a_u4CurrSensorId!=0xFFFF) && (a_u4CurrSensorId!=0x0))
                  {
                       MCUDrv::m_u4CurrLensIdx = i;             
                       MCU_DRV_DBG("[idx]%d [CurrSensorId]0x%04x,[CurrLensIdx]0x%04x\n", i, a_u4CurrSensorId, MCUDrv::m_u4CurrLensIdx);               
                       break;
                  }
                  else if(a_u4CurrSensorId == IMX179_SENSOR_ID)
                  {
                         if(FeaturePara == IMX179_MAIN_SY_ID)                                   // 若是信利模組
                             {
                                 MCUDrv::m_u4CurrLensIdx = 1;       lens列表索引爲1      
                                 MCU_DRV_DBG("[idx]%d [CurrSensorId]0x%04x,[CurrLensIdx]0x%04x\n", i, a_u4CurrSensorId, MCUDrv::m_u4CurrLensIdx);               
                                 break;
                             }
                       else if(FeaturePara == IMX179_MAIN_XL_ID)                            // 若是瞬宇模組
                             {
                                MCUDrv::m_u4CurrLensIdx = 2;        lens列表索引爲2     
                                MCU_DRV_DBG("[idx]%d [CurrSensorId]0x%04x,[CurrLensIdx]0x%04x\n", i, a_u4CurrSensorId, MCUDrv::m_u4CurrLensIdx);               
                                break;
                              }
                      else
                            {
                                MCUDrv::m_u4CurrLensIdx = i;            否則爲i 
                                MCU_DRV_DBG("[idx]%d [CurrSensorId]0x%04x,[CurrLensIdx]0x%04x\n", i, a_u4CurrSensorId, MCUDrv::m_u4CurrLensIdx);               
                               break;
                            }
                  }
              
        }
    }
    else //sub or main2 case
    {
        for (i=0; i<MAX_NUM_OF_SUPPORT_LENS; i++) {
            if ((MCUDrv::m_LensInitFunc[i].SensorId == a_u4CurrSensorId) && (a_u4CurrSensorId!=0xFFFF) && (a_u4CurrSensorId!=0x0))
            {
                MCUDrv::m_u4CurrLensIdx = i;
                MCU_DRV_DBG("[idx]%d [CurrSensorId]0x%04x,[CurrLensIdx]0x%04x\n", i, a_u4CurrSensorId, MCUDrv::m_u4CurrLensIdx);               
                break;
            }
        }
    }

    LensCustomSetIndex(MCUDrv::m_u4CurrLensIdx);

    MCU_DRV_DBG("[CurrLensIdx]%d", MCUDrv::m_u4CurrLensIdx);

    return MCU_NO_ERROR;
}
該函數最重要的目的也就是設置lens列表所在的索引,對於朵唯項目而言,即表示爲不同的模組去匹配不同的lens驅動



=======================================================================================================================

關於今天提的四個驅動去匹配的問題,規則是這樣
要修改到hal層具體的匹配規則;在kd_sensorlist.h和sensorlist.cpp文件中按照如下順序定義列表;

   {瞬宇主攝模組id1,name1,fun1}   第0個驅動列表和hal列表
   {信利主攝模組id2,name2,fun2}   第1個驅動列表和hal列表
   {瞬宇子攝模組id3,name3,fun3}   第2個驅動列表和hal列表
   {信利子攝模組id4,name4,fun4}   第3個驅動列表和hal列表

四個id都是不一樣的,比如說分別爲 1001,1002,1003,1004

之後去修改匹配規則,像這樣去修改,在匹配主攝的時候,我們只去枚舉前兩個列表在匹配子攝的時候去枚舉後兩個列表
注意要在各sensor驅動裏注意讀sensor ID的函數後面再加上讀模組ID的驗證,在這裏的話,修改匹配規則如下:

     前面省略。。。。
      定義兩個變量
       int imx169_sub = -1;
      int  imx169_main =-1;

   #ifdef MTK_SUB_IMGSENSOR  該宏定義
    for (SensorEnum = DUAL_CAMERA_MAIN_SENSOR; SensorEnum <= DUAL_CAMERA_SUB_SENSOR; SensorEnum <<= 1)  {    表示主攝和子攝的輪訓
        LOG_MSG("impSearchSensor search to sub\n");
   #else
    for (SensorEnum = DUAL_CAMERA_MAIN_SENSOR; SensorEnum < DUAL_CAMERA_SUB_SENSOR; SensorEnum <<= 1)  {
        LOG_MSG("impSearchSensor search to main\n");  
   #endif    

        //skip atv case
        if ( 0x04 == SensorEnum ) continue; 不是3d攝像頭,所以該處不會走到
        //
        for (i = 0; i < MAX_NUM_OF_SUPPORT_SENSOR; i++) {                   所支持的驅動
            //end of driver list
           //  if (imx169_flag == i) continue;
            if (m_pstSensorInitFunc[i].getCameraDefault == NULL) {                 參看代碼,不會往下執行
                LOG_MSG("m_pstSensorInitFunc[i].getCameraDefault is NULL: %d \n", i);               
                break;
            }
                //set sensor driver
            id[KDIMGSENSOR_INVOKE_DRIVER_0] = (SensorEnum << KDIMGSENSOR_DUAL_SHIFT) | i;                // 用第i款驅動去匹配我們的主攝和子攝
            LOG_MSG("set sensor driver id =%x\n", id[KDIMGSENSOR_INVOKE_DRIVER_0]);
            err = ioctl(m_fdSensor, KDIMGSENSORIOC_X_SET_DRIVER,&id[KDIMGSENSOR_INVOKE_DRIVER_0] );       設置我們的驅動,
                if (err < 0) {
                    LOG_ERR("ERROR:KDCAMERAHWIOC_X_SET_DRIVER\n");
                }

          

                //err = open();
                err = ioctl(m_fdSensor, KDIMGSENSORIOC_T_CHECK_IS_ALIVE);                   // 執行讀sensor id的函數
                if(err ==0){
                  if (i>=2)
                {
                   imx169_sub = 1;
                   imx169_main =0;
                }
                  else
                    imx169_main =1;
                    imx169_sub = 0;
              
                 }
               
                if (err < 0) {
                    LOG_MSG("[impSearchSensor] Err-ctrlCode (%s) \n", strerror(errno));
                }
            //
            sensorType = this->getCurrentSensorType((SENSOR_DEV_ENUM)SensorEnum);                 //獲取sensor類型            //
            socketPos 獲取位置   = this->getSocketPosition((CAMERA_DUAL_CAMERA_SENSOR_ENUM)SensorEnum);
                //check extra ID , from EEPROM maybe
                //may need to keep power here
                if (NULL != pExIdChkCbf) {
                    err2 = pExIdChkCbf();
                    if (err2 < 0) {
                        LOG_ERR("Error:pExIdChkCbf() \n");
                    }
                }

                //power off sensor
                close();

                if (err < 0 || err2 < 0) {
                    LOG_MSG("sensor ID mismatch\n");
                }
                else { 這裏表示攝像頭讀ID成功
                    if (SensorEnum == DUAL_CAMERA_MAIN_SENSOR && imx169_main ==1 ) {                  //  若是主攝 進行初始化,即填充m_mainSensorDrv.
                //m_mainSensorIdx = i;
                //m_mainSensorId = m_pstSensorInitFunc[m_mainSensorIdx].SensorId;
                m_mainSensorDrv.index[m_mainSensorDrv.number] = i;
                m_mainSensorDrv.type[m_mainSensorDrv.number] = sensorType;
                if ( IMAGE_SENSOR_TYPE_RAW == sensorType && BAD_SENSOR_INDEX == m_mainSensorDrv.firstRawIndex ) {
                    m_mainSensorDrv.firstRawIndex = i;
                }
                else if ( IMAGE_SENSOR_TYPE_YUV == sensorType && BAD_SENSOR_INDEX == m_mainSensorDrv.firstYuvIndex ) {
                    m_mainSensorDrv.firstYuvIndex = i;
                }
                m_mainSensorDrv.position = socketPos;
                m_mainSensorDrv.sensorID = m_pstSensorInitFunc[m_mainSensorDrv.index[m_mainSensorDrv.number]].SensorId;
                // LOG_MSG("MAIN sensor m_mainSensorDrv.number=%d, m_mainSensorDrv.index=%d\n",m_mainSensorDrv.number,m_mainSensorDrv.index[m_mainSensorDrv.number]);
                m_mainSensorDrv.number++;
                //
                m_pMainSensorInfo = m_pstSensorInitFunc[i].pSensorInfo;
                if  ( m_pMainSensorInfo )
                {
                    NSFeature::SensorInfoBase* pSensorInfo = m_pstSensorInitFunc[i].pSensorInfo;
                    LOG_MSG("found <%#x/%s/%s>", pSensorInfo->GetID(), pSensorInfo->getDrvName(), pSensorInfo->getDrvMacroName());
                }
                else
                {
                    LOG_WRN("m_pMainSensorInfo==NULL\n");
                }
                LOG_MSG("MAIN sensor found:[%d]/[0x%x]/[%d]/[%d] \n",i,id[KDIMGSENSOR_INVOKE_DRIVER_0],sensorType,socketPos);
                //break;
            }
            else if (SensorEnum == DUAL_CAMERA_SUB_SENSOR && imx169_sub ==1) {                  // 若是子攝,即填充成員變量m_subSensorDrv.
                //m_subSensorIdx = i;
                //m_subSensorId = m_pstSensorInitFunc[m_subSensorIdx].SensorId;
                m_subSensorDrv.index[m_subSensorDrv.number] = i;
                m_subSensorDrv.type[m_subSensorDrv.number] = sensorType;
                if ( IMAGE_SENSOR_TYPE_RAW == sensorType && BAD_SENSOR_INDEX == m_subSensorDrv.firstRawIndex ) {
                    m_subSensorDrv.firstRawIndex = i;
                }
                else if ( IMAGE_SENSOR_TYPE_YUV == sensorType && BAD_SENSOR_INDEX == m_subSensorDrv.firstYuvIndex ) {
                    m_subSensorDrv.firstYuvIndex = i;
                }
                m_subSensorDrv.position = socketPos;
                m_subSensorDrv.sensorID = m_pstSensorInitFunc[m_subSensorDrv.index[m_subSensorDrv.number]].SensorId;
                //LOG_MSG("SUB sensor m_subSensorDrv.number=%d, m_subSensorDrv.index=%d\n",m_subSensorDrv.number,m_subSensorDrv.index[m_subSensorDrv.number]);
                m_subSensorDrv.number++;
                //
                m_pSubSensorInfo = m_pstSensorInitFunc[i].pSensorInfo;
                if  ( m_pSubSensorInfo )
                {
                    NSFeature::SensorInfoBase* pSensorInfo = m_pstSensorInitFunc[i].pSensorInfo;
                    LOG_MSG("found <%#x/%s/%s>", pSensorInfo->GetID(), pSensorInfo->getDrvName(), pSensorInfo->getDrvMacroName());
                }
                else
                {
                    LOG_WRN("m_pSubSensorInfo==NULL\n");
                }
                LOG_MSG("SUB sensor found:[%d]/[0x%x]/[%d]/[%d] \n",i,id[KDIMGSENSOR_INVOKE_DRIVER_0],sensorType,socketPos);
                //break;
            }
        }//
       
    
             
       
        }
    }
    //close system call may be off sensor power. check first!!!
    ::close(m_fdSensor);
    m_fdSensor = -1;
    //
    if (BAD_SENSOR_INDEX != m_mainSensorDrv.index[0]) {
        m_mainSensorId = m_mainSensorDrv.sensorID;
        //init to choose first
        m_mainSensorIdx = m_mainSensorDrv.index[0];  重要
        sensorDevs |= SENSOR_MAIN;
    }

    if (BAD_SENSOR_INDEX != m_subSensorDrv.index[0]) {
        m_subSensorId = m_subSensorDrv.sensorID;
        //init to choose first
        m_subSensorIdx = m_subSensorDrv.index[0]; 重要
        sensorDevs |= SENSOR_SUB;
    }

    #ifdef  ATVCHIP_MTK_ENABLE
   
        sensorDevs |= SENSOR_ATV;
   
    #endif


    if (sensorDevs == SENSOR_NONE) {
        LOG_ERR( "Error No sensor found!! \n");
    }
    //
    LOG("SENSOR search end: 0x%x /[0x%x][%d]/[0x%x][%d]\n", sensorDevs,m_mainSensorId,m_mainSensorIdx,m_subSensorId,m_subSensorIdx);

    return sensorDevs;
}//



具體實例:6737T x7 項目
// 搜索順序是根據,sensorlist.cpp 中數組順序來的。
    RAW_INFO(IALENGMIPI_SENSOR_ID, SENSOR_DRVNAME_IALENG_MIPI_RAW, NULL),
    RAW_INFO(OV2680MIPI_SENSOR_ID, SENSOR_DRVNAME_OV2680_MIPI_RAW,NULL),
    RAW_INFO(S5K3L8_SENSOR_ID, SENSOR_DRVNAME_S5K3L8_MIPI_RAW, NULL),
    RAW_INFO(S5K3L2_SENSOR_ID, SENSOR_DRVNAME_S5K3L2_MIPI_RAW, NULL),


2:
如下這部分是開機過程中打印的log:
01-01 00:35:11.481128   480   480 D [   63.460238].(1)[480:cameraserver][name:kd_sensorlist&]: d1
01-01 00:35:11.520166   480   480 D [   63.499276].(0)[480:cameraserver][name:kd_sensorlist&]: d1
01-01 00:35:11.520361   480   480 D [   63.499471].(0)[480:cameraserver][name:kd_sensorlist&]: 0x00010000/0x00000000
01-01 00:35:11.520901   480   480 D [   63.500011]: .(0)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=1,drvIdx[0]=0
01-01 00:35:11.520901   480   480 D [   63.500011]: .(0)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=1,drvIdx[0]=0
01-01 00:35:11.520922   480   480 D [   63.500032]: .(0)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][1][ialengmipi]
01-01 00:35:11.520922   480   480 D [   63.500032]: .(0)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][1][ialengmipi]
01-01 00:35:11.756854   480   480 E [   63.735964]: .(0)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed, addr = 0x300a, data = 0x0 !!
01-01 00:35:11.761182   480   480 E [   63.740292]: .(0)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed, addr = 0x300b, data = 0x0 !!

01-01 00:35:11.791698   480   480 D [   63.770808].(0)[480:cameraserver][name:kd_sensorlist&]: 0x00010001/0x00000000
01-01 00:35:11.791711   480   480 D [   63.770821]: .(0)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=1,drvIdx[0]=1
01-01 00:35:11.791711   480   480 D [   63.770821]: .(0)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=1,drvIdx[0]=1
01-01 00:35:11.791721   480   480 D [   63.770831]: .(0)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][1][ov2680mipiraw]
01-01 00:35:11.791721   480   480 D [   63.770831]: .(0)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][1][ov2680mipiraw]
01-01 00:35:11.986520   480   480 E [   63.965630]: .(1)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:11.991106   480   480 E [   63.970216]: .(1)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:12.005729   480   480 E [   63.984839]: .(1)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:12.008948   480   480 E [   63.988058]: .(1)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:12.009244   480   480 E [   63.988354]: .(1)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:12.009499   480   480 E [   63.988609]: .(1)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:12.015000   480   480 D [   63.994110].(1)[480:cameraserver][name:kd_sensorlist&]: 0x00010002/0x00000000
01-01 00:35:12.015013   480   480 D [   63.994123]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=1,drvIdx[0]=2
01-01 00:35:12.015013   480   480 D [   63.994123]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=1,drvIdx[0]=2
01-01 00:35:12.015023   480   480 D [   63.994133]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][1][s5k3l8mipiraw]
01-01 00:35:12.015023   480   480 D [   63.994133]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][1][s5k3l8mipiraw]
01-01 00:35:12.062980   480   480 D [   64.042090].(1)[480:cameraserver][name:kd_sensorlist&]: 0x00010003/0x00000000
01-01 00:35:12.062993   480   480 D [   64.042103]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=1,drvIdx[0]=3
01-01 00:35:12.062993   480   480 D [   64.042103]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=1,drvIdx[0]=3
01-01 00:35:12.063003   480   480 D [   64.042113]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][1][s5k3l2mipiraw]
01-01 00:35:12.063003   480   480 D [   64.042113]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][1][s5k3l2mipiraw]
01-01 00:35:12.096391   480   480 D [   64.075501]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][adopt_CAMERA_HW_CheckIsAlive]  Sensor found ID = 0x30c2
01-01 00:35:12.096391   480   480 D [   64.075501]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][adopt_CAMERA_HW_CheckIsAlive]  Sensor found ID = 0x30c2

01-01 00:35:12.105293   480   480 D [   64.084403].(1)[480:cameraserver][name:kd_sensorlist&]: 0x00020000/0x00000000
01-01 00:35:12.105306   480   480 D [   64.084416]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=2,drvIdx[0]=0
01-01 00:35:12.105306   480   480 D [   64.084416]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=2,drvIdx[0]=0
01-01 00:35:12.105316   480   480 D [   64.084426]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][2][ialengmipi]
01-01 00:35:12.105316   480   480 D [   64.084426]: .(1)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][2][ialengmipi]
01-01 00:35:12.444812   480   480 D [   64.423922].(2)[480:cameraserver][name:kd_sensorlist&]: 0x00020001/0x00000000
01-01 00:35:12.444843   480   480 D [   64.423953]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=2,drvIdx[0]=1
01-01 00:35:12.444843   480   480 D [   64.423953]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=2,drvIdx[0]=1
01-01 00:35:12.444862   480   480 D [   64.423972]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][2][ov2680mipiraw]
01-01 00:35:12.444862   480   480 D [   64.423972]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][2][ov2680mipiraw]
01-01 00:35:12.719140   480   480 D [   64.698250]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][adopt_CAMERA_HW_CheckIsAlive]  Sensor found ID = 0x2680
01-01 00:35:12.719140   480   480 D [   64.698250]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][adopt_CAMERA_HW_CheckIsAlive]  Sensor found ID = 0x2680
01-01 00:35:12.740182   480   480 D [   64.719292].(2)[480:cameraserver][name:kd_sensorlist&]: 0x00020002/0x00000000
01-01 00:35:12.740214   480   480 D [   64.719324]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=2,drvIdx[0]=2
01-01 00:35:12.740214   480   480 D [   64.719324]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=2,drvIdx[0]=2
01-01 00:35:12.740232   480   480 D [   64.719342]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][2][s5k3l8mipiraw]
01-01 00:35:12.740232   480   480 D [   64.719342]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][2][s5k3l8mipiraw]
01-01 00:35:12.821222   480   480 E [   64.800332]: .(2)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:12.829249   480   480 E [   64.808359]: .(2)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:12.859246   480   480 E [   64.838356]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:12.864663   480   480 E [   64.843773]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:12.895331   480   480 D [   64.874441].(3)[480:cameraserver][name:kd_sensorlist&]: 0x00020003/0x00000000
01-01 00:35:12.895356   480   480 D [   64.874466]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=2,drvIdx[0]=3
01-01 00:35:12.895356   480   480 D [   64.874466]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=2,drvIdx[0]=3
01-01 00:35:12.895375   480   480 D [   64.874485]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][2][s5k3l2mipiraw]
01-01 00:35:12.895375   480   480 D [   64.874485]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][2][s5k3l2mipiraw]
01-01 00:35:13.036802   480   480 E [   65.015912]: .(1)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:13.049086   480   480 E [   65.028196]: .(1)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:13.078039   480   480 E [   65.057149]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:13.086027   480   480 E [   65.065137]: .(2)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0


01-01 00:35:13.113309   480   480 D [   65.092419].(2)[480:cameraserver][name:kd_sensorlist&]: 0x00040000/0x00000000
01-01 00:35:13.113337   480   480 D [   65.092447]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=4,drvIdx[0]=0
01-01 00:35:13.113337   480   480 D [   65.092447]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=4,drvIdx[0]=0
01-01 00:35:13.113356   480   480 D [   65.092466]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][4][ialengmipi]
01-01 00:35:13.113356   480   480 D [   65.092466]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][4][ialengmipi]
01-01 00:35:13.455118   480   480 D [   65.434228]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][adopt_CAMERA_HW_CheckIsAlive]  Sensor found ID = 0x7750
01-01 00:35:13.455118   480   480 D [   65.434228]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][adopt_CAMERA_HW_CheckIsAlive]  Sensor found ID = 0x7750
01-01 00:35:13.568518   480   480 D [   65.547628].(2)[480:cameraserver][name:kd_sensorlist&]: 0x00040001/0x00000000
01-01 00:35:13.568548   480   480 D [   65.547658]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=4,drvIdx[0]=1
01-01 00:35:13.568548   480   480 D [   65.547658]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=4,drvIdx[0]=1
01-01 00:35:13.568567   480   480 D [   65.547677]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][4][ov2680mipiraw]
01-01 00:35:13.568567   480   480 D [   65.547677]: .(2)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][4][ov2680mipiraw]
01-01 00:35:13.820105   480   480 E [   65.799215]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:13.829490   480   480 E [   65.808600]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:13.836630   480   480 E [   65.815740]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:13.843278   480   480 E [   65.822388]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:13.854130   480   480 E [   65.833240]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:13.861046   480   480 E [   65.840156]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x30
01-01 00:35:13.898479   480   480 D [   65.877589].(3)[480:cameraserver][name:kd_sensorlist&]: 0x00040002/0x00000000
01-01 00:35:13.898504   480   480 D [   65.877614]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=4,drvIdx[0]=2
01-01 00:35:13.898504   480   480 D [   65.877614]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=4,drvIdx[0]=2
01-01 00:35:13.898523   480   480 D [   65.877633]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][4][s5k3l8mipiraw]
01-01 00:35:13.898523   480   480 D [   65.877633]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][4][s5k3l8mipiraw]
01-01 00:35:13.972461   480   480 D [   65.951571].(3)[480:cameraserver][name:kd_sensorlist&]: 0x00040003/0x00000000
01-01 00:35:13.972483   480   480 D [   65.951593]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=4,drvIdx[0]=3
01-01 00:35:13.972483   480   480 D [   65.951593]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] g_invokeSocketIdx[0]=4,drvIdx[0]=3
01-01 00:35:13.972502   480   480 D [   65.951612]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][4][s5k3l2mipiraw]
01-01 00:35:13.972502   480   480 D [   65.951612]: .(3)[480:cameraserver][name:kd_sensorlist&][kd_sensorlist][kdSetDriver] [0][1][4][s5k3l2mipiraw]
01-01 00:35:14.054258   480   480 E [   66.033368]: .(2)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:14.058190   480   480 E [   66.037300]: .(2)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:14.062873   480   480 E [   66.041983]: .(2)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0
01-01 00:35:14.069803   480   480 E [   66.048913]: .(3)[480:cameraserver][name:kd_sensorlist&][CAMERA SENSOR] I2C send failed!!, Addr = 0x0


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章