class DisplayData – Dati del Display

La classe DisplayData fornisce l’accesso ai canali laterali di un display HDMI / DisplayPort collegato:

  • DDC (Display Data Channel) e un bus I2C che trasporta l’EDID del display – un blocco strutturato che descrive le capacita del pannello (produttore, risoluzioni e frequenze di aggiornamento supportate, formati di colore e audio, …). I dispositivi sorgente lo interrogano una sola volta all’avvio per scoprire cosa supporta il sink.

  • CEC (Consumer Electronics Control) e un bus bidirezionale a filo singolo che consente ai dispositivi HDMI / DisplayPort collegati di scambiarsi brevi pacchetti di controllo – accensione/spegnimento, cambio di ingresso, volume, inoltro del telecomando, ecc.

Uno o entrambi i canali possono essere abilitati alla costruzione. L’EDID grezzo viene letto con display_id(); i frame CEC possono essere inviati con send_frame(), interrogati in modo sincrono tramite receive_frame(), oppure instradati a un callback con frame_callback().

Esempio – interroga l’EDID del display collegato e resta in ascolto dei frame CEC indirizzati all’indirizzo logico 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)

Costruttori

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

cec impostato a True per abilitare la comunicazione CEC con un display esterno.

ddc impostato a True per abilitare la comunicazione DDC con un display esterno.

ddc_addr indirizzo I2C della EEPROM del display esterno.

display_id() bytes

Restituisce i dati EDID del display esterno come oggetto bytes. Le intestazioni e i checksum dell’EDID vengono verificati e tutte le sezioni sono concatenate in un unico oggetto bytes. Solleva OSError in caso di errore.

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

Invia un frame CEC a dst_addr da src_addr contenente data. Solleva OSError in caso di errore.

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

Attende fino a timeout millisecondi un frame CEC indirizzato a dst_addr. Restituisce una tupla (src_addr, data). Solleva OSError in caso di timeout o errore.

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

Registra callback affinche venga chiamato quando viene ricevuto un frame CEC indirizzato a dst_addr. Il callback viene invocato con due argomenti: l’indirizzo sorgente come int e il payload del frame come oggetto bytes.

Passa None come callback per disabilitare la ricezione. Mentre un callback e registrato, non chiamare DisplayData.receive_frame().