Call Mode feature
起源
user 在插著 充電器 打電話的狀況下,
為了安全起見,
避免 充電器在這時損害手機,間接造成 user 的傷害,
而有了這 feature,
在 battery voltage Vbat > 4V 時,不充電;
在 battery voltage Vbat < 3.8V 時,需充電;
24 #define V_CC2TOPOFF_THRES 4000
...
2616 #if defined(STOP_CHARGING_IN_TAKLING)
2617 static PMU_STATUS mt_battery_CheckCallState(void)
2618 {
2619 PMU_STATUS status = PMU_STATUS_OK;
2620
2625 if ((g_call_state == CALL_ACTIVE) && (battery_meter_get_battery_voltage(KAL_TRUE) > V_CC2TOPOFF_THRES))
2628 status = PMU_STATUS_FAIL;
2629
2630 return status;
2631 }
2632 #endif
2484 static void mt_battery_CheckBatteryStatus(void)
2485 {
...
2707 #if defined(STOP_CHARGING_IN_TAKLING)
2708 if (mt_battery_CheckCallState() != PMU_STATUS_OK) {
2709 BMT_status.bat_charging_state = CHR_HOLD;
2710 return;
2711 }
2712 #endif
...
2888 }
1338 void mt_battery_charging_algorithm(void)
1339 {
1340 battery_charging_control(CHARGING_CMD_RESET_WATCH_DOG_TIMER, NULL);
1341
1342 /* Generate AICR upper bound by AICL */
1343 if (!mtk_is_pep_series_connect()) {
1344 battery_charging_control(CHARGING_CMD_RUN_AICL,
1345 &g_aicr_upper_bound);
1346 }
1347
1348 mtk_pep20_check_charger();
1349 mtk_pep_check_charger();
1350 switch (BMT_status.bat_charging_state) {
1351 case CHR_PRE:
1352 BAT_PreChargeModeAction();
1353 break;
1354
1355 case CHR_CC:
1356 BAT_ConstantCurrentModeAction();
1357 break;
1358
1359 case CHR_BATFULL:
1360 BAT_BatteryFullAction();
1361 break;
1362
1363 case CHR_HOLD:
1364 BAT_BatteryHoldAction();
1365 break;
1366
1367 case CHR_ERROR:
1368 BAT_BatteryStatusFailAction();
1369 break;
1370 }
1371
1372 battery_charging_control(CHARGING_CMD_DUMP_REGISTER, NULL);
1373 }
1250 #define TALKING_RECHARGE_VOLTAGE 3800
...
1253 PMU_STATUS BAT_BatteryHoldAction(void)
1254 {
1255 unsigned int charging_enable;
1256
1257 battery_log(BAT_LOG_CRTI, "[BATTERY] Hold mode !!\n\r");
1259
1263 if (battery_meter_get_battery_voltage(KAL_TRUE) < TALKING_RECHARGE_VOLTAGE ||
1264 g_call_state == CALL_IDLE ||
1266 xxxxx) {
1271 BMT_status.bat_charging_state = CHR_CC;
1272 battery_log(BAT_LOG_CRTI, "[BATTERY] Exit Hold mode and Enter CC mode !!\n\r");
1273 }
1274
1275 /* Disable charger */
1276 charging_enable = KAL_FALSE;
1277 battery_charging_control(CHARGING_CMD_ENABLE, &charging_enable);
1278
1279 return PMU_STATUS_OK;
1280 }
解說1
一開始對 BAT_BatteryHoldAction() 有些疑惑,
為什麼不在 vbat 小於 TALKING_RECHARGE_VOLTAGE 時,如下,就 enable charging,
1263 if (battery_meter_get_battery_voltage(KAL_TRUE) < TALKING_RECHARGE_VOLTAGE ||
1264 g_call_state == CALL_IDLE ||
1266 xxxxx ) {
...
... enable_charging
...
1273 }
如果 在判斷式裡直接 enable charging,(如上),
會發生一種狀況,
有兩種 手機使用狀況 可能會進入 hold action,
若其中一個不需要進入 hold,也就是會開啟 enable charging 的條件,如 xxxxx
則會發生 一直 enable charging,
而失去 hold 的 意義,
正確流程應該是
設定 BMT_status.bat_charging_state = CHR_CC; 讓其在下一個輪回時,進入正常流程,check 是否要enable charging,
並且在 BAT_BatteryHoldAction() 最下方, disable charging
也就是
只要發生 hold 的狀況,即 disable charging,
讓其在下一個輪回,重新檢查。
解說2
為什麼在最下面要 disable charging
不是 在 vbat 小於 TALKING_RECHARGE_VOLTAGE 時,就要 enable charging 嗎?
原來是
如果 Vbat 大於 V_CC2TOPOFF_THRES,
設定 BMT_status.bat_charging_state = CHR_HOLD,
執行 BAT_BatteryHoldAction()
BAT_BatteryHoldAction()裡,vbat 不論大於或小於 TALKING_RECHARGE_VOLTAGE,
都會disable charging,
但是
設定 BMT_status.bat_charging_state = CHR_CC;
讓其在下一回執行 BAT_thread 時,進入 CC 充電,
而這一輪回 先 disable charging。
而
PMU_ChargerStruct BMT_status; 是一個 global variable,
BMT_status.bat_charging_state 會一直記錄 state
所以會一直保持 CHR_HOLD,(除非 被設為 BMT_status.bat_charging_state = CHR_CC)
進入BAT_BatteryHoldAction()。
Call Mode feature的更多相关文章
- 代码的坏味道(18)——依恋情结(Feature Envy)
坏味道--依恋情结(Feature Envy) 特征 一个函数访问其它对象的数据比访问自己的数据更多. 问题原因 这种气味可能发生在字段移动到数据类之后.如果是这种情况,你可能想将数据类的操作移动到这 ...
- SharePoint 2013: A feature with ID has already been installed in this farm
使用Visual Studio 2013创建一个可视web 部件,当右击项目选择"部署"时报错: "Error occurred in deployment step ' ...
- ABP源码分析二十一:Feature
Feature是什么?Feature就是对function的分类方法,其与function的关系就比如Role和User的关系一样. ABP中Feature具有以下属性: 其中最重要的属性是name, ...
- Atitit. Atiposter 发帖机 新特性 poster new feature v7 q39
Atitit. Atiposter 发帖机 新特性 poster new feature v7 q39 V8 重构iocutilV4,use def iocFact...jettyUtil V ...
- django之一些feature
前端之django一些feature 本节内容 cookie session 跨站请求保护 分页 序列化 model模块 CBV和FBV 模板渲染对象 1. cookie cookie 是一种发送到客 ...
- 关于 feature team 的一些内容
矩阵式管理,是常见的经典管理架构.其最早起源于美国的航空航天部门,然后被美国人带到了日本,然后被日本人带到了台湾,然后台湾人带到大陆...矩阵管理最典型的特征是,组织架构按职能与专业划分,项目由跨越部 ...
- Feature Access
在ArcGIS Server中发布支持Feature Access地图服务,你需要知道的几点: 所绘制的mxd地图文件中包含的数据,必须来自企业级数据库链接: mxd中包含的所有图层的数据,必须来自同 ...
- (十一)WebGIS中要素(Feature)的设计
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在GIS中元素一般分为点元素,线元素,面元素以及symbol ...
- SQL Server 2012安装错误案例:Error while enabling Windows feature: NetFx3, Error Code: -2146498298
案例环境: 服务器环境 : Windows Server 2012 R2 Standard 数据库版本 : SQL Server 2012 SP1 案例介绍: 在Windows Ser ...
- [有意思]The IT workers of Star Wars -- That's not a bug. It's a feature
Yeah, that Artoo is kinda mouthy... ... now select, "restore to factory settings." That'll ...
随机推荐
- Delphi Code Editor 之 快捷菜单
Code Editor的快捷菜单分为两个部分:编辑器菜单项和调试器菜单项. 调试器菜单项留作以后讲解调试应用程序时再讲,这里只讲讲Code Editor的编辑器快捷菜单项. 下面列出了全部菜单项及描述 ...
- Python 源码剖析(三)【字符串对象】
三.字符串对象 1.PyStringObject与PyString_Type 2.创建PyStringObject对象 3.Intern 机制 4.字符缓冲池 5.PyStringObject 效率相 ...
- (转)Ubuntu 12.04 LTS安装VMware Tools实现linux和window 互相复制:无法找到kernel header path的问题
Ubuntu 12.04 LTS安装VMware Tools无法找到kernel header path的问题 ubuntuvmware Ubuntu 12.04 安装 VMware Tools, ...
- POJ.3624 Charm Bracelet(DP 01背包)
POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...
- poj3177 BZOJ1718 Redundant Paths
Description: 有F个牧场,1<=F<=5000,现在一个牧群经常需要从一个牧场迁移到另一个牧场.奶牛们已经厌烦老是走同一条路,所以有必要再新修几条路,这样它们从一个牧场迁移到另 ...
- CCPC-Winter Camp div2 day8 A
---恢复内容开始--- 题目: 题解: 我们考虑第i个叶子节点的情况,根据题目给的输入条件,我们可以知道,深度大的节点的序号一定是大于深度浅的节点的序号的 如图 题目要求我们找出每一个叶子节点距离编 ...
- [python]爬站点
#!/usr/bin/python 2 import urllib 3 import urllib2 4 import re 5 import os 6 7 dirs = ['js','img','p ...
- linux shell脚本攻略笔记
前一阵子系统学习了下<linux shell脚本攻略>这本书.在此记录下自己的学习笔记 1. 输出颜色字符 echo -e "\e[1:41m" 1表示背景色 2 ...
- Leetcode 703. 数据流中的第K大元素
1.题目要求 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器, ...
- HDU3046 最大流(最小割)
Pleasant sheep and big big wolf Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...