OSDN Git Service

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