home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / batclass.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  8KB  |  299 lines

  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 */
  299.