[Open C] Retrouver la lumière du bouton home (build man.)

Firefox OS a été un nouveau système d'exploitation destiné aux appareils mobiles. Ce forum traite des problèmes rencontrés sur les branches 1.4+ et 2.0+.
Ainsi que des téléphones et tablettes de développement (Flame...)

Modérateurs : Monique, genma

Répondre
micgeri971
Lézard vert
Messages : 129
Enregistré le : 14 déc. 2014, 02:15

[Open C] Retrouver la lumière du bouton home (build man.)

Message par micgeri971 » 27 avr. 2015, 00:30

Ce qui suit est valable pour les compilations manuelles. Par ailleurs, ce n'est qu'une solution de contournement temporaire (le temps qu'une vraie correction soit trouvée)

Bonjour à tous,

Pour ceux qui comme moi souhaitent voir le bouton home s'allumer dès lors que l'écran est allumé, il existe une méthode. J'ai pu trouver comment contrôler la luminosité du bouton grace à ce commentaire de dattaz sur bugzilla (merci à lui). Vous devrez effectuer une petite modification dans le code avant de lancer la compilation. Pour ce faire, rendez-vous dans le dossier B2G, puis ouvrez le fichier GonkHal.cpp. Il se trouve dans /gecko/hal/gonk. Rendez-vous maintenant dans la fonction SetScreenEnabled, et ajoutez les lignes suivantes au début de celle-ci :

Code : Tout sélectionner

  if (aEnabled) {
    system("echo 40 > /sys/class/leds/button-backlight/brightness");
  } else {
    system("echo 0 > /sys/class/leds/button-backlight/brightness");
  }
// ******************************
// * Suite de la fonction
// ******************************

Voici une solution beaucoup plus simple (cette solution nécessite que git soit installé) :
Téléchargez l'archive disponible ici et dézippez-là. Elle contient un patch, et un script Shell (patch.sh). Éditez ce dernier, et adaptez les variables B2GSRC_DIR (dossier B2G où vous effectuez les commandes ./config.sh flame openc.xml, ./build.sh gecho, ...) et PATCH_DIR (dossier contenant le patch) afin qu'elles correspondent à vos propres dossiers.

Une fois ceci effectué, le principe est simple :
  • ./patch.sh --patch va appliquer le patch
    ./patch.sh --unpatch va enlever le patch
Vous pouvez maintenant compiler votre version B2G comme vous en avez l'habitude, flasher votre Open C, et retrouver votre bouton home allumé (en même temps que votre écran), comme sur la ROM ZTE !

Deux points importants :
  • - la lumière du bouton ne variera pas (tout ou rien)
    - il faudra penser à enlever le patch lors des mises à jour de dépôt, puis le remettre
Modifié en dernier par micgeri971 le 02 mai 2015, 05:26, modifié 3 fois.

fabbox
Lézard à collerette
Messages : 357
Enregistré le : 16 oct. 2014, 20:20

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par fabbox » 27 avr. 2015, 05:22

Super !
Je vais tester ça rapidement je penses.
Votre Navigateur : Mozilla/5.0 (X11; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0

micgeri971
Lézard vert
Messages : 129
Enregistré le : 14 déc. 2014, 02:15

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par micgeri971 » 02 mai 2015, 05:15

Mise à jour : La manipulation a été simplifié. Un patch et un script l'appliquant sont disponibles. Le script a cependant besoin de git pour s'exécuter.
Votre Navigateur : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0

fabbox
Lézard à collerette
Messages : 357
Enregistré le : 16 oct. 2014, 20:20

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par fabbox » 02 mai 2015, 13:32

\o/ git arrive ! :wink:

En repensant au rapport de bug https://bugzilla.frenchmozilla.org/show ... ?id=582#c6, je me demandais si tu as avais testé de juste rajouter "SetKeyLightEnabled(aEnabled)" dans la fonction "SetScreenEnable" (et que effectivement, ça ne marchait pas)?

Ensuite pour répondre à la "critique" du bug sur l'echoing, j'ai l'impression que ton hack (même si il est "quick and dirty", admettons le) suit ce qui est fait sur android "B2G/hardware/qcom/display/liblight/light.c" via les fonctions "set_light_button" puis "write_int" du même fichier. (Mais le vengeur masqué a raison en disant que le comportement n'est pas du à Gonk :-D)
Votre Navigateur : Mozilla/5.0 (X11; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0

micgeri971
Lézard vert
Messages : 129
Enregistré le : 14 déc. 2014, 02:15

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par micgeri971 » 02 mai 2015, 15:36

Ça faisait un moment que je voulais mettre ce hack sous forme de patch :wink: , mais je n'avais pas encore compris certaines choses.

Oui, c'est le premier endroit où j'ai testé le code, mais rien à faire, ça ne passe pas.

Je n'ai pas encore été jusque là (comprendre que je n'ai pas encore regardé le code pour remonter jusqu'à cette fonction), et je comprends un peu le C++ sans pouvoir dire que je maitrise. Mais en regardant le fichier que tu mentionnes, on dirait bien qu'effectivement, le fonctionnement est similaire. Cependant, il faudra que je scrute tout cela plus en détail.
Je suis entièrement d'accord pour Gonk, car si le problème venait de lui, on ne pourrait même pas allumer le bouton home.

fabbox
Lézard à collerette
Messages : 357
Enregistré le : 16 oct. 2014, 20:20

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par fabbox » 02 mai 2015, 17:39

J'ai un petit problème avec les valeurs de retour du script lorsque j'appelle ton patch depuis mon script principal.

Code : Tout sélectionner

#!/bin/bash
( ./patch.sh && "patch ok" ) || exit 1
echo "blabla"
Que le patch soit appliqué (ou que ça rate), je ne passe jamais à "echo blabla" (donc un exit code de 1.
J'ai d'abord mis des parenthèses autour du

Code : Tout sélectionner

 echo "le patch ne ....." && exit 1 
mais cette fois, je vois tout temps mon "echo blabla" (que patch s'applique ou pas).

Au final, je m'en suis sorti en rajoutant un "|| exit 1" en plus, soit pour les lignes 13 à 22 le code suivant :

Code : Tout sélectionner

if [[ $1 == "--patch" ]]; then
	(
		git apply --check "$PATCH_DIR"/home_button_light.patch > /dev/null 2>&1 &&
		git apply "$PATCH_DIR"/home_button_light.patch &&
		echo "Le patch a été appliqué"
        ) || (
       echo "Le patch ne peut pas être appliqué (il l'est peut-être déjà)" &&
       exit 1
       ) || exit 1
fi
EDIT : ET LA LUMIERE DU BOUTON HOME MARCHE ! Maintenant il faudra retourner sur le rapport de bug pour savoir si on doit passer par un truc propre comme le code de dans hardware/qcom/liblight ou si il faut vraiment trouver d'où vient le bug car je n'ai pas fait le lien entre les deux fonctions (juste un fgrep -r "button-backlight") pour savoir d'où celà venait :wink:.

micgeri971
Lézard vert
Messages : 129
Enregistré le : 14 déc. 2014, 02:15

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par micgeri971 » 01 juin 2015, 06:20

Salut fabbox,

Autant pour moi, en relisant un de tes posts précédents (voir ci-dessous), je me suis rendu compte que je l'avais mal compris. J'ai donc finalement testé en mettant :

Code : Tout sélectionner

 if (aEnabled) {
    SetKeyLightEnabled(true);
  } else {
    SetKeyLightEnabled(false);
  }
Et ça fonctionne ! Ça fonctionne même mieux que mon code, car l'intensité de la lumière varie également.
fabbox a écrit :\o/ git arrive ! :wink:

En repensant au rapport de bug https://bugzilla.frenchmozilla.org/show ... ?id=582#c6, je me demandais si tu as avais testé de juste rajouter "SetKeyLightEnabled(aEnabled)" dans la fonction "SetScreenEnable" (et que effectivement, ça ne marchait pas)?

Ensuite pour répondre à la "critique" du bug sur l'echoing, j'ai l'impression que ton hack (même si il est "quick and dirty", admettons le) suit ce qui est fait sur android "B2G/hardware/qcom/display/liblight/light.c" via les fonctions "set_light_button" puis "write_int" du même fichier. (Mais le vengeur masqué a raison en disant que le comportement n'est pas du à Gonk :-D)
Par contre, j'ai poussé un peu mes tests ce week-end : J'ai compilé les versions 1.3, 1.4, et 2.0 pour faire des tests.

Verdict : La lumière du home arrête de fonctionner après la version 1.4, et là c'est sûr.
Je vais même être plus précis : Dans les sources de B2G 2.0 (toujours le fichier GonkHal.cpp), et dans la fonction SetScreenBrightness, un test supplémentaire est effectué avant de pouvoir agir sur la lumière du bouton :

Code : Tout sélectionner

if (GetKeyLightEnabled()) {
En désactivant ce test, on se retrouve avec la fonction comme elle était dans B2G 1.4, et ça fonctionne également.
Modifié en dernier par micgeri971 le 02 juin 2015, 04:54, modifié 2 fois.

fabbox
Lézard à collerette
Messages : 357
Enregistré le : 16 oct. 2014, 20:20

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par fabbox » 01 juin 2015, 07:10

Salut,

C'est une excellente nouvelle ! On se rapproche certainement d'un patch acceptable.

Ca me parait normal qu'il y ait un test du style "GetKeyLightEnabled()" dans la fonction "setScreenBrigthness" (sinon quand tu changes la luminosité de ton écran, ça pourrait "allumer" la lumière du bouton home si il était éteint).
Maintenant, je ne suis pas sur que le cas où le bouton "home" soit éteint diffère de celui où l'écran est éteint -- dans la pratique il n'y a pas d'option pour désactivé le retroeclairage ( si il marche bien sur ).

Voilà, j'ai dit tout et son contraire il me semble :D :lol:

Tu as pu remonter au commit pour connaitre les motivations de l'ajout de cette ligne ?

micgeri971
Lézard vert
Messages : 129
Enregistré le : 14 déc. 2014, 02:15

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par micgeri971 » 01 juin 2015, 13:25

D'accord avec ta deuxième idée, j'ai plus l'impression que la lumière du bouton home varie en fonction de l'écran (la variable config est commune, autrement dit utilisé par l'ensemble des appels à SetLight si tu regardes bien dans SetScreenBrightness).

Non, pas encore. J'essaierai peut-être ce soir. Si tu y arrives de ton côté, fais-moi signe.
Modifié en dernier par micgeri971 le 02 juin 2015, 04:55, modifié 1 fois.

fabbox
Lézard à collerette
Messages : 357
Enregistré le : 16 oct. 2014, 20:20

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par fabbox » 01 juin 2015, 20:24

Trouvé (en faisant : gitk ./gecko/hal/gonk/GonkHal.cpp)
puis en cherchant les modif de ligne de la commande que tu as pointé ("if (GetKeyLightEnabled()) {").

Code : Tout sélectionner

Auteur: Sean Lin <selin@mozilla.com>  2014-05-30 05:11:23
Auteur du commit: Sean Lin <selin@mozilla.com>  2014-05-30 05:11:23
Parent: 9e7cf58a543a730e70c6b5c14372543c421fd336 (Bug 975667 - gecko: hal: gonk: Emit battery level/charging notification. r=dhylands)
Enfant:  7fde2154a466b81fe66b5553c1aecdd28e0fa6a1 (Bug 1017463 - Remove SetLight / GetLight from PHal.ipdl. r=dhylands)
Branche: remotes/m/master, remotes/mozillaorg/master, remotes/mozillaorg/v2.0, remotes/mozillaorg/v2.0m, remotes/mozillaorg/v2.1, remotes/mozillaorg/v2.1s, remotes/mozillaorg/v2.2
Suit: 
Précède: B2G_2_0_20140609_MERGEDAY

    Bug 911242 - [LED] De-couple the control of screen backlight and keyboard backlight. r=dhylands, sr=sicking

----------------------------- hal/gonk/GonkHal.cpp -----------------------------
index c44516a..212d6be 100644
@@ -540,21 +540,53 @@ GetScreenEnabled()
 }
 
 void
-SetScreenEnabled(bool enabled)
+SetScreenEnabled(bool aEnabled)
 {
-  GetGonkDisplay()->SetEnabled(enabled);
-  sScreenEnabled = enabled;
+  GetGonkDisplay()->SetEnabled(aEnabled);
+  sScreenEnabled = aEnabled;
+}
+
+bool
+GetKeyLightEnabled()
+{
+  hal::LightConfiguration config;
+  hal_impl::GetLight(hal::eHalLightID_Buttons, &config);
+  return (config.color() != 0x00000000);
+}
+
+void
+SetKeyLightEnabled(bool aEnabled)
+{
+  hal::LightConfiguration config;
+  config.mode() = hal::eHalLightMode_User;
+  config.flash() = hal::eHalLightFlash_None;
+  config.flashOnMS() = config.flashOffMS() = 0;
+  config.color() = 0x00000000;
+
+  if (aEnabled) {
+    // Convert the value in [0, 1] to an int between 0 and 255 and then convert
+    // it to a color. Note that the high byte is FF, corresponding to the alpha
+    // channel.
+    double brightness = GetScreenBrightness();
+    uint32_t val = static_cast<int>(round(brightness * 255.0));
+    uint32_t color = (0xff<<24) + (val<<16) + (val<<8) + val;
+
+    config.color() = color;
+  }
+
+  hal_impl::SetLight(hal::eHalLightID_Buttons, config);
+  hal_impl::SetLight(hal::eHalLightID_Keyboard, config);
 }
 
 double
 GetScreenBrightness()
 {
-  hal::LightConfiguration aConfig;
+  hal::LightConfiguration config;
   hal::LightType light = hal::eHalLightID_Backlight;
 
-  hal::GetLight(light, &aConfig);
+  hal_impl::GetLight(light, &config);
   // backlight is brightness only, so using one of the RGB elements as value.
-  int brightness = aConfig.color() & 0xFF;
+  int brightness = config.color() & 0xFF;
   return brightness / 255.0;
 }
 
@@ -571,16 +603,19 @@ SetScreenBrightness(double brightness)
 
   // Convert the value in [0, 1] to an int between 0 and 255 and convert to a color
   // note that the high byte is FF, corresponding to the alpha channel.
-  int val = static_cast<int>(round(brightness * 255));
+  uint32_t val = static_cast<int>(round(brightness * 255.0));
   uint32_t color = (0xff<<24) + (val<<16) + (val<<8) + val;
 
-  hal::LightConfiguration aConfig;
-  aConfig.mode() = hal::eHalLightMode_User;
-  aConfig.flash() = hal::eHalLightFlash_None;
-  aConfig.flashOnMS() = aConfig.flashOffMS() = 0;
-  aConfig.color() = color;
-  hal::SetLight(hal::eHalLightID_Backlight, aConfig);
-  hal::SetLight(hal::eHalLightID_Buttons, aConfig);
+  hal::LightConfiguration config;
+  config.mode() = hal::eHalLightMode_User;
+  config.flash() = hal::eHalLightFlash_None;
+  config.flashOnMS() = config.flashOffMS() = 0;
+  config.color() = color;
+  hal_impl::SetLight(hal::eHalLightID_Backlight, config);
+  if (GetKeyLightEnabled()) {
+    hal_impl::SetLight(hal::eHalLightID_Buttons, config);
+    hal_impl::SetLight(hal::eHalLightID_Keyboard, config);
+  }
 }
 
 static Monitor* sInternalLockCpuMonitor = nullptr;


micgeri971
Lézard vert
Messages : 129
Enregistré le : 14 déc. 2014, 02:15

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par micgeri971 » 02 juin 2015, 00:56

Super ! Merci pour l'info, et pour la commande :)

J'en profite pour aller jeter un œil sur le bug 911242 (mentionné dans le texte que tu as obtenu).


EDIT :
fabbox : Tu avais raison depuis le début :-?
J'en ai vraiment mis du temps à comprendre.

Pour résumer :
- GetKeyLightEnabled permet de savoir si la lumière du bouton est allumé.
- La fonction SetScreenBrightness qui agit sur la luminosité de l'écran, nécessite que le bouton soit allumé (donc que GetKeyLightEnabled renvoie true), pour définir la luminosité de ce dernier.
- Problème : Le bouton étant éteint par défaut, GetKeyLightEnabled renverra forcément false
- Solution : Ajouter SetKeyLightEnabled(aEnabled); au début de la fonction SetScreenEnabled allume le bouton, et permet de retrouver le comportement initial de la lumière du bouton home

Cette ligne pourrait faire office de patch pour l'Open C.
Pourrais-tu la poster sur le Bugzilla des builds communautaires ? Je pense que celle-ci est effectivement plus conforme, et peut passer.

fabbox
Lézard à collerette
Messages : 357
Enregistré le : 16 oct. 2014, 20:20

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par fabbox » 02 juin 2015, 07:26

Ce qui me chagrine avec "ma" solution, est qu'on va à l'encontre du rapport de bug (le 91122) qui veut découpler les deux. Je n'ai pas encore compris si ce que l'on prend pour un bug est en fait une évolution "volontaire" ou bien une régression.

Je m'en vais compléter le rapport de bug :P

micgeri971
Lézard vert
Messages : 129
Enregistré le : 14 déc. 2014, 02:15

Re: [Open C] Retrouver la lumière du bouton home (build man.

Message par micgeri971 » 02 juin 2015, 15:53

Super pour le rapport de bug ! :D

Ça semble être une évolution volontaire. Je n'en voie pas trop l'intérêt non plus (dans notre cas avec l'Open C, bien entendu).

L'autre alternative est de supprimer le if (GetKeyLightEnabled()), et donc de se retrouver avec le comportement qu'on avait en 1.4 (et donc en 1.3), mais ce n'est pas forcément mieux, bien au contraire :wink:

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités