3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: dll/win32/kernel32/misc/power.c
6 * PURPOSE: Power Management Functions
7 * PROGRAMMER: Dmitry Chapyshev <dmitry@reactos.org>
19 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \
20 DPRINT1("%s() is UNIMPLEMENTED!\n", __FUNCTION__)
25 NtGetDevicePowerState(
27 IN PDEVICE_POWER_STATE PowerState
33 NtRequestWakeupLatency(
34 IN LATENCY_TIME latency
40 NtIsSystemResumeAutomatic(VOID
);
45 NtSetThreadExecutionState(
46 IN EXECUTION_STATE esFlags
,
47 OUT EXECUTION_STATE
*PreviousFlags
50 /* PUBLIC FUNCTIONS ***********************************************************/
57 GetSystemPowerStatus(LPSYSTEM_POWER_STATUS PowerStatus
)
60 SYSTEM_BATTERY_STATE SysBatState
;
62 Status
= NtPowerInformation(SystemBatteryState
,
66 sizeof(SYSTEM_BATTERY_STATE
));
68 if (!NT_SUCCESS(Status
))
70 SetLastErrorByStatus(Status
);
74 RtlZeroMemory(PowerStatus
, sizeof(LPSYSTEM_POWER_STATUS
));
76 PowerStatus
->BatteryLifeTime
= BATTERY_LIFE_UNKNOWN
;
77 PowerStatus
->BatteryFullLifeTime
= BATTERY_LIFE_UNKNOWN
;
79 PowerStatus
->BatteryLifePercent
= BATTERY_PERCENTAGE_UNKNOWN
;
80 if (SysBatState
.MaxCapacity
)
82 if (SysBatState
.MaxCapacity
>= SysBatState
.RemainingCapacity
)
83 PowerStatus
->BatteryLifePercent
= (SysBatState
.RemainingCapacity
/ SysBatState
.MaxCapacity
) * 100;
85 PowerStatus
->BatteryLifePercent
= 100; /* 100% */
87 if (PowerStatus
->BatteryLifePercent
<= 32)
88 PowerStatus
->BatteryFlag
|= BATTERY_FLAG_LOW
;
90 if (PowerStatus
->BatteryLifePercent
>= 67)
91 PowerStatus
->BatteryFlag
|= BATTERY_FLAG_HIGH
;
94 if (!SysBatState
.BatteryPresent
)
95 PowerStatus
->BatteryFlag
|= BATTERY_FLAG_NO_BATTERY
;
97 if (SysBatState
.Charging
)
98 PowerStatus
->BatteryFlag
|= BATTERY_FLAG_CHARGING
;
100 if (!SysBatState
.AcOnLine
&& SysBatState
.BatteryPresent
)
101 PowerStatus
->ACLineStatus
= AC_LINE_OFFLINE
;
103 PowerStatus
->ACLineStatus
= AC_LINE_ONLINE
;
105 if (SysBatState
.EstimatedTime
)
106 PowerStatus
->BatteryLifeTime
= SysBatState
.EstimatedTime
;
115 SetSystemPowerState(BOOL fSuspend
, BOOL fForce
)
126 GetDevicePowerState(HANDLE hDevice
, BOOL
*pfOn
)
128 DEVICE_POWER_STATE DevicePowerState
;
131 Status
= NtGetDevicePowerState(hDevice
, &DevicePowerState
);
133 if (NT_SUCCESS(Status
))
135 if ((DevicePowerState
!= PowerDeviceUnspecified
) &&
136 (DevicePowerState
!= PowerDeviceD0
))
144 SetLastErrorByStatus(Status
);
153 RequestDeviceWakeup(HANDLE hDevice
)
164 RequestWakeupLatency(LATENCY_TIME latency
)
168 Status
= NtRequestWakeupLatency(latency
);
170 if (!NT_SUCCESS(Status
))
172 SetLastErrorByStatus(Status
);
184 CancelDeviceWakeupRequest(HANDLE hDevice
)
195 IsSystemResumeAutomatic(VOID
)
197 return NtIsSystemResumeAutomatic();
205 SetMessageWaitingIndicator(HANDLE hMsgIndicator
,
217 SetThreadExecutionState(EXECUTION_STATE esFlags
)
219 EXECUTION_STATE OldFlags
;
222 Status
= NtSetThreadExecutionState(esFlags
, &OldFlags
);
224 if (!NT_SUCCESS(Status
))
226 SetLastErrorByStatus(Status
);