clase DisplayData – Datos de pantalla

La clase DisplayData proporciona acceso a los enlaces de canal lateral de una pantalla HDMI / DisplayPort conectada:

  • DDC (Display Data Channel) es un bus I2C que transporta el EDID de la pantalla, un bloque estructurado que describe las capacidades del panel (fabricante, resoluciones y frecuencias de actualización admitidas, formatos de color y audio, …). Los dispositivos fuente lo consultan una vez al inicio para descubrir qué admite el receptor.

  • CEC (Consumer Electronics Control) es un bus bidireccional de un solo cable que permite a los dispositivos HDMI / DisplayPort conectados intercambiar paquetes de control cortos: encendido/apagado, cambio de entrada, volumen, reenvío del mando a distancia, etc.

Uno o ambos canales pueden habilitarse en la construcción. El EDID en bruto se lee con display_id(); los fotogramas CEC pueden enviarse con send_frame(), sondearse de forma síncrona mediante receive_frame() o encaminarse a una función de retorno (callback) con frame_callback().

Ejemplo – consultar el EDID de la pantalla conectada y escuchar los fotogramas CEC dirigidos a la dirección lógica 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)

Constructores

class display.DisplayData(*, cec: bool = False, ddc: bool = False, ddc_addr: int = 0x50)

cec establecido en True para habilitar la comunicación CEC con una pantalla externa.

ddc establecido en True para habilitar la comunicación DDC con una pantalla externa.

ddc_addr dirección I2C de la EEPROM de la pantalla externa.

display_id() bytes

Devuelve los datos EDID de la pantalla externa como un objeto bytes. Las cabeceras y sumas de comprobación del EDID se verifican y todas las secciones se concatenan en un único objeto bytes. Lanza OSError en caso de fallo.

send_frame(dst_addr: int, src_addr: int, data: bytes) None

Envía un fotograma CEC a dst_addr desde src_addr que contiene data. Lanza OSError en caso de fallo.

receive_frame(dst_addr: int, *, timeout: int = 1000) tuple[int, bytes]

Espera hasta timeout milisegundos un fotograma CEC dirigido a dst_addr. Devuelve una tupla de (src_addr, data). Lanza OSError en caso de tiempo de espera agotado o fallo.

frame_callback(callback: Callable[[int, bytes], None] | None, dst_addr: int) None

Registra callback para que se invoque cuando se reciba un fotograma CEC dirigido a dst_addr. La función de retorno se invoca con dos argumentos: la dirección de origen como int y la carga útil del fotograma como objeto bytes.

Pase None como callback para deshabilitar la recepción. Mientras haya una función de retorno registrada, no llame a DisplayData.receive_frame().