6 votes

Comment Android estime-t-il le niveau de la batterie sans capteur de courant ?

La classe BatteryManager ne dispose pas de la métrique pour le courant : http://developer.Android.com/reference/Android/os/BatteryManager.html

Et puis j'ai trouvé ce post : https://stackoverflow.com/questions/2439619/getting-the-battery-current-values-for-the-Android-phone Il semble que l'auteur ait également constaté qu'il n'était pas possible d'obtenir la valeur actuelle à partir de l'entrée Linux.

J'ai également téléchargé le widget appelé CurrentWidget dans ma Nexus 7. Pour la valeur actuelle, il montre "pas de données".

Il est donc probable qu'un capteur de courant soit nécessaire pour obtenir la valeur du courant et certains systèmes Android ne disposent pas de tels capteurs. Alors comment le système Android peut-il connaître le niveau actuel de la batterie ? Peut-être utilisera-t-il simplement la tension de la batterie pour en déduire que (la tension va diminuer pendant la décharge) ? Mais ce serait alors très grossier. Quelqu'un a dit qu'il y a un "truc" utilisé pour estimer le niveau de la batterie sans les valeurs actuelles dans Android (probablement basé sur la tension ?). Existe-t-il une référence ?

PS : pour une raison quelconque, je sais que la valeur actuelle peut être enregistrée sur l'iphone 3GS.

12voto

Sergey Vlasov Points 2739

L'estimation du niveau de la batterie est généralement effectuée par une puce spéciale "jauge à carburant" ; différents modèles de téléphones utilisent différentes puces. Par exemple, le Samsung GT-I8150 (Galaxy W), d'après la Configuration du noyau utilise le Maxim MAX17043 qui, selon sa fiche technique Il n'a pas d'entrée pour mesurer le courant, mais seulement un capteur de tension de la batterie. Selon la description du fabricant, cette puce utilise "un schéma sophistiqué de modélisation de la batterie Li+, appelé ModelGauge™ pour suivre l'état de charge relatif de la batterie (SOC) en continu sur un profil de charge/décharge très variable". Certaines informations sont disponibles dans la fiche technique, mais les détails de ce schéma "ModelGauge" ne semblent pas être disponibles publiquement.

BTW, le pilote utilisé pour le Samsung Galaxy W semble appliquer quelques corrections au niveau de charge renvoyé par la puce MAX17043, donc l'estimation effectuée par la puce n'est probablement pas idéale.

D'autres puces de jauge de carburant (par exemple, MAX17047 ) mesurent à la fois la tension et le courant, et parfois aussi la température de la batterie. De telles puces peuvent probablement fournir une estimation plus précise du niveau de charge de la batterie. Encore une fois, les fiche technique ne fournit pas tous les détails de la méthode utilisée.

Cependant, même si la puce de la jauge de carburant utilisée dans un téléphone particulier peut mesurer le courant, l'accès à cette information depuis Android peut être impossible pour plusieurs raisons :

  1. La puce pourrait simplement utiliser la mesure du courant en interne et ne pas l'exposer à l'extérieur. Ce n'est pas le cas du MAX17047 - il possède des registres contenant les valeurs de mesure du courant, qui peuvent être lues sur le bus I2C.

  2. Le pilote du noyau pour la puce de la jauge de carburant peut ne pas avoir de code pour exposer les informations de mesure actuelles aux applications utilisateur.

  3. Même si le pilote du noyau met à disposition les informations relatives à la mesure actuelle (par exemple, par le biais d'un fichier sysfs), Android ne dispose pas d'une API standard pour de tels capteurs - ni BatteryManager ni Capteur n'ont rien d'approprié pour un capteur de courant électrique. Par conséquent, l'application CurrentWidget que vous avez trouvée ne peut fonctionner que sur certains modèles pour lesquels le développeur dispose d'informations sur l'accès à ce capteur non standard.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X