class DisplayData – Display-data

Klassen DisplayData ger tillgång till sidokanalslänkarna hos en ansluten HDMI-/DisplayPort-display:

  • DDC (Display Data Channel) är en I2C-buss som bär displayens EDID – ett strukturerat block som beskriver panelens kapacitet (tillverkare, stödda upplösningar och uppdateringsfrekvenser, färg- och ljudformat, …). Källenheter frågar efter den en gång vid uppstart för att upptäcka vad mottagaren stöder.

  • CEC (Consumer Electronics Control) är en dubbelriktad enkeltrådsbuss som låter anslutna HDMI-/DisplayPort-enheter utbyta korta kontrollpaket – på-/avstängning, ingångsväxling, volym, vidarebefordran av fjärrkontroll, etc.

Endera eller båda kanalerna kan aktiveras vid konstruktion. Den råa EDID:n läses med display_id(); CEC-ramar kan skickas med send_frame(), pollas synkront via receive_frame() eller dirigeras till ett återanrop med frame_callback().

Exempel – fråga den anslutna displayens EDID och lyssna efter CEC-ramar adresserade till logisk adress 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)

Konstruktorer

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

cec sätts till True för att aktivera CEC-kommunikation med en extern display.

ddc sätts till True för att aktivera DDC-kommunikation med en extern display.

ddc_addr I2C-adress för den externa displayens EEPROM.

display_id() bytes

Returnerar den externa displayens EDID-data som ett bytes-objekt. EDID-headers och kontrollsummor verifieras och alla sektioner sammanfogas till ett enda bytes-objekt. Genererar OSError vid fel.

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

Skickar en CEC-ram till dst_addr från src_addr innehållande data. Genererar OSError vid fel.

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

Väntar i upp till timeout millisekunder på en CEC-ram adresserad till dst_addr. Returnerar en tupel av (src_addr, data). Genererar OSError vid timeout eller fel.

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

Registrerar callback för att anropas när en CEC-ram adresserad till dst_addr tas emot. Återanropet anropas med två argument: källadressen som en int och ramens nyttolast som ett bytes-objekt.

Skicka None som callback för att avaktivera mottagning. Medan ett återanrop är registrerat ska du inte anropa DisplayData.receive_frame().