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