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.
W tym temacie omówiono obwody ACX. Aby zapoznać się z ogólnym omówieniem warunków ACX i listą terminów ACX, zobacz Omówienie rozszerzeń klas audio ACX.
Zgodnie z opisem w artykule Podsumowanie obiektów ACX obiekt AcxCircuit reprezentuje częściową lub pełną ścieżkę audio do urządzenia audio postrzeganego przez użytkownika (głośniki, mikrofon itp.). Obwód AcxCircuit ma co najmniej jedno wyprowadzenie wejściowe i jedno wyprowadzenie wyjściowe (ACXPIN) oraz może agregować jeden lub więcej elementów, takich jak AcxElements. Obwód reprezentuje istniejący punkt końcowy i jego możliwości.
ACX Stream to składnik sterownika stworzony w celu reprezentacji strumienia audio, utworzonego przez obwód. Strumień składa się z listy elementów utworzonych na podstawie elementów obwodu nadrzędnego. Obwód strumienia to obwód w architekturze wielostackowej (częściowa ścieżka audio), który bezpośrednio łączy się z usługą przesyłania strumieniowego działającą w trybie użytkownika. Obwód podstawowy to obwód w architekturze z wieloma stosami (częściowa ścieżka dźwiękowa), która zapewnia tożsamość urządzenia punktu końcowego audio.
Identyfikacja obwodu ACX
Każdy obwód ACX ma identyfikator obwodu. AcX definiuje następujące elementy:
Nazwa (str), służy do jednoznacznego identyfikowania tego typu urządzenia audio w układzie. Służy do lokalizowania ustawienia INF i jest częścią linku symbolicznego używanego do uzyskiwania dostępu do tego obwodu z urządzenia zdalnego. Przykład: "Render0", "Render1" lub "Capture0".
Łącze symboliczne. Łącze symboliczne jest skojarzone ze wszystkimi uwidocznionymi obwodami. Klienci używają tego linku symbolicznego, aby otworzyć ścieżkę komunikacji z urządzeniem/obwodem.
Identyfikator składnika obwodu (guid). Unikatowo identyfikuje instancję obwodu (specyficzną dla dostawcy). Nie można go użyć w powiązaniach AcxCircuitTemplate, jeśli określono identyfikator URI obwodu.
Identyfikator URI składnika obwodu (str). Unikatowo identyfikuje instancję obwodu (specyficzną dla dostawcy). Nie można go używać w powiązaniach AcxCircuitTemplate, jeśli określono identyfikator obwodu.
Identyfikator składnika Fabryki Układów (guid). Jednoznacznie identyfikuje wystąpienie fabryki obwodów (specyficzne dla dostawcy). Nie można go użyć w powiązaniach AcxCircuitTemplate, jeśli określono identyfikator URI fabryki obwodów.
URI składnika fabryki układów (str). Jednoznacznie identyfikuje wystąpienie fabryki obwodów (specyficzne dla dostawcy). Nie można go użyć w powiązaniach AcxCircuitTemplate, jeśli określono identyfikator fabryki układów.
AcxCircuitCreate
Funkcja AcxCircuitCreate służy do tworzenia AXCIRCUIT. Nieprzezroczysta struktura ACXCIRCUIT_INIT używana przez funkcję AcxCircuitCreate. AcxCircuitInitAllocate służy do inicjowania struktury ACXCIRCUIT_INIT.
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.
Kompozycja obwodu ACX
AcX wiąże obwody ze sobą do momentu utworzenia pełnej ścieżki audio. AcX używa powiązań dźwiękowych do łączenia obwodów audio. Aby uzyskać więcej informacji, zobacz Kompozycja Wielookręgowa ACX.
Dynamiczne tworzenie obwodu ACX (w dowolnym momencie)
AcX może utworzyć dynamiczny obwód na żądanie. W tym celu sterownik przydziela strukturę WDFDEVICE_INIT przez wywołanie metody WdfPdoInitAllocate. Następnie sterownik określa wszystkie wywołania zwrotne pnP/zasilania, które chce odbierać i tworzy urządzenie. Sterownik tworzy wystąpienie nowego urządzenia/obwodu, wywołując polecenie AcxDeviceAddCircuitDevice. Aby uzyskać więcej informacji, zobacz Wyliczenie urządzenia ACX.
Dynamiczne usuwanie obwodu ACX
Sterownik wywołuje acxDeviceRemoveCircuitDevice , aby usunąć urządzenie audio z listy urządzeń. Spowoduje to uruchomienie sekwencji wyłączenia zasilania na urządzeniu/obwodzie ACX. Urządzenie/obwód obwodu jest usuwane asynchronicznie. Aby uzyskać więcej informacji, zobacz Wyliczenie urządzenia ACX.
AcxDeviceRemoveCircuit i AcxDeviceDetachCircuit
Istnieją dwa typowe sposoby zarządzania kończeniem obwodu. AcxDeviceDetachCircuit lub AcxDeviceRemoveCircuit.
Jeśli obiekt wywołujący wywołuje funkcję AcxDeviceDetachCircuit, nie może wywołać funkcji AcxDeviceRemoveCircuit. Jeśli sterownik wywołujący chce usunąć obwód po AcxDeviceDetachCircuit, powinien użyć WdfObjectDelete.
Przez wywołanie acxDeviceRemoveCircuit sterownik wywołujący informuje ACX, aby usunąć ten obwód oraz wykasować go z urządzenia. W takim przypadku nie ma potrzeby wywoływania elementu WdfObjectDelete w obwodzie.
Podsumowując, AcxDeviceDetachCircuit oznacza, że sterownik zarządza cyklem życia obiektów obwodu, AcxDeviceRemoveCircuit oznacza, że obwód zostanie usunięty.
Aby uzyskać ogólne informacje na temat zarządzania okresem istnienia obiektów WDF, zobacz Framework Object Life Cycle (Cykl życia obiektu struktury).
AcxDeviceRemoveCircuitDevice
Inaczej niż opisane powyżej zakończenie obwodu, AcxDeviceRemoveCircuitDevice jest używany przez sterownik audio do usunięcia istniejącego punktu końcowego audio i może być wywoływany w dowolnym momencie w cyklu życia sterownika.
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).
EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE) funkcja wywołania zwrotnego
Jeśli sterownik zarejestrował funkcję wywołania zwrotnego EvtAcxCircuitReleaseHardware, framework wywołuje ją podczas następujących przejść:
- Ponowne równoważenie zasobów
- Porządkowe usuwanie
- Niespodziewane usuwanie
Framework ACX wywołuje funkcję zwrotną EvtAcxCircuitReleaseHardware po tym, jak framework WDF przestał wysyłać żądania we/wy do urządzenia, wszystkie przerwania przypisane do urządzenia zostały zdezaktywowane i odłączone, a urządzenie zostało wyłączone.
Platforma ACX wywołuje funkcję wywołania zwrotnego EvtAcxCircuitReleaseHardware przed platformą WDF, która wywołuje funkcję wywołania zwrotnego EvtDeviceReleaseHardware sterownika.
Gdy framework wywołuje EvtAcxCircuitReleaseHardware, PDO dla urządzenia nadal istnieje i można je odpytywać o informacje dostępne w stanie wyłączenia, na przykład o konfigurację PCI.
Ponadto zasoby sprzętowe interpretowane przez platformę, które są dostarczane do EvtDeviceReleaseHardware, nadal są przypisywane do urządzenia. Głównym celem tej funkcji wywołania zwrotnego jest zwolnienie tych zasobów, a w szczególności odmapowanie wszystkich zasobów pamięci, które były zmapowane przez funkcję wywołania zwrotnego EvtAcxCircuitPrepareHardware sterownika. Sterownik może również użyć tego wywołania zwrotnego, aby wykonać inne działanie zarządzania ACXCIRCUIT, które może być wymagane w stanie wyłączonym. Zwykle wszystkie inne operacje zamykania sprzętu powinny odbywać się w funkcji wywołania zwrotnego EvtDeviceD0Exit sterownika.
Struktura ACX zawsze wywołuje funkcję wywołania zwrotnego EvtAcxCircuitReleaseHardware, jeśli funkcja wywołania zwrotnego EvtAcxCircuitPrepareHardware sterownika została wywołana, chyba że EvtAcxCircuitPrepareHardware zwróciła kod niepowodzenia.
Aby uzyskać więcej informacji na temat zasobów sprzętowych, zobacz Wprowadzenie do zasobów sprzętowych.
EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE) — funkcja wywołania zwrotnego
Kiedy framework wywołuje EvtAcxFactoryCircuitReleaseHardware, PDO dla urządzenia nadal istnieje i można je odpytywać o informacje dostępne w stanie wyłączenia, na przykład o stanie konfiguracji PCI.
Ponadto zasoby sprzętowe interpretowane przez platformę, które są dostarczane do EvtDeviceReleaseHardware, nadal są przypisywane do urządzenia. Głównym celem tej funkcji wywołania zwrotnego jest zwolnienie tych zasobów, a w szczególności odmapowanie wszystkich zasobów pamięci, które były zmapowane przez funkcję wywołania zwrotnego EvtAcxCircuitPrepareHardware sterownika. Sterownik może również użyć tego wywołania zwrotnego, aby wykonać inne działanie zarządzania ACXCIRCUIT, które może być wymagane w stanie wyłączonym. Zwykle wszystkie inne operacje zamykania sprzętu powinny odbywać się w funkcji wywołania zwrotnego EvtDeviceD0Exit sterownika.
Struktura ACX zawsze wywołuje funkcję zwrotną EvtAcxFactoryCircuitReleaseHardware, jeśli funkcja zwrotna EvtAcxFactoryCircuitPrepareHardware została wywołana przez sterownik, chyba że EvtAcxFactoryCircuitPrepareHardware zwróciła kod błędu.
Aby uzyskać więcej informacji na temat zarządzania obiektami WDF i obwodami, zobacz AcX WDF Driver Lifetime Management (Zarządzanie okresem istnienia sterowników WDF ACX).
Zobacz także
Omówienie rozszerzeń klasy audio ACX
komunikacja krzyżowa między sterownikami wielostosu ACX