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


Мониторинг обнаружения горячего подключаемого модуля

Сведения на этой странице относятся к графическим драйверам, реализованным с использованием версии WDDM, предшествующей версии 2.2.

Видеовыход адаптера дисплея рассматривается как дочернее устройство этого адаптера. Монитор или другое внешнее устройство отображения, которое подключается к выходным данным, не считается дочерним устройством. Во время инициализации функция драйвера минипорта дисплея DxgkDdiQueryChildRelations назначает каждому дочернему устройству тип и значение осведомленности HPD. Тип является одним из перечислителей DXGK_CHILD_DEVICE_TYPE :

  • ТипВидеоВыход

  • TypeOther

Значение осведомленности HPD является одним из определений в перечислении DXGK_CHILD_DEVICE_HPD_AWARENESS.

  • HpdAwarenessAlwaysConnected

  • HpdAwarenessInterruptible

  • HpdAwarenessPolled

Дочернее устройство, которое имеет тип TypeVideoOutput и любое значение осведомленности HPD, отличное от HpdAwarenessAlwaysConnected , называется соединителем вывода видео.

Если драйвер мини-порта дисплея не может определить, подключен ли монитор к выходным данным видео, драйвер должен эмулировать поведение прерываемого устройства, при этом значение осведомленности HPD имеет значение HpdAwarenessInterruptible. Если драйвер минипорта дисплея должен указать, что монитор с возможностью прерывания должен быть подключен к выходу видео, например, когда пользователь использует сочетание клавиш для переключения на телевизионный режим, драйвер должен вызвать функцию DxgkCbIndicateChildStatus со статусом ChildStatus. HotPlug. Подключено, установленным в значение TRUE.

В определенных случаях операционная система запрашивает у драйвера минипорта дисплея предоставить информацию о состоянии всех видеоразъемов, имеющих значение осведомленности HPdAwarenessPolled. Нет регулярного интервала опроса; скорее, запрос выполняется, если требуется обновить список доступных устройств и режимов отображения. Например, при закреплении ноутбука операционная система должна знать, подключен ли монитор к выходным данным видео на док-станции. Операционная система выполняет запрос, вызывая функцию DxgkDdiQueryChildStatus для каждого дочернего устройства с значением осведомленности hpdAwarenessPolled.

Для разъёмов видео-выхода, которые имеют значение HpdAwarenessInterruptible, драйвер мини-порта дисплея отвечает за уведомление операционной системы всякий раз, когда внешнее устройство отображения горячо подключено или отключено. Код обработки прерываний драйвера минипорта дисплея вызывает функцию DxgkCbIndicateChildStatus драйвера дисплея, чтобы сообщить о том, что внешнее устройство дисплея было подключено или отключено от определенного вывода видео. При закреплении компьютера ноутбука функция DxgkDdiNotifyAcpiEvent должна вызвать DxgkCbIndicateChildStatus для каждого вывода видео на док-станции, которая имеет значение осведомленности HPD о hpdAwarenessInterruptible.

Если соединитель с значением осведомленности HPD в HpdAwarenessPolled становится недоступным (т. е. при закреплении ноутбука), функция драйвера минипорта dxgkDdiNotifyAcpiEvent должна вызвать DxgkCbIndicateChildStatus , чтобы сообщить, что соединитель отключен.

Выходные данные видео, связанные с интегрированной панелью отображения на переносимом компьютере, являются необычным случаем. Операционная система должна знать, открыта ли крышка портативного компьютера или закрыта, поэтому идея подключения используется для обозначения открытия и идеи о том, что не подключено, используется для обозначения закрытия. Выходные данные видео, связанные с интегрированным дисплеем на переносном компьютере, имеют значение осведомленности hpdAwarenessInterruptible. Это не означает, что адаптер дисплея создает прерывание при открытии или закрытии крышки. Скорее, BIOS ACPI создает прерывание при открытии или закрытии крышки. Это прерывание приводит к вызову функции DxgkDdiNotifyAcpiEvent драйвера дисплея, которая вызывает DxgkCbIndicateChildStatus, чтобы сообщить о состоянии (открытом или закрытом) крышки. Драйвер минипорта отображения сообщает о состоянии крышки, устанавливая элемент HotPlug.Connected структуры DXGK_CHILD_STATUS в TRUE (открыто) или FALSE (закрыто) и передавая структуру DXGK_CHILD_STATUS в DxgkCbIndicateChildStatus.

