| 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 |
#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 */ |