Modifiche di alimentazione e stato in AVStream
Quando AVStream riceve una richiesta di IRP_MN_SET_POWER , chiama una routine di callback AVStrMiniDeviceSetPower di un minidriver, se il minidriver ne ha fornito uno.
Quando AVStream riceve una richiesta set della proprietà KSPROPERTY_CONNECTION_STATE , chiama la routine di callback AVStrMiniPinSetDeviceState di un minidriver, se il minidriver ne ha fornito uno.
Quando il sistema viene riattivato da uno stato di sospensione, AVStream può chiamare le routine di callback AVStrMiniPinSetDeviceState e AVStrMiniDeviceSetPower Nel contrario dell'ordine previsto. Ad esempio, AVStrMiniPinSetDeviceState può essere chiamato prima diAVStrMiniDeviceSetPower.
Di conseguenza, il driver deve essere preparato per gestire tale inversione dell'ordine di callback previsto.
Questa inversione non avviene quando il sistema viene spento in uno stato di sospensione. Inattivo, queste due routine di callback si verificano sempre nell'ordine previsto. Ad esempio, AVStrMiniPinSetDeviceState viene sempre chiamato prima di AVStrMiniDeviceSetPower.
Se si verifica questa inversione, l'intera sequenza è simile alla seguente:
Prima di tutto, si verifica la sequenza di risparmio energia:
AVStrMiniPinSetDeviceState viene chiamato con una richiesta di modifica dello stato del dispositivo da KSSTATE_RUN a KSSTATE_PAUSE .
AVStrMiniDeviceSetPower viene chiamato con una richiesta di modifica dello stato di alimentazione da D0 a D2/D3.
A questo punto, il sistema si trova in uno stato di sospensione.
Successivamente, si verifica la sequenza di alimentazione:
AVStrMiniDeviceSetPower viene chiamato con una richiesta di modifica dello stato di alimentazione da D2/D3 a D0.
AVStrMiniPinSetDeviceState viene chiamato con una richiesta di modifica dello stato del dispositivo da KSSTATE_PAUSE a KSSTATE_RUN .
In questo scenario, i passaggi 5 e 6 sono i passaggi inverso dall'ordine previsto.
Inoltre, quando un'applicazione è in streaming e il sistema avvia una sequenza di risparmio energia, un grafico di acquisizione in esecuzione viene sempre inserito in uno stato di sospensione. Se il grafico è già stato arrestato, rimane arrestato.