阅读:2270回复:7
电源管理方面的问题求教大家
在控制面板中的电源管理里面,可以设置3种定时模式:
1。 隔一段时间进入user idle模式; 2。 隔一段时间进入system idle模式; 3。 隔一段时间进入suspend模式; 现在我知道的是suspend模式最后调用的时OEMpoweroff(),那么我想问问大家另外两种模式最终分别调用的哪两个函数? |
|
沙发#
发布于:2007-08-09 10:53
应该是进入OEMIdle函数吧
|
|
板凳#
发布于:2007-08-09 15:31
user idle,和system idle应该进入的不是同一个底层函数吧?我看了下代码,发现没有任务调度的时候就会进入OEMIdle,所以这两种状态最终应该不是进入OEMIdle。
|
|
地板#
发布于:2007-08-09 20:58
我没听说过IDLE还有两种,好像就只有一个IDLE吧, CPU没事做时就会进入OEMIDLE.
|
|
|
地下室#
发布于:2007-08-10 09:22
1。 隔一段时间进入user idle模式;
如果你的设备驱动支持电源管理,且支持D1模式,他会接收到PM发过来的广播消息,进入D1模式,这个时候就要看你的设备驱动想在D1模式进行什么操作了 2。 隔一段时间进入system idle模式; 这个如同上,就是进入D2模式! 注意:如想接受到这些消息,必须在 IOCTL_POWER_CAPABILITIES 里面有支持 D1和D2 |
|
5楼#
发布于:2007-08-10 09:48
谢谢大家,simula:那么怎么支持D1,D2这种电源状态呢?我用什么函数驱获取电源的状态呢?
|
|
6楼#
发布于:2007-08-10 10:19
一:注册ICLASS,如果是流接口比较方便在,注册表设置,比如
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\BAK] "Index"=dword:1 "Prefix"="BAK" "Dll"="backlight.dll" "Order"=dword:1 "IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}" ; Power-manageable generic 若在后面加入"IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}" ; Power-manageable generic,他应该就会支持电源管理,名字为BAK1 2:驱动,加入 IOCTL_POWER_CAPABILITIES 这个里面若你要支持D1,D2必须加入: PPOWER_CAPABILITIES ppc; memset(ppc, 0, sizeof(POWER_CAPABILITIES)); // support D0 、D1、D2, D4 ppc->DeviceDx = DX_MASK(D0) | DX_MASK(D1) | DX_MASK(D2) | DX_MASK(D4); 然后完成其他电源管理的接口函数: IOCTL_POWER_QUERY IOCTL_POWER_SET IOCTL_POWER_GET 当系统转换电源状态时会调用 IOCTL_POWER_SET 参数就是D1,D2,D3这些东西,这时你就可以根据参数来进行你的电源管理! 为了方便,你可以建立一个线程,来监视系统电源的状态!这时可以发现系统变化时,你的受管理的驱动会接受到广播信息进行电源状态设置 |
|
7楼#
发布于:2007-08-10 11:35
谢谢simula ,我试试
|
|