然後 OS 就會依照需要用IOControl 的 IOCTL_POWER_SET 控制 driver 的Power State。
像 WAVEDEV ,在 Capability 時report D0(Normal), D2(Standby), D4(PowerOff)。
所以 ,,, 系統啟動後,在沒有聲音播出時,會將WAVEDEV設在D2 (standby)state,只有在有聲音播出時,才會設為 D0 (Normal) state。
所以... tap screen 的 "doo-doo-"聲,就會反覆 D0--D2, D0--D2, 然後PowerOff時,就會進入D4。
也就是說.... D0 就是 "現在要撥聲音了"... D2 就是 "現在聲音撥完了"。
另外,driver不可以自己改變power state,一定要由OS設定,Driver若是想要改變powerstate,要用
DevicePowerNotify(_T("WAV1:"), (_CEDEVICE_POWER_STATE)D2, POWER_NAME);通知OS,然後OS就會用IOControl 叫 Driver變更 PowerState。
像:Driver Open 時,就要Notify OS 改變Power State為D0。
Driver Close時,要Notify OS改變Power State為D2。
沒有留言:
張貼留言