3.19.2008

wavedev : to know playing sound or not

一般device driver 藉由 IOControl 的 IOCTL_POWER_CAPABILITIES 回報自己support 的 power state (D0 ~ D4)。
然後 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。

沒有留言: