Add on-device Rx Log packet sniffer and RX packet counter

RX packet counter: shows total received packets (flood + direct) on the
radio details page; RAM-only, resets on boot and on any SF/freq/BW change.

Rx Log: app-style packet sniffer opened from Settings > "Rx Log >>".
Captures the last 100 received packets pre-filter via Dispatcher::logRx
into a PSRAM ring, with decoded "sender: message" lines matched by packet
hash for decryptable channels. Each entry shows route/type, time, size,
hash, path, channel or From/To, SNR. W/S scroll, Q back to Settings;
T5S3 swipe-scroll rides the same path.

Files: MyMesh.h/.cpp, RxLogScreen.h (new), UITask.h/.cpp,
SettingsScreen.h, main.cpp.
This commit is contained in:
pelgraine
2026-06-07 05:14:16 +10:00
parent 353048aab3
commit 38656f9d1d
8 changed files with 363 additions and 1 deletions
+14
View File
@@ -4797,6 +4797,11 @@ void handleKeyboardInput() {
}
}
#endif
// Check for Rx Log open request from the settings screen
if (settings->isRxLogRequested()) {
settings->clearRxLogRequest();
ui_task.gotoRxLogScreen();
}
// Check for channel share request from the settings screen
if (settings->isShareRequested()) {
int contactIdx = settings->getShareContactIdx();
@@ -5337,6 +5342,7 @@ void handleKeyboardInput() {
#ifdef MECK_AUDIO_VARIANT
|| ui_task.isOnAlarmScreen()
#endif
|| ui_task.isOnRxLogScreen()
) {
ui_task.injectKey('S');
}
@@ -5357,6 +5363,7 @@ void handleKeyboardInput() {
|| ui_task.isOnAlarmScreen()
#endif
|| ui_task.isHomeOnShutdownPage()
|| ui_task.isOnRxLogScreen()
) {
ui_task.injectKey('s'); // Pass directly for scrolling
} else {
@@ -5379,6 +5386,7 @@ void handleKeyboardInput() {
#ifdef MECK_AUDIO_VARIANT
|| ui_task.isOnAlarmScreen()
#endif
|| ui_task.isOnRxLogScreen()
) {
ui_task.injectKey('W');
}
@@ -5398,6 +5406,7 @@ void handleKeyboardInput() {
#ifdef MECK_AUDIO_VARIANT
|| ui_task.isOnAlarmScreen()
#endif
|| ui_task.isOnRxLogScreen()
) {
ui_task.injectKey('w'); // Pass directly for scrolling
} else {
@@ -5758,6 +5767,11 @@ void handleKeyboardInput() {
ui_task.gotoContactsScreen();
break;
}
// Rx Log screen: Q goes back to settings (screen handles it)
if (ui_task.isOnRxLogScreen()) {
ui_task.injectKey('q');
break;
}
// Path editor: Q goes back to contacts (discards unsaved changes)
if (ui_task.isOnPathEditor()) {
Serial.println("Nav: PathEditor -> Contacts");