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 ヘッダーとチェックサムが検証され、すべてのセクションが連結されて 1 つの bytes オブジェクトになります。失敗時には OSError を送出します。

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

data を含む CEC フレームを src_addr から dst_addr に送信します。失敗時には 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 を登録します。コールバックは 2 つの引数で呼び出されます: ソースアドレス(int)とフレームのペイロード(bytes オブジェクト)です。

受信を無効にするには callback として None を渡します。コールバックが登録されている間は、DisplayData.receive_frame() を呼び出さないでください。