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


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

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

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

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

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

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

  • WDM DriverEntry. Область действия драйвера. Подпрограмма DriverEntry для драйверов WDF

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

    • Вызов ACX для инициализации контекста инициализации устройства — ACX_DEVICEINIT_CONFIG_INIT(&devInitCfg) функция ACX_DEVICEINIT_CONFIG_INIT
    • Регистрация обратного вызова WDF PnP Power 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 для динамических звуковых устройств

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

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

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

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

    • Трассировка инициализации.
    • При необходимости зарегистрируйтесь для выгрузки.
    • Создайте WDFDRIVER.
    • Вызовите ACX для выполнения любого инициализации драйвера post.
    • При необходимости инициализация любого драйвера post.
  • 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 и управления питанием