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

📄 control.cpp

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
								
			sDevData.psDevInfoKM = (PPVRSRV_DEV_INFO)pvIn;

			psRet->eError = PVRSRVDestroyParameterBuffer(&sDevData);
			
			break;
		}
		case PVRSRV_BRIDGE_ADD_RENDERTARGET :
		{
			PVRSRV_BRIDGE_IN_ADDRENDERTARGET *psBridgeIn;
			PVRSRV_DEV_DATA sDevData;

			psBridgeIn = (PVRSRV_BRIDGE_IN_ADDRENDERTARGET*)pvIn;
			psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;

			sDevData.psDevInfoKM = psBridgeIn->psDevInfo;

			psRet->eError = PVRSRVAddRenderTarget(&sDevData, 
												psBridgeIn->ui32Width,
												psBridgeIn->ui32Height,
												psBridgeIn->ui32AAFlags,
												(PVRSRV_TARENDERINFO **)&psRet->pvData);
				
			break;
		}
		case PVRSRV_BRIDGE_REMOVE_RENDERTARGET :
		{
			PVRSRV_BRIDGE_IN_REMOVERENDERTARGET *psBridgeIn;
			PVRSRV_DEV_DATA sDevData;

			psBridgeIn = (PVRSRV_BRIDGE_IN_REMOVERENDERTARGET*)pvIn;
			psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;

			sDevData.psDevInfoKM = psBridgeIn->psDevInfo;

			psRet->eError = PVRSRVRemoveRenderTarget(&sDevData, psBridgeIn->psTARenderInfo);
			break;			
		}
		case PVRSRV_BRIDGE_CREATE_COMMANDQUEUE :
		{
			PVRSRV_BRIDGE_IN_CREATECOMMANDQUEUE *psBridgeIn;
			PVRSRV_DEV_DATA sDevData;

			psBridgeIn = (PVRSRV_BRIDGE_IN_CREATECOMMANDQUEUE*)pvIn;
			psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;

			sDevData.psDevInfoKM = psBridgeIn->psDevInfo;

			psRet->eError = PVRSRVCreateCommandQueue(	&sDevData, 
													psBridgeIn->ui32QueueSize,
													(PVRSRV_QUEUE_INFO **)&psRet->pvData);

			break;
		}
		case PVRSRV_BRIDGE_DESTROY_COMMANDQUEUE :
		{
			PVRSRV_BRIDGE_IN_DESTROYCOMMANDQUEUE *psBridgeIn;
			PVRSRV_DEV_DATA sDevData;

			psBridgeIn = (PVRSRV_BRIDGE_IN_DESTROYCOMMANDQUEUE*)pvIn;
			psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;

			sDevData.psDevInfoKM = psBridgeIn->psDevInfo;

			psRet->eError = PVRSRVDestroyCommandQueue(&sDevData, 
													psBridgeIn->psQueueInfo);

			break;
		}
#ifdef PDUMP
		case PVRSRV_BRIDGE_PDUMP :
		{
			PVRSRV_BRIDGE_IN_PDUMP_COMMAND *psBridgeIn;

			psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
								
			psBridgeIn = (PVRSRV_BRIDGE_IN_PDUMP_COMMAND*)pvIn;

			psRet->eError = PVRSRVPDumpCommand(psBridgeIn);
			
			psRet->pvData = (IMG_VOID*) psBridgeIn->psPDumpContext;
			
			break;
		}
