⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bspcsi.cpp

📁 Microsoft WinCE 6.0 BSP FINAL release source code for use with the i.MX27ADS TO2 WCE600_FINAL_MX27_S
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    if  ( csiSensorId_Saa7113h == gSensorInUse )
   	{
   	   if ( NTSC == gVideoFormat )
   	   	  *pSensorResolution = csiSensorOutputResolution_NTSC;
   	   else
   	   	  *pSensorResolution = csiSensorOutputResolution_PAL;	   	
   	}
   	else
   	{
   	   *pSensorResolution = csiSensorOutputResolution_VGA;
   	}

    BSP_CSI_FUNCTION_EXIT();
}

//------------------------------------------------------------------------------
//
// Function: BSPSetDigitalZoom
//
// This function sets the zoom value on the camera sensor.
//
// Parameters:
//      zoom
//          [in] If TRUE, zoom set to 2x; if FALSE, zoom set to 1x
//
// Returns:
//      None.
//
//------------------------------------------------------------------------------
void BSPSetDigitalZoom (BOOL zoom)
{
    BSP_CSI_FUNCTION_ENTRY();

    // Call Imagic method to set zoom
    CameraImagicSetDigitalZoom(zoom);

    BSP_CSI_FUNCTION_EXIT();
}

//------------------------------------------------------------------------------
//
// Function: BSPCameraSetOutputResolution
//
// This function sets the output resolution on the camera sensor.
//
// Parameters:
//      outputMode
//          [in] Resolution type.
//
// Returns:
//      TRUE if success
//      FALSE if failure
//
//------------------------------------------------------------------------------
BOOL BSPCameraSetOutputResolution(csiSensorOutputResolution outputResolution)
{
    BSP_CSI_FUNCTION_ENTRY();

    // Call Imagic method to set output mode
    CameraImagicSetOutputResolution(outputResolution);

    BSP_CSI_FUNCTION_EXIT();

    return TRUE;
}

//------------------------------------------------------------------------------
//
// Function: BSPCameraSetOutputFormat
//
// This function sets the output format on the camera sensor.
//
// Parameters:
//      outputFormat
//          [in] Format specified to output sensor data.
//
// Returns:
//      TRUE if success
//      FALSE if failure
//
//------------------------------------------------------------------------------
BOOL BSPCameraSetOutputFormat(csiSensorOutputFormat outputFormat)
{
    cameraImagicOutputFormat cameraOutputFormat;
    
    BSP_CSI_FUNCTION_ENTRY();

    switch (outputFormat)
    {
      case csiSensorOutputFormat_Bayer:
           return FALSE;

      case csiSensorOutputFormat_YUV422:
           cameraOutputFormat = cameraImagicOutputFormat_CCIR656;
           break;

      case csiSensorOutputFormat_YUV444:
           return FALSE;

      case csiSensorOutputFormat_RGB:
           cameraOutputFormat = cameraImagicOutputFormat_RGB565;
           break;

      default:
           cameraOutputFormat = cameraImagicOutputFormat_RGB565;
           break;
    }
    
    // Call Imagic method to set output format
    CameraImagicSetOutputFormat(cameraOutputFormat);

    BSP_CSI_FUNCTION_EXIT();

    return TRUE;
}

//------------------------------------------------------------------------------
//
// Function: BSPSensorSetClockGatingMode
//
// This function calls to the CRM module to
// set the clock gating mode, turning on or off
// clocks to the Camera Sesnor.
//
// Parameters:
//      startClocks
//          [in] If TRUE, turn clocks to GPT on.
//                If FALSE, turn clocks to GPT off
//
// Returns:
//      TRUE if success.
//      FALSE if failure.
//
//------------------------------------------------------------------------------
BOOL BSPSensorSetClockGatingMode(BOOL startClocks)
{
    BSP_CSI_FUNCTION_ENTRY();

    if (startClocks)
    {
        // Turn CSI and sensor clocks on
        if (!DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_HCLK_CSI, 
            DDK_CLOCK_GATE_MODE_ENABLE))
        {
            DEBUGMSG(ZONE_ERROR, (TEXT("%s: Failed to set clock gating mode!\r\n"), __WFUNCTION__));
            return FALSE;
        }
    }
    else
    {
        // Turn CSI and sensor clocks off
        if (!DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_HCLK_CSI, 
            DDK_CLOCK_GATE_MODE_DISABLE))
        {
            DEBUGMSG(ZONE_ERROR, (TEXT("%s: Failed to set clock gating mode!\r\n"), __WFUNCTION__));
            return FALSE;
        }
    }

    BSP_CSI_FUNCTION_EXIT();

    return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: BSPCameraIsTVin
