diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp
index b60204fd..22b2ccd7 100644
--- a/src/PowerFSM.cpp
+++ b/src/PowerFSM.cpp
@@ -113,8 +113,9 @@ static void onEnter()
uint32_t now = millis();
- if (now - lastPingMs > 60 * 1000) { // if more than a minute since our last press, ask other nodes to update their state
- service.sendNetworkPing(NODENUM_BROADCAST, true);
+ if (now - lastPingMs > 30 * 1000) { // if more than a minute since our last press, ask other nodes to update their state
+ if (displayedNodeNum)
+ service.sendNetworkPing(displayedNodeNum, true); // Refresh the currently displayed node
lastPingMs = now;
}
}
diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp
index cc83f2f4..d9e45dd5 100644
--- a/src/mesh/NodeDB.cpp
+++ b/src/mesh/NodeDB.cpp
@@ -48,6 +48,12 @@ User &owner = devicestate.owner;
static uint8_t ourMacAddr[6];
+/**
+ * The node number the user is currently looking at
+ * 0 if none
+ */
+NodeNum displayedNodeNum;
+
NodeDB::NodeDB() : nodes(devicestate.node_db), numNodes(&devicestate.node_db_count) {}
void NodeDB::resetRadioConfig()
diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h
index ddabeb23..0171228a 100644
--- a/src/mesh/NodeDB.h
+++ b/src/mesh/NodeDB.h
@@ -95,4 +95,10 @@ class NodeDB
void loadFromDisk();
};
+/**
+ * The node number the user is currently looking at
+ * 0 if none
+ */
+extern NodeNum displayedNodeNum;
+
extern NodeDB nodeDB;
diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp
index 9d271071..1471e3a9 100644
--- a/src/mesh/RadioLibInterface.cpp
+++ b/src/mesh/RadioLibInterface.cpp
@@ -315,7 +315,7 @@ void RadioLibInterface::handleReceiveInterrupt()
/** start an immediate transmit */
void RadioLibInterface::startSend(MeshPacket *txp)
{
- DEBUG_MSG("Starting low level send from=0x%x, id=%u, want_ack=%d\n", txp->from, txp->id, txp->want_ack);
+ DEBUG_MSG("Starting low level send from=0x%x, to=0x%x, id=%u, want_ack=%d\n", txp->from, txp->to, txp->id, txp->want_ack);
setStandby(); // Cancel any already in process receives
size_t numbytes = beginSending(txp);
diff --git a/src/screen.cpp b/src/screen.cpp
index dd2f99c0..47f4f1c5 100644
--- a/src/screen.cpp
+++ b/src/screen.cpp
@@ -23,6 +23,7 @@ along with this program. If not, see .
#include
#include "GPS.h"
+#include "MeshService.h"
#include "NodeDB.h"
#include "configuration.h"
#include "fonts.h"
@@ -78,6 +79,8 @@ static void drawFrameBluetooth(OLEDDisplay *display, OLEDDisplayUiState *state,
/// Draw the last text message we received
static void drawTextMessageFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
{
+ displayedNodeNum = 0; // Not currently showing a node pane
+
MeshPacket &mp = devicestate.rx_text_message;
NodeInfo *node = nodeDB.getNode(mp.from);
// DEBUG_MSG("drawing text message from 0x%x: %s\n", mp.from,
@@ -303,7 +306,12 @@ static void drawNodeInfo(OLEDDisplay *display, OLEDDisplayUiState *state, int16_
if (n->num == nodeDB.getNodeNum()) {
// Don't show our node, just skip to next
nodeIndex = (nodeIndex + 1) % nodeDB.getNumNodes();
+ n = nodeDB.getNodeByIndex(nodeIndex);
}
+
+ // We just changed to a new node screen, ask that node for updated state
+ displayedNodeNum = n->num;
+ service.sendNetworkPing(displayedNodeNum, true);
}
NodeInfo *node = nodeDB.getNodeByIndex(nodeIndex);
@@ -629,6 +637,8 @@ void Screen::handleOnPress()
void DebugInfo::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
{
+ displayedNodeNum = 0; // Not currently showing a node pane
+
display->setFont(ArialMT_Plain_10);
// The coordinates define the left starting point of the text