/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
DEFINE_GUID(GUID_DEVICE_BATTERY,0x72631e54,0x78A4,0x11d0,0xbc,0xf7,0x00,0xaa,0x00,0xb7,0xb3,0x2a);
DEFINE_GUID (BATTERY_STATUS_WMI_GUID,0xfc4670d1,0xebbf,0x416e,0x87,0xce,0x37,0x4a,0x4e,0xbc,0x11,0x1a);
DEFINE_GUID (BATTERY_RUNTIME_WMI_GUID,0x535a3767,0x1ac2,0x49bc,0xa0,0x77,0x3f,0x7a,0x02,0xe4,0x0a,0xec);
DEFINE_GUID (BATTERY_TEMPERATURE_WMI_GUID,0x1a52a14d,0xadce,0x4a44,0x9a,0x3e,0xc8,0xd8,0xf1,0x5f,0xf2,0xc2);
DEFINE_GUID (BATTERY_FULL_CHARGED_CAPACITY_WMI_GUID,0x40b40565,0x96f7,0x4435,0x86,0x94,0x97,0xe0,0xe4,0x39,0x59,0x05);
DEFINE_GUID (BATTERY_CYCLE_COUNT_WMI_GUID,0xef98db24,0x0014,0x4c25,0xa5,0x0b,0xc7,0x24,0xae,0x5c,0xd3,0x71);
DEFINE_GUID (BATTERY_STATIC_DATA_WMI_GUID,0x05e1e463,0xe4e2,0x4ea9,0x80,0xcb,0x9b,0xd4,0xb3,0xca,0x06,0x55);
DEFINE_GUID (BATTERY_STATUS_CHANGE_WMI_GUID,0xcddfa0c3,0x7c5b,0x4e43,0xa0,0x34,0x05,0x9f,0xa5,0xb8,0x43,0x64);
DEFINE_GUID (BATTERY_TAG_CHANGE_WMI_GUID,0x5e1f6e19,0x8786,0x4d23,0x94,0xfc,0x9e,0x74,0x6b,0xd5,0xd8,0x88);

#ifndef _BATCLASS_
#define _BATCLASS_

#define IOCTL_BATTERY_QUERY_TAG CTL_CODE(FILE_DEVICE_BATTERY,0x10,METHOD_BUFFERED,FILE_READ_ACCESS)

#define BATTERY_TAG_INVALID 0

#define IOCTL_BATTERY_QUERY_INFORMATION CTL_CODE(FILE_DEVICE_BATTERY,0x11,METHOD_BUFFERED,FILE_READ_ACCESS)

typedef enum {
  BatteryInformation,BatteryGranularityInformation,BatteryTemperature,BatteryEstimatedTime,BatteryDeviceName,BatteryManufactureDate,BatteryManufactureName,BatteryUniqueID,BatterySerialNumber
} BATTERY_QUERY_INFORMATION_LEVEL;

typedef struct _BATTERY_QUERY_INFORMATION {
  ULONG BatteryTag;
  BATTERY_QUERY_INFORMATION_LEVEL InformationLevel;
  LONG AtRate;
} BATTERY_QUERY_INFORMATION,*PBATTERY_QUERY_INFORMATION;

typedef struct _BATTERY_INFORMATION {
  ULONG Capabilities;
  UCHAR Technology;
  UCHAR Reserved[3];
  UCHAR Chemistry[4];
  ULONG DesignedCapacity;
  ULONG FullChargedCapacity;
  ULONG DefaultAlert1;
  ULONG DefaultAlert2;
  ULONG CriticalBias;
  ULONG CycleCount;
} BATTERY_INFORMATION,*PBATTERY_INFORMATION;

#define BATTERY_SYSTEM_BATTERY 0x80000000
#define BATTERY_CAPACITY_RELATIVE 0x40000000
#define BATTERY_IS_SHORT_TERM 0x20000000
#define BATTERY_SET_CHARGE_SUPPORTED 0x00000001
#define BATTERY_SET_DISCHARGE_SUPPORTED 0x00000002
#define BATTERY_SET_RESUME_SUPPORTED 0x00000004

