decoration Tag "laptop" decoration

decoration
decoration
21.11 2009
12:14

Jak napisać własny miernik baterii?

Exquisite-battery_charged_light.png on GPLProblem 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.

 

Miernik baterii


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



26.03 2008
11:07

Nowy laptop


CPUInfo:

processor  : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 Duo CPU T5270 @ 1.40GHz
stepping : 13
cpu MHz : 1396.576
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm ida
bogomips : 2796.51
clflush size : 64

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 Duo CPU T5270 @ 1.40GHz
stepping : 13
cpu MHz : 1396.576
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm ida
bogomips : 2793.03
clflush size : 64


MEMinfo

MemTotal:      2064492 kB


lspci

00:00.0 Host bridge: Intel Corporation Mobile Memory Controller Hub (rev 0c)
00:02.0 VGA compatible controller: Intel Corporation Mobile Integrated Graphics Controller (rev 0c)
00:02.1 Display controller: Intel Corporation Mobile Integrated Graphics Controller (rev 0c)
00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Contoller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 02)
00:1a.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 02)
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 (rev 02)
00:1c.3 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 4 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev f2)
00:1f.0 ISA bridge: Intel Corporation Mobile LPC Interface Controller (rev 02)
00:1f.1 IDE interface: Intel Corporation Mobile IDE Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation Mobile SATA IDE Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 02)
03:00.0 Ethernet controller: Broadcom Corporation BCM4401-B0 100Base-TX (rev 02)
03:01.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 05)
03:01.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 22)
03:01.2 System peripheral: Ricoh Co Ltd Unknown device 0843 (rev 12)
03:01.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 12)
03:01.4 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 12)
0c:00.0 Network controller: Broadcom Corporation BCM4310 USB Controller (rev 01)

 

Kilka fotek



Copyleft (C) tom000.info 2004-2010. Some rights reserved.