diff --git a/src/configuration.h b/src/configuration.h index 4e73531db..a331c6441 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -200,7 +200,7 @@ along with this program. If not, see . // Leave undefined to disable our PMU IRQ handler. DO NOT ENABLE THIS because the pmuirq can cause sperious interrupts // and waking from light sleep // #define PMU_IRQ 35 -#define AXP192_SLAVE_ADDRESS 0x34 +// #define AXP192_SLAVE_ADDRESS 0x34 #elif defined(TBEAM_V07) // This string must exactly match the case used in release file names or the android updater won't work diff --git a/src/mesh/http/WiFiAPClient.cpp b/src/mesh/http/WiFiAPClient.cpp index 5eee529f6..9967c67b3 100644 --- a/src/mesh/http/WiFiAPClient.cpp +++ b/src/mesh/http/WiFiAPClient.cpp @@ -271,7 +271,7 @@ static void WiFiEvent(WiFiEvent_t event) break; case SYSTEM_EVENT_AP_START: DEBUG_MSG("WiFi access point started\n"); - Serial.println(WiFi.softAPIP()); + //Serial.println(WiFi.softAPIP()); onNetworkConnected(); break; case SYSTEM_EVENT_AP_STOP: diff --git a/src/plugins/PositionPlugin.cpp b/src/plugins/PositionPlugin.cpp index 2a6ccbd9b..a58e725c6 100644 --- a/src/plugins/PositionPlugin.cpp +++ b/src/plugins/PositionPlugin.cpp @@ -127,7 +127,7 @@ int32_t PositionPlugin::runOnce() { NodeInfo *node = nodeDB.getNode(nodeDB.getNodeNum()); - // radioConfig.preferences.position_broadcast_smart = true; + radioConfig.preferences.position_broadcast_smart = true; // We limit our GPS broadcasts to a max rate uint32_t now = millis(); @@ -164,7 +164,8 @@ int32_t PositionPlugin::runOnce() // If the distance traveled since the last update is greater than 100 meters // and it's been at least 60 seconds since the last update if ((abs(distance) >= distanceTravel) && - (lastGpsSend == 0 || now - timeTravel >= getPref_position_broadcast_secs() * 1000)) { + (now - lastGpsSend >= timeTravel * 1000) + ) { bool requestReplies = currentGeneration != radioGeneration; currentGeneration = radioGeneration; diff --git a/src/plugins/esp32/StoreForwardPlugin.cpp b/src/plugins/esp32/StoreForwardPlugin.cpp index 06080cdbf..95f5be2e1 100644 --- a/src/plugins/esp32/StoreForwardPlugin.cpp +++ b/src/plugins/esp32/StoreForwardPlugin.cpp @@ -68,8 +68,6 @@ void StoreForwardPlugin::populatePSRAM() https://learn.upesy.com/en/programmation/psram.html#psram-tab */ - uint32_t store_forward_plugin_replay_max_records = 250; - DEBUG_MSG("Before PSRAM initilization:\n"); DEBUG_MSG(" Total heap: %d\n", ESP.getHeapSize()); @@ -77,14 +75,17 @@ void StoreForwardPlugin::populatePSRAM() DEBUG_MSG(" Total PSRAM: %d\n", ESP.getPsramSize()); DEBUG_MSG(" Free PSRAM: %d\n", ESP.getFreePsram()); - // Use a maximum of 2/3 the available PSRAM unless otherwise specified. + this->packetHistoryTXQueue = + static_cast(ps_calloc(this->historyReturnMax, sizeof(PacketHistoryStruct))); + + /* Use a maximum of 2/3 the available PSRAM unless otherwise specified. + Note: This needs to be done after every thing that would use PSRAM + */ uint32_t numberOfPackets = - (radioConfig.preferences.store_forward_plugin_records ? radioConfig.preferences.store_forward_plugin_records - : (((ESP.getFreePsram() / 3) * 2) / sizeof(PacketHistoryStruct))); + (this->records ? this->records : (((ESP.getFreePsram() / 3) * 2) / sizeof(PacketHistoryStruct))); this->packetHistory = static_cast(ps_calloc(numberOfPackets, sizeof(PacketHistoryStruct))); - this->packetHistoryTXQueue = - static_cast(ps_calloc(store_forward_plugin_replay_max_records, sizeof(PacketHistoryStruct))); + DEBUG_MSG("After PSRAM initilization:\n"); DEBUG_MSG(" Total heap: %d\n", ESP.getHeapSize()); @@ -107,7 +108,7 @@ void StoreForwardPlugin::historyReport() void StoreForwardPlugin::historySend(uint32_t msAgo, uint32_t to) { - uint32_t packetsSent = 0; + //uint32_t packetsSent = 0; uint32_t queueSize = storeForwardPlugin->historyQueueCreate(msAgo, to); @@ -229,12 +230,6 @@ ProcessMessage StoreForwardPlugin::handleReceived(const MeshPacket &mp) DEBUG_MSG("--- S&F Received something\n"); - /* - StoreAndForwardMessage sfm = StoreAndForwardMessage_init_default; - - switch (sfm.rr) { - } -*/ auto &p = mp.decoded; // The router node should not be sending messages as a client. @@ -287,49 +282,74 @@ ProcessMessage StoreForwardPlugin::handleReceivedProtobuf(const MeshPacket &mp, return ProcessMessage::CONTINUE; } - //auto sfp = *p; - //auto p = *p; + if (mp.decoded.portnum == PortNum_TEXT_MESSAGE_APP) { + DEBUG_MSG("Packet came from an PortNum_TEXT_MESSAGE_APP port %u\n", mp.decoded.portnum); + return ProcessMessage::CONTINUE; + } else if (mp.decoded.portnum == PortNum_STORE_FORWARD_APP) { + DEBUG_MSG("Packet came from an PortNum_STORE_FORWARD_APP port %u\n", mp.decoded.portnum); + + } else { + DEBUG_MSG("Packet came from an UNKNOWN port %u\n", mp.decoded.portnum); + return ProcessMessage::CONTINUE; + } - // Advance states as needed switch (p->rr) { case StoreAndForward_RequestResponse_CLIENT_ERROR: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_CLIENT_ERROR\n"); break; case StoreAndForward_RequestResponse_CLIENT_HISTORY: - // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_CLIENT_HISTORY\n"); + + // Send the last 60 minutes of messages. + if (this->busy) { + strcpy(this->routerMessage, "** S&F - Busy. Try again shortly."); + storeForwardPlugin->sendMessage(getFrom(&mp), this->routerMessage); + } else { + storeForwardPlugin->historySend(1000 * 60, getFrom(&mp)); + } + break; case StoreAndForward_RequestResponse_CLIENT_PING: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_CLIENT_PING\n"); break; case StoreAndForward_RequestResponse_CLIENT_PONG: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_CLIENT_PONG\n"); break; case StoreAndForward_RequestResponse_CLIENT_STATS: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_CLIENT_STATS\n"); break; case StoreAndForward_RequestResponse_ROUTER_BUSY: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_ROUTER_BUSY\n"); break; case StoreAndForward_RequestResponse_ROUTER_ERROR: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_ROUTER_ERROR\n"); break; case StoreAndForward_RequestResponse_ROUTER_HEARTBEAT: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_ROUTER_HEARTBEAT\n"); break; case StoreAndForward_RequestResponse_ROUTER_PING: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_ROUTER_PING\n"); break; case StoreAndForward_RequestResponse_ROUTER_PONG: // Do nothing + DEBUG_MSG("StoreAndForward_RequestResponse_ROUTER_PONG\n"); break; @@ -337,7 +357,7 @@ ProcessMessage StoreForwardPlugin::handleReceivedProtobuf(const MeshPacket &mp, assert(0); // unexpected state - FIXME, make an error code and reboot } - return ProcessMessage::CONTINUE; // Let others look at this message also if they want + return ProcessMessage::STOP; // There's no need for others to look at this message. } StoreForwardPlugin::StoreForwardPlugin() @@ -354,9 +374,9 @@ StoreForwardPlugin::StoreForwardPlugin() without having to configure it from the PythonAPI or WebUI. */ - // radioConfig.preferences.store_forward_plugin_enabled = 1; - // radioConfig.preferences.is_router = 1; - // radioConfig.preferences.is_always_powered = 1; + radioConfig.preferences.store_forward_plugin_enabled = 1; + radioConfig.preferences.is_router = 1; + radioConfig.preferences.is_always_powered = 1; } if (radioConfig.preferences.store_forward_plugin_enabled) { @@ -369,9 +389,31 @@ StoreForwardPlugin::StoreForwardPlugin() // Do the startup here + // Maximum number of records to return. + if (radioConfig.preferences.store_forward_plugin_history_return_max) + this->historyReturnMax = radioConfig.preferences.store_forward_plugin_history_return_max; + + // Maximum time window for records to return (in minutes) + if (radioConfig.preferences.store_forward_plugin_history_return_window) + this->historyReturnWindow = radioConfig.preferences.store_forward_plugin_history_return_window; + + // Maximum number of records to store in memory + if (radioConfig.preferences.store_forward_plugin_records) + this->records = radioConfig.preferences.store_forward_plugin_records; + + // Maximum number of records to store in memory + if (radioConfig.preferences.store_forward_plugin_heartbeat) + this->heartbeat = radioConfig.preferences.store_forward_plugin_heartbeat; + // Popupate PSRAM with our data structures. this->populatePSRAM(); + // Calculate the packet time. + // this->packetTimeMax = RadioLibInterface::instance->getPacketTime(Constants_DATA_PAYLOAD_LEN); + // RadioLibInterface::instance->getPacketTime(Constants_DATA_PAYLOAD_LEN); + // RadioLibInterface::instance->getPacketTime(Constants_DATA_PAYLOAD_LEN); + // RadioInterface::getPacketTime(500)l + this->packetTimeMax = 2000; } else { diff --git a/src/plugins/esp32/StoreForwardPlugin.h b/src/plugins/esp32/StoreForwardPlugin.h index 05526e783..1f164171f 100644 --- a/src/plugins/esp32/StoreForwardPlugin.h +++ b/src/plugins/esp32/StoreForwardPlugin.h @@ -62,6 +62,12 @@ class StoreForwardPlugin : public SinglePortPlugin, private concurrency::OSThrea private: void populatePSRAM(); + // S&F Defaults + uint32_t historyReturnMax = 250; // 250 records + uint32_t historyReturnWindow = 240; // 4 hours + uint32_t records = 0; // Calculated + bool heartbeat = false; // No heartbeat. + protected: virtual int32_t runOnce();