From d2dbeee6581c7dee29cc0d1704c5416a0fb527cf Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 22 Nov 2022 18:07:32 +1100 Subject: [PATCH] Create drawPowerSourceIcon.cpp --- .../utils/drawPowerSourceIcon.cpp | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/Core/Threads/OperatingModes/utils/drawPowerSourceIcon.cpp diff --git a/source/Core/Threads/OperatingModes/utils/drawPowerSourceIcon.cpp b/source/Core/Threads/OperatingModes/utils/drawPowerSourceIcon.cpp new file mode 100644 index 00000000..4eb01000 --- /dev/null +++ b/source/Core/Threads/OperatingModes/utils/drawPowerSourceIcon.cpp @@ -0,0 +1,43 @@ +#include "OperatingModeUtilities.h" + +static void gui_drawBatteryIcon() { +#if defined(POW_PD) || defined(POW_QC) + if (!getIsPoweredByDCIN()) { + // On non-DC inputs we replace this symbol with the voltage we are operating on + // If <9V then show single digit, if not show dual small ones vertically stacked + uint16_t V = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0); + if (V % 10 >= 5) + V = (V / 10) + 1; // round up + else + V = V / 10; + if (V > 9) { + int16_t xPos = OLED::getCursorX(); + OLED::printNumber(V / 10, 1, FontStyle::SMALL); + OLED::setCursor(xPos, 8); + OLED::printNumber(V % 10, 1, FontStyle::SMALL); + OLED::setCursor(xPos + 12, 0); // need to reset this as if we drew a wide char + } else { + OLED::printNumber(V, 1, FontStyle::LARGE); + } + return; + } +#endif +#ifdef POW_DC + if (getSettingValue(SettingsOptions::MinDCVoltageCells)) { + // User is on a lithium battery + // we need to calculate which of the 10 levels they are on + uint8_t cellCount = getSettingValue(SettingsOptions::MinDCVoltageCells) + 2; + uint32_t cellV = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0) / cellCount; + // Should give us approx cell voltage X10 + // Range is 42 -> Minimum voltage setting (systemSettings.minVoltageCells) = 9 steps therefore we will use battery 0-9 + if (cellV < getSettingValue(SettingsOptions::MinVoltageCells)) + cellV = getSettingValue(SettingsOptions::MinVoltageCells); + cellV -= getSettingValue(SettingsOptions::MinVoltageCells); // Should leave us a number of 0-9 + if (cellV > 9) + cellV = 9; + OLED::drawBattery(cellV + 1); + } else { + OLED::drawSymbol(15); // Draw the DC Logo + } +#endif +} \ No newline at end of file