#define BATTERY_UNKNOWN_CAPACITY 0xFFFFFFFF

#define BATTERY_UNKNOWN_TIME 0xFFFFFFFF

#define MAX_BATTERY_STRING_SIZE 128

typedef struct _BATTERY_MANUFACTURE_DATE
{
  UCHAR Day;
  UCHAR Month;
  USHORT Year;
} BATTERY_MANUFACTURE_DATE,*PBATTERY_MANUFACTURE_DATE;

#define IOCTL_BATTERY_SET_INFORMATION CTL_CODE(FILE_DEVICE_BATTERY,0x12,METHOD_BUFFERED,FILE_WRITE_ACCESS)

typedef enum {
  BatteryCriticalBias,BatteryCharge,BatteryDischarge
} BATTERY_SET_INFORMATION_LEVEL;

typedef struct _BATTERY_SET_INFORMATION {
  ULONG BatteryTag;
  BATTERY_SET_INFORMATION_LEVEL InformationLevel;
  UCHAR Buffer[1];
} BATTERY_SET_INFORMATION,*PBATTERY_SET_INFORMATION;

#define IOCTL_BATTERY_QUERY_STATUS CTL_CODE(FILE_DEVICE_BATTERY,0x13,METHOD_BUFFERED,FILE_READ_ACCESS)

typedef struct _BATTERY_WAIT_STATUS {
  ULONG BatteryTag;
  ULONG Timeout;
  ULONG PowerState;
  ULONG LowCapacity;
  ULONG HighCapacity;
} BATTERY_WAIT_STATUS,*PBATTERY_WAIT_STATUS;

typedef struct _BATTERY_STATUS {
  ULONG PowerState;
  ULONG Capacity;
  ULONG Voltage;
  LONG Rate;
} BATTERY_STATUS,*PBATTERY_STATUS;

#define BATTERY_POWER_ON_LINE 0x00000001
#define BATTERY_DISCHARGING 0x00000002
#define BATTERY_CHARGING 0x00000004
#define BATTERY_CRITICAL 0x00000008

#define BATTERY_UNKNOWN_VOLTAGE 0xFFFFFFFF
#define BATTERY_UNKNOWN_RATE 0x80000000

#ifndef _WINDOWS_

typedef struct {
  ULONG PowerState;
  ULONG LowCapacity;
  ULONG HighCapacity;
} BATTERY_NOTIFY,*PBATTERY_NOTIFY;

typedef NTSTATUS (*BCLASS_QUERY_TAG)(PVOID Context,PULONG BatteryTag);
typedef NTSTATUS (*BCLASS_QUERY_INFORMATION)(PVOID Context,ULONG BatteryTag,BATTERY_QUERY_INFORMATION_LEVEL Level,LONG AtRate,PVOID Buffer,ULONG BufferLength,PULONG ReturnedLength);
typedef NTSTATUS (*BCLASS_QUERY_STATUS)(PVOID Context,ULONG BatteryTag,PBATTERY_STATUS BatteryStatus);
typedef NTSTATUS (*BCLASS_SET_STATUS_NOTIFY)(PVOID Context,ULONG BatteryTag,PBATTERY_NOTIFY BatteryNotify);
typedef NTSTATUS (*BCLASS_SET_INFORMATION)(PVOID Context,ULONG BatteryTag,BATTERY_SET_INFORMATION_LEVEL Level,PVOID Buffer);
typedef NTSTATUS (*BCLASS_DISABLE_STATUS_NOTIFY)(PVOID Context);

typedef struct {
  USHORT MajorVersion;
  USHORT MinorVersion;
  PVOID Context;
  BCLASS_QUERY_TAG QueryTag;
  BCLASS_QUERY_INFORMATION QueryInformation;
  BCLASS_SET_INFORMATION SetInformation;
  BCLASS_QUERY_STATUS QueryStatus;
  BCLASS_SET_STATUS_NOTIFY SetStatusNotify;
  BCLASS_DISABLE_STATUS_NOTIFY DisableStatusNotify;
  PDEVICE_OBJECT Pdo;
  PUNICODE_STRING DeviceName;
} BATTERY_MINIPORT_INFO,*PBATTERY_MINIPORT_INFO;

