Поделиться через


Перечисление устройств ACX

В этом разделе рассматриваются перечисление устройств ACX, запуск и завершение работы, а также перебалансирование устройств. Общие сведения об ACX см. в расширениях аудиоклассов ACX. Сведения об управлении питанием ACX и PnP см. в разделе «Управление питанием ACX» и.

Перечисление и запуск устройств ACX для статических звуковых устройств

Чтобы узнать, как работает запуск ACX, описан следующий сценарий.

  • Звуковое устройство представлено одним каналом.
  • Время существования аудио-канала связано со временем существования устройства PnP.
  • Одно устройство может создавать несколько каналов для разных звуковых устройств.
  • Среда режима ядра KMDF.

Последовательность запуска:

  • WDM DriverEntry. Область действия драйвера. Рутинная функция DriverEntry для драйверов WDF

    • Инициализация трассировки.
    • При необходимости зарегистрируйтесь для выгрузки.
    • Создайте WDFDRIVER.
    • Вызовите ACX для выполнения любой инициализации post-драйвера.
    • По желанию выполните инициализацию драйвера после загрузки.
  • WDF DeviceAdd. Область действия устройства. функция обратного вызова EVT_WDF_DRIVER_DEVICE_ADD

    • Вызов ACX для инициализации контекста устройства — ACX_DEVICEINIT_CONFIG_INIT(&devInitCfg)функция ACX_DEVICEINIT_CONFIG_INIT
    • Регистрация функций обратного вызова PnP Power в WDF с кодом WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);
    • Создайте устройство с использованием AcxDeviceInitialize
    • Вызовите ACX, чтобы выполнить последующую инициализацию устройства.
    • При необходимости выполните любую постинициализацию устройства.
  • WDF PrepareHardware. Область действия устройства. Функция обратного вызова EVT_WDF_DEVICE_PREPARE_HARDWARE.

    • Создание и инициализация аппаратных ресурсов (для прерываний и потоков регистрируйте их в ACX).

    • Создайте одну или несколько цепей (однократное создание).

      • Создайте контекст AcxCircuitInit.
      • Добавьте обратные вызовы.
      • Создайте AcxCircuit.
      • При необходимости выполните дополнительную инициализацию цепи.
      • Зарегистрируйте контур с помощью AcxDeviceAddCircuitDevice.
  • Обратный вызов устройства WDF D0. Область действия устройства. Функция обратного вызова EVT_WDF_DEVICE_D0_ENTRY.

  • ACX вызывает функцию обратного вызова EvtAcxCircuitPowerUp на всех цепях. Область действия цепи.

  • ACX перемещает потоки (если таковые) в предыдущее состояние до отключения устройства. Область действия экземпляра потока.

  • Очереди WDF перезапускаются.

  • Функция обратного вызова EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT. Привязан к устройству.

  • Функция обратного вызова EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART. Область действия устройства. - Инициализация после каждого включения от Dx.

Добавить поток ACX

  • AcX Stream Add (instance) on ACX Circuit (ACX callback on ACX circuits) — вызывается в любое время после вызова самоуправляемого ввода-вывода или перезапуска WDF, и устройство находится в D0. Область действия контура.
    • Входные данные: контекст AcxStreamInit, ACXCIRCUIT.
    • Добавьте обратные вызовы.
    • Создайте AcxStream (экземпляр).
    • При необходимости выполните инициализацию любого экземпляра post stream.
    • При возвращении ACX активирует этот экземпляр потока, и так как он в этом сценарии является единственным на аудио пути, он позволяет передавать потоковые сообщения.

Перечисление и запуск устройств ACX для динамических звуковых устройств

В этом сценарии предполагается следующее.

  • Динамическая поддержка звука (создание и удаление звуковых устройств во время выполнения).
  • Время существования устройства не привязано к времени существования канала.
  • Одно устройство может создавать несколько каналов для разных звуковых устройств.
  • Использует простой статический шаблон, описанный выше, добавляя только элементы, специфичные для динамического шаблона.
  • Использует дочерние необработанные PDOS.
  • Среда режима ядра KMDF.

