AudioHardwareDetect.cpp [plain text]
#include "AudioHardwareCommon.h"
#include "AudioHardwareConstants.h"
#include "AudioHardwareDetect.h"
#define super OSObject
OSDefineMetaClassAndStructors(AudioHardwareDetect, OSObject)
AudioHardwareDetect *AudioHardwareDetect::create(UInt32 cntrlID, AudioHardwareDetectInfo myInfo){
AudioHardwareDetect *myDetect;
if (kAudioHardwareDetectUnknown == myInfo.detectKind) {
myDetect = 0;
goto EXIT;
}
myDetect = new AudioHardwareDetect;
if(myDetect) {
if(!(myDetect->init(cntrlID, myInfo))){
myDetect->release();
myDetect = 0;
}
}
EXIT:
return myDetect;
}
bool AudioHardwareDetect::init(UInt32 cntrlID, AudioHardwareDetectInfo myInfo) {
if(!super::init())
return false;
dKind = myInfo.detectKind;
dDevice = myInfo.device;
dbitMask = myInfo.bitMask;
if(dKind == kAudioHardwareDetectInSense)
dbitMatch = myInfo.bitMatch;
else
dbitMatch = 0;
return(true);
}
void AudioHardwareDetect::free(){
super::free();
}
UInt32 AudioHardwareDetect::refreshDevices(UInt32 inSense){
UInt32 result;
switch(dKind) {
case kAudioHardwareDetectInSense:
if((inSense & dbitMask) == dbitMatch)
result = dDevice;
else
result = 0;
break;
case kAudioHardwareDetectAnyInSense:
if((inSense & dbitMask) != 0)
result = dDevice;
else
result = 0;
break;
case kAudioHardwareDetectGPIO: result = 0;
break;
case kAudioHardwareDetectUnknown:
default:
result = 0;
break;
}
ioLog();
if(0 != result){
CLOG(" --> Detect Activated\n");
}
return(result);
}
void AudioHardwareDetect::ioLog(){
#ifdef DEBUGLOG
debugIOLog( "+ Detect for device : ");
switch (dDevice) {
case kSndHWInternalSpeaker: debugIOLog("kSndHWInternalSpeaker\n"); break;
case kSndHWCPUHeadphone: debugIOLog("kSndHWCPUHeadphone\n"); break;
case kSndHWCPUExternalSpeaker: debugIOLog("kSndHWCPUExternalSpeaker\n");break;
case kSndHWCPUSubwoofer: debugIOLog("kSndHWCPUSubwoofer\n"); break;
case kSndHWCPUMicrophone: debugIOLog("kSndHWCPUMicrophone\n"); break;
case kSndHWCPUPlainTalk: debugIOLog("kSndHWCPUPlainTalk\n"); break;
case kSndHWMonitorHeadphone: debugIOLog("kSndHWMonitorHeadphone\n"); break;
case kSndHWMonitorPlainTalk: debugIOLog("kSndHWMonitorPlainTalk\n"); break;
case kSndHWModemRingDetect: debugIOLog("kSndHWModemRingDetect\n"); break;
case kSndHWModemLineCurrent: debugIOLog("kSndHWModemLineCurrent\n"); break;
case kSndHWModemESquared: debugIOLog("kSndHWModemESquared\n"); break;
default: break;
}
switch(dKind) {
case kAudioHardwareDetectInSense:
debugIOLog(" -- Type : InSense\n");
debug3IOLog(" -- Insense mask is %ld, insense match is %ld\n",dbitMask, dbitMatch );
break;
case kAudioHardwareDetectAnyInSense:
debugIOLog(" -- Type : AnyInSense\n");
debug2IOLog(" -- Insense mask is %ld \n",dbitMask);
break;
case kAudioHardwareDetectGPIO: debugIOLog(" -- Type : GPIO\n");
break;
case kAudioHardwareDetectUnknown:
default:
debugIOLog(" -- Type : Unknown\n");
break;
}
#endif
}