211 lines
3.8 KiB
C++
211 lines
3.8 KiB
C++
|
/* Copyright 1999 American Power Conversion, All Rights Reserverd
|
||
|
*
|
||
|
* Description:
|
||
|
* DLL entry points for the APC UpsMiniDriver interface
|
||
|
* Creates a single instance of an ApcMiniDriver class
|
||
|
* and forwards all requests to this object
|
||
|
*
|
||
|
* Revision History:
|
||
|
* mholly 14Apr1999 Created
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include "cdefine.h"
|
||
|
|
||
|
#include <windows.h>
|
||
|
|
||
|
|
||
|
|
||
|
#include "apcups.h"
|
||
|
#include "apcdrvr.h"
|
||
|
|
||
|
//
|
||
|
// _theDriver
|
||
|
//
|
||
|
// Each process that attaches to this DLL will
|
||
|
// get its own copy of _theDriver. _theDriver
|
||
|
// is an instance of the class ApcMiniDriver.
|
||
|
// The ApcMiniDriver class provides support for
|
||
|
// APC "smart" signalling UPS systems
|
||
|
//
|
||
|
ApcMiniDriver _theDriver;
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* DllMain
|
||
|
*
|
||
|
* Description:
|
||
|
* This method is called when the DLL is loaded
|
||
|
* We do not make use of this method
|
||
|
*
|
||
|
* Parameters:
|
||
|
* not used
|
||
|
* Returns:
|
||
|
* TRUE
|
||
|
*
|
||
|
*/
|
||
|
BOOL APIENTRY DllMain( HANDLE hModule,
|
||
|
DWORD ul_reason_for_call,
|
||
|
LPVOID lpReserved
|
||
|
)
|
||
|
{
|
||
|
switch (ul_reason_for_call)
|
||
|
{
|
||
|
case DLL_PROCESS_ATTACH:
|
||
|
case DLL_THREAD_ATTACH:
|
||
|
case DLL_THREAD_DETACH:
|
||
|
case DLL_PROCESS_DETACH:
|
||
|
break;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* UPSInit
|
||
|
*
|
||
|
* Description:
|
||
|
* Must be the first method called in the interface -
|
||
|
* forwards call to ApcMiniDriver::UPSInit
|
||
|
*
|
||
|
* Parameters:
|
||
|
* aCommPort: comm port that the UPS is connected
|
||
|
*
|
||
|
* Returns:
|
||
|
* UPS_INITOK: successful initialization
|
||
|
* UPS_INITUNKNOWNERROR: failed initialization
|
||
|
*
|
||
|
*/
|
||
|
DWORD UPSInit()
|
||
|
{
|
||
|
return _theDriver.UPSInit();
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* UPSStop
|
||
|
*
|
||
|
* Description:
|
||
|
* stops monitoring of the UPS - the only valid
|
||
|
* interface after a call to UPSStop is UPSInit
|
||
|
*
|
||
|
* Parameters:
|
||
|
* None
|
||
|
*
|
||
|
* Returns:
|
||
|
* None
|
||
|
*
|
||
|
*/
|
||
|
void UPSStop(void)
|
||
|
{
|
||
|
_theDriver.UPSStop();
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* UPSWaitForStateChange
|
||
|
*
|
||
|
* Description:
|
||
|
* Blocks until the state of the UPS differs
|
||
|
* from the value passed in via aState or
|
||
|
* anInterval milliseconds has expired. If
|
||
|
* anInterval has a value of INFINITE this
|
||
|
* function will never timeout
|
||
|
*
|
||
|
* Parameters:
|
||
|
* aState: defines the state to wait for a change from,
|
||
|
* possible values:
|
||
|
* UPS_ONLINE
|
||
|
* UPS_ONBATTERY
|
||
|
* UPS_LOWBATTERY
|
||
|
* UPS_NOCOMM
|
||
|
*
|
||
|
* anInterval: timeout in milliseconds, or INFINITE for
|
||
|
* no timeout interval
|
||
|
*
|
||
|
* Returns:
|
||
|
* None
|
||
|
*
|
||
|
*/
|
||
|
void UPSWaitForStateChange(DWORD aState, DWORD anInterval)
|
||
|
{
|
||
|
_theDriver.UPSWaitForStateChange(aState, anInterval);
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* UPSGetState
|
||
|
*
|
||
|
* Description:
|
||
|
* returns the current state of the UPS
|
||
|
*
|
||
|
* Parameters:
|
||
|
* None
|
||
|
*
|
||
|
* Returns:
|
||
|
* possible values:
|
||
|
* UPS_ONLINE
|
||
|
* UPS_ONBATTERY
|
||
|
* UPS_LOWBATTERY
|
||
|
* UPS_NOCOMM
|
||
|
*
|
||
|
*/
|
||
|
DWORD UPSGetState(void)
|
||
|
{
|
||
|
return _theDriver.UPSGetState();
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* UPSCancelWait
|
||
|
*
|
||
|
* Description:
|
||
|
* interrupts pending calls to UPSWaitForStateChange
|
||
|
* without regard to timout or state change
|
||
|
*
|
||
|
* Parameters:
|
||
|
* None
|
||
|
*
|
||
|
* Returns:
|
||
|
* None
|
||
|
*
|
||
|
*/
|
||
|
void UPSCancelWait(void)
|
||
|
{
|
||
|
_theDriver.UPSCancelWait();
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* UPSTurnOff
|
||
|
*
|
||
|
* Description:
|
||
|
* Attempts to turn off the outlets on the UPS
|
||
|
* after the specified delay. This method querries the
|
||
|
* UPS for the allowed shutdown delays and sets the
|
||
|
* delay to one of the following:
|
||
|
* 1. aTurnOffDelay if it exactly matches one of the allowed values
|
||
|
* 2. the next highest value after aTurnOffDelay, if one exists
|
||
|
* 3. the highest allowed value, if aTurnOffDelay is larger than all of
|
||
|
* the allowed values.
|
||
|
* If no allowed values are returned, the Shutdown Delay will not be set.
|
||
|
* Next the UPS is instructed to sleep until power is restored.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* aTurnOffDelay: the minimum amount of time to wait before
|
||
|
* turning off the outlets on the UPS
|
||
|
*
|
||
|
* Returns:
|
||
|
* None
|
||
|
*
|
||
|
*/
|
||
|
void UPSTurnOff(DWORD aTurnOffDelay)
|
||
|
{
|
||
|
_theDriver.UPSTurnOff(aTurnOffDelay);
|
||
|
}
|
||
|
|
||
|
|
||
|
|