#endif
		case PVRSRV_BRIDGE_ACQUIRE_PRIMARY :
		{
			PVRSRV_BRIDGE_IN_ACQUIREPRIMARY *psBridgeIn;
			PVRSRV_DEV_DATA sDevData;


			psBridgeIn = (PVRSRV_BRIDGE_IN_ACQUIREPRIMARY*)pvIn;
			psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;

			sDevData.psDevInfoKM = psBridgeIn->psDevInfo;

			psRet->eError = PVRSRVAcquirePrimary(&sDevData,
												psBridgeIn->ui32Flags,
												psBridgeIn->ui32PixelWidth,
												psBridgeIn->ui32PixelHeight,
												psBridgeIn->ePixelFormat,
												(PVRSRV_PRIMARY_SURF **)&psRet->pvData);

			break;
		}
		case PVRSRV_BRIDGE_QUERY_PRIMARY :
		{
			PVRSRV_DEV_DATA sDevData;
			PVRSRV_BRIDGE_OUT_QUERYPRIMARY *psBridgeOut;

			psBridgeOut = (PVRSRV_BRIDGE_OUT_QUERYPRIMARY*)pvOut;

			sDevData.psDevInfoKM = (PPVRSRV_DEV_INFO)pvIn;

			psBridgeOut->eError = PVRSRVQueryPrimary(	&sDevData,
														&psBridgeOut->sPrimarySurfInfo);

			break;
		}
		case PVRSRV_BRIDGE_RELEASE_PRIMARY :
		{
			PVRSRV_BRIDGE_IN_RELEASEPRIMARY *psBridgeIn;
			PVRSRV_DEV_DATA sDevData;

			psBridgeIn = (PVRSRV_BRIDGE_IN_RELEASEPRIMARY*)pvIn;
			psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;

			sDevData.psDevInfoKM = psBridgeIn->psDevInfo;

			psRet->eError = PVRSRVReleasePrimary(	&sDevData,
													psBridgeIn->psPrimSurf);

			break;
		}

#ifdef SUPPORT_DEVCLASS_MPEG
		case PVRSRV_BRIDGE_MPEGCONNECT:
		{
			PVRSRV_BRIDGE_IN_MPEGCONNECT	*psBridgeIn;
			PVRSRV_DEV_DATA					sDevData;

			psRet		= (PVRSRV_BRIDGE_RETURN*)pvOut;
			psBridgeIn	= (PVRSRV_BRIDGE_IN_MPEGCONNECT*)pvIn;

			sDevData.psDevInfoKM = psBridgeIn->psDevInfo;

			psBridgeIn	= (PVRSRV_BRIDGE_IN_MPEGCONNECT*)pvIn;
			psRet		= (PVRSRV_BRIDGE_RETURN*)pvOut;

			psRet->eError = PVRSRVConnectMPEGApplication(&sDevData, psBridgeIn->bConnect);
				
			break;
		}
#ifdef SUPPORT_3D_BLIT
		case PVRSRV_BRIDGE_INIT_OVL_BLIT_RSC:
		{
			PVRSRV_BRIDGE_IN_INIT_OVL_BLIT_RSC	*psBridgeIn;
			PVRSRV_DEV_DATA						sDevData;

			psRet					= (PVRSRV_BRIDGE_RETURN*)pvOut;
			psBridgeIn				= (PVRSRV_BRIDGE_IN_INIT_OVL_BLIT_RSC*)pvIn;
			sDevData.psDevInfoKM	= psBridgeIn->psDevInfo;

			psRet->eError = PVRSRVInitOverlayBltResources(&sDevData, 
														  psBridgeIn->ui32SrcWidth,
														  psBridgeIn->ui32SrcHeight,
														  psBridgeIn->ui32SrcStride,
														  psBridgeIn->ui32DstStride,
														  psBridgeIn->ui32Rotation);
				
			break;
		}
		case PVRSRV_BRIDGE_DEINIT_OVL_BLIT_RSC:
		{
			PVRSRV_BRIDGE_IN_DEINIT_OVL_BLIT_RSC	*psBridgeIn;
			PVRSRV_DEV_DATA							sDevData;

			psRet					= (PVRSRV_BRIDGE_RETURN*)pvOut;
			psBridgeIn				= (PVRSRV_BRIDGE_IN_DEINIT_OVL_BLIT_RSC*)pvIn;
			sDevData.psDevInfoKM	= psBridgeIn->psDevInfo;

			PVRSRVDeInitOverlayBltResources(&sDevData);
			psRet->eError = PVRSRV_OK;
				
			break;
		}
