Мониторинг обнаружения горячей замены

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

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

  • TypeVideoOutput

  • ТипДругий

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

  • HpdAwarenessAlwaysConnected

  • HpdAwarenessInterruptible

  • HpdAwarenessPolled

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

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

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

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

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

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

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

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

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

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

В следующем списке описаны действия, которые выполняются при подключении монитора к соединителю 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 и значение 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.