2012-04-09 20 views
3

我們有一個類似於聲音花的虛擬音頻設備驅動程序。此虛擬設備將列入聲音系統首選項中。只要我們的設備在系統偏好設置中被選中,它就可以防止空閒睡眠。如果我們將選擇切換到默認輸出設備,一切都按預期工作。從音頻虛擬驅動程序處理空閒睡眠 - Mac OSX

如果我們執行「pmset -g斷言」在終端命令,它提供了以下輸出

Assertion status system-wide: 
    ChargeInhibit       0 
    PreventUserIdleDisplaySleep    0 
    PreventUserIdleSystemSleep    1 
    NoRealPowerSources_debug    0 
    CPUBoundAssertion      0 
    EnableIdleSleep       1 
    PreventSystemSleep      0 
    DisableInflow       0 
    DisableLowPowerBatteryWarnings   0 
    ExternalMedia       0 

Listed by owning process: 

    pid 115: [0x0000012c00000073] PreventUserIdleSystemSleep named: MY_DRIVER_IDENTIFER.noidlesleep" 

可以在任何一個建議我一些指引,以解決此問題。

回答

1

認爲這款由標誌kIOPMPreventIdleSleep,它駐留在IOPMPowerState structcapabilityFlags場管轄。

要參與電源管理決策,您需要將您的設備驅動程序添加到電源管理平面,通常在你重寫IOService::start(provider)方法:

PMinit(); 
provider->joinPMtree(this); 
registerPowerDriver(this, powerStates, numPowerStates); 

其中powerStatesnumPowerStates指定電源狀態的陣列你希望你的設備能夠進入。虛擬設備可能不會超過2個,也許你甚至只需要一個。我懷疑你的班級的一個超類設置了禁止睡眠的狀態。一旦您註冊了電源管理,您的驅動程序將需要處理電源管理方法,例如IOService::setPowerState()

根據您希望設備的行爲方式,您可能需要創建2個電源狀態,其中一個在播放或捕捉聲音時(「禁止睡眠」),另一個在設備不工作時「空閒」做任何事情,並允許睡眠。

電源管理主題有點太大,無法完全覆蓋StackOverflow答案,所以我建議你閱讀上面提到的文檔,並嘗試清除電源狀態下的相關標誌。

希望有所幫助。

相關問題