📄 cameradriver_.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 + -