谢谢大家,我是使用了DeviceIOControl,我再把我的执行流程说一遍,请大家帮忙检查一下:
1、背光驱动中设置IOControl,定义一个#define IOCTL_BACKLIGHT_CONTROL 0x10
2、在case IOCTL_BACKLIGHT_CONTROL下,程序如下:
if(*lpInBuf==1)
SetBacklightStatus(TRUE);
else
SetBacklightStatus(FALSE);
复制代码
3、上述设置是在MDD下做的,现在在PDD中ms2_backlight.cpp中,添加一楼所说的注册表读取和写入的函数,和设置背光值的函数,pBrightness也是在这里定义的。通过读注册表,可以读出pBrightness的值,然后通过SetBacklightStatus函数,即TRUE,则pBrightness+1,FALSE则pBrightness-1。然后将改变后的值写回注册表。顺便说一句,得到pBrightness的值后,我会有一个SetPWM函数来通过pBrightness改变当前背光的状态,背光是通过改变PWM而改变的。
4、在外部驱动调用IOControl,我是在键盘驱动中调用的,类似于我们的笔记本,键盘上有两个键,一个是增加背光,一个是减少背光,调用方式如下:
BYTE state = 0;
if ((blHandleMon = CreateFile(L"BKL1:", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE)
{
RETAILMSG(1, (TEXT("PwrButtonIntrThread: backlight driver not found. Error %d\r\n"),
GetLastError()));
}
DeviceIoControl(blHandleMon,0x10,&state,sizeof(BYTE),NULL,0,NULL,NULL);
RETAILMSG(1, (TEXT("Keyboard: Backlight++\r\n")));
CloseHandle(blHandleMon);复制代码
这就是我的整个设计流程,请大家在帮忙看看。
另外,我的背光驱动中有一个void BacklightRegChanged()函数,但是这个函数是空的,并没有实现。
谢谢!