classe DisplayData – Données d’affichage

La classe DisplayData donne accès aux liaisons annexes d’un écran HDMI / DisplayPort connecté :

  • DDC (Display Data Channel) est un bus I2C qui transporte l’EDID de l’écran – un bloc structuré décrivant les capacités du panneau (fabricant, résolutions et fréquences de rafraîchissement prises en charge, formats de couleur et audio, …). Les périphériques sources l’interrogent une fois au démarrage pour découvrir ce que le récepteur prend en charge.

  • CEC (Consumer Electronics Control) est un bus bidirectionnel à fil unique qui permet aux périphériques HDMI / DisplayPort connectés d’échanger de courts paquets de contrôle – mise sous/hors tension, commutation d’entrée, volume, transfert de télécommande, etc.

L’un ou l’autre de ces canaux, ou les deux, peuvent être activés à la construction. L’EDID brut est lu avec display_id() ; les trames CEC peuvent être envoyées avec send_frame(), interrogées de manière synchrone via receive_frame(), ou redirigées vers une fonction de rappel avec frame_callback().

Exemple – interroger l’EDID de l’écran connecté et écouter les trames CEC adressées à l’adresse logique 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)

Constructeurs

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

cec réglé sur True pour activer la communication CEC avec un écran externe.

ddc réglé sur True pour activer la communication DDC avec un écran externe.

ddc_addr adresse I2C de l’EEPROM de l’écran externe.

display_id() bytes

Renvoie les données EDID de l’écran externe sous la forme d’un objet bytes. Les en-têtes et sommes de contrôle EDID sont vérifiés et toutes les sections sont concaténées en un seul objet bytes. Lève OSError en cas d’échec.

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

Envoie une trame CEC vers dst_addr depuis src_addr contenant data. Lève OSError en cas d’échec.

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

Attend jusqu’à timeout millisecondes une trame CEC adressée à dst_addr. Renvoie un tuple (src_addr, data). Lève OSError en cas d’expiration du délai ou d’échec.

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

Enregistre callback pour qu’elle soit appelée lorsqu’une trame CEC adressée à dst_addr est reçue. La fonction de rappel est invoquée avec deux arguments : l’adresse source sous forme d”int et la charge utile de la trame sous forme d’objet bytes.

Passez None comme callback pour désactiver la réception. Tant qu’une fonction de rappel est enregistrée, n’appelez pas DisplayData.receive_frame().