From 8400ae854f5523836a2b32f0358d6273b033c8f2 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Sun, 4 Jan 2026 19:20:57 -0600 Subject: [PATCH] feat: Add initial handling for Store and Forward PlusPlus packets (#4136) Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com> --- .../com/geeksville/mesh/service/MeshDataHandler.kt | 10 ++++++++++ .../feature/settings/debugging/DebugViewModel.kt | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshDataHandler.kt b/app/src/main/java/com/geeksville/mesh/service/MeshDataHandler.kt index 8366c2977..c39b071da 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshDataHandler.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshDataHandler.kt @@ -156,6 +156,11 @@ constructor( shouldBroadcast = false } + Portnums.PortNum.STORE_FORWARD_PLUSPLUS_APP_VALUE -> { + handleStoreForwardPlusPlus(packet) + shouldBroadcast = false + } + Portnums.PortNum.ADMIN_APP_VALUE -> { handleAdminMessage(packet, myNodeNum) shouldBroadcast = false @@ -186,6 +191,11 @@ constructor( handleReceivedStoreAndForward(dataPacket, u, myNodeNum) } + private fun handleStoreForwardPlusPlus(packet: MeshPacket) { + val sfpp = MeshProtos.StoreForwardPlusPlus.parseFrom(packet.decoded.payload) + Logger.d { "Received StoreForwardPlusPlus packet: $sfpp" } + } + private fun handlePaxCounter(packet: MeshPacket) { val p = PaxcountProtos.Paxcount.parseFrom(packet.decoded.payload) nodeManager.handleReceivedPaxcounter(packet.from, p) diff --git a/feature/settings/src/main/kotlin/org/meshtastic/feature/settings/debugging/DebugViewModel.kt b/feature/settings/src/main/kotlin/org/meshtastic/feature/settings/debugging/DebugViewModel.kt index 27e96f1ef..10846898e 100644 --- a/feature/settings/src/main/kotlin/org/meshtastic/feature/settings/debugging/DebugViewModel.kt +++ b/feature/settings/src/main/kotlin/org/meshtastic/feature/settings/debugging/DebugViewModel.kt @@ -31,7 +31,6 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.first -import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -456,6 +455,8 @@ constructor( PortNum.PAXCOUNTER_APP_VALUE -> PaxcountProtos.Paxcount.parseFrom(payload).toString() PortNum.STORE_FORWARD_APP_VALUE -> StoreAndForwardProtos.StoreAndForward.parseFrom(payload).toString() + PortNum.STORE_FORWARD_PLUSPLUS_APP_VALUE -> + MeshProtos.StoreForwardPlusPlus.parseFrom(payload).toString() PortNum.NEIGHBORINFO_APP_VALUE -> decodeNeighborInfo(payload) PortNum.TRACEROUTE_APP_VALUE -> decodeTraceroute(packet, payload) else -> payload.joinToString(" ") { HEX_FORMAT.format(it) }