当前位置:首页 > 芯闻号 > 充电吧
[导读]最近在做电源管理,初识 WINCE 对电源管理只知道 ON       UserIdle      SystemIdle    Suspend  这几种状态(初学,写错希望高手指点)。 最初的想法是在

最近在做电源管理,初识 WINCE 对电源管理只知道 ON       UserIdle      SystemIdle    Suspend  这几种状态(初学,写错希望高手指点)。

 

最初的想法是在   UserIdle 的地方只关背光,但是不知道如何下手,还是 GOOGLE 帮了大忙,不断的 GOGO 哈哈。

最后发现


建立支持电源管理的设备驱动

为了建立一个能够对设备进行电源管理的驱动程序,我们必须首先建立一个支持non-COM-related设备接口的驱动程序。non-COM-related设备接口标明这个设备是支持电源管理的。可以用以下方式建立这种接口:
    l          可以在注册表中,用激活设备所用的IClass值定义接口;
    l          可以在驱动程序的Init函数中,设置注册表中的IClass值;
    l          可以使用ActivateDeviceEx的参数REGINI设置IClass值;
    l          可以在驱动程序中显示地调用AdvertiseInterface函数。

电源管理器通过IOCTL代码来和驱动通信。通常情况下,当一个驱动程序声明为支持电源管理时,驱动只需要在DeviceIoControl中实现电源的管理即可。下面是电源管理器用来与驱动通信的IOCTL代码:
    l          IOCTL_POWER_CAPABILITIES:代表电源管理器请求设备驱动返回设备支持的电源状态及相关特征;
    l          IOCTL_POWER_SET:请求驱动更新设备的电源状态;
    l          IOCTL_POWER_QUERY:电源管理器询问设备是否准备好进行状态切换;
    l          IOCTL_POWER_GET:请求驱动返回当前设备的电源状态;
    l          IOCTL_REGISTER_POWER_RELATIONSHIP:通知父设备注册所有它所控制的设备。

其中IOCTL_POWER_CAPABILITIES和IOCTL_POWER_SET是支持电源管理的设备驱动必须实现的。

 

 

可以知道系统在进入 UserIdle 的时候会给流驱动发一个IOCTL_POWER_SET消息,通过IOCTL 来接收。

但是只设置 IOCTL 的 IOCTL_POWER_SET 消息是不够的,

在流驱动的注册表里面需要加入 PM类入口 "IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"


这样基本 OK 了, 有待测试,

现介绍到这里,睡觉啦,

明天继续。







 

 

 

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