Page 1 sur 2

[langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 18:44
par AchilleFraisse
Bonjour,

Existe t-il une bibliothèque (structure) donnant le pourcentage et le temps de batterie restant (et si la batterie est en charge ou en décharge) ?

Par exemple dans /usr/include/sys, il y a utsname.h qui a une structure avec plein de variable donnant le nom de la machine, l'os, la version, etc : http://pubs.opengroup.org/onlinepubs/79 ... ame.h.html

Ben je cherche la même chose, mais pour la batterie

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 19:12
par benjarobin
Le programme acpi fournit une telle chsoe

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 19:26
par AchilleFraisse
En shell ok, mais en C ?
Je fais comment pour récupérer le contenu de acpi -b ?

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 19:56
par benjarobin
Il suffit de regarder le code source...

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 19:58
par AchilleFraisse
??

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 20:08
par benjarobin
Tu regardes le code source de l'application acpi... Et tu verras et comprendras comment on obtient ces informations.

Ou tu peux regarder du côté de libacpi https://www.archlinux.org/packages/comm ... 4/libacpi/

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 20:13
par AchilleFraisse
A oui, beaucoup d'info se trouvent dans /sys/class/power_supply/BAT0
Mais je ne trouve pas le temps restant.

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 20:15
par benjarobin
Car il n'existe pas, il est calculé... As tu au moins regardé le code ?
Il existe même une lib (libacpi) pour faire une telle chose, bien que je n'aime pas du tout son design, quelle horreur...

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 20:23
par AchilleFraisse
Et on le calcul comment le temps restant ? J'ai cherché, mais pas trouvé

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 20:44
par benjarobin

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 20:50
par AchilleFraisse
7.9/(POWER_SUPPLY_ENERGY_NOW / POWER_SUPPLY_VOLTAGE_NOW) ?

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 21:19
par benjarobin
Hein ? Tu as trouvé cela où ? Mathématiquement cela n'a aucun sens en plus... Sérieusement je t'ai donné le lien vers le code source, tu ne veux quand même pas la ligne...

Re: [langage c] Pourcentage batterie et temps restant

Publié : ven. 19 août 2016, 21:46
par AchilleFraisse
benjarobin a écrit :tu ne veux quand même pas la ligne...
Ben... il y en a beaucoup, et je ne trouve pas :o

Re: [langage c] Pourcentage batterie et temps restant

Publié : sam. 20 août 2016, 08:40
par AchilleFraisse
ca :

Code : Tout sélectionner

/* calculate remaining time for battery num */
 static void
 calc_remain_time(const int num){
         battery_t *info = &batteries[num];
 
         if(info->present_rate < 0 || info->charge_state != C_DISCHARGE){
                 info->remaining_time = 0;
                 return;
         }
         info->remaining_time = (int) (((float)info->remaining_cap / (float)info->present_rate) * 60.0);
}
?

C'est quoi remaining_cap et present_rate ?

Re: [langage c] Pourcentage batterie et temps restant

Publié : sam. 20 août 2016, 16:37
par AchilleFraisse
Personne ?

Re: [langage c] Pourcentage batterie et temps restant

Publié : sam. 20 août 2016, 17:02
par benjarobin
Tu as toutes les réponses, prends juste 1h pour comprendre le code si tu en as besoin... Sinon tu as même une librairie, il suffit de l'utiliser...

Re: [langage c] Pourcentage batterie et temps restant

Publié : sam. 20 août 2016, 21:24
par avi3000
Salut,

Achille essaye de comprendre la chose à partir de libacpi.c, ce qui est pertinent si sur son ordi acpi gère la batterie dans /proc/acpi.
Ce qui est du plus en plus rare me semble-t-il.

Si le répertoire BATn est dans /sys/class/power_supply, le paquet libacpi est obsolète (en tout cas, inopérant sur mon asus).
il faut se servir du paquet acpi et de ses sources.
Ce paquet acpi trouve les informations dans /proc/acpi ou dans /sys/class/power_supply selon l'installation.

Re: [langage c] Pourcentage batterie et temps restant

Publié : sam. 20 août 2016, 21:31
par benjarobin
En effet, je n'avais pas fait attention, mais comme j'avais donné toutes les informations... Cela prenait 5s pour se rendre compte que le code de libacpi n'était plus valide (en plus d'avoir un design de code assez horrible)

Re: [langage c] Pourcentage batterie et temps restant

Publié : sam. 20 août 2016, 21:49
par avi3000
Je me suis servi de tes informations pour m'y retrouver.

avec ce /sys/class/power_supply/BAT0/uevent :

Code : Tout sélectionner

POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_STATUS=Discharging
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_CYCLE_COUNT=503
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=7400000
POWER_SUPPLY_VOLTAGE_NOW=7400000
POWER_SUPPLY_POWER_NOW=12313000
POWER_SUPPLY_ENERGY_FULL_DESIGN=50616000
POWER_SUPPLY_ENERGY_FULL=44163000
POWER_SUPPLY_ENERGY_NOW=7888000
POWER_SUPPLY_CAPACITY=17
POWER_SUPPLY_CAPACITY_LEVEL=Normal
POWER_SUPPLY_MODEL_NAME=UX31-35
POWER_SUPPLY_MANUFACTURER=ASUSTeK
POWER_SUPPLY_SERIAL_NUMBER= 
la formule est :
seconds = 3600 * ENERGY_NOW / POWER_NOW

Re: [langage c] Pourcentage batterie et temps restant

Publié : sam. 20 août 2016, 22:01
par benjarobin
Sauf que lire le fichier uevent en c c'est un peu chiant... Il y a tellement plus simple, voir le code d'acpi