Enumeracja urządzenia ACX
W tym temacie omówiono wyliczenie urządzenia ACX, uruchamianie i zamykanie oraz ponowne równoważenie urządzenia. Aby zapoznać się z ogólnym omówieniem rozszerzeń klasy audio ACX, zobacz omówienie. Aby uzyskać informacje na temat zarządzania energią ACX oraz PnP, zobacz zarządzanie energią ACX.
Wyliczenie i uruchamianie urządzenia ACX dla statycznych urządzeń audio
Aby dowiedzieć się, jak działa uruchamianie ACX, zostanie przedstawiony następujący scenariusz.
- Urządzenie audio jest reprezentowane przez jeden obwód.
- Żywotność sygnału audio/obwodu jest powiązana z żywotnością urządzenia PnP.
- Jedno urządzenie może tworzyć wiele obwodów dla różnych urządzeń audio.
- Środowisko trybu jądra KMDF.
Sekwencja uruchamiania to:
Sterownik WDM DriverEntry. Zasięg sterownika. DriverEntry dla rutynowych sterowników WDF
- Inicjowanie śledzenia.
- Opcjonalnie zarejestruj się w celu wyładowania.
- Utwórz usługę WDFDRIVER.
- Zadzwoń do ACX, aby wykonać jakiekolwiek inicjalizacje po instalacji sterownika.
- Opcjonalnie przeprowadź inicjalizację sterownika po zakończeniu.
Dodaj urządzenie WDF. Zakres urządzenia. funkcja wywołania zwrotnego EVT_WDF_DRIVER_DEVICE_ADD
- Wywołanie funkcji ACX w celu zainicjowania kontekstu inicjowania urządzenia — funkcja
ACX_DEVICEINIT_CONFIG_INIT(&devInitCfg)
ACX_DEVICEINIT_CONFIG_INIT - Rejestrowanie zwrotnych wywołań mocy WDF PnP -
WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);
- Tworzenie urządzenia przy użyciu AcxDeviceInitialize
- Wywołaj system ACX, aby wykonać działania po inicjalizacji urządzenia.
- Opcjonalnie wykonaj dowolne działania po zainicjowaniu urządzenia.
- Wywołanie funkcji ACX w celu zainicjowania kontekstu inicjowania urządzenia — funkcja
WDF PrepareHardware. Zakres urządzenia. EVT_WDF_DEVICE_PREPARE_HARDWARE funkcji wywołania zwrotnego.
Utwórz i zainicjuj zasoby sprzętowe (dla przerwań i wątków, zarejestruj je w ACX).
Utwórz jeden lub więcej obwodów (jednorazowe tworzenie).
- Utwórz kontekst AcxCircuitInit.
- Dodaj wywołania zwrotne.
- Utwórz aplikację AcxCircuit.
- Opcjonalnie wykonaj dowolną inicjalizację obwodu elektronicznego.
- Zarejestruj układ za pomocą AcxDeviceAddCircuitDevice.
Urządzenie WDF D0 - funkcja zwrotna wejścia. Szczegółowy zakres urządzenia. Funkcja wywołania zwrotnego EVT_WDF_DEVICE_D0_ENTRY.
AcX wywołuje EvtAcxCircuitPowerUp wywołania zwrotnego we wszystkich obwodach. Zakres obwodu.
ACX przenosi strumienie (jeśli istnieją) do poprzedniego stanu przed wyłączeniem urządzenia. Zakres wystąpienia usługi Stream.
Kolejki usługi WDF są ponownie uruchamiane.
funkcja wywołania zwrotnego EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT. Zakres urządzenia.
EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART funkcji wywołania zwrotnego. Zakres urządzenia. - Inicjalizacja po każdym włączeniu zasilania z Dx.
Dodawanie strumienia ACX
- AcX Stream Add (instance) on ACX Circuit (ACX callback on ACX circuits) — wywoływany w dowolnym momencie po wywołaniu inicjalizacji własnoręcznego zarządzania we/wy WDF lub ponownego uruchomienia, gdy urządzenie jest w stanie D0. Zakres obwodu.
- Dane wejściowe: Kontekst AcxStreamInit, ACXCIRCUIT.
- Dodaj wywołania zwrotne.
- Utwórz element AcxStream (wystąpienie).
- Opcjonalnie wykonaj dowolny init wystąpienia strumienia.
- Po powrocie ACX aktywuje to wystąpienie strumienia, a ponieważ w tym scenariuszu jest jedynym na ścieżce audio, umożliwia przepływ komunikatów strumienia.
Wyliczenie i uruchamianie urządzenia ACX dla dynamicznych urządzeń audio
W tym scenariuszu przyjmuje się, że przyjęto następujące założenia.
- Obsługa dynamicznego dźwięku (tworzenie/usuwanie urządzeń audio w czasie wykonywania).
- Okres istnienia urządzenia nie jest powiązany z okresem istnienia obwodu.
- Jedno urządzenie może tworzyć wiele obwodów dla różnych urządzeń audio.
- Opiera się na prostym wzorcu statycznym opisanym powyżej, dodając tylko elementy specyficzne dla wzorca dynamicznego.
- Korzysta z podrzędnych pierwotnych obiektów PDO.
- Środowisko trybu jądra KMDF.
Sekwencja uruchamiania dla tego scenariusza to:
WDM DriverEntry. Zakres sterownika.
- Śledzenie inicjowania.
- Opcjonalnie zarejestruj się do rozładunku.
- Utwórz usługę WDFDRIVER.
- Wywołaj ACX, aby wykonać dowolną inicjalizację sterownika.
- Opcjonalnie wykonaj inicjalizację sterownika po instalacji.
Dodanie urządzenia WDF. Zakres urządzenia.
- Wywołaj program ACX, aby zainicjować kontekst inicjowania urządzenia.
- Utwórz urządzenie.
- Wywołaj ACX, aby wykonać dowolne działania po inicjalizacji urządzenia.
- Opcjonalnie wykonaj dowolne czynności po inicjalizacji urządzenia.
WDF PrepareHardware. Zakres urządzenia.
- Utwórz i zainicjuj zasoby sprzętowe (dla przerwań i wątków, zarejestruj je przy użyciu ACX).
Wejście urządzenia WDF do stanu D0. Zakres urządzenia.
Kolejki usługi WDF są ponownie uruchamiane.
WDF DeviceSelfManagedIoInit. Zakres urządzenia.
WDF PonowneUruchamianieSamodzielnieZarządzanegoIoUrządzenia. Zakres urządzenia.
- Inicjalizuj po każdym uruchomieniu zasilania z Dx.
Dynamiczne tworzenie obwodu (w dowolnym momencie)
- Sterownik przydziela struktury
WDFDEVICE_INIT przez wywołanie WdfPdoInitAllocate . Sterownik jest odpowiedzialny za wywołanie WdfDeviceInitFree, jeśli napotka jakiekolwiek błędy przed pomyślnym utworzeniem urządzenia. - Sterownik określa wszystkie wywołania zwrotne pnP/zasilania, które chce odbierać.
- Sterownik tworzy urządzenie.
- Sterownik tworzy instancję nowego urządzenia/obwodu, wywołując AcxDeviceAddCircuitDevice.
- WDF/PnP przejmuje kontrolę i jest stosowany prosty wzorzec wyliczenia/uruchomienia opisany w poprzedniej sekcji.
AcxFactoryCircuit
Sterownik ACX może również tworzyć obiekty AcxFactoryCircuit (dostawców obwodów) podczas sekwencji zasilania, używając funkcji AcxFactoryCircuitCreate i funkcji AcxDeviceAddFactoryCircuit.
Ponieważ sterownik ACX zarejestrował się w ACX jako fabryka układów, struktura ACX używa zarejestrowanej fabryki, aby poprosić sterownik o utworzenie nowego układu.
AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);
AcxDeviceAddFactoryCircuit(Device, factory);
Ponowne równoważenie urządzenia ACX
Ponowne równoważenie jest wykonywane, gdy użycie zasobów systemowych wymaga ponownego równoważenia zasobów między urządzeniami przez system operacyjny. Aby uzyskać ogólne informacje na temat ponownego równoważenia, zobacz Implementowanie ponownego równoważenia pnP dla sterowników audio PortCls.
AcX obsługuje ponowne równoważenie urządzenia w następujący sposób:
W sekwencji wyłączania zasilania WDF/ACX sterownik zwalnia wszystkie zasoby przesyłania strumieniowego (EvtAcxStreamPowerDown, EvtAcxStreamReleaseHardware), zasoby obwodu (EvtAcxCircuitPowerDown, EvtAcxCircuitReleaseHardware) i zasoby urządzenia (EvtDeviceReleaseHardware).
Wszystkie żądania są wstrzymane, a uchwyty pozostają otwarte.
W sekwencji zasilania WDF/ACX sterownik upewnia się, że nowe zasoby są zgodne z bieżącymi i wprowadza wszelkie dozwolone zmiany ustawień. Jeśli zasoby nie są zgodne z bieżącą inicjacją urządzenia/obwodu, sterownik musi usunąć bieżące obwody i utworzyć nowe. Zobacz poniżej więcej informacji.
W sekwencji zasilania WDF wywołuje EvtDevicePrepareHardware oraz EvtDeviceD0 entry, a ACX wywołuje odpowiedni EvtAcxCircuitPrepareHardware i EvtAcxCircuitPowerUp, następnie przenosi wszystkie strumienie do ich istniejących stanów.
Gdy tylko kolejki przejdą do stanu zasilania lub uruchomienia, przepływ danych we/wy zostanie wznowiony.
Funkcja ACX nie zezwala na usuwanie (niepowodzenie usuwania zapytań) ani ponowne równoważenie (niepowodzenie zatrzymania zapytania) w przypadku wystąpienia strumieni w stanie aktywnym (RUN).
Kierowcy mogą również zdecydować się na zawsze niszczyć i ponownie tworzyć urządzenia audio podczas ponownego równoważenia. Jest to ten sam scenariusz powyżej, gdy urządzenie wykryje, że nowe ustawienia nie są zgodne ze starymi. Usunięcie obwodu należy wykonać w wywołaniach zwrotnych EvtDevicePrepareHardware/EvtDeviceReleaseHardware, a nowy obwód jest tworzony na nowo w EvtDevicePrepareHardware. Sterownik usuwa obwód przez wyrejestrowanie obwodu (przy użyciu AcxDeviceRemoveCircuit). Obwody fabryczne zwykle nie powinny być usuwane podczas ponownego równoważenia.
Uchwyty plików trybu użytkownika
ACX nie czeka na zamknięcie uchwytów plików w trybie użytkownika, zanim ponownie utworzy nowe obwody. Okres istnienia uchwytów systemu plików nie jest powiązany z okresem istnienia zasobów sprzętowych używanych przez urządzenie/obwody. Klienci są odpowiedzialni za nasłuchiwanie na przybycie lub usunięcie interfejsu oraz za zamykanie i ponowne otwieranie uchwytów do plików.
Stare uchwyty plików są oznaczone jako przestarzałe, a ACX odrzuca wszystkie skojarzone z nimi żądania I/O.
Zobacz też
Omówienie rozszerzeń klasy audio ACX
dokumentacja referencyjna ACX