klasa DisplayData – Podaci zaslona

Klasa DisplayData omogućuje pristup sporednim komunikacijskim kanalima priključenog HDMI / DisplayPort zaslona:

  • DDC (Display Data Channel) je I2C sabirnica koja prenosi EDID zaslona – strukturirani blok koji opisuje mogućnosti panela (proizvođač, podržane razlučivosti i frekvencije osvježavanja, formati boje i zvuka, …). Izvorni uređaji ga pri pokretanju jednom upituju kako bi otkrili što odredišni uređaj podržava.

  • CEC (Consumer Electronics Control) je dvosmjerna sabirnica s jednom žicom koja omogućuje povezanim HDMI / DisplayPort uređajima razmjenu kratkih upravljačkih paketa – uključivanje/isključivanje napajanja, prebacivanje ulaza, glasnoću, prosljeđivanje daljinskog upravljanja itd.

Pri konstrukciji se može omogućiti jedan ili oba kanala. Sirovi EDID čita se metodom display_id(); CEC okviri mogu se slati metodom send_frame(), sinkrono provjeravati metodom receive_frame() ili usmjeriti na povratni poziv metodom frame_callback().

Primjer – upit za EDID povezanog zaslona i osluškivanje CEC okvira upućenih logičkoj adresi 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)

Konstruktori

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

cec postavite na True za omogućavanje CEC komunikacije s vanjskim zaslonom.

ddc postavite na True za omogućavanje DDC komunikacije s vanjskim zaslonom.

ddc_addr I2C adresa EEPROM-a vanjskog zaslona.

display_id() bytes

Vraća EDID podatke vanjskog zaslona kao bytes objekt. EDID zaglavlja i kontrolne sume se provjeravaju, a svi se odsjeci spajaju u jedan bytes objekt. U slučaju neuspjeha podiže OSError.

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

Šalje CEC okvir na dst_addr s adrese src_addr koji sadrži data. U slučaju neuspjeha podiže OSError.

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

Čeka do timeout milisekundi na CEC okvir upućen dst_addr. Vraća n-torku (src_addr, data). U slučaju isteka vremena ili neuspjeha podiže OSError.

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

Registrira callback koji će se pozvati kada se primi CEC okvir upućen dst_addr. Povratni poziv se poziva s dva argumenta: izvorišnom adresom kao int i korisnim sadržajem okvira kao bytes objektom.

Proslijedite None kao callback za onemogućavanje primanja. Dok je povratni poziv registriran, nemojte pozivati DisplayData.receive_frame().