คลาส DisplayData -- ข้อมูลดิสเพลย์¶
คลาส DisplayData ให้การเข้าถึงลิงก์ side-channel ของดิสเพลย์ HDMI / DisplayPort ที่เชื่อมต่อ:
DDC (Display Data Channel) คือบัส I2C ที่ส่งข้อมูล EDID ของดิสเพลย์ ซึ่งเป็นบล็อกโครงสร้างที่อธิบายความสามารถของแผง (ผู้ผลิต ความละเอียดและอัตราการรีเฟรชที่รองรับ รูปแบบสีและเสียง ฯลฯ) อุปกรณ์ต้นทางจะอ่านข้อมูลนี้ครั้งเดียวเมื่อเริ่มต้นเพื่อตรวจสอบว่าปลายทางรองรับอะไรบ้าง
CEC (Consumer Electronics Control) คือบัสสองทิศทางแบบสายเดียวที่ให้อุปกรณ์ HDMI / DisplayPort ที่เชื่อมต่อแลกเปลี่ยนแพ็คเก็ตควบคุมสั้นๆ ได้ เช่น เปิด/ปิดเครื่อง สลับอินพุต ปรับระดับเสียง ส่งต่อรีโมทคอนโทรล ฯลฯ
สามารถเปิดใช้งานช่องสัญญาณใดช่องหนึ่งหรือทั้งสองช่องได้เมื่อสร้างออบเจกต์ อ่านข้อมูล EDID ดิบด้วย display_id() ส่ง CEC frame ด้วย send_frame() รับแบบ polling synchronous ผ่าน receive_frame() หรือกำหนดเส้นทางไปยังคอลแบ็กด้วย frame_callback()
ตัวอย่าง -- ดึงข้อมูล EDID ของดิสเพลย์ที่เชื่อมต่อและรับฟัง CEC frame ที่ส่งมาถึง logical address 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)
คอนสตรักเตอร์¶
- class display.DisplayData(*, cec: bool = False, ddc: bool = False, ddc_addr: int = 0x50)¶
cecตั้งเป็นTrueเพื่อเปิดการสื่อสาร CEC กับดิสเพลย์ภายนอกddcตั้งเป็นTrueเพื่อเปิดการสื่อสาร DDC กับดิสเพลย์ภายนอกddc_addrที่อยู่ I2C ของ EEPROM ของดิสเพลย์ภายนอก- display_id() bytes¶
คืนค่าข้อมูล EDID ของดิสเพลย์ภายนอกในรูปแบบออบเจกต์
bytesโดยตรวจสอบ EDID headers และ checksums และเชื่อมต่อทุกส่วนเป็นbytesเดียว หากเกิดข้อผิดพลาดจะ raiseOSError
- send_frame(dst_addr: int, src_addr: int, data: bytes) None¶
ส่ง CEC frame ไปยัง
dst_addrจากsrc_addrที่มีข้อมูลdataหากเกิดข้อผิดพลาดจะ raiseOSError
- receive_frame(dst_addr: int, *, timeout: int = 1000) tuple[int, bytes]¶
รอสูงสุด
timeoutมิลลิวินาทีเพื่อรับ CEC frame ที่ส่งมาถึงdst_addrคืนค่า tuple(src_addr, data)หากหมดเวลาหรือเกิดข้อผิดพลาดจะ raiseOSError
- frame_callback(callback: Callable[[int, bytes], None] | None, dst_addr: int) None¶
ลงทะเบียน
callbackเพื่อเรียกใช้เมื่อได้รับ CEC frame ที่ส่งมาถึงdst_addrคอลแบ็กจะถูกเรียกด้วยอาร์กิวเมนต์สองตัว คือ source address เป็นintและ payload ของ frame เป็นbytesส่ง
Noneเป็นcallbackเพื่อปิดการรับ ขณะที่มีการลงทะเบียนคอลแบ็กอยู่ อย่าเรียกDisplayData.receive_frame()