klasa DisplayData – dane wyświetlacza

Klasa DisplayData zapewnia dostęp do łączy bocznych (side-channel) podłączonego wyświetlacza HDMI / DisplayPort:

  • DDC (Display Data Channel) to magistrala I2C, która przenosi dane EDID wyświetlacza – ustrukturyzowany blok opisujący możliwości panelu (producent, obsługiwane rozdzielczości i częstotliwości odświeżania, formaty koloru i dźwięku, …). Urządzenia źródłowe odpytują ją raz przy starcie, aby ustalić, co obsługuje urządzenie docelowe.

  • CEC (Consumer Electronics Control) to jednoprzewodowa dwukierunkowa magistrala, która pozwala podłączonym urządzeniom HDMI / DisplayPort wymieniać krótkie pakiety sterujące – włączanie/wyłączanie zasilania, przełączanie wejść, głośność, przekazywanie pilota itp.

Można włączyć jeden lub oba kanały podczas konstrukcji. Surowe dane EDID odczytuje się za pomocą display_id(); ramki CEC można wysyłać za pomocą send_frame(), odpytywać synchronicznie przez receive_frame() lub kierować do wywołania zwrotnego za pomocą frame_callback().

Przykład – odpytanie EDID podłączonego wyświetlacza i nasłuchiwanie ramek CEC adresowanych do adresu logicznego 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 ustaw na True, aby włączyć komunikację CEC z zewnętrznym wyświetlaczem.

ddc ustaw na True, aby włączyć komunikację DDC z zewnętrznym wyświetlaczem.

ddc_addr adres I2C pamięci EEPROM zewnętrznego wyświetlacza.

display_id() bytes

Zwraca dane EDID zewnętrznego wyświetlacza jako obiekt bytes. Nagłówki i sumy kontrolne EDID są weryfikowane, a wszystkie sekcje są łączone w jeden obiekt bytes. Zgłasza OSError w przypadku niepowodzenia.

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

Wysyła ramkę CEC do dst_addr od src_addr zawierającą data. Zgłasza OSError w przypadku niepowodzenia.

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

Czeka do timeout milisekund na ramkę CEC adresowaną do dst_addr. Zwraca krotkę (src_addr, data). Zgłasza OSError w przypadku przekroczenia limitu czasu lub niepowodzenia.

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

Rejestruje callback do wywołania, gdy odebrana zostanie ramka CEC adresowana do dst_addr. Wywołanie zwrotne jest wywoływane z dwoma argumentami: adresem źródłowym jako int oraz ładunkiem ramki jako obiektem bytes.

Przekaż None jako callback, aby wyłączyć odbiór. Gdy zarejestrowane jest wywołanie zwrotne, nie wywołuj DisplayData.receive_frame().