mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-10 15:12:06 +00:00
Fix to battery logo on Eink
This commit is contained in:
parent
0e1a1c99f0
commit
df631d480b
@ -157,7 +157,7 @@ static bool haveGlyphs(const char *str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("haveGlyphs=%d", have);
|
// LOG_DEBUG("haveGlyphs=%d", have);
|
||||||
return have;
|
return have;
|
||||||
}
|
}
|
||||||
bool hasUnreadMessage = false;
|
bool hasUnreadMessage = false;
|
||||||
@ -1055,6 +1055,9 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y)
|
|||||||
// === Vertical battery ===
|
// === Vertical battery ===
|
||||||
int batteryX = 1;
|
int batteryX = 1;
|
||||||
int batteryY = HEADER_OFFSET_Y + 1;
|
int batteryY = HEADER_OFFSET_Y + 1;
|
||||||
|
#ifdef USE_EINK
|
||||||
|
batteryY = batteryY + 2;
|
||||||
|
#endif
|
||||||
|
|
||||||
display->drawXbm(batteryX, batteryY, 7, 11, batteryBitmap_v);
|
display->drawXbm(batteryX, batteryY, 7, 11, batteryBitmap_v);
|
||||||
|
|
||||||
@ -1079,7 +1082,11 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y)
|
|||||||
|
|
||||||
int chargeNumWidth = display->getStringWidth(chargeStr);
|
int chargeNumWidth = display->getStringWidth(chargeStr);
|
||||||
const int batteryOffset = useHorizontalBattery ? 28 : 6;
|
const int batteryOffset = useHorizontalBattery ? 28 : 6;
|
||||||
|
#ifdef USE_EINK
|
||||||
|
const int percentX = x + xOffset + batteryOffset - 2;
|
||||||
|
#else
|
||||||
const int percentX = x + xOffset + batteryOffset;
|
const int percentX = x + xOffset + batteryOffset;
|
||||||
|
#endif
|
||||||
|
|
||||||
display->drawString(percentX, textY, chargeStr);
|
display->drawString(percentX, textY, chargeStr);
|
||||||
display->drawString(percentX + chargeNumWidth - 1, textY, "%");
|
display->drawString(percentX + chargeNumWidth - 1, textY, "%");
|
||||||
@ -2137,9 +2144,8 @@ void drawNodeListScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t
|
|||||||
void drawEntryLastHeard(OLEDDisplay *display, meshtastic_NodeInfoLite *node, int16_t x, int16_t y, int columnWidth)
|
void drawEntryLastHeard(OLEDDisplay *display, meshtastic_NodeInfoLite *node, int16_t x, int16_t y, int columnWidth)
|
||||||
{
|
{
|
||||||
bool isLeftCol = (x < SCREEN_WIDTH / 2);
|
bool isLeftCol = (x < SCREEN_WIDTH / 2);
|
||||||
int timeOffset = (SCREEN_WIDTH > 128)
|
int timeOffset = (SCREEN_WIDTH > 128) ? (isLeftCol ? 7 : 10) // Offset for Wide Screens (Left Column:Right Column)
|
||||||
? (isLeftCol ? 7 : 10) // Offset for Wide Screens (Left Column:Right Column)
|
: (isLeftCol ? 3 : 7); // Offset for Narrow Screens (Left Column:Right Column)
|
||||||
: (isLeftCol ? 3 : 7); // Offset for Narrow Screens (Left Column:Right Column)
|
|
||||||
|
|
||||||
String nodeName = getSafeNodeName(node);
|
String nodeName = getSafeNodeName(node);
|
||||||
|
|
||||||
@ -2175,12 +2181,10 @@ void drawEntryHopSignal(OLEDDisplay *display, meshtastic_NodeInfoLite *node, int
|
|||||||
bool isLeftCol = (x < SCREEN_WIDTH / 2);
|
bool isLeftCol = (x < SCREEN_WIDTH / 2);
|
||||||
|
|
||||||
int nameMaxWidth = columnWidth - 25;
|
int nameMaxWidth = columnWidth - 25;
|
||||||
int barsOffset = (SCREEN_WIDTH > 128)
|
int barsOffset = (SCREEN_WIDTH > 128) ? (isLeftCol ? 16 : 20) // Offset for Wide Screens (Left Column:Right Column)
|
||||||
? (isLeftCol ? 16 : 20) // Offset for Wide Screens (Left Column:Right Column)
|
: (isLeftCol ? 15 : 19); // Offset for Narrow Screens (Left Column:Right Column)
|
||||||
: (isLeftCol ? 15 : 19); // Offset for Narrow Screens (Left Column:Right Column)
|
int hopOffset = (SCREEN_WIDTH > 128) ? (isLeftCol ? 22 : 28) // Offset for Wide Screens (Left Column:Right Column)
|
||||||
int hopOffset = (SCREEN_WIDTH > 128)
|
: (isLeftCol ? 18 : 20); // Offset for Narrow Screens (Left Column:Right Column)
|
||||||
? (isLeftCol ? 22 : 28) // Offset for Wide Screens (Left Column:Right Column)
|
|
||||||
: (isLeftCol ? 18 : 20); // Offset for Narrow Screens (Left Column:Right Column)
|
|
||||||
int barsXOffset = columnWidth - barsOffset;
|
int barsXOffset = columnWidth - barsOffset;
|
||||||
|
|
||||||
String nodeName = getSafeNodeName(node);
|
String nodeName = getSafeNodeName(node);
|
||||||
@ -2276,10 +2280,8 @@ void drawNodeDistance(OLEDDisplay *display, meshtastic_NodeInfoLite *node, int16
|
|||||||
display->drawStringMaxWidth(x, y, nameMaxWidth, nodeName);
|
display->drawStringMaxWidth(x, y, nameMaxWidth, nodeName);
|
||||||
|
|
||||||
if (strlen(distStr) > 0) {
|
if (strlen(distStr) > 0) {
|
||||||
int offset =
|
int offset = (SCREEN_WIDTH > 128) ? (isLeftCol ? 7 : 10) // Offset for Wide Screens (Left Column:Right Column)
|
||||||
(SCREEN_WIDTH > 128)
|
: (isLeftCol ? 5 : 8); // Offset for Narrow Screens (Left Column:Right Column)
|
||||||
? (isLeftCol ? 7 : 10) // Offset for Wide Screens (Left Column:Right Column)
|
|
||||||
: (isLeftCol ? 5 : 8); // Offset for Narrow Screens (Left Column:Right Column)
|
|
||||||
int rightEdge = x + columnWidth - offset;
|
int rightEdge = x + columnWidth - offset;
|
||||||
int textWidth = display->getStringWidth(distStr);
|
int textWidth = display->getStringWidth(distStr);
|
||||||
display->drawString(rightEdge - textWidth, y, distStr);
|
display->drawString(rightEdge - textWidth, y, distStr);
|
||||||
@ -2362,7 +2364,7 @@ static void drawDynamicNodeListScreen(OLEDDisplay *display, OLEDDisplayUiState *
|
|||||||
if (state->ticksSinceLastStateSwitch == 0) {
|
if (state->ticksSinceLastStateSwitch == 0) {
|
||||||
currentMode = MODE_LAST_HEARD;
|
currentMode = MODE_LAST_HEARD;
|
||||||
}
|
}
|
||||||
const char *title = getCurrentModeTitle();
|
const char *title = getCurrentModeTitle(display->getWidth());
|
||||||
drawNodeListScreen(display, state, x, y, title, drawEntryDynamic);
|
drawNodeListScreen(display, state, x, y, title, drawEntryDynamic);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -3651,29 +3653,29 @@ void Screen::setFrames(FrameFocus focus)
|
|||||||
|
|
||||||
// Focus on a specific frame, in the frame set we just created
|
// Focus on a specific frame, in the frame set we just created
|
||||||
switch (focus) {
|
switch (focus) {
|
||||||
case FOCUS_DEFAULT:
|
case FOCUS_DEFAULT:
|
||||||
ui->switchToFrame(fsi.positions.deviceFocused);
|
ui->switchToFrame(fsi.positions.deviceFocused);
|
||||||
break;
|
break;
|
||||||
case FOCUS_FAULT:
|
case FOCUS_FAULT:
|
||||||
ui->switchToFrame(fsi.positions.fault);
|
ui->switchToFrame(fsi.positions.fault);
|
||||||
break;
|
break;
|
||||||
case FOCUS_TEXTMESSAGE:
|
case FOCUS_TEXTMESSAGE:
|
||||||
hasUnreadMessage = false; // ✅ Clear when message is *viewed*
|
hasUnreadMessage = false; // ✅ Clear when message is *viewed*
|
||||||
ui->switchToFrame(fsi.positions.textMessage);
|
ui->switchToFrame(fsi.positions.textMessage);
|
||||||
break;
|
break;
|
||||||
case FOCUS_MODULE:
|
case FOCUS_MODULE:
|
||||||
// Whichever frame was marked by MeshModule::requestFocus(), if any
|
// Whichever frame was marked by MeshModule::requestFocus(), if any
|
||||||
// If no module requested focus, will show the first frame instead
|
// If no module requested focus, will show the first frame instead
|
||||||
ui->switchToFrame(fsi.positions.focusedModule);
|
ui->switchToFrame(fsi.positions.focusedModule);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FOCUS_PRESERVE:
|
case FOCUS_PRESERVE:
|
||||||
// No more adjustment — force stay on same index
|
// No more adjustment — force stay on same index
|
||||||
if (originalPosition < fsi.frameCount)
|
if (originalPosition < fsi.frameCount)
|
||||||
ui->switchToFrame(originalPosition);
|
ui->switchToFrame(originalPosition);
|
||||||
else
|
else
|
||||||
ui->switchToFrame(fsi.frameCount - 1);
|
ui->switchToFrame(fsi.frameCount - 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the info about this frameset, for future setFrames calls
|
// Store the info about this frameset, for future setFrames calls
|
||||||
@ -3698,19 +3700,15 @@ void Screen::dismissCurrentFrame()
|
|||||||
bool dismissed = false;
|
bool dismissed = false;
|
||||||
|
|
||||||
// Only dismiss if the text message frame is currently valid and visible
|
// Only dismiss if the text message frame is currently valid and visible
|
||||||
if (framesetInfo.positions.textMessage != 255 &&
|
if (framesetInfo.positions.textMessage != 255 && currentFrame == framesetInfo.positions.textMessage &&
|
||||||
currentFrame == framesetInfo.positions.textMessage &&
|
devicestate.has_rx_text_message) {
|
||||||
devicestate.has_rx_text_message)
|
|
||||||
{
|
|
||||||
LOG_INFO("Dismiss Text Message");
|
LOG_INFO("Dismiss Text Message");
|
||||||
devicestate.has_rx_text_message = false;
|
devicestate.has_rx_text_message = false;
|
||||||
memset(&devicestate.rx_text_message, 0, sizeof(devicestate.rx_text_message)); // ✅ clear message
|
memset(&devicestate.rx_text_message, 0, sizeof(devicestate.rx_text_message)); // ✅ clear message
|
||||||
dismissed = true;
|
dismissed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (currentFrame == framesetInfo.positions.waypoint &&
|
else if (currentFrame == framesetInfo.positions.waypoint && devicestate.has_rx_waypoint) {
|
||||||
devicestate.has_rx_waypoint)
|
|
||||||
{
|
|
||||||
LOG_DEBUG("Dismiss Waypoint");
|
LOG_DEBUG("Dismiss Waypoint");
|
||||||
devicestate.has_rx_waypoint = false;
|
devicestate.has_rx_waypoint = false;
|
||||||
dismissed = true;
|
dismissed = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user