#endif /* SUPPORT_3D_BLIT */
#endif
		case PVRSRV_BRIDGE_GET_FB_STATS:
		{
			PVRSRV_BRIDGE_IN_GET_FB_STATS	*psBridgeIn;
			PVRSRV_DEV_DATA					sDevData;

			psRet					= (PVRSRV_BRIDGE_RETURN*)pvOut;
			psBridgeIn				= (PVRSRV_BRIDGE_IN_GET_FB_STATS*)pvIn;


			psRet->eError = PVRSRVGetFBStats(&sDevData,
											 &psBridgeIn->ui32Total,
											 &psBridgeIn->ui32Available);
			break;
		}
		
#ifdef ENABLE_2D_PROFILE
		case DRVESC_2D_PROFILE:
		{
			PPROFILE2D_DATA pDataIn;

			if (pvIn && ulSizeIn == sizeof (PROFILE2D_DATA))
			{
				pDataIn = (PPROFILE2D_DATA)pvIn;

				if (pDataIn->iu32Flags & PROFILEFLAG_RESET_ALL_NODES)
				{
					memset(gProfile, 0, sizeof(gProfile));
					ulRetVal = ESC_SUCCESS;
					break;
				}

				if (pDataIn->iu32Flags & PROFILEFLAG_GETNODE)
				{
					if (pvOut && ulSizeOut == sizeof (PROFILE2D_DATA))
					{
						PPROFILE2D_DATA pDataOut = (PPROFILE2D_DATA)pvOut;

						if (pDataIn->ui32Index < NODE_MAX)
						{
							memset(pDataOut, 0, sizeof(PROFILE2D_DATA));
							pDataOut->sNode = gProfile[pDataIn->ui32Index];
							pDataOut->ui32Index = pDataIn->ui32Index;
							ulRetVal = ESC_SUCCESS;
							break;
						}
					}
				}
			}

			SetLastError (ERROR_INVALID_PARAMETER);
			ulRetVal = ESC_FAILED;
			break;
		}
#endif

		// GAPI Legacy support.
		case DRVESC_GXDMA_DRAM_TO_VRAM: // gbTrackSlaveport 
		{

			if ( (ulSizeIn >= sizeof(DRVESC_GXDMA)) && (pvIn != NULL) )
			{
				GapiDmaDRAMtoVRAM((DRVESC_GXDMA*)pvIn); // gapi.cpp
				ulRetVal = ESC_SUCCESS;
			}
			else
			{
				SetLastError (ERROR_INVALID_PARAMETER);
				ulRetVal = ESC_FAILED;
			}

			break;
		}

		case DRVESC_GXDMA_VRAM_TO_DRAM:
		{
			if ( (ulSizeIn >= sizeof(DRVESC_GXDMA)) && (pvIn != NULL) )
			{
				GapiDmaVRAMtoDRAM((DRVESC_GXDMA*)pvIn); // gapi.cpp
				ulRetVal = ESC_SUCCESS;
			}
			else
			{
				SetLastError (ERROR_INVALID_PARAMETER);
				ulRetVal = ESC_FAILED;
			}
			break;
		}

		case DRVESC_GXDMA_STATUS:
		{
			if (	(ulSizeIn >= sizeof(DRVESC_GXDMA))
					&& (pvIn != NULL)
					&& (ulSizeOut >= sizeof(DRVESC_GXDMA))
					&& (pvOut != NULL)
					&& (pvIn == pvOut)
					)
			{
				GapiIsDMAReady((DRVESC_GXDMA *)pvOut); // gapi.cpp
				ulRetVal = ESC_SUCCESS;
			}
			else
			{
				SetLastError (ERROR_INVALID_PARAMETER);
				ulRetVal = ESC_FAILED;
			}
			break;
		}


		// Pass any unrecognised codes to DispPerf.
		default :
			ulRetVal = DispPerfDrvEscape (ulEsc, ulSizeIn, pvIn, ulSizeOut, pvOut);
			break;
	}

