Détection de l’allumage d’un vidéoprojecteur

De Ensiwiki
Aller à : navigation, rechercher


Project schedule.png
Titre du projet Construction d'un boîtier pour permettre une connexion WiFi aux videoprojecteurs
Cadre Projets de spécialité
Page principale Construction d'un boîtier pour permettre une connexion WiFi aux videoprojecteurs

Encadrants Franck Rousseau



Un des objectifs du projet Construction d'un boîtier pour permettre une connexion WiFi aux videoprojecteurs était l'auto-détection de l'allumage du vidéoprojecteur pour réveiller la carte.

Avec le matériel mis à disposition, remplir cet objectif s'avère compliqué. Voici l'ensemble des pistes que nous avons étudiées (sans succès...) :

Pistes suivies

Signal MSEN

Il existe dans l'architecture interne sur BeagleBoard-xM un signal MSEN qui d'après la documentation vaut 0 lorsqu'une sortie sous tension est branchée sur le port DVI de la carte (et 1 sinon). Bien que cette information soit exactement ce dont on aurait besoin pour réveiller la carte, ce signal est malheureusement disponible comme un simple "point de test" et n'est pas relié au processeur...

Ainsi, MSEN n'est pas exploitable. De plus, dans l'optique de porter notre projet sur Rasperry Pi, nous n'avons aucune garantie qu'un tel signal existe dans son architecture.

Signal CEC

Le signal CEC (Consumer Electronics Control) est un signal issu du protocole HDMI permettant une communication bidirectionnelle entre les appareils. Il est par exemple utilisé pour allumer une télévision lors de la mise en route d'un lecteur DVD. Or, ce signal n'est géré que part les périphériques de type HDMI (et non par DVI!). On remarque également dans l'architecture du BeagleBoard-xM que la broche correspondant à ce signal sur le port DVI est directement relié à la masse : une nouvelle fois ce signal est inexploitable...

Cependant il est possible d’utiliser un adaptateur USB-CEC disponible sur le marché. Ce dernier permet de transmettre et de gérer le signal CEC par le port USB. Cet adaptateur ne sera probablement abordé en détails dans le cadre de ce projet, mais il pourrait s'avérer très utile pour un vidéoprojecteur HDMI gérant le CEC ou pour adapter le boitier à un téléviseur HD par exemple !

Utilisation de xrandr

La commande Linux xrandr permet d'obtenir des informations sur les sorties vidéos (résolution, orientation...). Après tests, on observe que cette commande renvoie les mêmes informations que la sortie DVI soit branchée au BeagleBoard-xM ou déconnectée. Il n'est donc pas possible d'utiliser xrandr pour collecter des infomationns sur la mise sous tension du périphérique vidéo.

Utilisation de xset

La commande Linux xset utilise entre autres le DPMS (Display Power Management Signaling). Ainsi la commande lancée avec l'option -q renvoie des informations sur l'état dans lequel se trouve le périphérique. Cependant, il semble que ce protocole soit particulièrement adapté aux sorties de type VGA mais nettement moins pour les périphériques DVI.

On peut forcer l'utlisation du protocole DPMS par xset, mais malgré tout xset -q renvoie constamment "Monitor is On", même si l'écran est éteint. On a pu remarqué que "Monitor is off" est renvoyé seulement dans le cas où l'on désactive le périphérique DVI par la commande xset dpms force off : il semble que la sortie vidéo soit désactivée, mais l'écran reste branché au secteur et actif.

Protocole I2C

Le bus I2C permet de faire communiquer entre eux des composants électroniques très divers grâce à seulement trois signaux : un signal de donnée (SDA), un signal d'horloge (SCL), et un signal de référence électrique (Masse).

Le BeagleBoard-xM comporte trois bus de ce type. On observe via l'utilisation de i2cdetect que la sortie DVI se situe sur le troisième bus, à l'adresse 0x50 : i2cdetect -y -r 3 renvoie uniquement des champs -- sauf à cet emplacement. Lorsque la cable DVI est débranché, l'adresse 0x50 vaut elle aussi -- .

Pour identifier l’écran, on pourrait utiliser la commande i2cget -y 3 0x50. Mais, que l'écran soit branché électriquement ou non le résultat semble rester le même. On parvient donc à identifier si un écran est relié à la carte, mais pas à identifier si ce dernier est sous tension ou non...

Pistes à suivre

Voici quelques pistes qu'il pourrait être intéressant de creuser pour détecter l'allumage :

  • La commande ddccontrol qui avec l'option -p devrait retourner l'état du périphérique. Or, cette commande n'est pas standard et n'est pas disponible directement pour le BeagleBoard. Qui-plus-est, les tests avec nos machines personnelles n'ont pas été très concluant pour communiquer avec un écran DVI...
  • Le protocole DMPM (Digital Monitor Power Management). Peu d'informations sont disponibles sur son utilisation et son fonctionnement et il semblerait que les résultats soient similaires à ceux de DPMS avec xset.

Solution de repli

Une solution plus "matérielle" pourrait convenir. Elle consiste en l'ajout d'un interrupteur de type USB qui serait relié au boitier. A l'allumage (ou l'extinction) du vidéoprojecteur, l'utilisateur pourrait à souhait enclencher cet interrupteur. Le BeagleBoard pourrait alors identifier sur son port USB l'arrivée de donnée et agir en conséquence pour se réveiller ou s'endormir.

Pages liées