клас 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().