клас 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_addrI2C-адреса 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().