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