OSDN Git Service

More on assuming GCC is greater than or equal to version 3.5.4 and that
[mingw/mingw-org-wsl.git] / include / ddk / batclass.h
1 /*
2  * batclass.h
3  *
4  * Battery class driver interface
5  *
6  * This file is part of the w32api package.
7  *
8  * Contributors:
9  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10  *
11  * THIS SOFTWARE IS NOT COPYRIGHTED
12  *
13  * This source code is offered for use in the public domain. You may
14  * use, modify or distribute it freely.
15  *
16  * This code is distributed in the hope that it will be useful but
17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18  * DISCLAIMED. This includes but is not limited to warranties of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20  *
21  */
22
23 #ifndef __BATCLASS_H
24 #define __BATCLASS_H
25 #pragma GCC system_header
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 #include "ntddk.h"
32
33 #if defined(_BATTERYCLASS_)
34   #define BCLASSAPI DECLSPEC_EXPORT
35 #else
36   #define BCLASSAPI DECLSPEC_IMPORT
37 #endif
38
39
40 /* Battery device GUIDs */
41
42 DEFINE_GUID(GUID_DEVICE_BATTERY,
43   0x72631e54L, 0x78A4, 0x11d0, 0xbc, 0xf7, 0x00, 0xaa, 0x00, 0xb7, 0xb3, 0x2a);
44
45 DEFINE_GUID(BATTERY_STATUS_WMI_GUID,
46   0xfc4670d1, 0xebbf, 0x416e, 0x87, 0xce, 0x37, 0x4a, 0x4e, 0xbc, 0x11, 0x1a);
47
48 DEFINE_GUID(BATTERY_RUNTIME_WMI_GUID,
49   0x535a3767, 0x1ac2, 0x49bc, 0xa0, 0x77, 0x3f, 0x7a, 0x02, 0xe4, 0x0a, 0xec);
50
51 DEFINE_GUID(BATTERY_TEMPERATURE_WMI_GUID,
52   0x1a52a14d, 0xadce, 0x4a44, 0x9a, 0x3e, 0xc8, 0xd8, 0xf1, 0x5f, 0xf2, 0xc2);
53
54 DEFINE_GUID(BATTERY_FULL_CHARGED_CAPACITY_WMI_GUID,
55   0x40b40565, 0x96f7, 0x4435, 0x86, 0x94, 0x97, 0xe0, 0xe4, 0x39, 0x59, 0x05);
56
57 DEFINE_GUID(BATTERY_CYCLE_COUNT_WMI_GUID,
58   0xef98db24, 0x0014, 0x4c25, 0xa5, 0x0b, 0xc7, 0x24, 0xae, 0x5c, 0xd3, 0x71);
59
60 DEFINE_GUID(BATTERY_STATIC_DATA_WMI_GUID,
61   0x05e1e463, 0xe4e2, 0x4ea9, 0x80, 0xcb, 0x9b, 0xd4, 0xb3, 0xca, 0x06, 0x55);
62
63 DEFINE_GUID(BATTERY_STATUS_CHANGE_WMI_GUID,
64   0xcddfa0c3, 0x7c5b, 0x4e43, 0xa0, 0x34, 0x05, 0x9f, 0xa5, 0xb8, 0x43, 0x64);
65
66 DEFINE_GUID(BATTERY_TAG_CHANGE_WMI_GUID,
67   0x5e1f6e19, 0x8786, 0x4d23, 0x94, 0xfc, 0x9e, 0x74, 0x6b, 0xd5, 0xd8, 0x88);
68
69
70 /* BATTERY_INFORMATION.Capabilities constants */
71 #define BATTERY_SET_CHARGE_SUPPORTED      0x00000001
72 #define BATTERY_SET_DISCHARGE_SUPPORTED   0x00000002
73 #define BATTERY_SET_RESUME_SUPPORTED      0x00000004
74 #define BATTERY_IS_SHORT_TERM             0x20000000
75 #define BATTERY_CAPACITY_RELATIVE         0x40000000
76 #define BATTERY_SYSTEM_BATTERY            0x80000000
77
78 typedef struct _BATTERY_INFORMATION {
79   ULONG  Capabilities;
80   UCHAR  Technology;
81   UCHAR  Reserved[3];
82   UCHAR  Chemistry[4];
83   ULONG  DesignedCapacity;
84   ULONG  FullChargedCapacity;
85   ULONG  DefaultAlert1;
86   ULONG  DefaultAlert2;
87   ULONG  CriticalBias;
88   ULONG  CycleCount;
89 } BATTERY_INFORMATION, *PBATTERY_INFORMATION;
90
91 typedef struct _BATTERY_MANUFACTURE_DATE {
92   UCHAR  Day;
93   UCHAR  Month;
94   USHORT  Year;
95 } BATTERY_MANUFACTURE_DATE, *PBATTERY_MANUFACTURE_DATE;
96
97 typedef struct _BATTERY_NOTIFY {
98         ULONG  PowerState;
99         ULONG  LowCapacity;
100         ULONG  HighCapacity;
101 } BATTERY_NOTIFY, *PBATTERY_NOTIFY;
102
103 /* BATTERY_STATUS.PowerState flags */
104 #define BATTERY_POWER_ON_LINE             0x00000001
105 #define BATTERY_DISCHARGING               0x00000002
106 #define BATTERY_CHARGING                  0x00000004
107 #define BATTERY_CRITICAL                  0x00000008
108
109 /* BATTERY_STATUS.Voltage constant */
110 #define BATTERY_UNKNOWN_VOLTAGE           0xFFFFFFFF
111
112 /* BATTERY_STATUS.Rate constant */
113 #define BATTERY_UNKNOWN_RATE              0x80000000
114
115 typedef struct _BATTERY_STATUS {
116   ULONG  PowerState;
117   ULONG  Capacity;
118   ULONG  Voltage;
119   LONG  Rate;
120 } BATTERY_STATUS, *PBATTERY_STATUS;
121
122 /* BATTERY_INFORMATION.Capacity constants */
123 #define BATTERY_UNKNOWN_CAPACITY          0xFFFFFFFF
124
125 typedef enum _BATTERY_QUERY_INFORMATION_LEVEL {
126   BatteryInformation = 0,
127   BatteryGranularityInformation,
128   BatteryTemperature,
129   BatteryEstimatedTime,
130   BatteryDeviceName,
131   BatteryManufactureDate,
132   BatteryManufactureName,
133   BatteryUniqueID,
134   BatterySerialNumber
135 } BATTERY_QUERY_INFORMATION_LEVEL;
136
137 /* BatteryEstimatedTime constant */
138 #define BATTERY_UNKNOWN_TIME              0x80000000
139
140 /* NTSTATUS possibly returned by BCLASS_QUERY_STATUS */
141 #define BATTERY_TAG_INVALID 0
142
143 typedef struct _BATTERY_QUERY_INFORMATION {
144   ULONG  BatteryTag;
145   BATTERY_QUERY_INFORMATION_LEVEL  InformationLevel;
146   LONG  AtRate;
147 } BATTERY_QUERY_INFORMATION, *PBATTERY_QUERY_INFORMATION;
148
149 typedef enum _BATTERY_SET_INFORMATION_LEVEL {
150   BatteryCriticalBias = 0,
151   BatteryCharge,
152   BatteryDischarge
153 } BATTERY_SET_INFORMATION_LEVEL;
154
155 #define MAX_BATTERY_STRING_SIZE           128
156
157 typedef struct _BATTERY_SET_INFORMATION {
158         ULONG  BatteryTag;
159         BATTERY_SET_INFORMATION_LEVEL  InformationLevel;
160         UCHAR  Buffer[1];
161 } BATTERY_SET_INFORMATION, *PBATTERY_SET_INFORMATION;
162
163 typedef struct _BATTERY_WAIT_STATUS {
164         ULONG  BatteryTag;
165         ULONG  Timeout;
166         ULONG  PowerState;
167         ULONG  LowCapacity;
168         ULONG  HighCapacity;
169 } BATTERY_WAIT_STATUS, *PBATTERY_WAIT_STATUS;
170
171
172 #define IOCTL_BATTERY_QUERY_TAG \
173   CTL_CODE(FILE_DEVICE_BATTERY, 0x10, METHOD_BUFFERED, FILE_READ_ACCESS)
174
175 #define IOCTL_BATTERY_QUERY_INFORMATION \
176   CTL_CODE(FILE_DEVICE_BATTERY, 0x11, METHOD_BUFFERED, FILE_READ_ACCESS)
177
178 #define IOCTL_BATTERY_SET_INFORMATION \
179   CTL_CODE(FILE_DEVICE_BATTERY, 0x12, METHOD_BUFFERED, FILE_WRITE_ACCESS)
180
181 #define IOCTL_BATTERY_QUERY_STATUS \
182   CTL_CODE(FILE_DEVICE_BATTERY, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS)
183
184
185 typedef NTSTATUS DDKAPI
186 (*BCLASS_DISABLE_STATUS_NOTIFY)(
187   /*IN*/ PVOID  Context);
188
189 typedef NTSTATUS DDKAPI
190 (*BCLASS_QUERY_INFORMATION)(
191   /*IN*/ PVOID  Context,
192   /*IN*/ ULONG  BatteryTag,
193   /*IN*/ BATTERY_QUERY_INFORMATION_LEVEL  Level,
194   /*IN*/ LONG  AtRate  /*OPTIONAL*/,
195   /*OUT*/ PVOID  Buffer,
196   /*IN*/ ULONG  BufferLength,
197   /*OUT*/ PULONG  ReturnedLength);
198
199 typedef NTSTATUS DDKAPI
200 (*BCLASS_QUERY_STATUS)(
201   /*IN*/ PVOID  Context,
202   /*IN*/ ULONG  BatteryTag,
203   /*OUT*/ PBATTERY_STATUS  BatteryStatus);
204
205 typedef NTSTATUS DDKAPI
206 (*BCLASS_QUERY_TAG)(
207   /*IN*/ PVOID  Context,
208   /*OUT*/ PULONG  BatteryTag);
209
210 typedef NTSTATUS DDKAPI
211 (*BCLASS_SET_INFORMATION)(
212   /*IN*/ PVOID  Context,
213   /*IN*/ ULONG  BatteryTag,
214   /*IN*/ BATTERY_SET_INFORMATION_LEVEL  Level,
215   /*IN*/ PVOID  Buffer  /*OPTIONAL*/);
216
217 typedef NTSTATUS DDKAPI
218 (*BCLASS_SET_STATUS_NOTIFY)(
219   /*IN*/ PVOID  Context,
220   /*IN*/ ULONG  BatteryTag,
221   /*IN*/ PBATTERY_NOTIFY  BatteryNotify);
222
223
224 typedef struct _BATTERY_MINIPORT_INFO {
225   USHORT  MajorVersion;
226   USHORT  MinorVersion;
227   PVOID  Context;
228   BCLASS_QUERY_TAG  QueryTag;
229   BCLASS_QUERY_INFORMATION  QueryInformation;
230   BCLASS_SET_INFORMATION  SetInformation;
231   BCLASS_QUERY_STATUS  QueryStatus;
232   BCLASS_SET_STATUS_NOTIFY  SetStatusNotify;
233   BCLASS_DISABLE_STATUS_NOTIFY  DisableStatusNotify;
234   PDEVICE_OBJECT  Pdo;
235   PUNICODE_STRING  DeviceName;
236 } BATTERY_MINIPORT_INFO, *PBATTERY_MINIPORT_INFO;
237
238 /* BATTERY_MINIPORT_INFO.XxxVersion */
239 #define BATTERY_CLASS_MAJOR_VERSION       0x0001
240 #define BATTERY_CLASS_MINOR_VERSION       0x0000
241
242
243 BCLASSAPI
244 NTSTATUS
245 DDKAPI
246 BatteryClassInitializeDevice(
247   /*IN*/ PBATTERY_MINIPORT_INFO  MiniportInfo,
248   /*IN*/ PVOID  *ClassData);
249
250 BCLASSAPI
251 NTSTATUS
252 DDKAPI
253 BatteryClassIoctl(
254   /*IN*/ PVOID  ClassData,
255   /*IN*/ PIRP  Irp);
256
257 BCLASSAPI
258 NTSTATUS
259 DDKAPI
260 BatteryClassQueryWmiDataBlock(
261   /*IN*/ PVOID  ClassData,
262   /*IN*/ PDEVICE_OBJECT  DeviceObject,
263   /*IN*/ PIRP  Irp,
264   /*IN*/ ULONG  GuidIndex,
265   /*IN OUT*/ PULONG  InstanceLengthArray,
266   /*IN*/ ULONG  OutBufferSize,
267   /*OUT*/ PUCHAR  Buffer);
268
269 BCLASSAPI
270 NTSTATUS
271 DDKAPI
272 BatteryClassStatusNotify(
273   /*IN*/ PVOID  ClassData);
274
275 BCLASSAPI
276 NTSTATUS
277 DDKAPI
278 BatteryClassSystemControl(
279   /*IN*/ PVOID  ClassData,
280   /*IN*/ PWMILIB_CONTEXT  WmiLibContext,
281   /*IN*/ PDEVICE_OBJECT  DeviceObject,
282   /*IN*/ PIRP  Irp,
283   /*OUT*/ PSYSCTL_IRP_DISPOSITION  Disposition);
284
285 BCLASSAPI
286 NTSTATUS
287 DDKAPI
288 BatteryClassUnload(
289   /*IN*/ PVOID  ClassData);
290
291 #ifdef __cplusplus
292 }
293 #endif
294
295 #endif /* __BATCLASS_H */