mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-25 22:20:27 +00:00
change time display to relative for rx messages
This commit is contained in:
parent
3c6bbff4f9
commit
7a50934185
@ -380,13 +380,16 @@ static void drawTextMessageFrame(OLEDDisplay *display, OLEDDisplayUiState *state
|
|||||||
display->setColor(BLACK);
|
display->setColor(BLACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
tm *tm = localtime(reinterpret_cast<const time_t *>(&mp.rx_time));
|
uint32_t seconds = sinceReceived(&mp);
|
||||||
|
uint32_t minutes = seconds / 60;
|
||||||
|
uint32_t hours = minutes / 60;
|
||||||
|
uint32_t days = hours / 24;
|
||||||
|
|
||||||
if (config.display.heading_bold) {
|
if (config.display.heading_bold) {
|
||||||
display->drawStringf(1 + x, 0 + y, tempBuf, "[%02d:%02d:%02d] From: %s", tm->tm_hour, tm->tm_min, tm->tm_sec,
|
display->drawStringf(1 + x, 0 + y, tempBuf, "%s ago from %s", screen->drawTimeDelta(days, hours, minutes, seconds),
|
||||||
(node && node->has_user) ? node->user.short_name : "???");
|
(node && node->has_user) ? node->user.short_name : "???");
|
||||||
}
|
}
|
||||||
display->drawStringf(0 + x, 0 + y, tempBuf, "[%02d:%02d:%02d] From: %s", tm->tm_hour, tm->tm_min, tm->tm_sec,
|
display->drawStringf(0 + x, 0 + y, tempBuf, "%s ago from %s", screen->drawTimeDelta(days, hours, minutes, seconds),
|
||||||
(node && node->has_user) ? node->user.short_name : "???");
|
(node && node->has_user) ? node->user.short_name : "???");
|
||||||
|
|
||||||
display->setColor(WHITE);
|
display->setColor(WHITE);
|
||||||
@ -417,38 +420,6 @@ static void drawColumns(OLEDDisplay *display, int16_t x, int16_t y, const char *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/// Draw a series of fields in a row, wrapping to multiple rows if needed
|
|
||||||
/// @return the max y we ended up printing to
|
|
||||||
static uint32_t drawRows(OLEDDisplay *display, int16_t x, int16_t y, const char **fields)
|
|
||||||
{
|
|
||||||
// The coordinates define the left starting point of the text
|
|
||||||
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
|
||||||
|
|
||||||
const char **f = fields;
|
|
||||||
int xo = x, yo = y;
|
|
||||||
const int COLUMNS = 2; // hardwired for two columns per row....
|
|
||||||
int col = 0; // track which column we are on
|
|
||||||
while (*f) {
|
|
||||||
display->drawString(xo, yo, *f);
|
|
||||||
xo += SCREEN_WIDTH / COLUMNS;
|
|
||||||
// Wrap to next row, if needed.
|
|
||||||
if (++col >= COLUMNS) {
|
|
||||||
xo = x;
|
|
||||||
yo += FONT_HEIGHT_SMALL;
|
|
||||||
col = 0;
|
|
||||||
}
|
|
||||||
f++;
|
|
||||||
}
|
|
||||||
if (col != 0) {
|
|
||||||
// Include last incomplete line in our total.
|
|
||||||
yo += FONT_HEIGHT_SMALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return yo;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Draw power bars or a charging indicator on an image of a battery, determined by battery charge voltage or percentage.
|
// Draw power bars or a charging indicator on an image of a battery, determined by battery charge voltage or percentage.
|
||||||
static void drawBattery(OLEDDisplay *display, int16_t x, int16_t y, uint8_t *imgBuffer, const PowerStatus *powerStatus)
|
static void drawBattery(OLEDDisplay *display, int16_t x, int16_t y, uint8_t *imgBuffer, const PowerStatus *powerStatus)
|
||||||
{
|
{
|
||||||
@ -1365,6 +1336,20 @@ void Screen::blink()
|
|||||||
dispdev.setBrightness(brightness);
|
dispdev.setBrightness(brightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String Screen::drawTimeDelta(uint32_t days, uint32_t hours, uint32_t minutes, uint32_t seconds)
|
||||||
|
{
|
||||||
|
String uptime;
|
||||||
|
if (days >= 2)
|
||||||
|
uptime = String(days) + "d";
|
||||||
|
else if (hours >= 2)
|
||||||
|
uptime = String(hours) + "h";
|
||||||
|
else if (minutes >= 1)
|
||||||
|
uptime = String(minutes) + "m";
|
||||||
|
else
|
||||||
|
uptime = String(seconds) + "s";
|
||||||
|
return uptime;
|
||||||
|
}
|
||||||
|
|
||||||
void Screen::handlePrint(const char *text)
|
void Screen::handlePrint(const char *text)
|
||||||
{
|
{
|
||||||
// the string passed into us probably has a newline, but that would confuse the logging system
|
// the string passed into us probably has a newline, but that would confuse the logging system
|
||||||
@ -1729,15 +1714,7 @@ void DebugInfo::drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *stat
|
|||||||
display->setColor(WHITE);
|
display->setColor(WHITE);
|
||||||
|
|
||||||
// Show uptime as days, hours, minutes OR seconds
|
// Show uptime as days, hours, minutes OR seconds
|
||||||
String uptime;
|
String uptime = screen->drawTimeDelta(days, hours, minutes, seconds);
|
||||||
if (days >= 2)
|
|
||||||
uptime += String(days) + "d ";
|
|
||||||
else if (hours >= 2)
|
|
||||||
uptime += String(hours) + "h ";
|
|
||||||
else if (minutes >= 1)
|
|
||||||
uptime += String(minutes) + "m ";
|
|
||||||
else
|
|
||||||
uptime += String(seconds) + "s ";
|
|
||||||
|
|
||||||
uint32_t rtc_sec = getValidTime(RTCQuality::RTCQualityDevice);
|
uint32_t rtc_sec = getValidTime(RTCQuality::RTCQualityDevice);
|
||||||
if (rtc_sec > 0) {
|
if (rtc_sec > 0) {
|
||||||
@ -1753,7 +1730,7 @@ void DebugInfo::drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *stat
|
|||||||
int sec = (hms % SEC_PER_HOUR) % SEC_PER_MIN; // or hms % SEC_PER_MIN
|
int sec = (hms % SEC_PER_HOUR) % SEC_PER_MIN; // or hms % SEC_PER_MIN
|
||||||
|
|
||||||
char timebuf[9];
|
char timebuf[9];
|
||||||
snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d", hour, min, sec);
|
snprintf(timebuf, sizeof(timebuf), " %02d:%02d:%02d", hour, min, sec);
|
||||||
uptime += timebuf;
|
uptime += timebuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,6 +206,9 @@ class Screen : public concurrency::OSThread
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// generates a very brief time delta display
|
||||||
|
String drawTimeDelta(uint32_t days, uint32_t hours, uint32_t minutes, uint32_t seconds);
|
||||||
|
|
||||||
/// Overrides the default utf8 character conversion, to replace empty space with question marks
|
/// Overrides the default utf8 character conversion, to replace empty space with question marks
|
||||||
static char customFontTableLookup(const uint8_t ch)
|
static char customFontTableLookup(const uint8_t ch)
|
||||||
{
|
{
|
||||||
|
@ -599,6 +599,17 @@ uint32_t sinceLastSeen(const meshtastic_NodeInfo *n)
|
|||||||
return delta;
|
return delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t sinceReceived(const meshtastic_MeshPacket *p)
|
||||||
|
{
|
||||||
|
uint32_t now = getTime();
|
||||||
|
|
||||||
|
int delta = (int)(now - p->rx_time);
|
||||||
|
if (delta < 0) // our clock must be slightly off still - not set from GPS yet
|
||||||
|
delta = 0;
|
||||||
|
|
||||||
|
return delta;
|
||||||
|
}
|
||||||
|
|
||||||
#define NUM_ONLINE_SECS (60 * 60 * 2) // 2 hrs to consider someone offline
|
#define NUM_ONLINE_SECS (60 * 60 * 2) // 2 hrs to consider someone offline
|
||||||
|
|
||||||
size_t NodeDB::getNumOnlineNodes()
|
size_t NodeDB::getNumOnlineNodes()
|
||||||
|
@ -32,6 +32,9 @@ extern meshtastic_User &owner;
|
|||||||
/// Given a node, return how many seconds in the past (vs now) that we last heard from it
|
/// Given a node, return how many seconds in the past (vs now) that we last heard from it
|
||||||
uint32_t sinceLastSeen(const meshtastic_NodeInfo *n);
|
uint32_t sinceLastSeen(const meshtastic_NodeInfo *n);
|
||||||
|
|
||||||
|
/// Given a packet, return how many seconds in the past (vs now) it was received
|
||||||
|
uint32_t sinceReceived(const meshtastic_MeshPacket *p);
|
||||||
|
|
||||||
class NodeDB
|
class NodeDB
|
||||||
{
|
{
|
||||||
// NodeNum provisionalNodeNum; // if we are trying to find a node num this is our current attempt
|
// NodeNum provisionalNodeNum; // if we are trying to find a node num this is our current attempt
|
||||||
|
Loading…
Reference in New Issue
Block a user