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)¶
cecustaw naTrue, aby włączyć komunikację CEC z zewnętrznym wyświetlaczem.ddcustaw naTrue, aby włączyć komunikację DDC z zewnętrznym wyświetlaczem.ddc_addradres 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 obiektbytes. ZgłaszaOSErrorw przypadku niepowodzenia.
- send_frame(dst_addr: int, src_addr: int, data: bytes) None¶
Wysyła ramkę CEC do
dst_addrodsrc_addrzawierającądata. ZgłaszaOSErrorw przypadku niepowodzenia.
- receive_frame(dst_addr: int, *, timeout: int = 1000) tuple[int, bytes]¶
Czeka do
timeoutmilisekund na ramkę CEC adresowaną dodst_addr. Zwraca krotkę(src_addr, data). ZgłaszaOSErrorw przypadku przekroczenia limitu czasu lub niepowodzenia.
- frame_callback(callback: Callable[[int, bytes], None] | None, dst_addr: int) None¶
Rejestruje
callbackdo wywołania, gdy odebrana zostanie ramka CEC adresowana dodst_addr. Wywołanie zwrotne jest wywoływane z dwoma argumentami: adresem źródłowym jakointoraz ładunkiem ramki jako obiektembytes.Przekaż
Nonejakocallback, aby wyłączyć odbiór. Gdy zarejestrowane jest wywołanie zwrotne, nie wywołujDisplayData.receive_frame().