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()。

posted @ 2017-05-08 19:21  wangchangruei  阅读(469)  评论(0编辑  收藏  举报