class DisplayData – Data displeje

Třída DisplayData poskytuje přístup k vedlejším komunikačním kanálům připojeného HDMI / DisplayPort displeje:

  • DDC (Display Data Channel) je sběrnice I2C, která přenáší EDID displeje – strukturovaný blok popisující schopnosti panelu (výrobce, podporovaná rozlišení a obnovovací frekvence, barevné a zvukové formáty, …). Zdrojová zařízení jej při spuštění jednou dotáží, aby zjistila, co cílové zařízení podporuje.

  • CEC (Consumer Electronics Control) je jednovodičová obousměrná sběrnice, která umožňuje připojeným HDMI / DisplayPort zařízením vyměňovat si krátké řídicí pakety – zapnutí/vypnutí, přepínání vstupů, hlasitost, předávání signálů dálkového ovládání atd.

Při konstrukci lze povolit jeden nebo oba kanály. Surová data EDID se čtou pomocí display_id(); CEC snímky lze odesílat pomocí send_frame(), synchronně dotazovat pomocí receive_frame() nebo směrovat na callback pomocí frame_callback().

Příklad – dotaz na EDID připojeného displeje a naslouchání CEC snímkům adresovaným na logickou adresu 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)

Konstruktory

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

cec nastavte na True pro povolení CEC komunikace s externím displejem.

ddc nastavte na True pro povolení DDC komunikace s externím displejem.

ddc_addr I2C adresa EEPROM externího displeje.

display_id() bytes

Vrátí data EDID externího displeje jako objekt bytes. Hlavičky EDID a kontrolní součty jsou ověřeny a všechny sekce jsou spojeny do jediného objektu bytes. Při selhání vyvolá OSError.

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

Odešle CEC snímek na dst_addr z src_addr obsahující data. Při selhání vyvolá OSError.

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

Čeká až timeout milisekund na CEC snímek adresovaný na dst_addr. Vrátí n-tici (src_addr, data). Při vypršení časového limitu nebo selhání vyvolá OSError.

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

Zaregistruje callback, který se zavolá při přijetí CEC snímku adresovaného na dst_addr. Callback je vyvolán se dvěma argumenty: zdrojovou adresou jako int a obsahem snímku jako objektem bytes.

Předejte None jako callback pro zakázání příjmu. Dokud je callback zaregistrován, nevolejte DisplayData.receive_frame().