📄 pwroncharger.c
字号:
U16 string_id = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
g_charbat_context.batteryStatus = p->battery_status;
#ifdef __MTK_TARGET__
g_charbat_context.chargerLevel = p->battery_voltage;
#endif
mmi_devmgr_charger_send_ack(p->battery_status);
switch (p->battery_status)
{
#ifdef __MMI_USB_SUPPORT__
case PMIC_USB_CHARGER_IN:
string_id = STR_USB_CHARGER_CONNECTED;
/* PASS */
#endif /* __MMI_USB_SUPPORT__ */
case PMIC_CHARGER_IN:
{
if (!string_id)
{
string_id = STR_CHARGER_CONNECTED;
}
g_charbat_context.isChargerConnected = 1;
#ifdef __MMI_USB_SUPPORT__
mmi_usb_set_background_still(MMI_FALSE);
#endif
if (mmi_bootup_is_before_power_on() == MMI_TRUE)
{
PRINT_INFORMATION(("[DevMngr-PMIC] CHARGER IN before power on indication"));
}
else
{
if (mmi_bootup_is_in_power_on_period() == MMI_TRUE)
{
IdleScreenChargerConnected(KAL_TRUE);
// wangbei add start 20071010
#ifdef __NEW_STATUS_ICONS_STYLE__
draw_submenu_statusicons();
#endif
// wangbei add end
}
else
{
g_charbat_context.ChargingComplete = 0; /* To prevent reentrence of charging complete screen */
TurnOnBacklight(1);
if (!g_charbat_context.PowerOnCharger && mmi_bootup_is_in_power_on_period() == MMI_FALSE)
{
BatteryIndicationPopup(string_id);
IdleScreenChargerConnected(KAL_FALSE); /* swap for sublcd display */
// wangbei add start 20071010
#ifdef __NEW_STATUS_ICONS_STYLE__
draw_charger_connected_batteryicon();
#endif
// wangbei add end
}
if (g_charbat_context.LowBatteryFlag) /* Charger plug in shall stop low battery LED pattern */
{
g_charbat_context.LowBatteryFlag = 0;
StopLEDPatternBatteryWarning(); /* disconnect charger, the abnormal led pattern shall stop */
}
}
}
break;
}
#ifdef __MMI_USB_SUPPORT__
case PMIC_USB_CHARGER_OUT:
string_id = STR_USB_CHARGER_REMOVED;
/* PASS */
#endif /* __MMI_USB_SUPPORT__ */
case PMIC_CHARGER_OUT:
{
if (!string_id)
{
string_id = STR_CHARGER_REMOVED;
}
g_charbat_context.ChargingComplete = 0; /* to prevent reentrence of charging complete screen */
g_charbat_context.isChargerConnected = 0;
#ifdef __MMI_USB_SUPPORT__
mmi_usb_set_background_still(MMI_TRUE);
#endif
if (mmi_bootup_is_before_power_on() == MMI_TRUE)
{
PRINT_INFORMATION(("[DevMngr-PMIC] CHARGER OUT before power on indication"));
}
else
{
StopLEDPatternBatteryWarning();
if (g_charbat_context.PowerOnCharger &&
mmi_alm_is_in_alarm() == 0 && g_pwr_context.PowerOnMode != POWER_ON_USB)
{
Message.oslSrcId = MOD_MMI;
Message.oslDestId = MOD_L4C;
Message.oslMsgId = MSG_ID_MMI_EQ_POWER_OFF_REQ;
Message.oslDataPtr = NULL;
Message.oslPeerBuffPtr = NULL;
OslMsgSendExtQueue(&Message);
}
else
{
if (mmi_bootup_is_in_power_on_period() == MMI_FALSE)
{
TurnOnBacklight(1);
#ifdef __USB_IN_NORMAL_MODE__
/* check is in mass storage mode */
if (!mmi_usb_is_in_mass_storage_mode() &&
(GetActiveScreenId() != POPUP_SCREENID))
#endif /* __USB_IN_NORMAL_MODE__ */
{
/* not in mass storage, can show the plug-out prompt */
BatteryIndicationPopup(string_id);
}
DeleteScreenIfPresent(SCR_CHARGER_POWER_ON);
StopLEDPatternCharging();
}
IdleScreenChargerDisconnected();
// wangbei add start 20071010
#ifdef __NEW_STATUS_ICONS_STYLE__
draw_submenu_statusicons();
#endif
// wangbei add end
if (g_charbat_context.ChargingAbnormal)
{
g_charbat_context.ChargingAbnormal = 0;
}
}
}
g_charbat_context.PowerOnCharger = 0;
break;
}
case PMIC_CHARGE_COMPLETE: /* battery full charged. */
{
#ifndef __MTK_TARGET__
g_charbat_context.chargerLevel = BATTERY_LEVEL_3;
#endif
if (mmi_bootup_is_before_power_on() == MMI_TRUE)
{
BatteryStatusIndication(BATTERY_LEVEL_3);
}
else
{
if (g_charbat_context.PowerOnCharger)
{
/* To prevent reentrence of charging complete screen */
if (g_charbat_context.ChargingComplete == 0 && (AlmIsRTCPwron() == 0))
{
g_charbat_context.ChargingComplete = 1;
#ifdef __MMI_USB_SUPPORT__
if (g_pwr_context.PowerOnMode == POWER_ON_USB)
{
ShowUsbChgCmpltScr();
}
else
#endif /* __MMI_USB_SUPPORT__ */
{
ShowChargingCompleteScr();
StartLEDPatternFullCharging();
HideStatusIcon(STATUS_ICON_SUBLCD_BATTERY_STRENGTH);
ShowStatusIcon(STATUS_ICON_SUBLCD_BATTERY_STRENGTH);
ChangeStatusIconLevel(STATUS_ICON_BATTERY_STRENGTH, 100);
ChangeStatusIconLevel(STATUS_ICON_SUBLCD_BATTERY_STRENGTH, 100);
UpdateStatusIcons();
// wangbei add start 20071010
#ifdef __NEW_STATUS_ICONS_STYLE__
draw_submenu_statusicons();
#endif
// wangbei add end
}
}
}
/* Message for Power off Device;Deepali */
else
{
#ifdef __MMI_LED_POWERON_CHARGEFULL__
g_charbat_context.ChargingComplete = 1;
StartLEDPatternFullCharging();
#endif /* __MMI_LED_POWERON_CHARGEFULL__ */
IdleScreenBatteryFullCharged();
}
}
break;
}
case PMIC_VBAT_STATUS:
{
#ifndef __MTK_TARGET__
g_charbat_context.chargerLevel = p->battery_voltage;
#endif
BatteryStatusLowBatteryHandler(p->battery_voltage);
BatteryStatusIndication(p->battery_voltage);
break;
}
case PMIC_INVALID_BATTERY:
ChargingAbnormalHandler(STR_INVALID_BATTERY);
break;
case PMIC_OVERBATTEMP:
ChargingAbnormalHandler(STR_OVER_TEMP_BATTERY);
break;
case PMIC_OVERVOLPROTECT:
ChargingAbnormalHandler(STR_OVER_VOLTAGE_BATTERY);
break;
case PMIC_OVERCHARGECURRENT:
ChargingAbnormalHandler(STR_OVER_CURRENT_BATTERY);
break;
case PMIC_LOWBATTEMP:
ChargingAbnormalHandler(STR_LOW_TEMP_BATTERY);
break;
case PMIC_CHARGING_TIMEOUT:
ChargingAbnormalHandler(STR_CHARGING_TIMEOUT);
break;
case PMIC_INVALID_CHARGER:
ChargingAbnormalHandler(STR_INVALID_CHARGER);
break;
//wangbei add start 20070709
#ifdef __CTA_CHARGER_CHECK__
//NicoLin add for CTA charger check 20070705
case PMIC_WARNNING_CHARGER:
ChargingAbnormalHandler(STR_WARNNING_CHARGER);
break;
//NicoLin add end
#endif
// wangbei add end
case PMIC_LOWCHARGECURRENT:
ChargingAbnormalHandler(STR_CHARGE_BAD_CONTACT);
break;
case PMIC_CHARGE_BAD_CONTACT:
ChargingAbnormalHandler(STR_CHARGE_BAD_CONTACT);
break;
case PMIC_BATTERY_BAD_CONTACT:
ChargingAbnormalHandler(STR_BATTERY_BAD_CONTACT);
break;
default:
break;
}
/* Shall reset this flag in the end of msg handler func */
SetInterruptPopupDisplay(POPUP_ALL_ON);
}
/*****************************************************************************
* FUNCTION
* LowBatteryCommonAction
* DESCRIPTION
* Handles the common action for low battery.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void LowBatteryCommonAction(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (mmi_bootup_is_in_power_on_period() == MMI_TRUE)
{
/* Reset low battery alarm counter, low battery will alert right after finish power on procedure */
RESET_LOW_BATTERY_ALARM_CNT();
}
else
{
if (!g_charbat_context.isChargerConnected && batteryLowCount >= lowBatteryAlarmThreshold)
{
batteryLowCount = 0;
BatteryIndicationPopup(STR_LOW_BATTERY);
StartLEDPatternBatteryLow();
ChgrPlayLowBatTone();
BatteryStatusIndication(BATTERY_LOW_WARNING);
PRINT_INFORMATION(("[DevMngr-PMIC] PMIC_LOW_BATTERY"));
}
if (GetTotalCallCount() > 0 && g_charbat_context.LowBatteryTxProhibitFlag)
{
g_charbat_context.LowBatteryCutOffCallCnt++;
if (g_charbat_context.LowBatteryCutOffCallCnt >= LBAT_CALLDROP_CNT)
{
g_charbat_context.LowBatteryCutOffCallCnt = 0;
DeInitCM();
}
}
else
{
g_charbat_context.LowBatteryCutOffCallCnt = 0;
}
}
g_charbat_context.LowBatteryFlag = 1; /* for led pattern history */
batteryLowCount++;
}
/*****************************************************************************
* FUNCTION
* BatteryStatusLowBatteryHandler
* DESCRIPTION
* his function handle low battery case.
* PARAMETERS
* battery_voltage [IN] Battery level
* RETURNS
* void
*****************************************************************************/
void BatteryStatusLowBatteryHandler(U8 battery_voltage)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#ifdef MMI_ON_HARDWARE_P
kal_prompt_trace(
MOD_MMI,
"=LOWBAT=[Thre %d] [Cnt %d] [LBflag %d] [Txflag %d]",
lowBatteryAlarmThreshold,
batteryLowCount,
g_charbat_context.LowBatteryFlag,
g_charbat_context.LowBatteryTxProhibitFlag);
#endif /* MMI_ON_HARDWARE_P */
switch (battery_voltage)
{
/*
* 1. After power on animation, will check the battery level again, if too low, will shutdown as well.
* 2. When charger connected, shall ignore low battery indication
*/
case BATTERY_LOW_POWEROFF: /* shutdown bcos of low battery */
{
if (!g_charbat_context.isChargerConnected && mmi_bootup_is_in_power_on_period() == MMI_FALSE)
{
PRINT_INFORMATION(("[DevMngr-PMIC] LOW_BATTERY_POWER_OFF"));
ShowLowPowerShutdownScr();
}
break;
}
case BATTERY_LOW_TX_PROHIBIT:
{
if (g_charbat_context.LowBatteryTxProhibitFlag == 0)
{
/* Battery level changer, Change alert Threshold */
g_charbat_context.LowBatteryTxProhibitFlag = 1; /* BATTERY_LOW_TX_PROHIBIT is a kind of low battery indication */
if (GetTotalCallCount() == 0)
{
SET_LOW_BATTERY_ALARM_THRESHOLD(LBAT_IDLE_DURCNT_PROHIBIT);
RESET_LOW_BATTERY_ALARM_CNT();
}
else
{
SET_LOW_BATTERY_ALARM_THRESHOLD(LBAT_TALK_DURCNT_PROHIBIT);
RESET_LOW_BATTERY_ALARM_CNT();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -