Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy urządzenie przechodzi do stanu niskiego zużycia energii, platforma rozłącza (lub zgłasza jako nieaktywne) przerwy, które są używane do obsługi operacji we/wy. Począwszy od wersji KMDF 1.13 i UMDF 2.0 działających na systemie Windows 8.1, sterownik WDF może utworzyć obiekt przerwania frameworku, który pozostaje aktywny, gdy urządzenie przechodzi w stan niskiego poboru mocy, a następnie może służyć do przebudzenia urządzenia i przywrócenia go do pełnego stanu włączenia D0.
Jeśli opracowujesz sterownik WDF dla systemu na chipie (SoC), możesz użyć takiego przerwania, aby obudzić urządzenie, które nie zapewnia tradycyjnego mechanizmu sygnalizującego wybudzenie. Aby korzystać z tej funkcjonalności, urządzenie musi mieć obsługę sprzętową dla przerwań wznawiania, co jest prezentowane za pośrednictwem interfejsu ACPI. Sterownik tworzący przerwanie musi być właścicielem zasad zasilania urządzenia.
Gdy urządzenie przechodzi do stanu niskiego zasilania, platforma nie rozłącza przerwania, które zostało zidentyfikowane jako wznawiane. Gdy urządzenie przerywa pracę, framework wywołuje procedury wywołania zwrotnego EvtDeviceD0Entry i EvtInterruptIsr przy IRQL = PASSIVE_LEVEL.
Jeśli sterownik tworzy już obiekt przerwania na poziomie pasywnym na potrzeby obsługi we/wy, zalecamy udostępnienie tego samego obiektu przerwania na potrzeby funkcji wznawiania. W tym scenariuszu procedura zwrotna sterownika EvtInterruptIsr implementuje logikę warunkową do obsługi przerwań związanych z we/wy oraz zarządzania przebudzeniami.
Jednak jeśli sterownik używa przerwania wymagającego obsługi na poziomie IRQL (DIRQL) urządzenia, zalecamy utworzenie dodatkowego obiektu przerwania frameworku w celu zapewnienia funkcji wybudzania.
Wykonaj następujące kroki, aby utworzyć obiekt przerwania z obsługą wznawiania w sterowniku KMDF lub UMDF:
Wywołaj WdfDeviceAssignS0IdleSettings, zazwyczaj z EvtDriverDeviceAdd, określając IdleCanWakeFromS0 w parametrze IdleCaps.
Opcjonalnie wywołaj funkcję WdfDeviceInitSetPowerPolicyEventCallbacks, aby zarejestrować funkcje wywołania zwrotnego zdarzeń opisane w sekcji dotyczącej obsługi wznawiania systemu.
Wywołaj WDF_INTERRUPT_CONFIG_INIT, aby zainicjować strukturę WDF_INTERRUPT_CONFIG. Podaj funkcję EvtInterruptIsr wywołania zwrotnego, która ma być wywoływana na poziomie pasywnym. W strukturze konfiguracji ustaw PassiveHandling i CanWakeDevice na TRUE. Następnie wywołaj WdfInterruptCreate z funkcji wywołania zwrotnego EvtDevicePrepareHardware, aby utworzyć obiekt przerwania struktury.
Wywołaj WdfDeviceAssignSxWakeSettings, aby skonfigurować urządzenie w celu wybudzania systemu ze stanu niskiego zasilania.
WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT(&wakeSettings); wakeSettings.DxState = PowerDeviceD3; wakeSettings.UserControlOfWakeSettings = WakeDoNotAllowUserControl; wakeSettings.Enabled = WdfTrue; status = WdfDeviceAssignSxWakeSettings(Device, &wakeSettings); if (!NT_SUCCESS(status)) { Trace(TRACE_LEVEL_ERROR,"WdfDeviceAssignSxWakeSettings failed %x\n", status); return status; }Gdy urządzenie przejdzie do stanu niskiego poboru mocy, framework nie wywołuje EvtInterruptDisable dla przerwania z obsługą wznawiania. Struktura wywołuje EvtDeviceArmWakeFromS0, jeśli sterownik zapewnił tę funkcję.
Gdy urządzenie sygnalizuje przerwanie wznawiania, struktura wywołuje EvtDeviceD0Entry procedurę wywołania zwrotnego.
Jeśli wywołanie zwrotne EvtDeviceD0Entry kierowcy zwróci sukces, struktura wywoła wywołanie zwrotne EvtInterruptIsr kierowcy na poziomie pasywnym. Zanim program obsługi przerwań powróci, musi wyciszyć przerwanie w kontrolerze przerwań. Jeśli sterownik zwróci kod błędu z EvtDeviceD0Entry, framework rozłącza przerwanie i wywołuje funkcję zwrotną EvtInterruptDisable, jeśli została dostarczona przez sterownik.
Framework wywołuje następujące procedury wywołania zwrotnego zdarzeń wybudzających, jeśli sterownik dostarczył jakiekolwiek.
Struktura kontynuuje normalną sekwencję wywołania zwrotnego zasilania zgodnie z opisem w Power-Up Sequence dla funkcji lub sterownika filtru.
Możesz użyć rozszerzenia !wdfkd.wdfinterrupt debugera, aby sprawdzić, czy określone przerwanie zostało skonfigurowane jako możliwość wybudzenia.
Funkcji wznawiania z przerwaniami nie można używać razem z selektywnym wstrzymywaniem USB.