//
// This function reads the camera sensor type
//
// Parameters:
//      None.
//
// Returns:
//      TRUE for camera sensor
//      FALSE for TVin module
//
//------------------------------------------------------------------------------
BOOL BSPCameraIsTVin(void)
{
    BSP_CSI_FUNCTION_ENTRY();

    if ( gSensorInUse ==  csiSensorId_Saa7113h) 
    {
   	   return TRUE;
    }
    else
    {
   	   return FALSE;
    }

    BSP_CSI_FUNCTION_EXIT();
}


//-----------------------------------------------------------------------------
//
// Function: I2CWriteOneByte
//
// This function writes a single byte byData to the register stated in byReg.
//
// Parameters:
//      hI2C 
//          [in] File handle to I2C Bus Interface.
//
//      byAddr
//          [in] I2C Slave device address.
//
//      byReg
//          [in] Register Index.
//
//      byData
//          [in] Data to write to byReg.
//
//      lpiResult
//          [in] Pointer of the result. The I2C Bus will store the
//            result of the operation in location pointed to by
//            lpiResult.
//
// Returns:  
//      None.
//
//-----------------------------------------------------------------------------
VOID I2CWriteOneByte(HANDLE hI2C, BYTE byAddr, BYTE byReg, BYTE byData, LPINT lpiResult)
{
    I2C_TRANSFER_BLOCK I2CXferBlock;
    I2C_PACKET I2CPacket;
    BYTE byOutData[2];

    BSP_CSI_FUNCTION_ENTRY();

    byOutData[0] = byReg;
    byOutData[1] = byData;
    I2CPacket.wLen = sizeof(byOutData);
    I2CPacket.pbyBuf = (PBYTE) &byOutData;

    I2CPacket.byRW = I2C_RW_WRITE;
    I2CPacket.byAddr = byAddr;
    I2CPacket.lpiResult = lpiResult;

    I2CXferBlock.pI2CPackets = &I2CPacket;
    I2CXferBlock.iNumPackets = 1;

    I2C_MACRO_TRANSFER(hI2C, &I2CXferBlock);

    BSP_CSI_FUNCTION_EXIT();
}

//-----------------------------------------------------------------------------
//
// Function: I2CReadOneByte
//
// This function read a single byte data from the register stated in byReg.
//
// Parameters:
//      hI2C 
//          [in] File handle to I2C Bus Interface.
//
//      byAddr
//          [in] I2C Slave device address.
//
//      byReg
//          [in] Register Index.
//
//      lpiResult
//          [in] Pointer of the result. The I2C Bus will store the
//            result of the operation in location pointed to by
//            lpiResult.
//
// Returns:  
//      The single byte content stored in byReg.
//
//-----------------------------------------------------------------------------
BYTE I2CReadOneByte(HANDLE hI2C, BYTE byAddr, BYTE byReg, LPINT lpiResult)
{
    I2C_TRANSFER_BLOCK I2CXferBlock;
    I2C_PACKET I2CPacket[2];
    BYTE byOutData;
    BYTE byInData;

    BSP_CSI_FUNCTION_ENTRY();

    byOutData = byReg;

    I2CPacket[0].pbyBuf = (PBYTE) &byOutData;
    I2CPacket[0].wLen = sizeof(byOutData);

    I2CPacket[0].byRW = I2C_RW_WRITE;
    I2CPacket[0].byAddr = byAddr;
    I2CPacket[0].lpiResult = lpiResult;


    I2CPacket[1].pbyBuf = (PBYTE) &byInData;
    I2CPacket[1].wLen = sizeof(byInData);

    I2CPacket[1].byRW = I2C_RW_READ;
    I2CPacket[1].byAddr = byAddr;
    I2CPacket[1].lpiResult = lpiResult;

    I2CXferBlock.pI2CPackets = I2CPacket;
    I2CXferBlock.iNumPackets = 2;

    I2C_MACRO_TRANSFER(hI2C, &I2CXferBlock);

    BSP_CSI_FUNCTION_EXIT();

    return byInData;
}

