class DisplayData – Date de afișaj

Clasa DisplayData oferă acces la legăturile de canal secundar ale unui afișaj HDMI / DisplayPort atașat:

  • DDC (Display Data Channel) este o magistrală I2C care transportă EDID-ul afișajului – un bloc structurat care descrie capabilitățile panoului (producător, rezoluții și rate de reîmprospătare acceptate, formate de culoare și audio, …). Dispozitivele sursă îl interoghează o singură dată la pornire pentru a descoperi ce acceptă receptorul.

  • CEC (Consumer Electronics Control) este o magistrală bidirecțională cu un singur fir care permite dispozitivelor HDMI / DisplayPort conectate să schimbe pachete scurte de control – pornire/oprire, comutarea intrării, volum, redirecționarea telecomenzii etc.

Oricare dintre canale sau ambele pot fi activate la construcție. EDID-ul brut este citit cu display_id(); cadrele CEC pot fi trimise cu send_frame(), interogate sincron prin receive_frame() sau direcționate către o funcție de retroapelare (callback) cu frame_callback().

Exemplu – interogarea EDID-ului afișajului conectat și ascultarea cadrelor CEC adresate adresei logice 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)

Constructori

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

cec setat la True pentru a activa comunicarea CEC cu un afișaj extern.

ddc setat la True pentru a activa comunicarea DDC cu un afișaj extern.

ddc_addr adresa I2C a memoriei EEPROM a afișajului extern.

display_id() bytes

Returnează datele EDID ale afișajului extern ca obiect bytes. Anteturile și sumele de control EDID sunt verificate, iar toate secțiunile sunt concatenate într-un singur obiect bytes. Generează OSError în caz de eșec.

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

Trimite un cadru CEC către dst_addr de la src_addr care conține data. Generează OSError în caz de eșec.

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

Așteaptă până la timeout milisecunde un cadru CEC adresat lui dst_addr. Returnează un tuplu de forma (src_addr, data). Generează OSError la expirarea timpului sau în caz de eșec.

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

Înregistrează callback pentru a fi apelat când se primește un cadru CEC adresat lui dst_addr. Funcția de retroapelare este invocată cu două argumente: adresa sursă ca int și conținutul util al cadrului ca obiect bytes.

Transmiteți None ca callback pentru a dezactiva recepția. Cât timp este înregistrată o funcție de retroapelare, nu apelați DisplayData.receive_frame().