Драйвер мини-порта топологии
Драйвер мини-порта топологии управляет различными элементами управления оборудованием (например, громкостью и отключением звука) в цепи микшера аудиоадаптера. Этот драйвер перечисляет элементы управления как узлы в топологии микшера, позволяя клиентам обнаруживать соединения между узлами, а также запрашивать и задавать параметры управления на каждом узле.
Системный драйвер SysAudio просматривает топологию адаптера при создании графа фильтра звука. API-интерфейс микшера (описанный в разделе Windows multimedia документации по Microsoft Windows SDK) представляет узлы топологии как элементы управления линиями микшера и предоставляет их приложениям пользовательского режима, таким как SndVol32. Дополнительные сведения см. в разделах SysTray и SndVol32.
Драйвер мини-порта топологии должен реализовывать интерфейс мини-порта топологии, который драйвер порта использует для инициализации драйвера мини-порта. Интерфейс мини-порта IMiniportTopology наследует методы в интерфейсе IMiniport ; он не предоставляет дополнительных методов. Драйвер аудиоадаптера формирует фильтр топологии , привязывая интерфейс IMiniportTopology объекта мини-порта к интерфейсу IPortTopology объекта порта.
Как правило, фильтр топологии охватывает большинство узлов топологии адаптера, хотя другие устройства в адаптере могут содержать дополнительные узлы топологии. Например, волновое устройство, представленное в виде волнового фильтра, может содержать узлы DAC (KSNODETYPE_DAC) и ADC (KSNODETYPE_ADC).
Запросы и настройка параметров управления на узлах топологии выполняются с помощью запросов свойств. Каждый тип узла связан с определенным свойством или набором свойств. Узел может поддерживать только одно значение элемента управления. Например, узел тома (KSNODETYPE_VOLUME) имеет значение, указывающее его текущий параметр тома. Другие узлы могут поддерживать несколько значений элементов управления. Например, трехмерный узел (KSNODETYPE_3D_EFFECTS) поддерживает ряд свойств трехмерного буфера и прослушивателя 3D. Узел суммы (KSNODETYPE_SUM), с другой стороны, не имеет управляющих значений.
Драйвер мини-порта топологии использует дескриптор подключения (PCCONNECTION_DESCRIPTOR) для описания соединения между двумя узлами топологии. Каждое подключение направляется и указывает как "от узла", так и от узла к узлу. Узел может иметь несколько контактов, а функция, выполняемая одним закреплением, может отличаться от функции других контактов. Чтобы отличить один контакт от другого, драйвер мини-порта нумерует контакты на узле. Эти номера контактов отображаются в дескрипторах подключения. Например, фильтр с переменной состояния может иметь три выходных контакта ( по одному для высокой, средней и низкой частоты) с нумеровкой 1, 2 и 3. Нумерирование закрепления позволяет клиентам драйвера мини-порта определять, какие подключения связаны с какими контактами.
Дескриптор подключения использует идентификатор различающегося узла, PCFILTER_NODE, чтобы отличить закрепление на фильтре от контакта на узле в фильтре. Каждое жесткое подключение микшерной цепи к устройствам отрисовки и записи звука в звуковом адаптере представлено в виде закрепления на фильтре топологии. Другие контакты фильтров топологии представляют внешние физические подключения, например разъем lineout на карта адаптера. Контакты в фильтре топологии представляют физические, жесткие подключения адаптера оборудования. Таким образом, контакты не могут предоставлять явный контроль над тем, установлено ли соединение, и их нельзя использовать для управления потоком данных через это соединение.
Один дескриптор соединения может описывать соединение между любыми двумя типами контактов в топологии. Контакты на двух сторонах соединения могут быть контактами на фильтре или на узлах в фильтре, либо соединение может иметь закрепление фильтра с одной стороны и закрепление узла с другой. Драйвер мини-порта задает топологию в виде массива дескрипторов подключения. Один контакт может иметь несколько подключений, что означает, что один и тот же контакт может отображаться в нескольких дескрипторах соединений в массиве.
Описание топологии, получаемое клиентом из драйвера мини-порта, не предназначено для поддержки открытого обнаружения способов интерпретации типов узлов, которые неизвестны клиенту. Только нумерирование контактов узла не предоставляет клиенту сведения, необходимые для обнаружения функций контактов. Хотя драйвер мини-порта определяет тип узла (с помощью GUID), он не предоставляет стандартизированный список параметров для описания типа узла или контактов, поддерживаемых типом узла.
Например, если клиент перечисляет узел, использующий guid типа узла KSNODETYPE_VOLUME для идентификации себя, клиент может использовать узел только в том случае, если ему известны соглашения о работе с узлами томов. По соглашению узел тома, например, поддерживает свойство KSPROPERTY_AUDIO_VOLUMELEVEL и назначает номера контактов узлов 0 и 1 выходным (исходным) и входным (приемником) контактам соответственно. Кроме того, клиент, который может управлять узлом тома, обычно выполняет направленный поиск, который ограничивает его исследование относительно небольшим количеством типов узлов (например, узлов тома и отключения звука). Клиент обычно изучает только части графа фильтра, которые, скорее всего, содержат узлы томов (например, линии микшера).
Интерфейс мини-порта поддерживает доставку нежелательных изменений значений элемента управления из драйвера мини-порта в драйвер порта. Эта функция поддерживает устройства с ручками управления, ползунками или переключателями, которыми пользователь может физически управлять. Каждый раз, когда пользователь изменяет значение элемента управления узла, аппаратное прерывание уведомляет драйвер порта о возникновении аппаратного события .