AppleTAS3004Audio.h [plain text]
#ifndef _APPLETAS3004AUDIO_H
#define _APPLETAS3004AUDIO_H
#include "TAS_hw.h"
#include "AppleDBDMAAudio.h"
#include "AppleOnboardAudio.h"
#include "AudioHardwareObjectInterface.h"
#include "AppleOnboardAudioUserClient.h"
class IORegistryEntry;
class AppleTAS3004Audio : public AudioHardwareObjectInterface
{
OSDeclareDefaultStructors(AppleTAS3004Audio);
private:
SInt32 minVolume;
SInt32 maxVolume;
Boolean gVolMuteActive;
Boolean headphonesActive;
Boolean lineOutActive;
Boolean headphonesConnected;
Boolean lineOutConnected;
Boolean dallasSpeakersConnected;
UInt32 layoutID; UInt32 familyID; UInt32 speakerID; UInt32 detectCollection;
TAS3004_ShadowReg shadowTAS3004Regs; TAS3004_ShadowReg standbyTAS3004Regs; Boolean mSemaphores;
UInt32 deviceID;
AppleOnboardAudio * mAudioDeviceProvider;
Boolean mTAS_WasDead;
Boolean mEQDisabled;
static const UInt8 kDEQAddress;
public:
virtual bool init (OSDictionary *properties);
virtual void free ();
virtual bool start (IOService * provider);
virtual bool willTerminate (IOService * provider, IOOptionBits options);
virtual bool requestTerminate (IOService * provider, IOOptionBits options);
virtual bool preDMAEngineInit () ;
virtual void initPlugin (PlatformInterface* inPlatformObject);
virtual UInt32 getActiveOutput (void);
virtual IOReturn setActiveOutput (UInt32 outputPort);
virtual UInt32 getActiveInput (void);
virtual IOReturn setActiveInput (UInt32 input);
virtual IOReturn setCodecMute (bool mutestate); virtual IOReturn setCodecMute (bool muteState, UInt32 streamType); virtual bool hasAnalogMute (); virtual UInt32 getMaximumdBVolume (void);
virtual UInt32 getMinimumdBVolume (void);
virtual UInt32 getMaximumVolume (void);
virtual UInt32 getMinimumVolume (void);
virtual UInt32 getMaximumdBGain (void);
virtual UInt32 getMinimumdBGain (void);
virtual UInt32 getMaximumGain (void);
virtual UInt32 getMinimumGain (void);
virtual UInt32 getDefaultInputGain (void);
virtual bool setCodecVolume (UInt32 leftVolume, UInt32 rightVolume);
virtual IOReturn setPlayThrough (bool playthroughstate);
virtual void setEQProcessing (void * inEQStructure, Boolean inRealtime);
virtual void setDRCProcessing (void * inDRCStructure, Boolean inRealtime);
virtual void disableProcessing (Boolean inRealtime);
virtual void enableProcessing (void);
virtual void notifyHardwareEvent ( UInt32 statusSelector, UInt32 newValue ) { return; }
virtual IOReturn recoverFromFatalError ( FatalRecoverySelector selector );
virtual IOReturn performDeviceWake ();
virtual IOReturn performDeviceSleep ();
virtual IOReturn setSampleRate ( UInt32 sampleRate );
virtual IOReturn setSampleDepth ( UInt32 sampleDepth );
virtual UInt32 getClockLock ( void ) { return 0; }
virtual IOReturn breakClockSelect ( UInt32 clockSource );
virtual IOReturn makeClockSelect ( UInt32 clockSource );
virtual void poll ( void ) { return; }
virtual IOReturn getPluginState ( HardwarePluginDescriptorPtr outState );
virtual IOReturn setPluginState ( HardwarePluginDescriptorPtr inState );
virtual HardwarePluginType getPluginType ( void );
private:
IOReturn SetVolumeCoefficients (UInt32 left, UInt32 right);
IOReturn SetAmplifierMuteState (UInt32 ampID, Boolean muteState);
IOReturn InitEQSerialMode (UInt32 mode);
IOReturn GetShadowRegisterInfo( TAS3004_ShadowReg * shadowRegsPtr, UInt8 regAddr, UInt8 ** shadowPtr, UInt8* registerSize );
IOReturn CODEC_Initialize ();
void CODEC_Reset ( void );
IOReturn CODEC_ReadRegister (UInt8 regAddr, UInt8* registerData);
IOReturn CODEC_WriteRegister (UInt8 regAddr, UInt8* registerData, UInt8 mode);
void SetBiquadInfoToUnityAllPass (void);
void SetUnityGainAllPass (void);
IOReturn BuildCustomEQCoefficients ( void * eqPrefs );
IOReturn SndHWSetOutputBiquad( UInt32 streamID, UInt32 biquadRefNum, FourDotTwenty *biquadCoefficients );
IOReturn SndHWSetOutputBiquadGroup( UInt32 biquadFilterCount, FourDotTwenty *biquadCoefficients );
IOReturn SetOutputBiquadCoefficients (UInt32 streamID, UInt32 biquadRefNum, UInt8 *biquadCoefficients);
IOReturn setBiquadCoefficients ( void * biquadCoefficients );
IOReturn SetAnalogPowerDownMode( UInt8 mode );
IOReturn ToggleAnalogPowerDownWake( void );
IORegistryEntry * FindEntryByProperty (const IORegistryEntry * start, const char * key, const char * value);
IORegistryEntry * FindEntryByNameAndProperty (const IORegistryEntry * start, const char * name, const char * key, UInt32 value);
Boolean HasInput (void);
enum {
kMaximumVolume = 141,
kMinimumVolume = 0,
kInitialVolume = 101
};
enum {
kInternalSpeakerActive = 1,
kHeadphonesActive = 2,
kExternalSpeakersActive = 4
};
EQPrefsElement mEQPref;
};
#endif