#define BATTERY_CLASS_MAJOR_VERSION 0x0001
#define BATTERY_CLASS_MINOR_VERSION 0x0000

typedef struct _BATTERY_WMI_STATUS {
  ULONG Tag;
  ULONG RemainingCapacity;
  LONG ChargeRate;
  LONG DischargeRate;
  ULONG Voltage;
  BOOLEAN PowerOnline;
  BOOLEAN Charging;
  BOOLEAN Discharging;
  BOOLEAN Critical;
} BATTERY_WMI_STATUS,*PBATTERY_WMI_STATUS;

typedef struct _BATTERY_WMI_RUNTIME {
  ULONG Tag;
  ULONG EstimatedRuntime;
} BATTERY_WMI_RUNTIME,*PBATTERY_WMI_RUNTIME;

typedef struct _BATTERY_WMI_TEMPERATURE {
  ULONG Tag;
  ULONG Temperature;
} BATTERY_WMI_TEMPERATURE,*PBATTERY_WMI_TEMPERATURE;

typedef struct _BATTERY_WMI_FULL_CHARGED_CAPACITY {
  ULONG Tag;
  ULONG FullChargedCapacity;
} BATTERY_WMI_FULL_CHARGED_CAPACITY,*PBATTERY_WMI_FULL_CHARGED_CAPACITY;

typedef struct _BATTERY_WMI_CYCLE_COUNT {
  ULONG Tag;
  ULONG CycleCount;
} BATTERY_WMI_CYCLE_COUNT,*PBATTERY_WMI_CYCLE_COUNT;

typedef struct _BATTERY_WMI_STATIC_DATA {
  ULONG Tag;
  WCHAR ManufactureDate[25];
  BATTERY_REPORTING_SCALE Granularity [4];
  ULONG Capabilities;
  UCHAR Technology;
  ULONG Chemistry;
  ULONG DesignedCapacity;
  ULONG DefaultAlert1;
  ULONG DefaultAlert2;
  ULONG CriticalBias;
  WCHAR Strings[1];
} BATTERY_WMI_STATIC_DATA,*PBATTERY_WMI_STATIC_DATA;

typedef struct _BATTERY_WMI_STATUS_CHANGE {
  ULONG Tag;
  BOOLEAN PowerOnline;
  BOOLEAN Charging;
  BOOLEAN Discharging;
  BOOLEAN Critical;
} BATTERY_WMI_STATUS_CHANGE,*PBATTERY_WMI_STATUS_CHANGE;

typedef struct _BATTERY_TAG_CHANGE {
  ULONG Tag;
} BATTERY_TAG_CHANGE,*PBATTERY_TAG_CHANGE;

#ifndef BATTERYCLASS
#define BATTERYCLASSAPI DECLSPEC_IMPORT
#else
#define BATTERYCLASSAPI
#endif

NTSTATUS BATTERYCLASSAPI BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,PVOID *ClassData);
NTSTATUS BATTERYCLASSAPI BatteryClassUnload(PVOID ClassData);
NTSTATUS BATTERYCLASSAPI BatteryClassIoctl(PVOID ClassData,PIRP Irp);
NTSTATUS BATTERYCLASSAPI BatteryClassSystemControl(PVOID ClassData,PVOID WmiLibContext,PDEVICE_OBJECT DeviceObject,PIRP Irp,PVOID Disposition);
NTSTATUS BATTERYCLASSAPI BatteryClassQueryWmiDataBlock(PVOID ClassData,PDEVICE_OBJECT DeviceObject,PIRP Irp,ULONG GuidIndex,PULONG InstanceLengthArray,ULONG OutBufferSize,PUCHAR Buffer);
NTSTATUS BATTERYCLASSAPI BatteryClassStatusNotify(PVOID ClassData);
#endif
#endif
