IOPlatformPIDCtrlLoop.h [plain text]
#ifndef _IOPLATFORMPIDCTRLLOOP_H
#define _IOPLATFORMPIDCTRLLOOP_H
#include "IOPlatformCtrlLoop.h"
#define kIOPPIDCtrlLoopDefaultHistLen 5
#define kIOPPIDCtrlLoopProportionalGainKey "G_p"
#define kIOPPIDCtrlLoopDerivativeGainKey "G_d"
#define kIOPPIDCtrlLoopResetGainKey "G_r"
#define kIOPPIDCtrlLoopIntervalKey "interval"
#define kIOPPIDCtrlLoopInputTargetKey "input-target"
#define kIOPPIDCtrlLoopInputMaxKey "input-max"
#define kIOPPIDCtrlLoopOutputMaxKey "output-max"
#define kIOPPIDCtrlLoopOutputMinKey "output-min"
#define kIOPPIDCtrlLoopOutputOverrideKey "output-override"
#define kIOPPIDCtrlLoopHistoryLenKey "history-length"
class IOPlatformPIDCtrlLoop : public IOPlatformCtrlLoop
{
OSDeclareDefaultStructors(IOPlatformPIDCtrlLoop)
protected:
typedef struct _samplePoint
{
SensorValue sample;
SensorValue error;
} samplePoint;
IOPlatformSensor * inputSensor;
IOPlatformControl * outputControl;
unsigned int historyLen;
unsigned int latestSample;
samplePoint *historyArray;
bool acquireSample( void ); samplePoint * sampleAtIndex( unsigned int index ) const;
SInt32 G_p, G_d, G_r;
AbsoluteTime interval;
UInt32 intervalSec;
SensorValue inputTarget;
UInt32 outputMin, outputMax;
bool overrideActive;
const OSNumber * outputOverride;
bool timerCallbackActive;
virtual ControlValue calculateNewTarget( void ) const;
virtual SensorValue calculateDerivativeTerm( void ) const;
virtual SensorValue calculateIntegralTerm( void ) const;
virtual bool init( void );
virtual void free( void );
virtual SensorValue getAggregateSensorValue( void );
virtual bool cacheMetaState( const OSDictionary * metaState );
public:
virtual IOReturn initPlatformCtrlLoop(const OSDictionary *dict);
virtual bool updateMetaState( void );
virtual void adjustControls( void );
virtual void deadlinePassed( void );
virtual void sendNewTarget( ControlValue newTarget );
virtual void sensorRegistered( IOPlatformSensor * aSensor );
virtual void controlRegistered( IOPlatformControl * aControl );
virtual void didWake( void );
};
#endif // _IOPLATFORMPIDCTRLLOOP_H