Последовательность запуска для этого сценария:

  • WDM DriverEntry. Область действия драйвера.

    • Запуск трассировки.
    • При необходимости зарегистрируйтесь для выгрузки.
    • Создайте WDFDRIVER.
    • Вызовите ACX для выполнения любой динамической инициализации драйвера.
    • При необходимости выполните постинициализацию любого драйвера.
  • WDF DeviceAdd. Область действия устройства.

    • Вызовите ACX для инициализации контекста инициализации устройства.
    • Создание устройства.
    • Вызовите ACX для выполнения любых действий после инициализации устройства.
    • При необходимости выполните любые действия после инициализации устройства.
  • WDF PrepareHardware. Область действия устройства.

    • Создание и инициализация аппаратных ресурсов (для прерываний и потоков регистрируйте их в ACX).
  • Обратный вызов устройства WDF D0. Область действия устройства.

  • Очереди WDF перезапускаются.

  • WDF DeviceSelfManagedIoInit. Область действия устройства.

  • WDF DeviceSelfManagedIoRestart. Область действия устройства.

    • Инициализация после каждого включения от Dx.

Динамическое создание схемы (в любое время)

  • Драйвер выделяет структуры WDFDEVICE_INIT путем вызова WdfPdoInitAllocate. Драйвер отвечает за вызов WdfDeviceInitFree в случае, если он сталкивается с ошибками перед успешным созданием устройства.
  • Драйвер указывает любые обратные вызовы PnP/power, которые он желает получать.
  • Управляющая программа создает устройство.
  • Драйвер инициализирует новое устройство или схему путем вызова AcxDeviceAddCircuitDevice.
  • WDF/PnP берет на себя управление, и выполняется простой шаблон работы перечисления и запуска, описанный в предыдущем разделе.

AcxFactoryCircuit

Драйвер ACX также может создавать объекты AcxFactoryCircuit (поставщики каналов) во время последовательности питания, используя функцию AcxFactoryCircuitCreate и функцию AcxDeviceAddFactoryCircuit .

Поскольку драйвер ACX зарегистрировал себя в ACX в качестве фабрики контуров, среда ACX использует зарегистрированную фабрику, чтобы запросить у драйвера создание нового контура.

AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);

AcxDeviceAddFactoryCircuit(Device, factory);

Перебалансация устройства ACX

Перебалансирование выполняется, когда системное использование ресурсов требует от операционной системы перебалансировать ресурсы между устройствами. Общие сведения о перебалансе см. в разделе Реализация перебаланса PnP для драйверов аудио portCls.

ACX поддерживает перебалансацию устройств следующим образом:

  • В последовательности завершения работы WDF/ACX драйвер освобождает все ресурсы потоков данных (EvtAcxStreamPowerDown, EvtAcxStreamReleaseHardware), схемные ресурсы (EvtAcxCircuitPowerDown, EvtAcxCircuitReleaseHardware) и ресурсы устройства (EvtDeviceReleaseHardware).

  • Все запросы зафиксированы, а дескрипторы остаются открытыми.

  • В процессе запуска последовательности WDF/ACX драйвер следит за тем, чтобы новые ресурсы были совместимы с текущими, и вносит все разрешенные корректировки в свои настройки. Если ресурсы несовместимы с текущей инициализацией устройства или канала, драйвер должен удалить текущие каналы и создать новые. Дополнительные сведения см. ниже.

  • В последовательности включения WDF вызывает свою EvtDevicePrepareHardware и EvtDeviceD0, а ACX вызывает соответствующую запись EvtAcxCircuitPrepareHardware и EvtAcxCircuitPowerUp и перемещает все потоки в существующие состояния.

  • Как только очереди переходят в активный режим, поток ввода-вывода возобновляется.

ACX не позволяет выполнять удаление (сбой при запросе удаления) или перебалансировку (сбой при остановке запроса), если имеются потоки в активном состоянии (RUN).

Драйверы могут выбрать всегда уничтожать и заново создавать звуковые устройства при изменении балансировки. Это тот же сценарий выше, когда устройство обнаруживает, что новые параметры несовместимы со старыми. Удаление схемы необходимо выполнить в обратных вызовах EvtDevicePrepareHardware/EvtDeviceReleaseHardware, а новая схема создается в EvtDevicePrepareHardware. Драйвер удаляет контур, отменив регистрацию контура (с помощью AcxDeviceRemoveCircuit). Обычно схемы завода не следует удалять во время перебаланса.

Дескриптор файла в режиме пользователя

ACX не ожидает закрытия дескрипторов файлов в режиме пользователя перед повторным созданием новых цепей. Время существования дескрипторов файловой системы не связано с временем существования аппаратных ресурсов, используемых устройством или цепями. Клиенты обязаны отслеживать появление и удаление интерфейса, а также закрывать и повторно открывать дескрипторы файлов.

Старые дескрипторы файлов помечены как устаревшие, и ACX отклоняет все запросы ввода-вывода, связанные с ними.

См. также

Общие сведения о расширениях аудиоклассов ACX

справочная документация ACX

последовательности вызовов PnP и управления питанием