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

📄 cameradriver_.cpp

📁 wince 6.0 摄像头(ov7670)驱动,已在ce6测试通过
💻 CPP
字号:


#include <windows.h>
#include <devload.h>
#include <nkintr.h>
#include <pm.h>

#include "Cs.h"
#include "Csmedia.h"

#include "CameraPDDProps.h"
#include "dstruct.h"
#include "dbgsettings.h"
#include "CameraDriver.h"
#include "BSP_CommonDefs.h"
#include "PMIC_DRV.h"



/*
EXTERN_C
BOOL CAM_PowerUp  (DWORD context) 
{
    NKDbgPrintfW(L"CAM_PowerUp+ %x\r\n", context);
    CEDEVICE_POWER_STATE state = D0;
    DWORD bytes;
    CAMERADEVICE     * pCamDevice     = reinterpret_cast<CAMERADEVICE*>(context);

    pCamDevice->AdapterHandlePowerRequests(IOCTL_POWER_SET, 
                                           0, 0,
                                           (PUCHAR)&state, sizeof(state), 
                                           &bytes );

    NKDbgPrintfW(L"CAM_PowerUp-\r\n", context);

    return 1;
}

EXTERN_C
BOOL CAM_PowerDown(DWORD context) 
{
    NKDbgPrintfW(L"CAM_PowerDown+ %x\r\n", context);
    CEDEVICE_POWER_STATE state = D4;
    DWORD bytes;

    CAMERADEVICE     * pCamDevice     = reinterpret_cast<CAMERADEVICE*>(context);
    
    pCamDevice->AdapterHandlePowerRequests(IOCTL_POWER_SET, 
                                           0, 0,
                                           (PUCHAR)&state, sizeof(state), 
                                           &bytes );
    NKDbgPrintfW(L"CAM_PowerDown-\r\n");
    return 1;
}
*/



/******************************

Purpose: To fix MS bug of power control
Date:      20071109

******************************/