В следующем списке описаны шаги, которые выполняются при подключении монитора к разъему HD15, при условии, что разъем имеет значение осведомленности HPD HpdAwarenessPolled.

  1. Монитор подключен к соединителю HD15 на адаптере дисплея. Адаптер дисплея не распознает это как событие горячего подключения.

  2. В будущем приложение в режиме пользователя запрашивает список устройств отображения.

  3. Для каждого соединителя вывода видео на адаптере дисплея со значением осведомленности HPD, равным HpdAwarenessPolled, диспетчер VidPN вызывает функцию DxgkDdiQueryChildStatus драйвера минипорт-дисплея, чтобы определить, подключено ли внешнее устройство отображения. Когда DxgkDdiQueryChildStatus вызывается для соединителя HD15, он сообщает, что внешний монитор действительно подключен.

В следующем списке описаны шаги, выполняемые при подключении монитора к разъёму DVI, при условии, что разъём имеет значение осведомлённости HPdAwarenessInterruptible.

  1. Плоская панель подключена к соединителю DVI на адаптере дисплея.

  2. Адаптер дисплея обнаруживает событие горячего подключения и создает прерывание.

  3. Прерывание обрабатывается функцией dxgkDdiInterruptRoutine драйвера для отображения минипорта, которая планирует отложенный вызов процедуры (DPC). Впоследствии вызывается функция обратного вызова драйвера DPC для минипорта.

  4. Функция обратного вызова DPC передает структуру DXGK_CHILD_STATUS функции драйвера порта отображения DxgkCbIndicateChildStatus чтобы сообщить о состоянии соединителя DVI. Элемент ChildUid структуры DXGK_CHILD_STATUS определяет соединитель DVI, а элемент HotPlug.Connected (задано значение TRUE в данном случае) указывает, что подключено внешнее устройство отображения.

Предположим, что соединитель DVI поддерживает донгл с тремя ветвями: DVI, HD15 и S-video. В этом случае драйвер мини-порта дисплея ранее перечислил три дочерних устройства, связанных с одним физическим соединителем DVI: DVI-on-DVI, HD15 on-DVI и S-video-on-DVI. Каждое из этих дочерних устройств будет иметь тип TypeVideoOutput и значение осведомленности HPD hpdAwarenessInterruptible. В следующем списке описаны шаги при подключении монитора к порту HD15 адаптера.

  1. Адаптер дисплея обнаруживает событие горячего подключения и генерирует прерывание.

  2. Прерывание обрабатывается функцией dxgkDdiInterruptRoutine драйвера для отображения минипорта, которая планирует отложенный вызов процедуры (DPC). Впоследствии вызывается функция обратного вызова драйвера DPC для минипорта.

  3. Функция обратного вызова DPC определяет, что событие горячее подключение произошло на ветви HD15 переходного устройства (HD15-on-DVI).

  4. Функции обратного вызова DPC передают структуру DXGK_CHILD_STATUS в DxgkCbIndicateChildStatus, чтобы сообщить о состоянии видеовыхода HD15 on DVI. Элемент ChildUid в структуре DXGK_CHILD_STATUS определяет выходные данные видео, а элемент HotPlug.Connected (задано значение TRUE в данном случае) указывает, что устройство внешнего дисплея подключено.

В следующем списке описаны шаги, выполняемые при закрытии крышки ноутбука.

  1. Крышка закрывается на переносимом компьютере, который создает событие ACPI. Впоследствии вызывается функция dxgkDdiNotifyAcpiEvent драйвера мини-порта дисплея.

  2. DxgkDdiNotifyAcpiEvent передает структуру DXGK_CHILD_STATUS функции драйвера порта отображения DxgkCbIndicateChildStatus, чтобы сообщить о состоянии дочернего устройства, связанного с встроенной панелью отображения. В частности, DxgkDdiNotifyAcpiEvent задает элемент HotPlug.Connected структуры DXGK_CHILD_STATUS значение FALSE.