/**************************************************************************** NAME powerManagerHandleVbatLow DESCRIPTION Called when the battery voltage is detected to be in Battery Low state */ static void powerManagerHandleVbatLow( void ) { sinkState lSinkState = stateManagerGetState (); bool batt_was_low = powerManagerIsVbatLow(); PM_DEBUG(("PM: Battery Low\n")); if(powerManagerIsChargerConnected() || lSinkState == deviceLimbo) { theSink.battery_state = POWER_BATT_LEVEL0; } else { theSink.battery_state = POWER_BATT_LOW; } if(!batt_was_low || !powerManagerIsVbatLow()) { /* update state indication to indicate low batt state change */ #ifndef NO_LED LEDManagerIndicateState( lSinkState ); #endif } AudioSetPower(powerManagerGetLBIPM()); }
/******************************************************************************* NAME sinkUpgradePowerEventHandler DESCRIPTION Handle power events and pass relevant ones to the Upgrade library. The upgrade library is interested in two kinds of events: 1. When the library is in the 'normal' state then low battery when a charger is not connected triggers transition to the 'low battery error' state. 2. When the library is in the 'low battery error' state, then connecting a charger (or when battery level will magically change from low to ok without connecting a charger) enables transition back to the 'normal' state. PARAMETERS void RETURNS void */ void sinkUpgradePowerEventHandler(void) { upgrade_power_state_t power_state = upgrade_battery_ok; if(powerManagerIsChargerConnected()) { power_state = upgrade_charger_connected; } else if(powerManagerIsVbatLow() || powerManagerIsVbatCritical()) { /* Only when charger is not connected and battery level is low notify * the upgrade library. This is because purpose the upgrade library's * low battery handling is to prevent draining battery to much when * charger is not connected. */ power_state = upgrade_battery_low; } UpgradePowerManagementSetState(power_state); }
/**************************************************************************** NAME batteryNormal DESCRIPTION Called when the battery voltage is detected to be in a Normal state */ static void powerManagerHandleVbatNormal(uint8 level) { #ifndef NO_LED bool low_batt = powerManagerIsVbatLow(); #endif PM_DEBUG(("PM: Battery Normal %d\n", level)); MessageSend(&theSink.task, EventSysBatteryOk, 0); /* If charger connected send a charger gas gauge message (these don't have any functional use but can be associated with LEDs/tones) */ if (powerManagerIsChargerConnected()) MessageSend(&theSink.task, (EventSysChargerGasGauge0+level), 0); /* reset any low battery warning that may be in place */ theSink.battery_state = POWER_BATT_LEVEL0 + level; csr2csrHandleAgBatteryRequestRes(level); #ifndef NO_LED /* when changing from low battery state to a normal state, refresh the led state pattern to replace the low battery pattern should it have been shown */ if(low_batt) LEDManagerIndicateState(stateManagerGetState()); #endif AudioSetPower(powerManagerGetLBIPM()); }