EXTERN_C
BOOL
CAM_IOControl_COPY(
    DWORD   dwContext,
    DWORD   Ioctl,
    UCHAR * pInBufUnmapped,
    DWORD   InBufLen, 
    UCHAR * pOutBufUnmapped,
    DWORD   OutBufLen,
    DWORD * pdwBytesTransferred
   )
{
    DEBUGMSG( ZONE_FUNCTION, ( _T("CAM_IOControl_COPY(%08x): IOCTL:0x%x, InBuf:0x%x, InBufLen:%d, OutBuf:0x%x, OutBufLen:0x%x)\r\n"), dwContext, Ioctl, pInBufUnmapped, InBufLen, pOutBufUnmapped, OutBufLen ) );

    UCHAR * pInBuf = NULL;
    UCHAR * pOutBuf = NULL;
    DWORD dwErr = ERROR_INVALID_PARAMETER;
    BOOL  bRc   = FALSE;

	pInBuf = pInBufUnmapped;
	pOutBuf = pOutBufUnmapped;

	
    CAMERAOPENHANDLE * pCamOpenHandle = reinterpret_cast<CAMERAOPENHANDLE *>( dwContext );
    CAMERADEVICE     * pCamDevice     = pCamOpenHandle->pCamDevice;
    CSPROPERTY       * pCsProp        = reinterpret_cast<CSPROPERTY *>(pInBuf);

	
    switch ( Ioctl )
    {
        // Power Management Support.
        case IOCTL_POWER_CAPABILITIES:
        case IOCTL_POWER_QUERY:
        case IOCTL_POWER_SET:
        case IOCTL_POWER_GET:
        {
            DEBUGMSG( ZONE_IOCTL, ( _T("CAM_IOControl_COPY(%08x): Power Management IOCTL\r\n"), dwContext ) );
			//pInBuf = pInBufUnmapped;
			//pOutBuf = pOutBufUnmapped;
			
            __try 
            {

                dwErr = pCamDevice->AdapterHandlePowerRequests(Ioctl, pInBuf, InBufLen, pOutBuf, OutBufLen, pdwBytesTransferred );
            }
			
            __except ( EXCEPTION_EXECUTE_HANDLER )
            {
                DEBUGMSG( ZONE_IOCTL, ( _T("CAM_IOControl_COPY(%08x):Exception in Power Management IOCTL"), dwContext ) );
            }
            break;
        }

        case IOCTL_CS_PROPERTY:
        {
			//BEGIN
			if ( ( NULL == pInBufUnmapped )
				 || ( InBufLen < sizeof ( CSPROPERTY ) )
				 || ( NULL == pdwBytesTransferred ) )
			{
				SetLastError( dwErr );
			
				return bRc;
			}			
			
			if ( NULL == pCsProp )
			{
				DEBUGMSG( ZONE_IOCTL|ZONE_ERROR, (_T("CAM_IOControl_COPY(%08x): Invalid Parameter.\r\n"), dwContext ) );
				return dwErr;
			}
			//END

			
            DEBUGMSG( ZONE_IOCTL, ( _T("CAM_IOControl_COPY(%08x): IOCTL_CS_PROPERTY\r\n"), dwContext ) );

            __try 
            {
                dwErr = pCamDevice->AdapterHandleCustomRequests( pInBuf,InBufLen, pOutBuf, OutBufLen, pdwBytesTransferred );

                if ( ERROR_NOT_SUPPORTED == dwErr )
                {
                    if ( TRUE == IsEqualGUID( pCsProp->Set, CSPROPSETID_Pin ) )
                    {   
                        dwErr = pCamDevice->AdapterHandlePinRequests( pInBuf, InBufLen, pOutBuf, OutBufLen, pdwBytesTransferred );
                    }
                    else if ( TRUE == IsEqualGUID( pCsProp->Set, CSPROPSETID_VERSION ) )
                    {
                        dwErr = pCamDevice->AdapterHandleVersion( pOutBuf, OutBufLen, pdwBytesTransferred );
                    }
                    else if ( TRUE == IsEqualGUID( pCsProp->Set, PROPSETID_VIDCAP_VIDEOPROCAMP ) )
                    {   
                        dwErr = pCamDevice->AdapterHandleVidProcAmpRequests( pInBuf,InBufLen, pOutBuf, OutBufLen, pdwBytesTransferred );
                    }
                    else if ( TRUE == IsEqualGUID( pCsProp->Set, PROPSETID_VIDCAP_CAMERACONTROL ) )
                    {   
                        dwErr = pCamDevice->AdapterHandleCamControlRequests( pInBuf,InBufLen, pOutBuf, OutBufLen, pdwBytesTransferred );
                    }
                    else if ( TRUE == IsEqualGUID( pCsProp->Set, PROPSETID_VIDCAP_VIDEOCONTROL ) )
                    {   
                        dwErr = pCamDevice->AdapterHandleVideoControlRequests( pInBuf,InBufLen, pOutBuf, OutBufLen, pdwBytesTransferred );
                    }
                    else if ( TRUE == IsEqualGUID( pCsProp->Set, PROPSETID_VIDCAP_DROPPEDFRAMES) )
                    {   
                        dwErr = pCamDevice->AdapterHandleDroppedFramesRequests( pInBuf,InBufLen, pOutBuf, OutBufLen, pdwBytesTransferred );
                    }
                }
            }
            __except ( EXCEPTION_EXECUTE_HANDLER )
            {
                DEBUGMSG( ZONE_IOCTL, ( _T("CAM_IOControl_COPY(%08x):Exception in IOCTL_CS_PROPERTY"), dwContext ) );
            }

            break;
        }

        default:
        {
            DEBUGMSG( ZONE_IOCTL, (_T("CAM_IOControl_COPY(%08x): Unsupported IOCTL code %u\r\n"), dwContext, Ioctl ) );
            dwErr = ERROR_NOT_SUPPORTED;

            break;
        }
    }
    
    // pass back appropriate response codes
    SetLastError( dwErr );

    return ( ( dwErr == ERROR_SUCCESS ) ? TRUE : FALSE );
}

⌨️ 快捷键说明

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