class DisplayData – Dados do Ecrã

A classe DisplayData permite acesso aos canais laterais de um ecrã HDMI / DisplayPort ligado:

  • DDC (Display Data Channel) é um barramento I2C que transporta o EDID do ecrã – 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 consultam-no uma vez no arranque para descobrir o que o destino suporta.

  • CEC (Consumer Electronics Control) é um barramento bidirecional de fio único que permite aos dispositivos HDMI / DisplayPort ligados trocar pacotes de controlo curtos – ligar/desligar, comutação de entrada, volume, reencaminhamento de telecomando, etc.

Um ou ambos os canais podem ser ativados na construção. O EDID bruto é lido com display_id(); as tramas CEC podem ser enviadas com send_frame(), consultadas de forma síncrona através de receive_frame(), ou encaminhadas para uma callback com frame_callback().

Exemplo – consultar o EDID do ecrã ligado e aguardar tramas CEC endereçadas 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 ativar a comunicação CEC com um ecrã externo.

ddc definido como True para ativar a comunicação DDC com um ecrã externo.

ddc_addr endereço I2C da EEPROM do ecrã externo.

display_id() bytes

Devolve os dados EDID do ecrã externo como um objeto bytes. Os cabeçalhos e somas de verificação EDID são verificados e todas as secções são concatenadas num único objeto bytes. Lança OSError em caso de falha.

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

Envia uma trama CEC para dst_addr a partir de src_addr contendo data. Lança OSError em caso de falha.

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

Aguarda até timeout milissegundos por uma trama CEC endereçada a dst_addr. Devolve um tuplo de (src_addr, data). Lança OSError em caso de tempo limite ou falha.

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

Regista callback para ser chamada quando uma trama CEC endereçada a dst_addr é recebida. A callback é invocada com dois argumentos: o endereço de origem como um int e o payload da trama como um objeto bytes.

Passe None como callback para desativar a receção. Enquanto uma callback estiver registada, não chame DisplayData.receive_frame().