/* *@@sourcefile apmh.h: * header file for apmh.c. * * Note: Version numbering in this file relates to XWorkplace version * numbering. * *@@include #include *@@include #include "helpers\apmh.h" */ /* Copyright (C) 1998-2001 Ulrich M”ller. * This file is part of the "XWorkplace helpers" source package. * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, in version 2 as it comes in the * "COPYING" file of the XWorkplace main distribution. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #if __cplusplus extern "C" { #endif #ifndef APMH_HEADER_INCLUDED #define APMH_HEADER_INCLUDED /* ****************************************************************** * * APM definitions (from DDK) * ********************************************************************/ /*---------------------------------------------------------------------------* * Category 12 (Power Management) IOCtl Function Codes * *---------------------------------------------------------------------------*/ #define APMGIO_Category 12 // Generic IOCtl Category for APM. #define APMGIO_SendEvent 0x40 // Function Codes. #define APMGIO_SetEventSem 0x41 #define APMGIO_ConfirmEvent 0x42 // 0x42 is UNDOCUMENTED. #define APMGIO_BroadcastEvent 0x43 // 0x43 is UNDOCUMENTED. #define APMGIO_RegDaemonThread 0x44 // 0x44 is UNDOCUMENTED. #define APMGIO_OEMFunction 0x45 #define APMGIO_QueryStatus 0x60 #define APMGIO_QueryEvent 0x61 #define APMGIO_QueryInfo 0x62 #define APMGIO_QueryState 0x63 #pragma pack(1) /*---------------------------------------------------------------------------* * Function 0x60, Query Power Status * * Reference MS/Intel APM specification for interpretation of status codes. * *---------------------------------------------------------------------------*/ typedef struct _APMGIO_QSTATUS_PPKT // Parameter Packet. { USHORT ParmLength; // Length, in bytes, of the Parm Packet. USHORT Flags; // Output: Flags. UCHAR ACStatus; // Output: 0x00 if not on AC, // 0x01 if AC, // 0x02 if on backup power, // 0xFF if unknown UCHAR BatteryStatus; // Output: 0x00 if battery high, // 0x01 if battery low, // 0x02 if battery critically low, // 0x03 if battery charging // 0xFF if unknown UCHAR BatteryLife; // Output: Battery power life (as percentage) UCHAR BatteryTimeForm; // Output: // 0x00 if format is seconds, // 0x01 if format is minutes, // 0xFF if unknown USHORT BatteryTime; // Output: Remaining battery time. UCHAR BatteryFlags; // Output: Battery status flags } APMGIO_QSTATUS_PPKT, *NPAPMGIO_QSTATUS_PPKT, FAR *PAPMGIO_QSTATUS_PPKT; typedef struct _APMGIO_10_QSTATUS_PPKT { // Parameter Packet for // APM 1.0 interface USHORT ParmLength; // Length, in bytes, of the Parm Packet. USHORT Flags; // Output: Flags. UCHAR ACStatus; // Output: AC line power status. UCHAR BatteryStatus; // Output: Battery power status UCHAR BatteryLife; // Output: Battery power status } APMGIO_10_QSTATUS_PPKT; // Error return codes. #define GIOERR_PowerNoError 0 #define GIOERR_PowerBadSubId 1 #define GIOERR_PowerBadReserved 2 #define GIOERR_PowerBadDevId 3 #define GIOERR_PowerBadPwrState 4 #define GIOERR_PowerSemAlreadySetup 5 #define GIOERR_PowerBadFlags 6 #define GIOERR_PowerBadSemHandle 7 #define GIOERR_PowerBadLength 8 #define GIOERR_PowerDisabled 9 #define GIOERR_PowerNoEventQueue 10 #define GIOERR_PowerTooManyQueues 11 #define GIOERR_PowerBiosError 12 #define GIOERR_PowerBadSemaphore 13 #define GIOERR_PowerQueueOverflow 14 #define GIOERR_PowerStateChangeReject 15 #define GIOERR_PowerNotSupported 16 #define GIOERR_PowerDisengaged 17 #define GIOERR_PowerHighestErrCode 17 typedef struct _APMGIO_DPKT { USHORT ReturnCode; } APMGIO_DPKT, *NPAPMGIO_DPKT, FAR *PAPMGIO_DPKT; /* * define constants and type for APM function */ #define POWER_SUBID_ENABLE_APM 0x0003 #define POWER_SUBID_SET_POWER_STATE 0x0006 #define POWER_DEVID_ALL_DEVICES 0x0001 #define POWER_STATE_OFF 0x0003 #define BIOSFLAG_APMSUPPORTED 0x0008 typedef struct { USHORT usSubID; USHORT usReserved; USHORT usData1; USHORT usData2; } SENDPOWEREVENT; typedef struct { USHORT usParmLength; USHORT usBIOSFlags; USHORT usBIOSVersion; USHORT usDriverVersion; } GETPOWERINFO; #pragma pack() /* ****************************************************************** * * APM helper APIs * ********************************************************************/ #pragma pack(1) /* *@@ APM: * APM monitor data returned from apmhOpen. * *@@added V0.9.14 (2001-08-01) [umoeller] *@@changed V0.9.19 (2002-05-28) [umoeller]: added fUsingAC */ typedef struct _APM { HFILE hfAPMSys; USHORT usBIOSVersion, usDriverVersion, usLowestAPMVersion; BYTE fAlreadyRead; // TRUE after the first call to aphReadStatus // the following are valid after a call to apmhReadStatus // Note: According to Eirik, his laptop did not return // bBatteryStatus == 0x03 after the battery had finished // charging. So bBatteryStatus cannot be used to determine // whether the system is running on AC or not. Hence the // addition of fUsingAC. // V0.9.19 (2002-05-28) [umoeller] BYTE fUsingAC; // 0x00 if not on AC, // 0x01 if AC, // 0x02 if on backup power, // 0xFF if unknown BYTE bBatteryStatus; // copy of APM battery status, that is: // Output: 0x00 if battery high, // 0x01 if battery low, // 0x02 if battery critically low, // 0x03 if battery charging // 0xFF if unknown BYTE bBatteryLife; // current battery life as percentage (0-100) } APM, *PAPM; #pragma pack() APIRET APIENTRY apmhIOCtl(HFILE hfAPMSys, ULONG ulFunction, PVOID pvParamPck, ULONG cbParamPck); typedef APIRET APIENTRY APMHIOCTL(HFILE hfAPMSys, ULONG ulFunction, PVOID pvParamPck, ULONG cbParamPck); typedef APMHIOCTL *PAPMHIOCTL; APIRET APIENTRY apmhOpen(PAPM *ppApm); typedef APIRET APIENTRY APMHOPEN(PAPM *ppApm); typedef APMHOPEN *PAPMHOPEN; APIRET APIENTRY apmhReadStatus(PAPM pApm, PBOOL pfChanged); typedef APIRET APIENTRY APMHREADSTATUS(PAPM pApm, PBOOL pfChanged); typedef APMHREADSTATUS *PAPMHREADSTATUS; VOID APIENTRY apmhClose(PAPM *ppApm); typedef VOID APIENTRY APMHCLOSE(PAPM *ppApm); typedef APMHCLOSE *PAPMHCLOSE; BOOL apmhHasBattery(VOID); #endif #if __cplusplus } #endif