diff --git a/docs/software/plugins/RangeTestPlugin.md b/docs/software/plugins/RangeTestPlugin.md index ee7732175..ab2f2c4df 100644 --- a/docs/software/plugins/RangeTestPlugin.md +++ b/docs/software/plugins/RangeTestPlugin.md @@ -45,6 +45,18 @@ Recommended settings for a sender at different radio settings: Medium ... range_test_plugin_sender = 15 Short Fast ... range_test_plugin_sender = 15 +## Python API Examples + +### Sender + + meshtastic --set range_test_plugin_enabled 1 + meshtastic --set range_test_plugin_sender 60 + +### Receiver + + meshtastic --set range_test_plugin_enabled 1 + meshtastic --set range_test_plugin_save 1 + ## Other things to keep in mind Be sure to turn off either the plugin configured as a sender or the device where the plugin setup as sender when not in use. This will use a lot of time on air and will spam your channel. diff --git a/src/plugins/esp32/StoreForwardPlugin.cpp b/src/plugins/esp32/StoreForwardPlugin.cpp index 5340c48ae..5fec31ad9 100644 --- a/src/plugins/esp32/StoreForwardPlugin.cpp +++ b/src/plugins/esp32/StoreForwardPlugin.cpp @@ -26,26 +26,23 @@ int32_t StoreForwardPlugin::runOnce() without having to configure it from the PythonAPI or WebUI. */ - // radioConfig.preferences.store_forward_plugin_enabled = 1; - // radioConfig.preferences.is_router = 1; + radioConfig.preferences.store_forward_plugin_enabled = 1; + radioConfig.preferences.is_router = 0; if (radioConfig.preferences.store_forward_plugin_enabled) { if (firstTime) { - /* - */ + firstTime = 0; if (radioConfig.preferences.is_router) { - DEBUG_MSG("Initializing Store & Forward Plugin - Enabled\n"); + DEBUG_MSG("Initializing Store & Forward Plugin - Enabled as Router\n"); // Router if (ESP.getPsramSize()) { if (ESP.getFreePsram() >= 2048 * 1024) { // Do the startup here storeForwardPluginRadio = new StoreForwardPluginRadio(); - firstTime = 0; - this->populatePSRAM(); // packetHistory[0].bytes; @@ -66,21 +63,30 @@ int32_t StoreForwardPlugin::runOnce() } } else { - DEBUG_MSG("Initializing Store & Forward Plugin - Enabled but is_router is not turned on.\n"); - DEBUG_MSG( - "Initializing Store & Forward Plugin - If you want to use this plugin, you must also turn on is_router.\n"); - // Non-Router - - return (30 * 1000); + DEBUG_MSG("Initializing Store & Forward Plugin - Enabled as Client\n"); + return (5 * 1000); } } else { - // What do we do if it's not our first time? - // Maybe some cleanup functions? - this->sawNodeReport(); - this->historyReport(); - return (10 * 1000); + if (radioConfig.preferences.is_router) { + // Maybe some cleanup functions? + this->sawNodeReport(); + this->historyReport(); + return (10 * 1000); + } else { + /* + * If the plugin is turned on and is_router is not enabled, then we'll send a heartbeat every + * few minutes. + */ + + DEBUG_MSG("Store & Forward Plugin - Sending heartbeat\n"); + + // storeForwardPluginRadio->sendPayloadHeartbeat(); + storeForwardPluginRadio->sendPayload(); + + return (1 * 60 * 1000); + } } } else { @@ -220,15 +226,32 @@ void StoreForwardPlugin::sawNodeReport() MeshPacket *StoreForwardPluginRadio::allocReply() { - - auto reply = allocDataPacket(); // Allocate a packet for sending - - return reply; + //auto reply = allocDataPacket(); // Allocate a packet for sending + //return reply; } void StoreForwardPluginRadio::sendPayload(NodeNum dest, bool wantReplies) { - MeshPacket *p = allocReply(); + MeshPacket *p = this->allocReply(); + /* + p->to = dest; + p->decoded.want_response = wantReplies; + + p->want_ack = true; +*/ + // static char heartbeatString[20]; + // snprintf(heartbeatString, sizeof(heartbeatString), "1"); + + // p->decoded.data.payload.size = strlen(heartbeatString); // You must specify how many bytes are in the reply + // memcpy(p->decoded.data.payload.bytes, "1", 1); + + // service.sendToMesh(p); +} + +void StoreForwardPluginRadio::sendPayloadHeartbeat(NodeNum dest, bool wantReplies) +{ + DEBUG_MSG("Sending S&F Heartbeat\n"); + MeshPacket *p = this->allocReply(); p->to = dest; p->decoded.want_response = wantReplies; @@ -282,8 +305,8 @@ bool StoreForwardPluginRadio::handleReceived(const MeshPacket &mp) } if ((millis() - sawTime) > STOREFORWARD_SEND_HISTORY_SHORT) { - // Node has been away for a while. - storeForwardPlugin->historySend(sawTime, getFrom(&mp)); + // Node has been away for a while. + storeForwardPlugin->historySend(sawTime, mp.from); } } diff --git a/src/plugins/esp32/StoreForwardPlugin.h b/src/plugins/esp32/StoreForwardPlugin.h index e49b38fe9..d2a2879c8 100644 --- a/src/plugins/esp32/StoreForwardPlugin.h +++ b/src/plugins/esp32/StoreForwardPlugin.h @@ -63,6 +63,11 @@ class StoreForwardPluginRadio : public SinglePortPlugin */ void sendPayload(NodeNum dest = NODENUM_BROADCAST, bool wantReplies = false); + /** + * Send our payload into the mesh + */ + void sendPayloadHeartbeat(NodeNum dest = NODENUM_BROADCAST, bool wantReplies = false); + protected: virtual MeshPacket *allocReply();