Linux: tvservice -o puis tvservice -p résultats sur dipslay sous tension mais rien ne s'affiche.

Créé le 17 mars 2015  ·  9Commentaires  ·  Source: raspberrypi/linux

J'ai essayé cela avec deux écrans différents et 3.12 et 3.18.... sur un B+ et un rev2 B.

Commentaire le plus utile

L'application sdl aura créé son propre framebuffer et aura un pointeur vers la mémoire du framebuffer, elle devra donc gérer cela elle-même.
Vraiment, je pense que vous ne devriez pas éteindre HDMI lorsque les applications utilisent l'écran.
Vous pouvez utiliser:

vcgencmd display_power 0

et

vcgencmd display_power 1

ce qui est un moyen moins intrusif de supprimer le signal de sortie HDMI mais laisse les superpositions intactes.

Tous les 9 commentaires

C'est normal. La mise hors tension du détruit toutes les superpositions (dont le framebuffer).
Vous pouvez le recréer avec "fbset -depth 8 && fbset -depth 16"

L'application que j'ai est basée sur sdl et s'affiche toujours à l'écran, donc,
17 mars 14:33:46 raspberrypi user.err fbcp[3318]: Impossible de prendre l'instantané -1. (60)
17 mars 14:34:00 noyau raspberrypi user.info : [ 326.704707] bcm2708_fb_ioctl 40044620,0 renvoie=0 p[1]=0x80000001
17 mars 14:34:00 noyau raspberrypi user.err : [ 326.704940] bcm2708_fb_pan_display(0,0) renvoie=16
17 mars 14:34:46 raspberrypi user.err fbcp[3318]: Impossible de prendre l'instantané -1. (120)
17 mars 14:35:00 noyau raspberrypi user.info : [ 386.693696] bcm2708_fb_ioctl 40044620,0 renvoie=0 p[1]=0x80000001
17 mars 14:35:00 noyau raspberrypi user.err : [ 386.693907] bcm2708_fb_pan_display (0,720) renvoie = 16

J'ai essayé de restaurer avec
(tvservice -p && sleep 2 && fbset -depth 8 && fbset -depth 16) 2>&1
pas de sortie écran
17 mars 14:43:26 noyau raspberrypi user.warn : [268.637255] a détecté une erreur fb_set_par, code d'erreur : 16
17 mars 14:43:26 raspberrypi user.err kernel: [ 268.649473] bcm2708_fb_blank(0) renvoie=0 p[1]=0x80000001
17 mars 14:43:26 noyau raspberrypi user.info : [ 268.821121] bcm2708_fb_ioctl 40044620,0 renvoie=0 p[1]=0x80000001
17 mars 14:43:26 raspberrypi user.err kernel: [ 268.821395] bcm2708_fb_pan_display(0,0) renvoie=16
17 mars 14:43:26 noyau raspberrypi user.info : [ 268.972086] bcm2708_fb_ioctl 40044620,0 renvoie=0 p[1]=0x80000001
17 mars 14:43:26 noyau raspberrypi user.err: [ 268.972286] bcm2708_fb_pan_display (0,720) renvoie = 16
17 mars 14:43:26 noyau raspberrypi user.info : [ 269.105637] bcm2708_fb_ioctl 40044620,0 renvoie=0 p[1]=0x80000001
17 mars 14:43:26 noyau raspberrypi user.err : [ 269.105901] bcm2708_fb_pan_display(0,0) renvoie=16

changer VT à ce stade a entraîné un coincement pi.

L'application sdl aura créé son propre framebuffer et aura un pointeur vers la mémoire du framebuffer, elle devra donc gérer cela elle-même.
Vraiment, je pense que vous ne devriez pas éteindre HDMI lorsque les applications utilisent l'écran.
Vous pouvez utiliser:

vcgencmd display_power 0

et

vcgencmd display_power 1

ce qui est un moyen moins intrusif de supprimer le signal de sortie HDMI mais laisse les superpositions intactes.

Oui, l'application SDL utilisait un double tampon matériel alloué via le périphérique fb du noyau et des panoramiques entre les deux tampons, je redessine le tampon après, en émettant l'ensemble de commandes de restauration. selon la sortie de fbset -i, l'adresse fb ne change pas après le cycle d'alimentation, mais je ne pense pas que ce soit crédible et qu'elle soit probablement désynchronisée, d'où le crash lors du changement de vt. Forcer un changement de mode à ce stade pour réaffecter le fb et mettre à jour les pointeurs ?

Cela dit, vcgencmd display_power (moins le s sur les écrans) semblerait faire ce que je veux (implémenter un soft off) merci.

Il existe une version corrigée de la bibliothèque SDL référencée à partir de cet article du forum (http://www.raspberrypi.org/forums/viewtopic.php?f=38&t=99822&p=692525&hilit=sdl#p692525) qui gère l'adresse de base de le FB change lors d'un changement de résolution. Cela pourrait valoir la peine d'essayer cette version pour voir si elle se comporte mieux.

@pelwell lol oui c'était moi, de cette page ;-)

Vous pouvez lire sur le problème ici - https://github.com/raspberrypi/firmware/issues/354 - Heureusement, quelqu'un appelé pssc avait déjà résolu le problème principal dans le cadre de son travail de squeezeplay, et j'ai donc intégré le correctif dans une mise à jour paquet SDL.

LOL en effet. Pour ma défense, c'était il y a longtemps, et une poignée imprononçable ressemble beaucoup à une autre...

La mémoire framebuffer allouée n'est pas libérée lorsque l'alimentation est coupée, mais tous les éléments dispmanx seront supprimés. Si vous utilisez le backend dispmanx de sdl, la séquence habituelle dispmanx_element_add réaffichera le framebuffer à l'écran.
Si vous utilisez le back-end framebuffer par défaut, vous devrez le modifier pour qu'il soit supprimé/ajouté. Effectuez effectivement la même chose que "fbset -depth 8 && fbset -depth 16" à partir de SDL (par exemple, modifiez la taille ou la profondeur).
Cependant, la solution "vcgencmd display_power" est probablement la plus simple.

La solution codée vcgencmd display_power fait ce dont j'ai besoin pour fermer le problème.

Cette page vous a été utile?
0 / 5 - 0 notes