class DisplayData – kijelzőadatok

A DisplayData osztály hozzáférést biztosít a csatlakoztatott HDMI / DisplayPort kijelző mellékcsatorna-kapcsolataihoz:

  • A DDC (Display Data Channel) egy I2C busz, amely a kijelző EDID-jét hordozza – egy strukturált blokkot, amely leírja a panel képességeit (gyártó, támogatott felbontások és frissítési frekvenciák, szín- és audioformátumok, …). A forráseszközök indításkor egyszer lekérdezik, hogy felderítsék, mit támogat a fogadó eszköz.

  • A CEC (Consumer Electronics Control) egy egyvezetékes, kétirányú busz, amely lehetővé teszi a csatlakoztatott HDMI / DisplayPort eszközök számára, hogy rövid vezérlőcsomagokat cseréljenek – be-/kikapcsolás, bemenetváltás, hangerő, távirányító-továbbítás stb.

Bármelyik vagy mindkét csatorna engedélyezhető a létrehozáskor. A nyers EDID a display_id() metódussal olvasható; CEC képkockák a send_frame() metódussal küldhetők, szinkron módon lekérdezhetők a receive_frame() metódussal, vagy egy visszahíváshoz irányíthatók a frame_callback() metódussal.

Példa – a csatlakoztatott kijelző EDID-jének lekérdezése és a 0-s logikai címre címzett CEC képkockák figyelése:

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)

Konstruktorok

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

A cec legyen True a CEC kommunikáció engedélyezéséhez egy külső kijelzővel.

A ddc legyen True a DDC kommunikáció engedélyezéséhez egy külső kijelzővel.

A ddc_addr a külső kijelző EEPROM-jának I2C címe.

display_id() bytes

Visszaadja a külső kijelző EDID adatait egy bytes objektumként. Az EDID fejlécek és ellenőrző összegek ellenőrzése megtörténik, és az összes szakasz egyetlen bytes objektumba van összefűzve. Hiba esetén OSError kivételt vált ki.

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

CEC képkockát küld a dst_addr címre a src_addr címről, amely a data adatot tartalmazza. Hiba esetén OSError kivételt vált ki.

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

Legfeljebb timeout ezredmásodpercig vár egy dst_addr címre címzett CEC képkockára. Egy (src_addr, data) tuple-t ad vissza. Időtúllépés vagy hiba esetén OSError kivételt vált ki.

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

Regisztrálja a callback visszahívást, amelyet akkor hív meg, amikor egy dst_addr címre címzett CEC képkocka érkezik. A visszahívás két argumentummal kerül meghívásra: a forráscímmel int típusként és a képkocka hasznos tartalmával bytes objektumként.

Adjon át None értéket callback ként a vétel letiltásához. Amíg egy visszahívás regisztrálva van, ne hívja meg a DisplayData.receive_frame() metódust.