Výčet zařízení ACX
Toto téma popisuje výčet, spuštění a vypnutí zařízení a rovnováhu zařízení. Obecný přehled rozšíření audio třídy ACX naleznete v tématu přehled. Informace o řízení spotřeby ACX a PnP naleznete v tématu řízení spotřeby ACX.
Výčet a spouštění zařízení ACX pro statická zvuková zařízení
Abyste se dozvěděli, jak funguje startup ACX, bude popsán následující scénář.
- Zvukové zařízení je reprezentováno jedním okruhem.
- Životnost zvukového nebo elektronického obvodu je svázaná s životností zařízení PnP.
- Jedno zařízení může vytvořit více okruhů pro různá zvuková zařízení.
- Prostředí režimu jádra KMDF.
Posloupnost spuštění je:
WDM DriverEntry. Specifikováno pro ovladač. DriverEntry pro ovladače WDF
- Zahájení trasování.
- Volitelně se zaregistrujte k vyložení.
- Vytvořte WDFDRIVER.
- Zavolejte ACX, aby provedl jakoukoliv inicializaci ovladače.
- Volitelně můžete provést jakoukoli inicializaci ovladače post.
WDF Přidat Zařízení. Rozsah zařízení. Funkce zpětného volání EVT_WDF_DRIVER_DEVICE_ADD
- Pro zavolání ACX pro inicializaci kontextu zařízení použijte funkci
ACX_DEVICEINIT_CONFIG_INIT(&devInitCfg)
ACX_DEVICEINIT_CONFIG_INIT. - Registrace callbacků WDF PnP Power –
WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);
- Vytvoření zařízení pomocí AcxDeviceInitialize
- Zavolejte ACX, aby provedl jakoukoli inicializaci po spuštění zařízení.
- Volitelně můžete provést jakékoli akce po inicializaci zařízení.
- Pro zavolání ACX pro inicializaci kontextu zařízení použijte funkci
WDF PrepareHardware. Rozsah zařízení. Funkce zpětného volání EVT_WDF_DEVICE_PREPARE_HARDWARE.
Vytvořte a inicializujte hardwarové prostředky (pro přerušení a vlákna, a zaregistrujte je v ACX).
Vytvoření jednoho nebo více okruhů (jednorázové vytvoření)
- Vytvořte kontext AcxCircuitInit.
- Přidejte zpětná volání.
- Vytvořte AcxCircuit.
- Volitelně můžete provést inicializaci po dokončení obvodu.
- Zaregistrujte okruh pomocí AcxDeviceAddCircuitDevice.
Zpětné volání funkce pro vstup WDF zařízení do stavu D0. Obor zařízení. Funkce zpětného volání EVT_WDF_DEVICE_D0_ENTRY.
ACX vyvolá EvtAcxCircuitPowerUp zpětné volání na všech obvodech. S rozsahovým určením pro okruh.
ACX přesune datové proudy (pokud existují) do jejich předchozího stavu z doby před vypnutím zařízení. Obor instance služby Stream
Fronty WDF se restartují.
Funkce zpětného volání EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT. Obor zařízení.
Funkce zpětného volání EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART. Vázané na zařízení. - Inicializovat po každém zapnutí napájení z Dx.
ACX Stream – přidat
- Přidání toku ACX (instance) do okruhu ACX (zpětná volání ACX na obvodech ACX) – vyvoláno kdykoli po inicializaci nebo restartu samořízeného V/V systému WDF, když je zařízení ve stavu D0. Okruhově vymezený.
- Vstup: AcxStreamInit context, ACXCIRCUIT.
- Přidejte zpětná volání.
- Vytvořte AcxStream (instance).
- Volitelně můžete provést inicializaci instance související s post streamem.
- Při návratu ACX aktivuje tuto instanci proudu, a protože v tomto scénáři je jediným na zvukové cestě, umožňuje průchod zprávám proudu.
Výčet a spouštění zařízení ACX pro dynamická zvuková zařízení
V tomto scénáři se předpokládá následující.
- Podpora dynamického zvuku (vytváření nebo odstraňování zvukových zařízení za běhu)
- Životnost zařízení není svázaná s životností okruhu.
- Jedno zařízení může vytvořit více okruhů pro různá zvuková zařízení.
- Navazuje na jednoduchý statický vzor popsaný výše přidáním prvků specifických pro dynamický vzor.
- Používá nezpracované vnořené PDO.
- Prostředí pro režim jádra KMDF.
Posloupnost spuštění pro tento scénář je:
WDM DriverEntry. Obor řidiče.
- Inicializační trasování.
- Volitelně se zaregistrujte pro odhlášení.
- Vytvořte WDFDRIVER.
- Zavolejte ACX kvůli provedení jakékoli inicializace ovladače.
- Volitelně můžete provést jakoukoli inicializaci ovladače post.
WDF DeviceAdd. Obor zařízení.
- Zavolejte ACX pro inicializaci kontextu zařízení.
- Vytvořte zařízení.
- Zavolejte ACX po inicializaci zařízení.
- Volitelně můžete provést jakoukoli inicializaci po zařízení.
WDF PrepareHardware. Obor zařízení.
- Vytvořte a inicializujte hardwarové prostředky pro přerušení a vlákna, a zaregistrujte je k ACX.
Zpětné volání při vstupu zařízení WDF do úrovně D0 Rozsah zařízení.
Fronty WDF byly restartovány.
WDF DeviceSelfManagedIoInit. Obor zařízení.
WDF - Restartování samoobslužného vstupu/výstupu zařízení. Rozsah zařízení.
- Inicializace po každém zapnutí z Dx.
Vytváření dynamických okruhů (kdykoli)
- Ovladač přidělí struktury
WDFDEVICE_INIT voláním WdfPdoInitAllocate . Ovladač je zodpovědný za vyvolání WdfDeviceInitFree, pokud dojde k selháním před úspěšným vytvořením zařízení. - Ovladač určuje všechny PnP/power callbacks, které chce přijímat.
- Ovladač vytvoří zařízení.
- Ovladač inicializuje nové zařízení/okruh voláním AcxDeviceAddCircuitDevice.
- WDF/PnP převezme kontrolu a poté nastane jednoduchý vzor výčtu/spuštění, jak je popsáno v předchozí části.
AcxFactoryCircuit
Ovladač ACX může také vytvořit objekty AcxFactoryCircuit (zprostředkovatele okruhu) během sekvence napájení pomocí funkce AcxFactoryCircuitCreate a funkce AcxDeviceAddFactoryCircuit.
Vzhledem k tomu, že se ovladač ACX zaregistroval u ACX jako výrobce obvodů, rámec ACX používá zaregistrovaného výrobce k tomu, aby požádal ovladač o vytvoření nového obvodu.
AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);
AcxDeviceAddFactoryCircuit(Device, factory);
Vyvážení rovnováhy zařízení ACX
Vyrovnávání se provádí, když využití systémových prostředků vyžaduje, aby operační systém znovu vyrovnává prostředky mezi zařízeními. Obecné informace o vyrovnávání najdete v tématu Implementace vyrovnávání PnP pro ovladače zvuku PortCls.
ACX podporuje vyrovnávání zařízení následujícím způsobem:
V sekvenci vypnutí WDF/ACX ovladač uvolní všechny prostředky pro streamování (EvtAcxStreamPowerDown, EvtAcxStreamReleaseHardware), prostředky pro obvod (EvtAcxCircuitPowerDown, EvtAcxCircuitReleaseHardware) a prostředky pro zařízení (EvtDeviceReleaseHardware).
Všechny žádosti jsou pozastavené a handly zůstanou otevřené.
Při zapínací sekvenci WDF/ACX se ovladač ujistí, že nové prostředky jsou kompatibilní s aktuálními, a provede veškeré povolené úpravy svého nastavení. Pokud prostředky nejsou kompatibilní s inicializací aktuálního zařízení nebo okruhu, musí ovladač odstranit aktuální okruhy a vytvořit nové. Další informace najdete níže.
V sekvenci napájení vyvolá WDF svůj EvtDevicePrepareHardware a EvtDeviceD0 vstup a ACX vyvolá odpovídající EvtAcxCircuitPrepareHardware a EvtAcxCircuitPowerUp a přesune všechny datové proudy do svých předchozích stavů.
Jakmile se fronty přesunou do stavu napájení nebo spuštění, vstupně-výstupní tok se znovu obnoví.
ACX nepovoluje odebrání (selže odebrání dotazu) nebo obnovení rovnováhy (selhání zastavení dotazu), aby proběhlo, pokud jsou datové proudy v aktivním stavu (RUN).
Ovladače mohou také zvolit vždy zničit a znovu vytvořit zvuková zařízení při přerozdělení. Toto je stejný scénář výše, když zařízení zjistí, že nová nastavení nejsou kompatibilní se starými. Odstranění okruhu musí být provedeno v zpětných voláních EvtDevicePrepareHardware/EvtDeviceReleaseHardware, nový okruh se znovu vytvoří v EvtDevicePrepareHardware. Ovladač odstraní okruh zrušením registrace okruhu (pomocí AcxDeviceRemoveCircuit). Při vyrovnávání by se okruhy továrny normálně neměly odebírat.
Popisovače souborů v uživatelském režimu
ACX nečeká na zavření souborů uživatelského režimu před vytvořením nových okruhů. Životnost popisovačů systému souborů není svázaná s životností hardwarových prostředků využívaných zařízením nebo obvody. Je zodpovědností klientů naslouchat příchodu nebo odstranění rozhraní a uzavřít a znovu otevřít popisovače souborů.
Staré popisovače souborů jsou označené jako zastaralé a ACX nevyřídí všechny vstupně-výstupní požadavky, které s nimi souvisejí.
Viz také
Přehled rozšíření zvukových tříd ACX
referenční dokumentace ACX