Изменения статуса заряда батареи
Перейти к навигации
Перейти к поиску
- В реальном времени не обновляется статус батареи
- Статус меняется только при загрузке системы (и по не проверенной информации иногда обновляется при попытках сна)
- Статус заряда батареи проживает у нас в обычном месте /sys/class/power_supply/battery, в status дело которое сейчас делает
- Статус меняется только при загрузке системы (и по не проверенной информации иногда обновляется при попытках сна)
например Charging или Discharging, в capacity заряд в цифирях
- Проживает в андроиде канитель с батареей в тут https://github.com/CyanogenMod/android_frameworks_base/blob/ics/services/jni/com_android_server_BatteryService.cpp
- Что андроиду не нравится не очень понятно возможно у нас чтонить в непривычном для него формате или месте (или например power_profile.xml кривой https://github.com/rrathi/adamICS/issues/29)
- Андроид чутка ругается на наш драйвер, но вроде тут все нормально у нас этого действительно нет в дровах
- Проживает в андроиде канитель с батареей в тут https://github.com/CyanogenMod/android_frameworks_base/blob/ics/services/jni/com_android_server_BatteryService.cpp
E/BatteryService( 175): usbOnlinePath not found E/BatteryService( 175): batteryHealthPath not found E/BatteryService( 175): batteryTemperaturePath not found
* Нашел вот такое упоминание о том как берется процент заряда On the G1, the kernel will push the "Remaining Battery Percentage" to the sysfs entries directly.
- Инфа конечно старая не факт, что так до сих пор
- Еще инфо из android-porting гугло группы как андроид забирает статус батареи, видимо более актуальное т.к. похоже на правду
Matthias Kaehlcke Post reply More message actions Aug 3 (8 days ago) Re: [android-porting] Android ICS - How to integrate battery status info with Android Hi K.U. El Thu, Aug 02, 2012 at 03:32:16AM -0700 K.U. ha dit: > I am working on an Android-ICS porting project onto a custom Android Tab, > which uses AM3730 (TI's ARM) processor. The device is based on the > BeagleBoard architecture. The device has a fuel guage (BQ27200) and a > charger IC (BQ24150) which communicates with a > MSP430 micro-controller firmware. > My main problem is how to display the battery status through the "battery > icon" on the taskbar? Also I am aware that the other battery related > operations/status (charging, discharging, battery low, fully charged) > could also be read by the Android system and act accordingly. I could not > find a clear set of instructions on how to integrate these features with > android. > Can some one kindly direct me to a link/site where I can find a guide for > this task? Or if any of you can take the time to reply this post, it will > be greatly appreciated. Android gets the battery and charger status from the power supply devices registered in the kernel. whenever the status of a power supply changes (charging/discharging, battery level, charger plugged/unplugged, ...), the kernel sends a so called uevent (userspace event). user processes can register to these uevents, which is what Androids BatteryService does. when the BatteryService is notified about a change in a power supply it reads the updated status of the power supply from sysfs and sends out the corresponding intents which cause the update of the battery icon and so on for the BQ27200 fuel gauge you have the bq27x00_battery driver in the kernel (drivers/power/bq27x00_battery.c), which provides the battery status through uevents and sysfs as outlined above. if configured correctly you should see on your running system a power supply of type battery in /sys/class/power_supply/ with attributes like the current battery capacity or the charging status best regards -- Matthias Kaehlcke Embedded Linux Developer Amsterdam
' Надо найти я ядре девайс у которого это есть и перенести в наши дрова (drivers/power/bq27x00_battery.c походящий вроде кандидат
- Поправленный nvec от ejtagle в котором вроде все работает https://github.com/DerArtem/android_kernel_toshiba_betelgeuse/blob/android-tegra-nv-3.1/drivers/staging/nvec2/nvec_power.c, нужно портировать от туда механизм поллинга
- Пока найдено временное решение из android-x86 чтобы сервис батареии сам инициировал повторые запросы статуса. Патч взят отсуда http://android-x86.git.sourceforge.net/git/gitweb.cgi?p=android-x86/x86_frameworks_base.git;a=commit;h=48f520b2fbe604c550e4fd8ca00f18e478676969
- Поправленный nvec от ejtagle в котором вроде все работает https://github.com/DerArtem/android_kernel_toshiba_betelgeuse/blob/android-tegra-nv-3.1/drivers/staging/nvec2/nvec_power.c, нужно портировать от туда механизм поллинга
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java index 76a4cb0..a54d7ea 100644 (file) --- a/services/java/com/android/server/BatteryService.java +++ b/services/java/com/android/server/BatteryService.java @@ -144,8 +144,18 @@ class BatteryService extends Binder { mInvalidChargerObserver.startObserving("DEVPATH=/devices/virtual/switch/invalid_charger"); } - // set initial status - update(); + // start polling + new Thread(new Runnable() { + public void run() { + while (true) { + update(); + try { + Thread.sleep(30); + } catch (InterruptedException e) { + } + } + } + }, "BatteryServiceUpdateThread").start(); } final boolean isPowered() {
Полезный тред в котором рассказывается как это все работает http://e2e.ti.com/support/embedded/android/f/509/t/192462.aspx
- Найдено правильное решение на уровне драйвера в ядре
diff --git a/drivers/staging/nvec/nvec_power.c b/drivers/staging/nvec/nvec_power.c index dfa966f..2c9dfcd 100644 --- a/drivers/staging/nvec/nvec_power.c +++ b/drivers/staging/nvec/nvec_power.c @@ -216,6 +216,8 @@ static int nvec_power_bat_notifier(struct notifier_block *nb, return NOTIFY_STOP; } + // FIXME Investigate when this call is really needed + power_supply_changed(&nvec_bat_psy); return NOTIFY_STOP; }