class DisplayData -- 顯示資料

DisplayData 類別提供對外接 HDMI/DisplayPort 顯示器側通道連結的存取:

  • DDC(Display Data Channel,顯示資料通道)是承載顯示器 EDID 的 I2C 匯流排——EDID 是描述面板能力的結構化資料區塊(製造商、支援的解析度與更新率、色彩與音訊格式等)。來源裝置在啟動時查詢一次,以探知接收端所支援的功能。

  • CEC(Consumer Electronics Control,消費性電子控制)是一條單線雙向匯流排,讓相連的 HDMI/DisplayPort 裝置交換簡短的控制封包——開關機、輸入切換、音量、遙控器轉發等。

可在建構時啟用其中一個或兩個通道。原始 EDID 以 display_id() 讀取;CEC 影格可用 send_frame() 傳送、透過 receive_frame() 同步輪詢,或以 frame_callback() 路由至回呼函式。

範例——查詢相連顯示器的 EDID 並監聽定址至邏輯位址 0 的 CEC 影格::

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)

建構子

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

cec 設為 True 以啟用與外接顯示器的 CEC 通訊。

ddc 設為 True 以啟用與外接顯示器的 DDC 通訊。

ddc_addr 外接顯示器 EEPROM 的 I2C 位址。

display_id() bytes

bytes 物件傳回外接顯示器的 EDID 資料。EDID 標頭與校驗和會經過驗證,且所有區段會串接為單一 bytes 物件。失敗時引發 OSError

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

src_addr 傳送一個包含 data 的 CEC 影格至 dst_addr。失敗時引發 OSError

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

最多等待 timeout 毫秒以接收定址至 dst_addr 的 CEC 影格。傳回一個 (src_addr, data) 元組。逾時或失敗時引發 OSError

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

註冊 callback,當接收到定址至 dst_addr 的 CEC 影格時呼叫。回呼函式會以兩個引數呼叫:作為 int 的來源位址,以及作為 bytes 物件的影格負載。

None 作為 callback 傳遞以停用接收。在註冊回呼函式期間,請勿呼叫 DisplayData.receive_frame()