class DisplayData – Display-Daten

Die Klasse DisplayData bietet Zugriff auf die Seitenkanal-Verbindungen eines angeschlossenen HDMI-/DisplayPort-Displays:

  • DDC (Display Data Channel) ist ein I2C-Bus, der die EDID des Displays überträgt – ein strukturierter Block, der die Fähigkeiten des Panels beschreibt (Hersteller, unterstützte Auflösungen und Bildwiederholraten, Farb- und Audioformate, …). Quellgeräte fragen ihn einmal beim Start ab, um zu ermitteln, was die Senke unterstützt.

  • CEC (Consumer Electronics Control) ist ein bidirektionaler Eindraht-Bus, über den verbundene HDMI-/DisplayPort-Geräte kurze Steuerpakete austauschen können – Ein-/Ausschalten, Eingangsumschaltung, Lautstärke, Fernbedienungsweiterleitung usw.

Einer oder beide Kanäle können bei der Erstellung aktiviert werden. Die rohe EDID wird mit display_id() gelesen; CEC-Frames können mit send_frame() gesendet, synchron über receive_frame() abgefragt oder über frame_callback() an einen Callback geleitet werden.

Beispiel – die EDID des angeschlossenen Displays abfragen und auf CEC-Frames warten, die an die logische Adresse 0 gerichtet sind:

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)

Konstruktoren

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

cec auf True setzen, um die CEC-Kommunikation mit einem externen Display zu aktivieren.

ddc auf True setzen, um die DDC-Kommunikation mit einem externen Display zu aktivieren.

ddc_addr I2C-Adresse des EEPROM des externen Displays.

display_id() bytes

Gibt die EDID-Daten des externen Displays als bytes-Objekt zurück. EDID-Header und Prüfsummen werden verifiziert und alle Abschnitte werden zu einem einzigen bytes-Objekt zusammengefügt. Löst bei einem Fehler OSError aus.

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

Sendet einen CEC-Frame an dst_addr von src_addr mit dem Inhalt data. Löst bei einem Fehler OSError aus.

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

Wartet bis zu timeout Millisekunden auf einen CEC-Frame, der an dst_addr gerichtet ist. Gibt ein Tupel (src_addr, data) zurück. Löst bei Zeitüberschreitung oder Fehler OSError aus.

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

Registriert callback, der aufgerufen wird, wenn ein CEC-Frame empfangen wird, der an dst_addr gerichtet ist. Der Callback wird mit zwei Argumenten aufgerufen: der Quelladresse als int und dem Frame-Inhalt als bytes-Objekt.

Übergeben Sie None als callback, um den Empfang zu deaktivieren. Solange ein Callback registriert ist, rufen Sie DisplayData.receive_frame() nicht auf.