holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/batclass.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     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 */