classe DisplayData – Dados do Display

A classe DisplayData fornece acesso aos links de canal lateral de um display HDMI / DisplayPort conectado:

  • DDC (Display Data Channel) é um barramento I2C que transporta o EDID do display – um bloco estruturado que descreve as capacidades do painel (fabricante, resoluções e taxas de atualização suportadas, formatos de cor e áudio, …). Os dispositivos de origem o consultam uma vez na inicialização para descobrir o que o destino (sink) suporta.

  • CEC (Consumer Electronics Control) é um barramento bidirecional de fio único que permite que dispositivos HDMI / DisplayPort conectados troquem pequenos pacotes de controle – ligar/desligar, troca de entrada, volume, encaminhamento de controle remoto, etc.

Um dos canais ou ambos podem ser habilitados na construção. O EDID bruto é lido com display_id(); quadros CEC podem ser enviados com send_frame(), consultados de forma síncrona via receive_frame(), ou roteados para um callback com frame_callback().

Exemplo – consultar o EDID do display conectado e escutar quadros CEC endereçados ao endereço lógico 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)

Construtores

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

cec definido como True para habilitar a comunicação CEC com um display externo.

ddc definido como True para habilitar a comunicação DDC com um display externo.

ddc_addr endereço I2C da EEPROM do display externo.

display_id() bytes

Retorna os dados EDID do display externo como um objeto bytes. Os cabeçalhos e checksums do EDID são verificados e todas as seções são concatenadas em um único objeto bytes. Levanta OSError em caso de falha.

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

Envia um quadro CEC para dst_addr a partir de src_addr contendo data. Levanta OSError em caso de falha.

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

Aguarda até timeout milissegundos por um quadro CEC endereçado a dst_addr. Retorna uma tupla de (src_addr, data). Levanta OSError em caso de timeout ou falha.

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

Registra callback para ser chamado quando um quadro CEC endereçado a dst_addr for recebido. O callback é invocado com dois argumentos: o endereço de origem como um int e o payload do quadro como um objeto bytes.

Passe None como callback para desabilitar a recepção. Enquanto um callback estiver registrado, não chame DisplayData.receive_frame().