Драйвер минипорта топологии

Драйвер минипорта топологии управляет различными аппаратными элементами управления (например, громкостью и отключением звука) в схеме микшера аудиоадаптера. Этот драйвер перечисляет элементы управления в виде узлов в топологии миксера, позволяя клиентам обнаруживать соединения между узлами, запрашивать и задавать параметры управления на каждом узле.

Системный драйвер SysAudio смотрит на топологию адаптера при создании графа аудиофильтра. API-интерфейс миксера (описанный в разделе мультимедиа Windows документации по пакету SDK для Microsoft Windows) представляет узлы топологии в виде элементов управления смешивания и предоставляет их приложениям в пользовательском режиме, таким как SndVol32. Дополнительные сведения см. в разделе SysTray и SndVol32.

Драйвер мини-порта топологии должен реализовать интерфейс минипорта топологии, который драйвер портов использует для инициализации драйвера мини-порта. Минипорт-интерфейс IMiniportTopology наследует методы в интерфейсе IMiniport ; он не предоставляет дополнительных методов. Драйвер аудиоадаптера формирует фильтр топологии путем привязки интерфейса IMiniportTopology минипорт-объекта к интерфейсу IPortTopology объекта порта.

Как правило, фильтр топологии охватывает большинство узлов топологии адаптера, хотя другие устройства в адаптере могут содержать дополнительные узлы топологии. Например, волновое устройство, представленное в виде волнового фильтра, может содержать узлы DAC (KSNODETYPE_DAC) и ADC (KSNODETYPE_ADC).

Запросы и настройка параметров управления на узлах топологии выполняются с помощью запросов свойств. Каждый тип узла связан с определенным свойством или набором свойств. Узел может поддерживать только одно значение элемента управления. Например, узел тома (KSNODETYPE_VOLUME) имеет значение, указывающее текущий параметр тома. Другие узлы могут поддерживать несколько значений элементов управления. Например, 3D-узел (KSNODETYPE_3D_EFFECTS) поддерживает ряд свойств 3D-буфера и 3D-прослушивателей. С другой стороны, узел суммы (KSNODETYPE_SUM) не имеет значений управления.

Драйвер мини-порта топологии использует дескриптор подключения (PCCONNECTION_DESCRIPTOR) для описания соединения между двумя узлами топологии. Каждое соединение направлено и указывает как начальный узел, так и конечный узел. Узел может иметь несколько контактов, и функция, выполняемая одним контактом, может отличаться от функций других контактов. Чтобы отличить один пин-код от другого, минипорт драйвер номерирует пин-коды на узле. Эти номера контактов отображаются в описателях подключений. Например, фильтр переменной состояния может иметь три выходных пина — по одному для высокой, средней и низкой частоты — нумерованные 1, 2 и 3. Нумерация пинов позволяет клиентам драйвера минипорта определить, какие подключения связаны с конкретными пинами.

Дескриптор соединения использует уникальный идентификатор узла, PCFILTER_NODE, чтобы отличить контакт на фильтре от контакта на узле внутри фильтра. Каждое из аппаратных подключений цепи миксера к устройствам рендеринга и записи звука в звуковом адаптере представлено как контакт на фильтре топологии. Другие выводы топологического фильтра представляют внешние физические подключения, такие как линейный выход на плате адаптера. Закрепления в фильтре топологии представляют физические, жесткие подключения оборудования адаптера. Таким образом, пин-коды не могут обеспечить явный контроль над тем, выполняется ли соединение, и они не могут использоваться для управления потоком данных через это соединение.

Один дескриптор подключения может описать соединение между любыми двумя типами выводов в топологии. Контакты на обеих сторонах соединения могут быть как контактами фильтра, так и контактами на узлах внутри фильтра, или соединение может иметь контакт фильтра с одной стороны и контакт узла с другой стороны. Минипорт-драйвер указывает топологию в виде массива дескрипторов соединений. Один пин-код может иметь несколько подключений, что означает, что один и тот же пин-код может отображаться в нескольких дескрипторе соединений в массиве.

Описание топологии, полученное клиентом от мини-драйвера, не предназначено для поддержки открытого обнаружения способов интерпретации типов узлов, неизвестных клиенту. Только нумерирование пин-кода узла не предоставляет клиенту информацию, необходимую для обнаружения функций пин-кодов. Хотя минипорт-драйвер определяет тип узла (с помощью GUID), он не предоставляет стандартный список параметров для описания типа узла или контактов, поддерживаемых типом узла.

Например, если клиент перечисляет узел, использующий GUID типа узла KSNODETYPE_VOLUME для того чтобы идентифицировать себя, клиент может использовать узел только в том случае, если он знает соглашения о работе с узлами томов. По соглашению узел тома, например, поддерживает свойство KSPROPERTY_AUDIO_VOLUMELEVEL и назначает номера контактов узла 0 и 1 выходному (источнику) и входному (приемнику) соответственно. Кроме того, клиент, который может управлять узлом регулировки громкости, обычно выполняет направленный поиск, ограничивающий исследование лишь несколькими типами узлов (например, узлов регулировки громкости и узлов отключения звука). Клиент обычно изучает только части графа фильтрации, которые, скорее всего, содержат узлы громкости (например, линии микшера).

Интерфейс минипорта поддерживает передачу несогласованных изменений управляющих значений с драйвера минипорта на драйвер порта. Эта функция включает устройства с ручками управления, ползунками или переключателями, которые можно физически управлять пользователем. Каждый раз, когда пользователь изменяет значение элемента управления узла, аппаратное прерывание уведомляет драйвер порта о том, что произошло событие оборудования .