Udostępnij za pośrednictwem


Korzystanie z I/O Self-Managed

Większość sterowników opartych na strukturze korzysta z możliwości pnP i zarządzania energią dla urządzeń, które obsługują. Innymi słowy, większość sterowników opartych na strukturze pozwala platformie zarządzać stanami pnP i zasilania urządzenia, wykonując wszystkie następujące czynności:

  • Dostarczanie funkcji wywołania zwrotnego EvtDeviceD0Entry oraz EvtDeviceD0Exit.

  • Dostarczanie funkcji wywołania zwrotnego dla EvtDevicePrepareHardware i EvtDeviceReleaseHardware.

  • Korzystanie z kolejek zarządzanych energią dla żądań we/wy, które wymagają, aby urządzenie było w stanie roboczym, oraz korzystanie z kolejek, które nie są zarządzane energią dla wszystkich innych żądań.

Jednak kilka sterowników opartych na strukturze wymaga większej wiedzy na temat stanu urządzeń, w tym sterowników w następujących sytuacjach:

  • Operacje wykonywane przez sterownik nie są określane przez zestaw żądań we/wy, które sterownik odbiera z kolejek we/wy platformy.

  • Sterownik komunikuje się ze starszymi sterownikami spoza frameworku i obsługuje bezpośrednio interfejsy WDM.

  • Żądania we/wy odbierane przez sterownik nie mogą być podzielone na dwie grupy: te, które wymagają, aby urządzenie było w stanie roboczym i tych, które nie.

Większość sterowników nie znajduje się w jednej z poprzednich sytuacji, ale jeśli Twój sterownik się tam znajduje, może być konieczne posiadanie większej bezpośredniej kontroli nad zarządzaniem operacjami PnP i energią urządzenia. Takie sterowniki mogą używać samodzielnego zarządzania we/wy. Użycie zarządzanego samodzielnie wejścia/wyjścia oznacza, że sterownik jest powiadamiany (za pomocą zestawu funkcji wywołania zwrotnego) za każdym razem, gdy jego urządzenia są podłączone lub odłączone, i za każdym razem, gdy urządzenie jest tymczasowo wstrzymane.

Należy pamiętać, że sterownik może używać operacji we/wy zarządzanych samodzielnie i nadal korzystać z kolejek we/wy platformy, będących kolejkami zarządzanymi przez zasilanie lub nie. Na przykład sterownik może używać kolejek we/wy platformy, a nie zarządzanych przez energię, z zestawem funkcji wywołania zwrotnego we/wy zarządzanego przez siebie.

Aby użyć samodzielnie zarządzanego we/wy, sterownik rejestruje dodatkowy zestaw funkcji wywołania zwrotnego zdarzeń, gdy wywołuje WdfDeviceInitSetPnpPowerEventCallbacks. Te funkcje wywołania zwrotnego zdarzeń to:

Gdy urządzenie po raz pierwszy wejdzie w stan pracy (D0), framework wywołuje funkcję zwrotną sterownika EvtDeviceSelfManagedIoInit. Dzieje się tak za każdym razem, gdy użytkownik podłącza urządzenie do systemu i za każdym razem, gdy system zostanie ponownie uruchomiony.

Istnieją trzy okoliczności, w których sterownik musi zatrzymać operacje we/wy urządzenia: urządzenie ma wejść w stan niskiego zasilania, ma zostać usunięte lub zostało już nieoczekiwanie usunięte. Poniższa lista szczegółowo analizuje każdą z tych okoliczności:

  • Urządzenie wkrótce przejdzie w stan niskiego zasilania i w końcu powróci do stanu roboczego.

    Gdy urządzenie ma wprowadzić stan niskiego zasilania (ponieważ urządzenie zostało bezczynne, cały system przechodzi w stan niskiego zasilania lub menedżer PnP jest redystrybucji zasobów sprzętowych systemu), platforma wywołuje evtDeviceSelfManagedIoSuspend funkcji wywołania zwrotnego. Po powrocie urządzenia do stanu roboczego framework wywołuje funkcję wywołania zwrotnego sterownika EvtDeviceSelfManagedIoRestart.

  • Urządzenie zostanie usunięte.

    Aby obsłużyć usunięcia urządzenia żądanego przez użytkownika, struktura wywołuje evtDeviceSelfManagedIoSuspend funkcji wywołania zwrotnego przed zatrzymaniem urządzenia. Po zatrzymaniu urządzenia struktura wywołuje funkcję wywołania zwrotnego sterownika EvtDeviceSelfManagedIoFlush. Po usunięciu urządzenia platforma wywołuje funkcję wywołania zwrotnego EvtDeviceSelfManagedIoCleanup.

  • Urządzenie zostało już nieoczekiwanie usunięte (usuwanie niespodziewane).

    Jeśli sterownik magistrali urządzenia ustali, że urządzenie nie jest już obecne lub jeśli inny sterownik w stosie ustali, że urządzenie nie odpowiada, sterownik, który wykrył problem informuje menedżera PnP. Menedżer PnP informuje następnie resztę sterowników, że urządzenie zniknęło. W przypadku sterowników opartych na strukturze frameworkowej, struktura otrzymuje komunikat menedżera PnP i wywołuje funkcje wywołania zwrotnego EvtDeviceSelfManagedIoSuspend, EvtDeviceSelfManagedIoFlushoraz EvtDeviceSelfManagedIoCleanup.

    (Twój sterownik może również zarejestrować funkcję wywołania zwrotnego EvtDeviceSurpriseRemoval. Jeśli urządzenie było w stanie pracy (D0) w momencie usunięcia, struktura wywołuje EvtDeviceSurpriseRemoval przed wywołaniem funkcji zwrotnych samodzielnie zarządzanego we/wy. Jeśli urządzenie było w stanie niskiego poboru mocy po usunięciu, EvtDeviceSurpriseRemoval jest wywoływane po EvtDeviceSelfManagedIoSuspend)

Aby uzyskać więcej informacji na temat kolejności wywoływania funkcji zwrotnych zdarzeń sterownika, odnieś się do PnP i scenariuszy zarządzania energią.

Mimo że rzadko jest to konieczne, struktura umożliwia kierowcom jeszcze większą kontrolę nad stanami pnP i zasilania urządzenia, dzięki uzyskiwaniu dostępu do maszyn stanu w ramach platformy.