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)¶
cecaufTruesetzen, um die CEC-Kommunikation mit einem externen Display zu aktivieren.ddcaufTruesetzen, um die DDC-Kommunikation mit einem externen Display zu aktivieren.ddc_addrI2C-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 einzigenbytes-Objekt zusammengefügt. Löst bei einem FehlerOSErroraus.
- send_frame(dst_addr: int, src_addr: int, data: bytes) None¶
Sendet einen CEC-Frame an
dst_addrvonsrc_addrmit dem Inhaltdata. Löst bei einem FehlerOSErroraus.
- receive_frame(dst_addr: int, *, timeout: int = 1000) tuple[int, bytes]¶
Wartet bis zu
timeoutMillisekunden auf einen CEC-Frame, der andst_addrgerichtet ist. Gibt ein Tupel(src_addr, data)zurück. Löst bei Zeitüberschreitung oder FehlerOSErroraus.
- frame_callback(callback: Callable[[int, bytes], None] | None, dst_addr: int) None¶
Registriert
callback, der aufgerufen wird, wenn ein CEC-Frame empfangen wird, der andst_addrgerichtet ist. Der Callback wird mit zwei Argumenten aufgerufen: der Quelladresse alsintund dem Frame-Inhalt alsbytes-Objekt.Übergeben Sie
Nonealscallback, um den Empfang zu deaktivieren. Solange ein Callback registriert ist, rufen SieDisplayData.receive_frame()nicht auf.