//-----------------------------------------------------------------------------
//
// Function: I2CWriteTwoBytes
//
// This function writes a two byte data to the register stated in byReg. The
// function will write byData1 first, followed by byData2. If byData1 is not
// written properly, the entire function will terminate without attempting to
// write byData2.
//
// Parameters:
//      hI2C 
//          [in] File handle to I2C Bus Interface.
//
//      byAddr
//          [in] I2C Slave device address.
//
//      byReg
//          [in] Register Index.
//
//      byData1
//          [in] 1st Data to write to byReg.
//
//      byData2
//          [in] 2nd Data to write to byReg
//
//      lpiResult
//          [in] Pointer of the result. The I2C Bus will store the
//            result of the operation in location pointed to by
//            lpiResult.
//
// Returns:  
//      None.
//
//-----------------------------------------------------------------------------
VOID I2CWriteTwoBytes(HANDLE hI2C, BYTE byAddr, BYTE byReg, BYTE byData1, BYTE byData2, LPINT lpiResult)
{
    I2C_TRANSFER_BLOCK I2CXferBlock;
    I2C_PACKET I2CPacket;
    BYTE byOutData[3];

    BSP_CSI_FUNCTION_ENTRY();

    byOutData[0] = byReg;
    byOutData[1] = byData1;
    byOutData[2] = byData2;

    I2CPacket.wLen = sizeof(byOutData);
    I2CPacket.pbyBuf = (PBYTE) &byOutData;

    I2CPacket.byRW = I2C_RW_WRITE;
    I2CPacket.byAddr = byAddr;
    I2CPacket.lpiResult = lpiResult;

    I2CXferBlock.pI2CPackets = &I2CPacket;
    I2CXferBlock.iNumPackets = 1;

    I2C_MACRO_TRANSFER(hI2C, &I2CXferBlock);

    BSP_CSI_FUNCTION_EXIT();
}

//-----------------------------------------------------------------------------
//
// Function: I2CReadTwoBytes
//
// This function reads two bytes of data from the register stated in byReg.
//
// Parameters:
//      hI2C 
//          [in] File handle to I2C Bus Interface.
//
//      byAddr
//          [in] I2C Slave device address.
//
//      byReg
//          [in] Register Index.
//
//      lpiResult
//          [in] Pointer of the result. The I2C Bus will store the
//          result of the operation in location pointed to by
//          lpiResult.
//
// Returns:  
//      The two byte content stored in byReg.
//
//-----------------------------------------------------------------------------
WORD I2CReadTwoBytes(HANDLE hI2C, BYTE byAddr, BYTE byReg, LPINT lpiResult)
{
    I2C_TRANSFER_BLOCK I2CXferBlock;
    I2C_PACKET I2CPacket[2];
    BYTE byOutData;
    BYTE byInData[2];

    BSP_CSI_FUNCTION_ENTRY();

    byOutData = byReg;

    I2CPacket[0].pbyBuf = (PBYTE) &byOutData;
    I2CPacket[0].wLen = sizeof(byOutData);

    I2CPacket[0].byRW = I2C_RW_WRITE;
    I2CPacket[0].byAddr = byAddr;
    I2CPacket[0].lpiResult = lpiResult;


    I2CPacket[1].pbyBuf = (PBYTE) &byInData;
    I2CPacket[1].wLen = sizeof(byInData);

    I2CPacket[1].byRW = I2C_RW_READ;
    I2CPacket[1].byAddr = byAddr;
    I2CPacket[1].lpiResult = lpiResult;

    I2CXferBlock.pI2CPackets = I2CPacket;
    I2CXferBlock.iNumPackets = 2;

    I2C_MACRO_TRANSFER(hI2C, &I2CXferBlock);

    BSP_CSI_FUNCTION_EXIT();

    return ((0xFF & byInData[1]) | (((WORD) byInData[0]) << 8));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -