起源

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. HTML5+ API 学习

    HTML5+ API 模块整理 API Reference 模块 中文 模块介绍 Accelerometer 加速计 管理设备加速度传感器,用于获取设备加速度信息,包括x(屏幕水平方向).y(垂直屏幕 ...

  2. WPF值转换实例

    WPF绑定功能非常方便,有时候点击某值时在另t一处显示此值的另一表现形式或调用其对应的其它值,用WPF值转换功能会很方便,下面就一LISTBOX和TEXTBLOCK控件,把LISTBOX中的值转换成除 ...

  3. 禁止移动端input弹出软键盘

    在做三级联动,或者一些时间插件的时候总是弹出软键盘,用下面的方法就可以禁用掉,废话不多说直接上代码. HTML代码 <div class=""> <div> ...

  4. Swift学习与复习

    swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swi ...

  5. Python 日志输出中添加上下文信息

    Python日志输出中添加上下文信息 除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如: ...

  6. hadoop中DataNode消失挂掉的原因及解决方法

    昨天在进行Hadoop实验时遇到一个问题,在sbin目录下输入jps命令,查看当前节点的状态时,意外发现DataNode节点不见了!!于是回忆了一下自己之前的操作过程,大概是因为将自己进入文件夹,将某 ...

  7. 进程间通讯-3(Manager)-实现数据的同时修改

    Manager 可以实现列表,字典,变量,锁,信号量,事件等的数据之间的共享.Manager已经默认加锁了.控制数据不会乱. 实现了不同进程之间数据的共享,并且可以同时修改. from multipr ...

  8. 【以前的空间】bzoj 1072 [SCOI2007]排列perm

    又颓废了一个下午,最近撸mc撸到丧失意识了,玩的有点恶心,于是找水题做,瞧不起颓废的自己啊. another水题. 这题题意很明显啦,就是找数字排列后组成的数去mod d=0后有多少种. 普通的搜索的 ...

  9. 以安装PyTorch为例说明Anaconda在Windows/Linux上的使用

    在Windows10上配置完MXNet 1.3.0后,再配置PyTorch 1.0时,发现两者需要依赖的NumPy版本不一致,之前是通过pip安装NumPy,根据pip的版本不同,会安装不同版本的Nu ...

  10. ZOJ2314:Reactor Cooling——题解

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 题目大意:无源汇上下界网络流,问每个管子走多少流量才能满足所有管子的下界 ...