微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > Android UI显示电量跳变

Android UI显示电量跳变

时间:10-02 整理:3721RD 点击:

现象:android上层显示电量跳变,但是内核log显示UI_SOC2没有跳变现象;
原因:mtk默认设定尽可能少的通知上层次数,以减少系统功耗,SOC有变化才更新一次,否则60秒
后再更新一次,代码如下:

  1. static void Battery_update(struct battery_data *bat_data)
  2. {
  3. ..............
  4. if (update_cnt == 6) {
  5. /* Update per 60 seconds */
  6. power_supply_changed(bat_psy);
  7. pre_soc = BMT_status.SOC;
  8. update_cnt = 0;
  9. } else if (pre_soc != BMT_status.SOC) {
  10. /* Update when soc change */
  11. power_supply_changed(bat_psy);
  12. pre_soc = BMT_status.SOC;
  13. update_cnt = 0;
  14. } else if (cable_in_uevent == 1) {
  15. /*To prevent interrupt-trigger update fROM being fiLTEred*/
  16. power_supply_changed(bat_psy);
  17. cable_in_uevent = 0;
  18. } else {
  19. /* No update */
  20. update_cnt++;
  21. }

复制代码


解决方法:
将BMT_status.SOC改为BMT_status.UI_SOC2,因为由于GM2.0算法将电量分成3层SOC/UI_SOC/UI_SOC2,这里默认使用SOC作为更新的条件,可能SOC变化1%时,UI_SOC2已经变化2%,导致android UI显示出来的电量有跳变的情况,修改后拿UI_SOC2作为更新的条件,实时的将android电量同步到内核需要显示的电量,这样就不会出现电量跳变情况。

  1. static void battery_update(struct battery_data *bat_data)
  2. {
  3. ..............
  4. if (update_cnt == 6) {
  5. /* Update per 60 seconds */
  6. power_supply_changed(bat_psy);
  7. pre_soc = BMT_status.UI_SOC2;
  8. update_cnt = 0;
  9. } else if (pre_soc != BMT_status.UI_SOC2) {
  10. /* Update when soc change */
  11. power_supply_changed(bat_psy);
  12. pre_soc = BMT_status.UI_SOC2;
  13. update_cnt = 0;
  14. } else if (cable_in_uevent == 1) {
  15. /*To prevent interrupt-trigger update from being filtered*/
  16. power_supply_changed(bat_psy);
  17. cable_in_uevent = 0;
  18. } else {
  19. /* No update */
  20. update_cnt++;
  21. }
  22. }

复制代码





谢谢提供意见

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top