class DisplayData -- 显示数据

DisplayData 类提供对所连接的 HDMI / DisplayPort 显示器旁路通道链接的访问:

  • DDC(显示数据通道)是一条 I2C 总线,用于承载显示器的 EDID——一个描述面板能力的结构化数据块(制造商、支持的分辨率和刷新率、颜色和音频格式……)。源设备在启动时查询一次,以发现接收端所支持的功能。

  • CEC(消费电子控制)是一条单线双向总线,让连接的 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_addrdst_addr 发送一个包含 data 的 CEC 帧。失败时抛出 OSError

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

等待发往 dst_addr 的 CEC 帧,最长等待 timeout 毫秒。返回一个 (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()