Udostępnij przez


Obsługa bezczynności Power-Down

Niektóre urządzenia mogą wprowadzać stan niskiego zużycia energii (Dx), gdy system pozostaje w stanie roboczym (S0). Począwszy od systemu Windows 8, urządzenia mogą przejść do stanu zasilania o niskiej mocy (Fx) przed wejściem do stanu Dx. W przypadku takich urządzeń system inicjuje obniżenie mocy urządzenia lub składnika, gdy urządzenie lub składnik pozostaje nieaktywny przez ustalony (i konfigurowalny) czas.

Niektóre z tych urządzeń mogą również wyzwalać sygnał obudzenia w magistrali po wykryciu zdarzenia zewnętrznego. Sterownik magistrali reaguje na ten sygnał, a stos sterowników przywraca urządzenie do stanu pracy. (Urządzenia, które nie wykrywają zdarzeń zewnętrznych, pozostają w stanie niskiego zużycia energii, dopóki framework nie poprosi sterownika magistrali o rozpoczęcie przywracania urządzenia do jego stanu roboczego).

Jeśli Twoje urządzenie lub składnik mogą być wyłączone, gdy są bezczynne, funkcja wywołania zwrotnego EvtDriverDeviceAdd w właścicielu zasad zasilania musi wykonać następujące dwa kroki:

  1. Wywołaj WdfDeviceAssignS0IdleSettings, aby określić:

    • Stan niskiego zasilania, który zostanie wprowadzony przez urządzenie
    • Czas, przez jaki urządzenie #B0 musi pozostać bezczynne #C1, zanim jego stan zasilania zostanie obniżony
    • Czy urządzenie może wykryć zdarzenie zewnętrzne i wyzwolić sygnał wznawiania na magistrali
    • Czy użytkownicy mogą kontrolować ustawienia bezczynności urządzenia
    • Czy funkcja wyłączania zasilania podczas bezczynności urządzenia jest włączona, czy wyłączona
    • Czy urządzenie powróci do stanu pracy (D0), gdy system powróci do stanu roboczego (S0)
    • Czy wartość limitu czasu bezczynności dla urządzenia jest określana przez strukturę zarządzania energią (PoFx)
    • Czy platforma może umieścić urządzenie w stanie zasilania D3cold po wygaśnięciu okresu bezczynności

    Aby uzyskać więcej informacji na temat tych ustawień, zapoznaj się ze strukturą WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS, a także z obsługą funkcjonalnych stanów zasilania.

  2. Wywołaj WdfDeviceInitSetPowerPolicyEventCallbacks, aby, jeśli są potrzebne dla twojego urządzenia, zarejestrować następujące funkcje zwrotne wywołań zdarzeń:

    • #B0 #A1 EvtDeviceArmWakeFromS0 #A2 #A3 , co umożliwia sprzętowi urządzenia (a nie magistrali) reagowanie na zewnętrzny sygnał wybudzający
    • Funkcja EvtDeviceDisarmWakeFromS0, która wyłącza zdolność urządzenia (a nie zdolność szyny) do reagowania na zewnętrzne zdarzenie wybudzenia.
    • #B0 #A1 EvtDeviceWakeFromS0Triggered #A2 #A3 , który informuje kierowcę, że autobus wykrył sygnał wznawiania.

Warunki bezczynności

Platforma uważa, że urządzenie jest bezczynne i rozpoczyna liczenie czasu bezczynności, gdy spełnione są wszystkie następujące warunki:

  • Żadna z kolejek zarządzanych energią, utworzonych dla tego wystąpienia urządzenia, nie ma żadnych żądań oczekujących w kolejce ani wysłanych do sterownika. Jeśli żądanie zostało wysłane do sterownika, a sterownik wysłał je do docelowego obiektu I/O, żądanie jest nadal powiązane z kolejką. Urządzenie nie zostanie uznane za bezczynne, chyba że sterownik użył opcji wyślij i zapomnij, aby wysłać żądanie. Żądania w kolejkach niezarządzanych przez zasilanie nie są liczone przy obliczaniu bezczynności urządzenia.
  • Jeśli sterownik wcześniej wywołał WdfDeviceStopIdle, to następnie wywołał WdfDeviceResumeIdle.
  • Jeśli właściciel polityki zasilania jest kierowcą magistrali, żadne z urządzeń podrzędnych kierowcy magistrali nie znajduje się w D0.

Jeśli twój sterownik (lub użytkownik) włącza automatyczne wyłączanie przy bezczynności dla urządzenia, może być konieczne skorzystanie z metody WdfDeviceStopIdle. Jeśli urządzenie jest w stanie roboczym (D0), ta metoda zapobiega przejściu urządzenia w stan bezczynności, dopóki sterownik nie wywoła WdfDeviceResumeIdle. Jeśli urządzenie jest w stanie niskiego zasilania, gdy sterownik wywołuje WdfDeviceStopIdle, a system jest w stanie pracy (S0), strukturą prosi sterownik magistrali o przywrócenie urządzenia do stanu pracy (D0). Każde pomyślne wywołanie WdfDeviceStopIdle musi być odpowiadać wywołaniu WdfDeviceResumeIdle. Aby uzyskać informacje na temat wyświetlania liczby referencji zasilania w debugerze, zobacz Debugowanie przecieków referencji zasilania w WDF.

Aby uzyskać więcej informacji o tym, kiedy sterownik może musieć wywołać WdfDeviceStopIdle, zobacz stronę z dokumentacją metody.

Jeśli urządzenie może wznawiać się ze stanu niskiego zasilania, sterownik magistrali urządzenia uczestniczy w przebudzeniu urządzenia. Sterownik magistrali zazwyczaj zapewnia funkcje wywołania zwrotnego EvtDeviceEnableWakeAtBus i EvtDeviceDisableWakeAtBus. Te funkcje robią wszystko, co jest niezbędne na adapterze magistrali, aby włączyć i wyłączyć możliwość budzenia urządzenia ze stanu niskiego zużycia energii.

Aby uzyskać informacje na temat wpisów rejestru, które kontrolują możliwości bezczynności urządzenia, zobacz Kontrola użytkownika nad bezczynnością urządzenia i zachowaniem w stanie wznawiania.