class DisplayData – данные дисплея¶
Класс DisplayData предоставляет доступ к вспомогательным каналам подключённого дисплея HDMI / DisplayPort:
DDC (Display Data Channel) – это шина I2C, по которой передаётся EDID дисплея – структурированный блок, описывающий возможности панели (производитель, поддерживаемые разрешения и частоты обновления, форматы цвета и звука, …). Устройства-источники запрашивают его один раз при запуске, чтобы определить, что поддерживает приёмник.
CEC (Consumer Electronics Control) – это однопроводная двунаправленная шина, которая позволяет подключённым устройствам HDMI / DisplayPort обмениваться короткими управляющими пакетами – включение/выключение питания, переключение входа, громкость, пересылка команд пульта и т. д.
При создании можно включить любой из каналов или оба сразу. Сырой EDID считывается методом display_id(); кадры CEC можно отправлять методом send_frame(), синхронно опрашивать через receive_frame() или направлять в функцию обратного вызова с помощью frame_callback().
Пример – запрос EDID подключённого дисплея и прослушивание кадров CEC, адресованных логическому адресу 0:
import display
data = display.DisplayData(cec=True, ddc=True)
# Read the EDID once at startup.
edid = data.display_id()
print("EDID:", edid)
def on_frame(src, payload):
print("CEC from {:#x}: {}".format(src, payload))
data.frame_callback(on_frame, 0)
Конструкторы¶
- class display.DisplayData(*, cec: bool = False, ddc: bool = False, ddc_addr: int = 0x50)¶
cecустановите вTrue, чтобы включить связь по CEC с внешним дисплеем.ddcустановите вTrue, чтобы включить связь по DDC с внешним дисплеем.ddc_addrадрес I2C EEPROM внешнего дисплея.- display_id() bytes¶
Возвращает данные EDID внешнего дисплея в виде объекта
bytes. Заголовки и контрольные суммы EDID проверяются, и все секции объединяются в один объектbytes. При ошибке вызываетOSError.
- send_frame(dst_addr: int, src_addr: int, data: bytes) None¶
Отправляет кадр CEC по адресу
dst_addrотsrc_addrс содержимымdata. При ошибке вызываетOSError.
- receive_frame(dst_addr: int, *, timeout: int = 1000) tuple[int, bytes]¶
Ожидает до
timeoutмиллисекунд кадр CEC, адресованныйdst_addr. Возвращает кортеж(src_addr, data). При истечении времени ожидания или ошибке вызываетOSError.
- frame_callback(callback: Callable[[int, bytes], None] | None, dst_addr: int) None¶
Регистрирует
callback, который будет вызван при получении кадра CEC, адресованногоdst_addr. Функция обратного вызова вызывается с двумя аргументами: исходным адресом какintи полезной нагрузкой кадра как объектомbytes.Передайте
Noneв качествеcallback, чтобы отключить приём. Пока зарегистрирована функция обратного вызова, не вызывайтеDisplayData.receive_frame().