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

📄 blc_io.c

📁 针对Intel Xscale PXA255的WinCE boot loader源代码包!极具参考价值!
💻 C
字号:
/****************************************************************

Module Name:    BLC_IO.c
Abstract:	IOControl interface to the backlight driver.

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

#include <windows.h>
#include <types.h>
#include "BLC_IO.h"
#include "BLC_cmn.h"
#include "BLC_hw.h"
#include "blc_glob.h"
#include "drv_glob.h"
#include "xsc1.h"



#ifdef DEBUG

DBGPARAM dpCurSettings = {TEXT("Backlight"), {TEXT("Undefined"), TEXT("Undefined"), 
    TEXT("Undefined"), TEXT("Undefined"), TEXT("Undefined"), TEXT("Undefined"), 
    TEXT("Undefined"), TEXT("Undefined"), TEXT("Undefined"), TEXT("Undefined"), 
    TEXT("Undefined"), TEXT("Undefined"), TEXT("Undefined"), TEXT("Undefined"), 
    TEXT("Undefined"), TEXT("Undefined") }, 0x00000000 };

#endif

#define	BLMSG_TRACE	1

extern BOOL		gBLAutoOn;
extern BOOL		gBLState;
extern ULONG		regBLTimeout;
extern ULONG		gPWMValue;

CRITICAL_SECTION	gBacklightCriticalSection;

// variables in the global area
volatile CLKMAN_REGS	*v_pCLKReg=NULL;
volatile GPIO_REGS	*v_pGPIOReg=NULL;	
volatile PWM_REGS	*v_pPWM1Reg=NULL;	
volatile DRIVER_GLOBALS *v_pDrvGlob=NULL;
//	

DWORD BLC_Init(DWORD dwContext)
{
	
	// Perform all one-time initialization of the backlight hardware
	if (InitializeBacklight())
	{
		// initialize the critical section
		InitializeCriticalSection(&gBacklightCriticalSection);
		// if successful, return an ID
		return kBLCDriverID;
	}
	RETAILMSG(BLMSG_TRACE, (TEXT("BLC_Init: backlight initialization failed\r\n")));
	return 0;
}


BOOL BLC_Deinit(DWORD dwContext)
{
	RETAILMSG(BLMSG_TRACE, (TEXT("BLC_Deinit: dwContext = 0x%x\r\n"), dwContext));

	// close the device
	BLC_Close(dwContext);

	// delete the critical section
	DeleteCriticalSection(&gBacklightCriticalSection);

	// the device manager does not check the return code
   	return TRUE;
}


DWORD BLC_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
{
	RETAILMSG(BLMSG_TRACE, (TEXT("BLC_Open: dwData = 0x%x, dwAccess = 0x%x, dwShareMode = 0x%x\r\n"), dwData, dwAccess, dwShareMode));

	// attempt to open the device
	//
	// if successful, return a handle for use in all subsequent calls to the driver
	return dwData;
	// else return 0
	//return 0;
}

BOOL BLC_Close(DWORD Handle)
{
	RETAILMSG(BLMSG_TRACE, (TEXT("BLC_Close: Handle = 0x%x\r\n"), Handle));

	// close the device
	//
	// the device manager does not check the return code
    	return TRUE;
}


void BLC_PowerDown(void)
{


	
}



void 
BLC_PowerUp(void)
{
	//RETAILMSG(0, (TEXT("+ backlight BLC_PowerUp\r\n")));
	gBLState = BLSTATE_ON;
	
}


DWORD 
BLC_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
	RETAILMSG(BLMSG_TRACE, (TEXT("BLC_Read: Handle = 0x%x, pBuffer = 0x%x, dwNumBytes = 0x%x\r\n"), Handle, pBuffer, dwNumBytes));

	// read dwNumBytes from the device into pBuffer

	// return -1 if error, or number of bytes read
	return 0;
}


DWORD 
BLC_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes)
{
	RETAILMSG(BLMSG_TRACE, (TEXT("BLC_Write: Handle = 0x%x, pBuffer = 0x%x, dwNumBytes = 0x%x\r\n"), Handle, pBuffer, dwNumBytes));

	// read dwNumBytes from pBuffer into the device 

	// return -1 if error, or number of bytes written
	return 0;
}


DWORD 
BLC_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod)
{
	RETAILMSG(BLMSG_TRACE, (TEXT("BLC_Seek: Handle = 0x%x, lDistance = 0x%x, dwMoveMethod = 0x%x\r\n"), Handle, lDistance, dwMoveMethod));

	// typically unsupported
	return (DWORD) -1;
}


BOOL 
BLC_IOControl(DWORD Handle, DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize,
					PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned)
{
	DWORD returnCode = ERROR_SUCCESS;
		
	EnterCriticalSection(&gBacklightCriticalSection);
	{
		switch (dwIoControlCode)
		{
			case kBLCNoticeUserAction:
				if ((gBLAutoOn) && (!GetHardwareBacklightState()) )//&& !(v_pDrvGlob->KeySw.bToggleScreen))
				//jiang modified 2003-9-12 21:01 end
				{
					SetBacklightState(TRUE, FALSE);		
					RETAILMSG(0, (TEXT("BLC_IOControl: kBLCNoticeUserAction111\r\n")));
				}
				else	// ...otherwise just reset the timer
				{
					RETAILMSG(0, (TEXT("BLC_IOControl: kBLCNoticeUserAction222\r\n")));
					ResetBacklightTimeout();			
				}
				break;
			case kBLCSetState:
				gBLState = nInBufSize;
				SetBacklightState(gBLState, FALSE);
				break;
			case kBLCGetState:
				*pBytesReturned = gBLState;
				break;
			
			case kBLCToggleBacklight:
				SetBacklightState(TRUE, TRUE);
				break;
			case kBLCReadUserSettings:
				ReadBacklightSettingsFromRegistry();
				break;

			default :
				// handle unknown selector
				returnCode = -1;
				break;
		}
	}
	LeaveCriticalSection(&gBacklightCriticalSection);

	// return TRUE for success, FALSE for failure
	return returnCode == ERROR_SUCCESS;
}


BOOL WINAPI 
BLC_DllEntry(HANDLE hinstDll, DWORD dwReason, LPVOID lpReserved)
{
    	switch (dwReason)
	{
		case DLL_PROCESS_ATTACH:
			RETAILMSG(BLMSG_TRACE, (TEXT("BLC_DllEntry: DLL_PROCESS_ATTACH. Built: %s %s \r\n"),_T(__DATE__),_T(__TIME__) ));
			DEBUGREGISTER(hinstDll);
			// load external DLL if necessary
			// virtual memory allocation of variables in the global area
		#ifdef	NOUSEVIRTUALMEM		// kernel mode	
			v_pCLKReg = (PCLKMAN_REGS)CLK_BASE_U_VIRTUAL;
			v_pGPIOReg = (PGPIO_REGS)GPIO_BASE_U_VIRTUAL;
			v_pPWM1Reg = (PPWM1_REGS)PWM1_BASE_U_VIRTUAL;
			v_pDrvGlob = (PDRIVER_GLOBALS)DRIVER_GLOBALS_PHYSICAL_MEMORY_START;
		#else	
			v_pCLKReg = (PCLKMAN_REGS)VirtualAlloc(0, 0x400, MEM_RESERVE, PAGE_NOACCESS);
			VirtualCopy((PVOID)v_pCLKReg, (PVOID)CLK_BASE_U_VIRTUAL, 0x400, PAGE_READWRITE|PAGE_NOCACHE);
			v_pGPIOReg = (PGPIO_REGS)VirtualAlloc(0, 0x400, MEM_RESERVE, PAGE_NOACCESS);
			VirtualCopy((PVOID)v_pGPIOReg, (PVOID)GPIO_BASE_U_VIRTUAL, 0x400, PAGE_READWRITE|PAGE_NOCACHE);
			v_pPWM1Reg = (PPWM1_REGS)VirtualAlloc(0, 0x400, MEM_RESERVE, PAGE_NOACCESS);
			VirtualCopy((PVOID)v_pPWM1Reg, (PVOID)PWM1_BASE_U_VIRTUAL, 0x400, PAGE_READWRITE|PAGE_NOCACHE);
			v_pDrvGlob = (PDRIVER_GLOBALS)VirtualAlloc(0, 0x400, MEM_RESERVE, PAGE_NOACCESS);
			VirtualCopy((PVOID)v_pDrvGlob, (PVOID)DRIVER_GLOBALS_PHYSICAL_MEMORY_START, 0x400, PAGE_READWRITE|PAGE_NOCACHE);
		#endif		
						
		break;
		case DLL_PROCESS_DETACH:
			RETAILMSG(BLMSG_TRACE, (TEXT("BLC_DllEntry: DLL_PROCESS_DETACH\r\n")));
			// free stuff here
			
		#ifdef	NOUSEVIRTUALMEM		// kernel mode	
		#else	
			VirtualFree((void *)v_pCLKReg, 0x400, MEM_RELEASE);
			VirtualFree((void *)v_pGPIOReg, 0x400, MEM_RELEASE);
			VirtualFree((void *)v_pPWM1Reg, 0x400, MEM_RELEASE);
			VirtualFree((void *)v_pDrvGlob, 0x400, MEM_RELEASE);
		#endif	
		
		break;
    	}
	// return TRUE for success, FALSE for failure
    	return TRUE;
}

⌨️ 快捷键说明

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