/*++ Copyright (c) 1992 Microsoft Corporation Module Name: power.c Abstract: Stubs for unimplemented power management APIs Author: Steve Wood (stevewo) 18-Nov-1994 Revision History: --*/ #include "basedll.h" BOOL WINAPI GetSystemPowerStatus( LPSYSTEM_POWER_STATUS lpStatus ) { SYSTEM_BATTERY_STATE BatteryState; NTSTATUS Status; // // Get power policy managers Battery State // Status = NtPowerInformation ( SystemBatteryState, NULL, 0, &BatteryState, sizeof (BatteryState) ); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return FALSE; } // // Convert it to the legacy System Power State structure // RtlZeroMemory (lpStatus, sizeof(*lpStatus)); lpStatus->ACLineStatus = AC_LINE_ONLINE; if (BatteryState.BatteryPresent && !BatteryState.AcOnLine) { lpStatus->ACLineStatus = AC_LINE_OFFLINE; } if (BatteryState.Charging) { lpStatus->BatteryFlag |= BATTERY_FLAG_CHARGING; } if (!BatteryState.BatteryPresent) { lpStatus->BatteryFlag |= BATTERY_FLAG_NO_BATTERY; } lpStatus->BatteryLifePercent = BATTERY_PERCENTAGE_UNKNOWN; if (BatteryState.MaxCapacity) { if (BatteryState.RemainingCapacity > BatteryState.MaxCapacity) { // // Values greater than 100% should not be returned // According to the SDK they are reserved. // lpStatus->BatteryLifePercent = 100; } else { lpStatus->BatteryLifePercent = (UCHAR) (((BatteryState.RemainingCapacity * 100) + (BatteryState.MaxCapacity/2)) / BatteryState.MaxCapacity); } if (lpStatus->BatteryLifePercent > 66) { lpStatus->BatteryFlag |= BATTERY_FLAG_HIGH; } if (lpStatus->BatteryLifePercent < 33) { lpStatus->BatteryFlag |= BATTERY_FLAG_LOW; } } lpStatus->BatteryLifeTime = BATTERY_LIFE_UNKNOWN; lpStatus->BatteryFullLifeTime = BATTERY_LIFE_UNKNOWN; if (BatteryState.EstimatedTime) { lpStatus->BatteryLifeTime = BatteryState.EstimatedTime; } return TRUE; } BOOL WINAPI SetSystemPowerState( BOOL fSuspend, BOOL fForce ) { NTSTATUS Status; Status = NtInitiatePowerAction (fSuspend ? PowerActionSleep : PowerActionHibernate, fSuspend ? PowerSystemSleeping1 : PowerSystemHibernate, fForce == TRUE ? 0 : POWER_ACTION_QUERY_ALLOWED, FALSE); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return FALSE; } return TRUE; } EXECUTION_STATE WINAPI SetThreadExecutionState( EXECUTION_STATE esFlags ) { NTSTATUS Status; EXECUTION_STATE PreviousFlags; Status = NtSetThreadExecutionState (esFlags, &PreviousFlags); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return (EXECUTION_STATE) 0; } return PreviousFlags; } BOOL WINAPI RequestWakeupLatency ( LATENCY_TIME latency ) { NTSTATUS Status; Status = NtRequestWakeupLatency (latency); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return FALSE; } return TRUE; } BOOL WINAPI GetDevicePowerState( HANDLE h, OUT BOOL *pfOn ) { NTSTATUS Status; DEVICE_POWER_STATE PowerState; Status = NtGetDevicePowerState(h, &PowerState); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return(FALSE); } if ((PowerState == PowerDeviceD0) || (PowerState == PowerDeviceUnspecified)) { *pfOn = TRUE; } else { *pfOn = FALSE; } return TRUE; } BOOL WINAPI IsSystemResumeAutomatic( VOID ) { return(NtIsSystemResumeAutomatic()); } BOOL WINAPI RequestDeviceWakeup ( HANDLE h ) { NTSTATUS Status; Status = NtRequestDeviceWakeup(h); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return FALSE; } else { return(TRUE); } } BOOL WINAPI CancelDeviceWakeupRequest( HANDLE h ) { NTSTATUS Status; Status = NtCancelDeviceWakeupRequest(h); if (!NT_SUCCESS(Status)) { BaseSetLastNTError(Status); return FALSE; } else { return(TRUE); } } BOOL WINAPI SetMessageWaitingIndicator ( IN HANDLE hMsgIndicator, IN ULONG ulMsgCount ) { BaseSetLastNTError(STATUS_NOT_IMPLEMENTED); return FALSE; }