电池温度客制化
参考文档: Android 8.0 MTK平台 电池高低温提醒客制化
系统开机的时候,会调用充电入口函数BAT_thread()去初始化一些相关参数,获取电量,检测cpu温度和电池温度
路径: kernel-3.18/drivers/power/mediatek/battery_common.c
void BAT_thread(void)
{
//第一次调用时,battery_meter_initilized 为false,表示没初始化
static kal_bool battery_meter_initilized = KAL_FALSE;
这里省略部分源码,只关注我们需要的代码流程
mt_battery_thermal_check();//cup温度检测
mt_battery_notify_check();//电池温度检测
}
unsigned int g_BatteryNotifyCode = 0x0000;
unsigned int g_BN_TestMode = 0x0000;
void mt_battery_notify_check(void)
{
g_BatteryNotifyCode = 0x0000;
if (g_BN_TestMode == 0x0000) { /* for normal case */
battery_log(BAT_LOG_FULL, "[BATTERY] mt_battery_notify_check\n");
//充电电压检测(充电器插入的时候会抬高电压)
mt_battery_notify_VCharger_check();
//电池温度检测
mt_battery_notify_VBatTemp_check();
//充电电流检测
mt_battery_notify_ICharging_check();
//电池电压检测
mt_battery_notify_VBat_check();
//总体充电时间检测
mt_battery_notify_TotalChargingTime_check();
} else { /* for UI test */
//用于测试提醒功能
mt_battery_notify_UI_test();
}
}
主要关注 mt_battery_notify_VBatTemp_check
static void mt_battery_notify_VBatTemp_check(void)
{
#if defined(BATTERY_NOTIFY_CASE_0002_VBATTEMP)
//如果电池温度>=60度
if (BMT_status.temperature >= batt_cust_data.max_charge_temperature) {
g_BatteryNotifyCode |= 0x0002;//设置提醒码为0x0002
//打印log
battery_log(BAT_LOG_CRTI, "[BATTERY] bat_temp(%d) out of range(too high)\n",
BMT_status.temperature);
}
#if defined(CONFIG_MTK_JEITA_STANDARD_SUPPORT)
//如果电池温度<0度
else if (BMT_status.temperature < TEMP_NEG_10_THRESHOLD) {
g_BatteryNotifyCode |= 0x0020;//设置提醒码为0x0020
battery_log(BAT_LOG_CRTI, "[BATTERY] bat_temp(%d) out of range(too low)\n",
BMT_status.temperature);
}
#else
#ifdef BAT_LOW_TEMP_PROTECT_ENABLE
//如果电池温度<0度
else if (BMT_status.temperature < MIN_CHARGE_TEMPERATURE) {
g_BatteryNotifyCode |= 0x0020;//设置提醒码为0x0020
battery_log(BAT_LOG_CRTI, "[BATTERY] bat_temp(%d) out of range(too low)\n",
BMT_status.temperature);
}
#endif
#endif
battery_log(BAT_LOG_FULL, "[BATTERY] BATTERY_NOTIFY_CASE_0002_VBATTEMP (%x)\n",
g_BatteryNotifyCode);
#endif
}
宏定义路径: kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6580/include/mach/mt_charging.h
BMT_status.temperature:电池温度
batt_cust_data.max_charge_temperature:最大充电温度,默认50度
#define MAX_CHARGE_TEMPERATURE 50
#define MIN_CHARGE_TEMPERATURE 0
g_BatteryNotifyCode |= 0x0002;//设置提醒码为0x0002 高温提醒码
g_BatteryNotifyCode |= 0x0020;//设置提醒码为0x0020 低温提醒码