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)

cecTrue 로 설정하면 외부 디스플레이와의 CEC 통신을 활성화합니다.

ddcTrue 로 설정하면 외부 디스플레이와의 DDC 통신을 활성화합니다.

ddc_addr 외부 디스플레이 EEPROM의 I2C 주소입니다.

display_id() bytes

외부 디스플레이 EDID 데이터를 bytes 객체로 반환합니다. EDID 헤더와 체크섬이 검증되고 모든 섹션이 하나의 bytes 객체로 연결됩니다. 실패 시 OSError 를 발생시킵니다.

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

src_addr 에서 dst_addrdata 를 담은 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

dst_addr 로 보내진 CEC 프레임이 수신되면 호출될 callback 을 등록합니다. 콜백은 두 개의 인자로 호출됩니다: 소스 주소(int)와 프레임 페이로드(bytes 객체).

수신을 비활성화하려면 callback 으로 None 을 전달하세요. 콜백이 등록되어 있는 동안에는 DisplayData.receive_frame() 을 호출하지 마세요.