在CE5.0的一个背光驱动中看到背光关了以后. 主要由三种事件重新打开背光.具体代码如下:
// Globals
const TCHAR szevtBacklightChange[] = TEXT("BackLightChangeEvent");
const TCHAR szevtPowerChanged[] = TEXT("PowerChangedEvent");
const TCHAR szevtUserInput[] = TEXT("UserInputEvent");
const TCHAR szregRootKey[] = TEXT("ControlPanel\\Backlight");
const TCHAR szregBatteryTimeout[] = TEXT("BatteryTimeout");
const TCHAR szregACTimeout[] = TEXT("ACTimeout");
const TCHAR szregBatteryAuto[] = TEXT("BacklightOnTap");
const TCHAR szregACAuto[] = TEXT("ACBacklightOnTap");
HANDLE g_evtSignal[NUM_EVENTS];
//
// initialize the backlight
//
BOOL BL_Init()
{
// Set up all the events we need.
g_evtSignal[0] = CreateEvent(NULL, FALSE, FALSE, szevtBacklightChange);
g_evtSignal[1] = CreateEvent(NULL, FALSE, FALSE, szevtUserInput);
g_evtSignal[BL_POWEREVT] = CreateEvent(NULL, FALSE, FALSE, szevtPowerChanged);
if(!g_evtSignal[0] || !g_evtSignal[1] || !g_evtSignal[2]) {
BL_Deinit();
return FALSE;
}
return TRUE;
}
// Now let's wait for either there is an update on registry, or
// there is user action on the device, or there is activity on
// AC power supply.
dwResult = WaitForMultipleObjects(NUM_EVENTS, &g_evtSignal[0], FALSE, dwTimeout);
// If we are signaled by registry event
if(WAIT_OBJECT_0 == dwResult) {
// All we need to do is to read from registry and update the tick count
BL_ReadRegistry(&g_BLInfo);
// Always turn on the Backlight after a change to registry
BL_On(TRUE);
}
else if(dwResult == WAIT_OBJECT_0+1) {
// User activity, depending on the situation, we may / may not update
// the tick count
if(IsACOn()) {
if(g_BLInfo.m_bACAuto) {
// Turn on backlight
BL_On(TRUE);
}
}
else {
if(g_BLInfo.m_bBatteryAuto) {
BL_On(TRUE);
}
}
}
else if(dwResult == WAIT_OBJECT_0+2) {
// When AC is plugged or un-plugged, we don't really need to do anything
// We continue the loop. The correct timeout value will be assigned at
// the top of the while loop.
RETAILMSG(1, (TEXT("BackLight Thread: power changed!\r\n")));
}
else if(dwResult == WAIT_TIMEOUT) {
// Time out, let's turn the device off
RETAILMSG(1, (TEXT("Timeout, turn off the backlight!\r\n")));
BL_On(FALSE);
}
现在情况是关掉背光后. 不会因为有操作事件打开背光. 请问如何将一个事件与有CE系统时候侦察到操作这一动作联系起来?
用中断,比如键盘输入或者点击屏幕触发中断,关联UserInputEvent。
其实用什么事件触发中断,并点亮背光,都是由设计者自己定义的。
你需要对WinCE power management的概念有个了解,再回来开这件事。自然就会有解
先处理BKL_IoControl,在来搞这些系统event的事情
这个驱动只是一个框架.里面并没有如何关LCD背光的代码. 以下是输出信息.
从以下输出信息来看. 确实是执行了定时关掉背光(虽然时间不太准). 但却没有因为我点击了触摸屏而重新打开背光
BacklightInitialize
!!!!!!!!!!!! BACKLIGHT ON !!!!!!!!!!!!
+CS8900:DriverEntry
......
--S3C2440DISP::InitializeHardware
Lyg.p: Layout Manager successfully initialized to 2
Touch Init
Maximum Allowed Error 7:
Explorer(V2.0) taskbar thread started.
RasEntry '`USB Socket Default' Created
NDISPWR:: Found adapter [CS89001]
Timeout, turn off the backlight!
!!!!!!!!!!!! BACKLIGHT OFF !!!!!!!!!!!!
我现在只想知道如何能做到侦察是否有用户触发CE事件或更改电源. 从楼上两位来看. 是否在触摸屏幕驱动和键盘输入驱动中增加一个全局事件变量. 只要用户触发触摸屏或按键就set该事件. 那如何在触摸屏驱动/键盘驱动/背光驱动程序中共用一个事件变量呢?
获取系统事件,并进行处理,不是在背光驱动里做的,而是系统层做的。
系统层获取了触摸屏点击事件,或者键盘输入事件,就会向背光驱动发出OPEN的控制指令,背光驱动就会按照指令打开背光。
这个操作流程别弄错。所有的驱动都只是向应用层提供事件信息,以及按照应用层的命令来动作,而不会直接向其他驱动提供任何信息,也不会直接被其他驱动所控制。
shuiyan. 请教系统层是指哪个? 是在应用程序里面做的吗? 那我还的做一个应用程序时刻监视是否有定时/触摸/按键事件? 再调用背光驱动关掉/打开背光吗? 现在问题是背光驱动在定时到后关掉背光后.无论如何也无法打开背光. 也就是系统不向背光驱动发出OPEN的控制指令