#include <batclass.h>
#include <acpiioct.h>
#include <wmilib.h>
+#include <wdmguid.h>
#include <debug.h>
+#define IOCTL_BATTERY_QUERY_UNIQUE_ID \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x101, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294404
+
+#define IOCTL_BATTERY_QUERY_STA \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x102, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294408
+
+#define IOCTL_BATTERY_QUERY_PSR \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x103, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x29440C
+
+#define IOCTL_BATTERY_SET_TRIP_POINT \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x104, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294410
+
+#define IOCTL_BATTERY_QUERY_BIF \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x105, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294414
+
+#define IOCTL_BATTERY_QUERY_BST \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x106, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294418
+
#define CMBATT_GENERIC_STATUS 0x01
#define CMBATT_GENERIC_INFO 0x02
#define CMBATT_GENERIC_WARNING 0x04
CmBattBattery
} CMBATT_EXTENSION_TYPE;
+#define ACPI_BUS_CHECK 0x00
+#define ACPI_DEVICE_CHECK 0x01
+
+#define ACPI_STA_PRESENT 0x01
+#define ACPI_STA_ENABLED 0x02
+#define ACPI_STA_SHOW_UI 0x04
+#define ACPI_STA_FUNCTIONAL 0x08
+#define ACPI_STA_BATTERY_PRESENT 0x10
+
+#define ACPI_BATT_NOTIFY_STATUS 0x80
+#define ACPI_BATT_NOTIFY_INFO 0x81
+
+#define ACPI_BATT_STAT_DISCHARG 0x0001
+#define ACPI_BATT_STAT_CHARGING 0x0002
+#define ACPI_BATT_STAT_CRITICAL 0x0004
+
+#define CM_MAX_VALUE 0x7FFFFFFF
+#define CM_UNKNOWN_VALUE 0xFFFFFFFF
+
typedef struct _ACPI_BST_DATA
{
ULONG State;
ULONG PresentVoltage;
} ACPI_BST_DATA, *PACPI_BST_DATA;
+#define ACPI_BATT_POWER_UNIT_WATTS 0x0
+#define ACPI_BATT_POWER_UNIT_AMPS 0x1
+
typedef struct _ACPI_BIF_DATA
{
ULONG PowerUnit;
CHAR OemInfo[256];
} ACPI_BIF_DATA, *PACPI_BIF_DATA;
+#define CMBATT_AR_NOTIFY 0x01
+#define CMBATT_AR_INSERT 0x02
+#define CMBATT_AR_REMOVE 0x04
+
typedef struct _CMBATT_DEVICE_EXTENSION
{
CMBATT_EXTENSION_TYPE FdoType;
PIRP PowerIrp;
POWER_STATE PowerState;
WMILIB_CONTEXT WmiLibInfo;
- ULONG WaitWakeEnable;
- ULONG WmiCount;
- KEVENT WmiEvent;
+ BOOLEAN WaitWakeEnable;
+ IO_REMOVE_LOCK RemoveLock;
ULONG DeviceId;
PUNICODE_STRING DeviceName;
- ACPI_INTERFACE_STANDARD2 AcpiInterface;
- BOOLEAN DelayAr;
- BOOLEAN DelayedArFlag;
+ ACPI_INTERFACE_STANDARD AcpiInterface;
+ BOOLEAN DelayNotification;
+ BOOLEAN ArFlag;
PVOID ClassData;
BOOLEAN Started;
BOOLEAN NotifySent;
- ULONG ArLock;
+ LONG ArLockValue;
ULONG TagData;
ULONG Tag;
ULONG ModelNumberLength;
ULONG RemainingCapacity;
ULONG PresentVoltage;
ULONG Rate;
- BATTERY_INFORMATION StaticBatteryInformation;
+ BATTERY_INFORMATION BatteryInformation;
ULONG BatteryCapacityGranularity1;
ULONG BatteryCapacityGranularity2;
BOOLEAN TripPointSet;
PDEVICE_OBJECT DeviceObject,
PIRP Irp
);
-
+
+NTSTATUS
+NTAPI
+CmBattGetBstData(
+ PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ PACPI_BST_DATA BstData
+);
+
+NTSTATUS
+NTAPI
+CmBattGetPsrData(
+ PDEVICE_OBJECT DeviceObject,
+ PULONG PsrData
+);
+
+NTSTATUS
+NTAPI
+CmBattGetStaData(
+ PDEVICE_OBJECT DeviceObject,
+ PULONG StaData
+);
+
+NTSTATUS
+NTAPI
+CmBattGetBifData(
+ PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ PACPI_BIF_DATA BifData
+);
+
+NTSTATUS
+NTAPI
+CmBattSetTripPpoint(
+ PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ ULONG AlarmValue
+);
+
+VOID
+NTAPI
+CmBattNotifyHandler(
+ IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG NotifyValue
+);
+
+NTSTATUS
+NTAPI
+CmBattWmiDeRegistration(
+ PCMBATT_DEVICE_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+CmBattWmiRegistration(
+ PCMBATT_DEVICE_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+CmBattGetUniqueId(
+ PDEVICE_OBJECT DeviceObject,
+ PULONG UniqueId
+);
+
+NTSTATUS
+NTAPI
+CmBattQueryInformation(
+ IN PCMBATT_DEVICE_EXTENSION FdoExtension,
+ IN ULONG Tag,
+ IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel,
+ IN OPTIONAL LONG AtRate,
+ IN PVOID Buffer,
+ IN ULONG BufferLength,
+ OUT PULONG ReturnedLength
+);
+
+NTSTATUS
+NTAPI
+CmBattQueryStatus(
+ IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG Tag,
+ IN PBATTERY_STATUS BatteryStatus
+);
+
+NTSTATUS
+NTAPI
+CmBattSetStatusNotify(
+ IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG BatteryTag,
+ IN PBATTERY_NOTIFY BatteryNotify
+);
+
+NTSTATUS
+NTAPI
+CmBattDisableStatusNotify(
+ IN PCMBATT_DEVICE_EXTENSION DeviceExtension
+);
+
+NTSTATUS
+NTAPI
+CmBattQueryTag(
+ IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
+ OUT PULONG Tag
+);
+
+extern PDEVICE_OBJECT AcAdapterPdo;
+extern ULONG CmBattDebug;
+
/* EOF */