12:14
Jak napisać własny miernik baterii?
Problem stworzenia własnego miernika baterii, nie jest specjalnie skomplikowany. Opiera się na odczycie kilku plików tekstowych i odpowiedniej analizie znajdujących się tam danych. Co jest potrzebne? Przede wszystkim Linux z obsługą ACPI (jeżeli inne mierniki działają, to na pewno masz już dobrze przygotowane jądro). Przyda się również znajomość jakiegoś języka programowania. Całość powinna zająć maksymalnie kilka godzin, zależnie od sposobu prezentacji.
Do stworzenia takiego miernika przyjrzyjmy się dwóm plikom:
cat /proc/acpi/battery/BAT0/info
cat /proc/acpi/battery/BAT0/state
Struktura obu plików jest taka sama, więc wystarczy prosta klasa wczytująca dane w postaci:
etykieta ":" *\t wartość
Plik info wyświetla informacje ogólne o baterii. Tutaj przydatna dla nas będzie informacja o możliwie maksymalnym załadowaniu baterii – przechowywana jest w „last full capacity”, możemy od razu zauważyć, że wartość ta już się pewnie nie równa „design capacity”, czyli fabrycznej pojemności baterii.
W pliku state znajdziemy informacje o aktualnym stanie baterii. Te poniżej są dla nas niezbędne:
charging state ← pozwala określić, czy bateria jest w użyciu
present rate ← pozwala określić szybkość rozładowywania baterii
remaining capacity ← pozostała pojemność
Podstawowy miernik baterii musi mieć trzy podstawowe funkcje: wykrycie, czy aktualnie korzystamy z baterii, lub z zasilania, wyświetlenie dostępnej pojemności, oraz wyświetlenie czasu do całkowitego rozładowania baterii.
Realizacja pierwszej jest najprostsza – sprawdzamy, czy „charging state” zawiera status „discharging”, oznacza to, że bateria jest rozładowywana.
Dostępna pojemność wyświetlana jest procentowo. Potrzebujemy więc tutaj informacji o maksymalnym naładowaniu baterii, który pobraliśmy z pliku info.
poziom_baterii = (remaining_capacity*100/last_full_capacity);
Pozostały czas do całkowitego rozładowania baterii obliczymy w taki sposób:
time = remaining_capacity/present_rate;
Otrzymamy w ten sposób liczbę reprezentującą czas w systemie dziesiętnym (np. 1.571 – oznacza około 1h 30min). Pozostaje to tylko proste przeliczenie na system godzinowy.
Całość przydałoby się ubrać w jakieś GUI i umieścić np. w Tray'u. Aby miernik wyglądał ładnie graficznie dobrze jest znaleźć, lub przygotować ikony reprezentujące różne poziomy naładowania baterii.

A tak się prezentuje przykładowy napisany przeze mnie miernik baterii (Java+SWT), po najechaniu kursorem.

Komentarze:
12:54
airborn głupi jestem, sprawdzałem co jest w /proc/acpi/battery/BAT0/* przy odłączonej baterii ;]
Dodaj komentarz:

English
Nazywam się Tomasz Chudyk i witam na mojej stronie. Jestem studentem piątego roku informatyki. Moje zainteresowania krążą głównie wokół open-source, Linuksa i technologi internetowych.