//////////	DPFEXIT((L"<-DrvEscape"));
	return (ulRetVal);
}

PULONG APIENTRY DrvGetMasks(DHPDEV dhpdev)
{
	MBX *pclGPE = (MBX *)dhpdev;

	return (pclGPE->GetPixelTableMasks());
}


/////////////////////////////////////////////////////////////////////////
// Quote from : WINCE410\PUBLIC\COMMON\OAK\INC\pwingdi.h
// The CONTRASTCOMMAND DrvEscape is used to get/set the contrast
// on the display controlled by the driver being called. It input parameter
// shoud be a ContrastCmdInputParm structure (defined below).
//
BOOL MBX::ContrastControl ( ULONG ulCmd, ULONG	*pulValue )
{
	BOOL bRtn = TRUE;		/* assume success */
	DWORD dwValue;
	if (pulValue)
	{
		switch (ulCmd)
		{
			case CONTRAST_CMD_GET:
				*pulValue = 128;
				m_clDisplay.PDP_Contrast (pulValue, TRUE);  // Get
				break;

			case CONTRAST_CMD_SET:
				if(*pulValue>255)
				{
					// As the incoming value is an ULONG this catches both the -ative and the positive
					SetLastError(ERROR_INVALID_PARAMETER);
					bRtn = FALSE;					
				}
				else
				{
					m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
				}
				break;

			case CONTRAST_CMD_INCREASE:
				m_clDisplay.PDP_Contrast (&dwValue, TRUE);  // Get
				if(dwValue + *pulValue >255)
				{
					*pulValue=255;
				}
				else
				{
					*pulValue=dwValue + *pulValue;
				}
				m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
				break;

			case CONTRAST_CMD_DECREASE:
				m_clDisplay.PDP_Contrast (&dwValue, TRUE);  // Get
				if(*pulValue >dwValue)
				{
					*pulValue=0;
				}
				else
				{
					*pulValue = dwValue-*pulValue;
				}
				m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
				
				break;

			case CONTRAST_CMD_DEFAULT:
				*pulValue = 128;
				m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
				break;
			case CONTRAST_CMD_MAX:
				*pulValue = 255;
				m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
				break;
			default:
				SetLastError(ERROR_INVALID_PARAMETER);
				bRtn = FALSE;
				break;
		}
	}
	else
	{
		SetLastError(ERROR_INVALID_PARAMETER);
		bRtn = FALSE;
	}

	return (bRtn);
}


/*****************************************************************************/
/***************************** M24VA escape functions ************************/
/*****************************************************************************/

#ifdef SUPPORT_M24VA

#undef malloc
#undef free

/*****************************************************************************
 FUNCTION	: AcquireM24VA
    
 PURPOSE	: Acquire M24VA hardware
 PARAMETERS	: DRVESC_M24VA_CONFIG_PARAMS *pConfig
			  
 RETURNS	: Success code
*****************************************************************************/

typedef struct
{
	HANDLE	hM24VAProcOwner;
	HANDLE 	hTerminateEvent;

} MONITOR_THREAD_PARAMS, *PMONITOR_THREAD_PARAMS;

