/* This originally was for battery charge control, but now it handles * other things that must be periodically checked such as * mux control and task check in (watchdog) */ static void MonitorBattery(void) { static unsigned char LastPercent = 101; #if CHECK_CSTACK if (LastPercent == 101) CheckCStack(); #endif unsigned char ClipChanged = CheckClip(); CheckBattery(); if (ClipChanged || Charging() || CurrentPage[PageType] == StatusPage) { unsigned char CurrPercent = BatteryPercentage(); if (CurrPercent != LastPercent || ClipChanged) { if (CurrentPage[PageType] == StatusPage) DrawWatchStatusScreen(); else UpdateClock(); // must be the last to avoid screen mess-up LastPercent = CurrPercent; } } /* Watchdog requires each task to check in. * If the background task reaches here then it can check in. * Send a message to the other tasks so that they must check in. */ TaskCheckIn(eDisplayTaskCheckInId); CreateAndSendMessage(WrapperTaskCheckInMsg, MSG_OPT_NONE); #if TASK_DEBUG UTL_FreeRtosTaskStackCheck(); #endif }
/*! Read the voltage of the battery. This provides power good, battery charging, * battery voltage, and battery voltage average. * * \param tHostMsg* pMsg is unused * */ static void ReadBatteryVoltageHandler(void) { tMessage Msg; SetupMessageAndAllocateBuffer(&Msg, VBatRespMsg, MSG_OPT_NONE); Msg.Length = 6; Msg.pBuffer[0] = ClipOn(); Msg.pBuffer[1] = Charging(); Msg.pBuffer[2] = BatteryPercentage(); unsigned int bv = Read(BATTERY); Msg.pBuffer[4] = bv & 0xFF; Msg.pBuffer[5] = (bv >> 8) & 0xFF; RouteMsg(&Msg); }
static void DrawBatteryOnIdleScreen(unsigned char Row, unsigned char Col, etFontType Font) { // Battery CopyColumnsIntoMyBuffer(GetBatteryIcon(ICON_SET_BATTERY_V), Row, IconInfo[ICON_SET_BATTERY_V].Height, Col, IconInfo[ICON_SET_BATTERY_V].Width); SetFont(Font); gRow = Row + (Font == MetaWatch7 ? 23 : 21); //29 gColumn = Col - 1; //8 gBitColumnMask = (Font == MetaWatch7) ? BIT4 : BIT7; unsigned char BattVal = BatteryPercentage(); if (BattVal < 100) { BattVal = ToBCD(BattVal); DrawChar(BattVal > 9 ? BCD_H(BattVal) +ZERO : SPACE, DRAW_OPT_BITWISE_OR); DrawChar(BCD_L(BattVal) +ZERO, DRAW_OPT_BITWISE_OR); } else DrawString("100", DRAW_OPT_BITWISE_OR); DrawChar('%', DRAW_OPT_BITWISE_OR); }