本文整理汇总了C++中IOService::callPlatformFunction方法的典型用法代码示例。如果您正苦于以下问题:C++ IOService::callPlatformFunction方法的具体用法?C++ IOService::callPlatformFunction怎么用?C++ IOService::callPlatformFunction使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IOService
的用法示例。
在下文中一共展示了IOService::callPlatformFunction方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: debugIOLog
IOReturn AudioProj7PowerObject::setHardwarePowerOn(){
debugIOLog (3, "+ AudioProj7PowerObject::setHardwarePowerOn");
IOReturn result = kIOReturnSuccess;
UInt32 progOut;
IOService *keyLargo = 0;
keyLargo = IOService::waitForService(IOService::serviceMatching("KeyLargo"));
if(keyLargo){
long gpioOffset = kPowerObjectOffset;
UInt8 value = kPowerOn;
keyLargo->callPlatformFunction("keyLargo_writeRegUInt8", false, (void *)&gpioOffset, (void *)(UInt32)value, 0, 0);
}
if(audioPluginRef) {
IOSleep(300); // we need to wait to be sure that the antipop has the time to do his stuff
progOut = audioPluginRef->sndHWGetProgOutput();
progOut |= kSndHWProgOutput0;
audioPluginRef->sndHWSetProgOutput(progOut);
}
if(audioPluginRef) {
audioPluginRef->sndHWSetPowerState(kIOAudioDeviceActive);
audioPluginRef->setDeviceDetectionActive();
}
debugIOLog (3, "- AudioProj7PowerObject::setHardwarePowerOn");
return result;
}
示例2:
// Access to Keylargo registers:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// [3110829] register accesses need to translate endian format.
void AudioI2SControl::KLSetRegister(UInt32 klRegisterOffset, UInt32 value)
{
IOService * keyLargoService = NULL;
UInt32 mask = kAudioFCR1Mask;
const OSSymbol * theSymbol;
theSymbol = OSSymbol::withCString ("keyLargo_safeWriteRegUInt32");
keyLargoService = IOService::waitForService (IOService::serviceMatching ("KeyLargo"));
if (keyLargoService && theSymbol) {
keyLargoService->callPlatformFunction (theSymbol, false, (void *)klRegisterOffset, (void *)mask, (void *) value, 0);
theSymbol->release ();
}
}
示例3: IOCopyMediaForDev
static IOReturn
IOGetVolumeCryptKey(dev_t block_dev, OSString ** pKeyUUID,
uint8_t * volumeCryptKey, size_t keySize)
{
IOReturn err;
IOService * part;
OSString * keyUUID = 0;
OSString * keyStoreUUID = 0;
uuid_t volumeKeyUUID;
aks_volume_key_t vek;
static IOService * sKeyStore;
part = IOCopyMediaForDev(block_dev);
if (!part) return (kIOReturnNotFound);
err = part->callPlatformFunction(PLATFORM_FUNCTION_GET_MEDIA_ENCRYPTION_KEY_UUID, false,
(void *) &keyUUID, (void *) &keyStoreUUID, NULL, NULL);
if ((kIOReturnSuccess == err) && keyUUID && keyStoreUUID)
{
// IOLog("got volume key %s\n", keyStoreUUID->getCStringNoCopy());
if (!sKeyStore)
sKeyStore = (IOService *) IORegistryEntry::fromPath(AKS_SERVICE_PATH, gIOServicePlane);
if (sKeyStore)
err = uuid_parse(keyStoreUUID->getCStringNoCopy(), volumeKeyUUID);
else
err = kIOReturnNoResources;
if (kIOReturnSuccess == err)
err = sKeyStore->callPlatformFunction(gAKSGetKey, true, volumeKeyUUID, &vek, NULL, NULL);
if (kIOReturnSuccess != err)
IOLog("volume key err 0x%x\n", err);
else
{
if (vek.key.keybytecount < keySize) keySize = vek.key.keybytecount;
bcopy(&vek.key.keybytes[0], volumeCryptKey, keySize);
}
bzero(&vek, sizeof(vek));
}
part->release();
if (pKeyUUID) *pKeyUUID = keyUUID;
return (err);
}
示例4: switch
// --------------------------------------------------------------------------
// Method: setSerialFormatRegister ::Set global values to the serial format register
void AudioI2SControl::setSerialFormatRegister(ClockSource clockSource, UInt32 mclkDivisor, UInt32 sclkDivisor, SoundFormat serialFormat, UInt32 newDataFormat)
{
UInt32 regValue = 0;
IOService * keyLargo;
IOReturn err;
const OSSymbol* funcSymbolName = NULL; // [3323977]
err = kIOReturnError;
switch ((int)clockSource) {
case kClock18MHz: regValue = kClockSource18MHz; break;
case kClock45MHz: regValue = kClockSource45MHz; break;
case kClock49MHz: regValue = kClockSource49MHz; break;
default: break;
}
switch (mclkDivisor) {
case 1: regValue |= kMClkDivisor1; break;
case 3: regValue |= kMClkDivisor3; break;
case 5: regValue |= kMClkDivisor5; break;
default: regValue |= (((mclkDivisor / 2) - 1) << kMClkDivisorShift) & kMClkDivisorMask; break;
}
switch ((int)sclkDivisor) { // sclk is equivalent to Bclk
case 1: regValue |= kSClkDivisor1; break;
case 3: regValue |= kSClkDivisor3; break;
default: regValue |= (((sclkDivisor / 2) - 1) << kSClkDivisorShift) & kSClkDivisorMask; break;
}
regValue |= kSClkMaster; // force master mode
switch (serialFormat) {
case kSndIOFormatI2SSony: regValue |= kSerialFormatSony; break;
case kSndIOFormatI2S64x: regValue |= kSerialFormat64x; break;
case kSndIOFormatI2S32x: regValue |= kSerialFormat32x; break;
default: break;
}
// This is a 3 step process:
// 1] Stop the clock:
clockRun(false);
keyLargo = NULL;
keyLargo = IOService::waitForService (IOService::serviceMatching ("KeyLargo"));
if (NULL != keyLargo) {
funcSymbolName = OSSymbol::withCString ( "keyLargo_powerI2S" ); // [3323977]
FailIf ( NULL == funcSymbolName, Exit ); // [3323977]
// ...turn on the i2s clocks...
switch ( i2SInterfaceNumber ) {
case kUseI2SCell0: err = keyLargo->callPlatformFunction (funcSymbolName, false, (void *)true, (void *)0, 0, 0); break; // [3323977]
case kUseI2SCell1: err = keyLargo->callPlatformFunction (funcSymbolName, false, (void *)true, (void *)1, 0, 0); break; // [3323977]
}
funcSymbolName->release (); // [3323977]
if ( kIOReturnSuccess != err ) {
debugIOLog (1, "keyLargo->callPlatformFunction FAIL" );
}
}
// 2 Setup the serial format register & data format register
SetSerialFormatReg ( regValue );
dataFormat = newDataFormat; // [3060321] save this to verify value that was used to init!
SetDataWordSizesReg ( dataFormat ); // [3060321] rbm 2 Oct 2002 MUST OCCUR WHILE CLOCK IS STOPPED
// 3 restarts the clock:
clockRun(true);
Exit:
return;
}