[WIP] Indicateur de batterie



  • Bonjour,

    Je souhaite intégrer la fonctionnalité Battery Monitor dans Recalbox 4.1, pour un projet de console portable retro gaming sur base d'un Pi Zero W. J'ai déjà réussi à récupérer l'image de la 4.1 et modifier les fichiers de boot pour le Pi Zero W. D'ailleurs ça a l'air prometteur :D

    Voila ce que ça rendrait : alt text
    Mon soucis c'est que la première étape de l'installation c'est la compilation du projet pngview...

    Sachant que Recalbox n'intègre pas le "make" ou "apt-get", j'ai pensé à deux solutions :

    1. Installer une VM Ubuntu pour faire du cross platform et réussir à compiler comme si j'étais surle Pi. Il n'y aurait qu'à placer le projet déjà compilé sur la carte SD de Recalbox.

    2. Passer par le Recalbox-docker-build et rajouter ce qu'il faut pour réussir à compiler depuis le Pi une fois la distribution installée.

    Pour l'instant aucune des deux solutions n'a aboutis :(

    1. Je n'y arrive tout simplement pas. J’enchaîne erreur de compilation sur erreur de compilation. J'ai crée un topic sur HFR pour obtenir de l'aide (voir ICI). Peut-être que quelqu'un de l'équipe de dev saurait me répondre ?

    2. Ici je bloque dès le début car j'ai une erreur sur la branche "rb-4.1.X" pour "rpi1", qui est la suivante : libusb-compat is in the dependency chain of qtsixa that has added it to its _DEPENDENCIES variable without selecting it or depending on it from Config.in. Stop. C'est déjà lié à une issue toujours ouverte, mais il n'y a pas d'indication pour résoudre le soucis à part de passer par la branch master mais qui du coup est la 4.0 (c'est bien ça ?)

    Alors oui, j'insiste sur la 4.1, même si elle est toujours en cours de développement. Pour la simple raison que j'aimerais que mon projet soit prêt quand la version sortira en release. Car en dehors de l'ajout de l'indicateur de batterie, j'ai prévu un script bash qui va configurer automatiquement les fichiers de conf Recalbox nécessaires (mapping gpio, écran, audio...) pour que la console portable puisse marcher du premier coup sans avoir besoin du clavier ou du réseau.

    Si le point 2) peux être résolu, je pourrais du coup modifier les fichiers de conf avant la création de l'image ? Si oui, ce serait encore plus frendly-user ! Et me permettrait à moi et n'importe qui, d'avoir déjà une image Recalbox compatible avec la console portable.

    ps : Après si vous voulez intégrer le moniteur de batterie dans la 4.1 dites le moi, et je ne m'embête pas plus ;)

    Merci de votre aide !

    @substring @digitalumberjack @rockaddicted


  • Moderator
    Team

    @wizardpc pourquoi veux-tu pngview ? Il y a un core pour afficher des images ... c'est géré directement par retroarch

    le pb de qtsixa : c'est résolu de notre côté, mais le code sur github n'est pas à jour pour ca. L'issue que tu as linkée n'a rien à voir ;) Pour résoudre le pb de qtsixa, il faut que son Config.in et son .mk indiquent les mêmes dépendances, c'est tout.

    Dans tous les cas, la méthode pour procéder, c'est toujours de créer un package pour un soft que tu veux ajouter. A la lecture du Makefile de pngview https://github.com/AndrewFromMelbourne/raspidmx/blob/master/pngview/Makefile y'a du boulot parce qu'il ne passera pas en tant que tel. Battery Monitor aussi devra être retouché, mais bcp plus simple (pas besoin de le compiler lui).

    Ton projet de console portable, c'est juste pour toi ou tu comptes le commercer ? Faire un recalbox préconfiguré pour un matériel spécifique n'est pas vraiment notre pilosophie, surtout s'il restreint l'utilisation de recalbox dans son cadre normal et général.



  • @Substring : Je suis bête et (pas) méchant, sur le github du battery indicator il demande d'utiliser pngview. S'il y a moyen de le faire fonctionner avec autre chose pourquoi pas. Mais du coup je ne sais pas comment procéder ??

    Tu pourras me dire ici quand le code aura été poussé sur github ? Pour le problème de qtsixa :)

    La partie package j'ai pas tout compris... Je sais pas si je saurais faire ça sans aide. Ni même ce qui est faisable ?

    C'est pour moi dans un premier temps, le commercer non, le diffuser oui surement ! Le but n'est pas vraiment de faire un recalbox pré-configurer en dur, c'est pour ça que j'aimerais éviter le build.. Pour l'instant j'en suis à 1) J'installe Recalbox 2) Je branche la carte SD sur le PC et je lance un script 3) Je remet la sd dans le pi 4) La console est prête :)

    La pré-configuration est assez limité, c'est pour activer et mapper les GPIOs au boot, activer le PWM pour avoir le son, réglage de l'écran et du mode vidéo, activation du wifi... Tout ça peux se faire manuellement, mais vu que je compte faire un tuto détaillé pour la réalisation de la console (partie hardware), je pensais fournir un script qui permet de configurer ce qu'il faut aussi (partie software).



  • @substring @rockaddicted

    Suite aux échanges avec rockaddicted sur l'IRC il m'a proposé de compiler "raspidmx" sur une autre distribution (ex : Raspbian), puis de récupérer le binaire pour le mettre sur Recalbox directement.

    Le projet a bien compilé sur Raspbian :)

    MAIS, la version de "libpng" est la 12, contre la 16 sur Recalbox. J'ai donc effacé la 12 de raspbian pour y mettre la 16 et relancer la compilation, il y a une erreur pour le "make".

    Etant sur un pi Zero sans hub usb, je me galère bien avec juste le clavier.. Et je ne sais pas pourquoi je n'arrive pas à éditer le "Makefile" avec nano... ça ne veux pas l'ouvrir.

    Voilà où j'en suis, je continuerai à investiguer dès que je trouve du temps libre.



  • Me revoilà, j'ai réussi à compiler avec la version de libpng16 !!

    Voici les étapes que j'ai suivi :

    1. Installation de Raspbian sur le Pi Zero W
    2. Ajout du miroir "ftp.fr.debian.org/debian" dans le "sources.list"
    3. Suppression de libpng12 avec un "apt-get remove"
    4. Installation de libpng16 à la place avec un "apt-get install"
    5. Vérification de l'include qui sera utilisé avec la commande "libpng-config --cflags"
    6. Lancement du "make" pour le projet "pngview", le fichier "pngview.o" a bien été généré sans erreur !

    Il reste quelques points à finaliser :

    1. La version de libpng sur Recalbox est 1.6.25 contre la 1.6.28 qui a été utilisée sous Raspbian.

    2. J'ai put lancer le script python de l'autre projet, mais aucune valeur n'est remontée pour l'instant car je n'ai pas encore le micro contrôleur "MCP3008". Je suis en attente de réception de ma commande pour tester du coup.

    3. @rockaddicted proposait de monter de version de "libpng" et peut-être d'intégrer directement le "pngview.o" et le projet "gbzbatterymonitor" pour la 4.1. Cela pourrait se traduire par une option activable dans le "recalbox.conf" comme c'est déjà le cas pour le "system.power.switch" ? Par exemple.

    Dans le même sujet, il serait possible un jour, d'afficher les icônes "wifi" et "bluetooth" de la même façon. Je vais regarder si c'est facilement faisable...



  • Que du bonheur merci d'avoir essayé et merci d'avoir réussi !!!



  • Aujourd'hui j'ai réussi à toucher au but !

    1. J'ai réinstallé Recalbox 4.1 pour le Pi Zero W
    2. J'ai copié le projet "raspidmx" en gardant seulement les dossiers "common" et "pngview" déjà compilé
    3. J'ai modifié le code ainsi que le fichier de config pour avoir toujours la batterie à 100% et ainsi tester sans attendre le micro contrôleur...
    4. J'ai crée un script pour qu'il lance le "main.py" au boot. En me basant sur le "S99custom" déjà présent dans le dossier "init.d".
    5. Voilà le résultat une fois sur Recalbox !!!

    alt text

    Donc ça fonctionne :)

    Il reste encore quelques points :

    1. L'image est en centrée en haut :
    • Dans le code c'est fixé en dur à 650px horizontalement et 5 px verticalement. (Voir readme de pngview)
    • Il faudrait rendre ça dynamique en calculant à partir de la résolution de l'écran. Y a surement une commande sous raspberry pi qui donne la résolution d'affichage ?
    1. Le code utilise des "sudo" :
    • Or sous Recalbox il n'y en a pas
    • A supprimer dans le code du coup
    1. L'image disparait au retour d'un jeu :
    • Peut-être que la façon de lancer la commande python n'est pas la bonne ?
    • Ou alors en rentrant dans l'émulateur il essaye de killer le process "pngview" sauf que ça plante avec le "sudo" (j'ai pas testé en l'enlevant).
    1. Globalement :
    • Ou placer les projets "pngview" et "gbzbatterymonitor" sur le Pi ?
    • Comment savoir si le Wifi est activé, puis connecté ou non ? avec une commande
    • Comment savoir si le bluetooth est activé, puis appairé ou non ? toujours avec une commande
    • @rockaddicted @Substring Qu'est-ce que je/vous/on fait maintenant ? :p


  • Bonjour :)

    Finalement j'ai repris en main le projet d'origine.

    • Nettoyage du code
    • Mise à niveau de la syntaxe python
    • Optimisation du code :
      • Plusieurs "if" était codé bizarrement
      • Des boucles étaient inutiles
      • Code mort
    • Nouveaux paramètres dans le config.py
    • Nouvelles fonctionnalités :
      • Possibilité de choisir le coin de l'écran où l'on veut placer l'icône ainsi que le décalage (en pixel) à appliquer par rapport au bord
      • Positionnement dynamique de l'icône en prenant en compte la résolution utilisée !
      • Logs plus précises
      • Possibilité de forcer la batterie à 100% pour tester l'affichage
    • Compatibilité avec Recalbox :
      • Suppression des sudo
      • Modification du retour de "ps aux | grep pngview", sous Recalbox l'id est en première position et pas en deuxième (comme sous Ubuntu par exemple)

    Je vais essayer dans la semaine de rajouter :

    • La possibilité de choisir le set d'icônes à utiliser (si quelqu'un veut/sait en faire dites le moi)
    • Ajout des icônes Wifi et Bluetooth
    • Sortir un fichier CSV exploitable du monitor.py (sert à calibrer le config.py par rapport à sa batterie)

    Voilà !


  • Moderator
    Team

    Ya plus qu à voir en action dis donc. Bravo :)



  • Beau boulot ! Tu vas faire un fork sur Github ? :)



  • C'est déjà fait :) Il est ici => https://github.com/WizardPC/gbzbatterymonitor !



  • Est-ce qu'il y a une commande bash pour connaitre l'état du bluetooth ? Activé ou non puis appairé ou non ? Pour le wifi j'ai trouvé :)

    Ou alors une variable/données accessible quelque part dans Recalbox ? Pour savoir si le Wifi/Bluetooth est ON ou OFF.



  • @wizardpc Toi je sens que tu vas rajouter 2 autres icônes, non ? ^^


  • Moderator
    Team

    @wizardpc
    peut être systemctl status bluetooth ?



  • @kjbstar said in [WIP] Indicateur de batterie:

    @wizardpc Toi je sens que tu vas rajouter 2 autres icônes, non ? ^^

    Oui ^^ Pour le wifi c'est presque bon ! Il juste que je trouve une image pour tester et gérer les deux process pngview indépendamment, pour ne pas modifier l'image de la batterie par celle du wifi (ou inversement) dès qu'il y a un changement.

    Pour le bluetooth aucune d'idée de comment avoir les informations...


  • Moderator
    Team

    @acris said in [WIP] Indicateur de batterie:

    @wizardpc
    peut être systemctl status bluetooth ?



  • @acris Merci :)

    Avec la commande "systemctl is-active bluetooth" ça me renvois directement "active" ou "inactive" donc pour l'image c'est déjà ça !

    A tester la commande "hcitool con" pour voir les connexions actives ;)



  • Bien le bonjour !

    Je viens vous faire part de l'avancement :)

    Après avoir bien galéré (T_T), j'ai enfin réussi à faire fonctionner la transition d'icône, batterie 100% > 75% > 50%... J'étais bloqué avec solution d'origine car le "pid" remonté n'était pas celui de "pngview", je ne sais pas exactement à quoi il correspondait du coup, peut être le shell exécutant la commande ??*

    Bref ! J'ai fini par abandonner ça et passer par un "subprocess.Popen" qui lui à directement l'attribut "pid" de retourné.

    J'en ai profité pour rajouter une variable "DEBUGMODE" qui permet de changer le niveau de batterie à chaque fois qu'il va vérifier son pourcentage restant :) ça sera le même principe pour Wifi et BT.

    Du coup dans ce qu'il reste à faire :

    • Gérer l'affichage des icônes wifi et bluetooth
    • Nouvelle variable dans le path pour choisir le thème des icônes (j'anticipe ^^)
    • Tester avec une vraie batterie ! J'ai reçu le MCP3008 mais pas le reste...
    • Tester les alertes vidéos

    Le fork a été mis à jour. S'il y a des experts Python je veux bien avoir des retours ! Surtout sur l'utilisation du subprocess.



  • C'est encore moi !

    Pour ma part je pense presque avoir fini, à part la position des icônes bluetooth et wifi en fonction du coin choisi. Peut-être refaire des icônes pour avoir un thème complet de base, j'ai juste piqué sur Google image pour l'instant :p

    Problèmes : Les commandes pour le bluetooth et wifi "hcitool", "systemctl" et "nmcli" ne sont pas présentes sur Recalbox :( J'ai essayé de chercher d'autres solutions, mais c'est ce qui me semblait le plus simple.

    Est-ce qu'elles pourraient être ajoutées en 4.1 ? Sans ça il faudrait une alternative ou alors se cantonner à l'icône de batterie..

    @rockaddicted @Substring @acris


  • Moderator
    Team

    @wizardpc hcitool est sur la 4.1 ca c'est sûr. Pour les 2 autres, je doute fortement (pas de recalbox sous la main pour vérifier)

    Ton truc pourrait etre rigolo pour afficher l'etat de batterie des periphs bluetooth ;)


Log in to reply
 

Want to support us ?

Join us on :

244
Online

27406
Users

14109
Topics

107061
Posts

Looks like your connection to Recalbox Forum was lost, please wait while we try to reconnect.