static ULONG MonitorThreadProc(PVOID pvParameter)
{
		DRVESC_M24VA_ACQUIRE_PARAMS	sM24VAAcquire;
		PMONITOR_THREAD_PARAMS		pMonParams = (PMONITOR_THREAD_PARAMS) pvParameter;
		HANDLE						ahObjects[2];

		ahObjects[0] = pMonParams->hM24VAProcOwner;
		ahObjects[1] = pMonParams->hTerminateEvent;
	
		switch(WaitForMultipleObjects(2, ahObjects, FALSE, INFINITE))
		{
			case WAIT_OBJECT_0:
				/* Process that owner M24VA hardware has terminated without releasing
				   the hardware. Send release driver escape */

				sM24VAAcquire.dwAcquire		= FALSE;
				sM24VAAcquire.dwProcessID	= 0;

				ExtEscape(GetWindowDC(NULL), DRVESC_M24VA_ACQUIRE, 0, NULL,  
						  sizeof(sM24VAAcquire), (LPSTR)&sM24VAAcquire);
				
				break;

			case (WAIT_OBJECT_0+1):
				/* AcquireM24VA function has asked us to terminate */
				break;
		}

		free(pMonParams);

		return(0);
}

DWORD MBX::AcquireM24VA(DRVESC_M24VA_ACQUIRE_PARAMS *pAcquire)
{
	PMONITOR_THREAD_PARAMS	pMonParams;

	if(pAcquire->dwAcquire)
	{
		/* Acquire M24VA hardware */
		if(m_hM24VAOwner)
		{
			return(ERROR_INVALID_PARAMETER);
		}

		if((m_hM24VAOwner = OpenProcess(0, FALSE, pAcquire->dwProcessID)) == NULL ||
		   (m_hTerminateMonitorThread = CreateEvent(NULL, FALSE, FALSE, NULL)) == NULL)
		{
			if(m_hM24VAOwner) CloseHandle(m_hM24VAOwner);

			return(ERROR_INVALID_PARAMETER);
		}

		pMonParams = (PMONITOR_THREAD_PARAMS) malloc(sizeof(MONITOR_THREAD_PARAMS));

		pMonParams->hM24VAProcOwner = m_hM24VAOwner;
		pMonParams->hTerminateEvent = m_hTerminateMonitorThread;

		if((m_hProcessMonitorThread = CreateThread(NULL, 0, MonitorThreadProc, pMonParams, 0, NULL)) == NULL)
		{
			CloseHandle(m_hM24VAOwner);		m_hM24VAOwner = NULL;
			return(ERROR_INVALID_PARAMETER);
		}

		m_bOverlayUsed = FALSE; /* Tracking overlay usable since acquire */

		SysCoreEnable(m_sDevData.psDevInfoKM, DEV_CGCORE_M24VA, IMG_TRUE);	// Turn on M24VA core
	}
	else
	{
		DWORD dwRtn;
		/* Release M24VA hardware */
		if(!m_hM24VAOwner)
		{
			return(ERROR_INVALID_PARAMETER);
		}

		/* Closedown monitor thread */
		if(pAcquire->dwProcessID)		/* ID of zero indicates process termination */
		{
			SetEvent(m_hTerminateMonitorThread);

			dwRtn = WaitForSingleObject(m_hProcessMonitorThread, 1000);
		}

		CloseHandle(m_hM24VAOwner);				m_hM24VAOwner			  = NULL;
		CloseHandle(m_hProcessMonitorThread);	m_hProcessMonitorThread	  = NULL;
		CloseHandle(m_hTerminateMonitorThread);	m_hTerminateMonitorThread = NULL;

		/* Make sure that the overlay has been disabled */
		if(m_bOverlayUsed)
		{
				PDP_OVERLAYATTRIBS sOverlay;

				sOverlay.wValidFlags = PDP_OVERLAYATTRIB_VALID_VISIBILITY |
									   PDP_OVERLAYATTRIB_VALID_PIXFMT;

				sOverlay.PixFormat  = PDP_OVL_INVALID;
				sOverlay.bOverlayOn = FALSE;

				m_clDisplay.PDP_SetOverlayAttributes(&sOverlay);
		}

		SysCoreDisable(m_sDevData.psDevInfoKM, DEV_CGCORE_M24VA, IMG_TRUE);	// Turn on M24VA core
	}

	return(ERROR_SUCCESS);
}

#endif /* SUPPORT_M24VA */

/********************************** end of file ******************************/

⌨️ 快捷键说明

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