起源

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的更多相关文章

  1. 代码的坏味道(18)——依恋情结(Feature Envy)

    坏味道--依恋情结(Feature Envy) 特征 一个函数访问其它对象的数据比访问自己的数据更多. 问题原因 这种气味可能发生在字段移动到数据类之后.如果是这种情况,你可能想将数据类的操作移动到这 ...

  2. SharePoint 2013: A feature with ID has already been installed in this farm

    使用Visual Studio 2013创建一个可视web 部件,当右击项目选择"部署"时报错: "Error occurred in deployment step ' ...

  3. ABP源码分析二十一:Feature

    Feature是什么?Feature就是对function的分类方法,其与function的关系就比如Role和User的关系一样. ABP中Feature具有以下属性: 其中最重要的属性是name, ...

  4. Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39

    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39 V8   重构iocutilV4,use def iocFact...jettyUtil V ...

  5. django之一些feature

    前端之django一些feature 本节内容 cookie session 跨站请求保护 分页 序列化 model模块 CBV和FBV 模板渲染对象 1. cookie cookie 是一种发送到客 ...

  6. 关于 feature team 的一些内容

    矩阵式管理,是常见的经典管理架构.其最早起源于美国的航空航天部门,然后被美国人带到了日本,然后被日本人带到了台湾,然后台湾人带到大陆...矩阵管理最典型的特征是,组织架构按职能与专业划分,项目由跨越部 ...

  7. Feature Access

    在ArcGIS Server中发布支持Feature Access地图服务,你需要知道的几点: 所绘制的mxd地图文件中包含的数据,必须来自企业级数据库链接: mxd中包含的所有图层的数据,必须来自同 ...

  8. (十一)WebGIS中要素(Feature)的设计

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在GIS中元素一般分为点元素,线元素,面元素以及symbol ...

  9. SQL Server 2012安装错误案例:Error while enabling Windows feature: NetFx3, Error Code: -2146498298

    案例环境: 服务器环境 :    Windows Server 2012 R2 Standard 数据库版本 :    SQL Server 2012 SP1 案例介绍:   在Windows Ser ...

  10. [有意思]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 ...

随机推荐

  1. Delphi XE4 TStringHelper用法详解

    原文地址:Delphi XE4 TStringHelper用法详解作者:天下为公 Delphi XE4的TStringHelper,对操作字符串进一步带来更多的方法,估计XE5还能继续用到. Syst ...

  2. VBA练习-复杂一点

    '日期添加 Sub addDate(d) Dim rg As Range, dd As Date d = Split(d, ) d = Replace(d, ".", " ...

  3. 【bzoj4715】囚人的旋律 dp

    题目描述 给你一个 $1\sim n$ 的排列 $a_i$ ,若 $i\le j$ 且 $a_i\ge a_j$ ,则 $i$ 到 $j$ 有一条边.现在给你这张图,求既是独立集(任意两个选定点都没有 ...

  4. 【bzoj4579】[Usaco2016 Open]Closing the Farm 并查集

    题目描述 Farmer John and his cows are planning to leave town for a long vacation, and so FJ wants to tem ...

  5. asp.net AES加密跟PHP的一致,将加密的2进制byte[]转换为16进制byte[] 的字符串获得

    <?php class AESUtil { public static function encrypt($input, $key) { $size = mcrypt_get_block_siz ...

  6. 用select (多路复用)模拟一个 socket server

    需求:用select (多路复用)模拟一个 socket server.可以接收多并发. 1. 一开始是检测自己,如果我有活动了,就说明有客户端要连我了. #用select去模拟socket,实现单线 ...

  7. [洛谷P4171][JSOI2010]满汉全席

    题目大意:有$n$个点,每个点可以选或不选,有$m$组约束,形如$a,u,b,v$,表示$u=a,v=b$中至少要满足一个条件,问是否存在一组解,多组询问 题解:$2-SAT$,感觉是板子题呀,最后判 ...

  8. BZOJ2120:数颜色——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2120 https://www.luogu.org/problemnew/show/P1903#su ...

  9. 洛谷3800:Power收集——题解

    https://www.luogu.org/problemnew/show/P3800 可以把游戏界面理解成一个N行M列的棋盘,有K个格子上有P点,其价值为val(i,j) 初始灵梦可以选择在第一行的 ...

  10. BZOJ1027 [HNOI2004]打鼹鼠 【dp】

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3647  Solved: 1746 [Submit][Sta ...