1/**
2 * Windows API header module
3 *
4 * Translated from MinGW Windows headers
5 *
6 * Authors: Stewart Gordon
7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8 * Source: $(DRUNTIMESRC core/sys/windows/_powrprof.d)
9 */
10module core.sys.windows.powrprof;
11version (Windows):
12@system:
13pragma(lib, "powrprof");
14
15import core.sys.windows.windef;
16import core.sys.windows.ntdef;
17
18// FIXME: look up Windows version support
19
20enum ULONG
21    EnableSysTrayBatteryMeter =  1,
22    EnableMultiBatteryDisplay =  2,
23    EnablePasswordLogon       =  4,
24    EnableWakeOnRing          =  8,
25    EnableVideoDimDisplay     = 16;
26
27enum UINT NEWSCHEME = -1;
28
29struct GLOBAL_MACHINE_POWER_POLICY {
30    ULONG              Revision;
31    SYSTEM_POWER_STATE LidOpenWakeAc;
32    SYSTEM_POWER_STATE LidOpenWakeDc;
33    ULONG              BroadcastCapacityResolution;
34}
35alias GLOBAL_MACHINE_POWER_POLICY* PGLOBAL_MACHINE_POWER_POLICY;
36
37struct GLOBAL_USER_POWER_POLICY {
38    ULONG               Revision;
39    POWER_ACTION_POLICY PowerButtonAc;
40    POWER_ACTION_POLICY PowerButtonDc;
41    POWER_ACTION_POLICY SleepButtonAc;
42    POWER_ACTION_POLICY SleepButtonDc;
43    POWER_ACTION_POLICY LidCloseAc;
44    POWER_ACTION_POLICY LidCloseDc;
45    SYSTEM_POWER_LEVEL[NUM_DISCHARGE_POLICIES] DischargePolicy;
46    ULONG GlobalFlags;
47}
48alias GLOBAL_USER_POWER_POLICY* PGLOBAL_USER_POWER_POLICY;
49
50struct GLOBAL_POWER_POLICY {
51    GLOBAL_USER_POWER_POLICY    user;
52    GLOBAL_MACHINE_POWER_POLICY mach;
53}
54alias GLOBAL_POWER_POLICY* PGLOBAL_POWER_POLICY;
55
56struct MACHINE_POWER_POLICY {
57    ULONG               Revision;
58    SYSTEM_POWER_STATE  MinSleepAc;
59    SYSTEM_POWER_STATE  MinSleepDc;
60    SYSTEM_POWER_STATE  ReducedLatencySleepAc;
61    SYSTEM_POWER_STATE  ReducedLatencySleepDc;
62    ULONG               DozeTimeoutAc;
63    ULONG               DozeTimeoutDc;
64    ULONG               DozeS4TimeoutAc;
65    ULONG               DozeS4TimeoutDc;
66    UCHAR               MinThrottleAc;
67    UCHAR               MinThrottleDc;
68    UCHAR[2]            pad1;
69    POWER_ACTION_POLICY OverThrottledAc;
70    POWER_ACTION_POLICY OverThrottledDc;
71}
72alias MACHINE_POWER_POLICY* PMACHINE_POWER_POLICY;
73
74struct MACHINE_PROCESSOR_POWER_POLICY {
75    ULONG Revision;
76    PROCESSOR_POWER_POLICY ProcessorPolicyAc;
77    PROCESSOR_POWER_POLICY ProcessorPolicyDc;
78}
79alias MACHINE_PROCESSOR_POWER_POLICY* PMACHINE_PROCESSOR_POWER_POLICY;
80
81struct USER_POWER_POLICY {
82   ULONG               Revision;
83   POWER_ACTION_POLICY IdleAc;
84   POWER_ACTION_POLICY IdleDc;
85   ULONG               IdleTimeoutAc;
86   ULONG               IdleTimeoutDc;
87   UCHAR               IdleSensitivityAc;
88   UCHAR               IdleSensitivityDc;
89   UCHAR               ThrottlePolicyAc;
90   UCHAR               ThrottlePolicyDc;
91   SYSTEM_POWER_STATE  MaxSleepAc;
92   SYSTEM_POWER_STATE  MaxSleepDc;
93   ULONG[2]            Reserved;
94   ULONG               VideoTimeoutAc;
95   ULONG               VideoTimeoutDc;
96   ULONG               SpindownTimeoutAc;
97   ULONG               SpindownTimeoutDc;
98   BOOLEAN             OptimizeForPowerAc;
99   BOOLEAN             OptimizeForPowerDc;
100   UCHAR               FanThrottleToleranceAc;
101   UCHAR               FanThrottleToleranceDc;
102   UCHAR               ForcedThrottleAc;
103   UCHAR               ForcedThrottleDc;
104}
105alias USER_POWER_POLICY* PUSER_POWER_POLICY;
106
107struct POWER_POLICY {
108    USER_POWER_POLICY    user;
109    MACHINE_POWER_POLICY mach;
110}
111alias POWER_POLICY* PPOWER_POLICY;
112
113extern (Windows) {
114    alias BOOLEAN function(UINT, DWORD, LPTSTR, DWORD, LPTSTR, PPOWER_POLICY,
115      LPARAM) PWRSCHEMESENUMPROC;
116    alias BOOLEAN function(POWER_ACTION, SYSTEM_POWER_STATE, ULONG, BOOLEAN)
117      PFNNTINITIATEPWRACTION;
118
119    NTSTATUS CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG,
120      PVOID, ULONG);
121    BOOLEAN CanUserWritePwrScheme();
122    BOOLEAN DeletePwrScheme(UINT);
123    BOOLEAN EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM);
124    BOOLEAN GetActivePwrScheme(PUINT);
125    BOOLEAN GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
126    BOOLEAN GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES);
127    BOOLEAN GetPwrDiskSpindownRange(PUINT, PUINT);
128    BOOLEAN IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);
129    BOOLEAN IsPwrHibernateAllowed();
130    BOOLEAN IsPwrShutdownAllowed();
131    BOOLEAN IsPwrSuspendAllowed();
132    BOOLEAN ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
133    BOOLEAN ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
134    BOOLEAN ReadPwrScheme(UINT, PPOWER_POLICY);
135    BOOLEAN SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);
136    BOOLEAN SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);
137    BOOLEAN WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
138    BOOLEAN WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
139    BOOLEAN ValidatePowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
140    BOOLEAN WritePwrScheme(PUINT, LPTSTR, LPTSTR, PPOWER_POLICY);
141}
142