From 0c135c4502d924276ca175b95cf5d21f92cab9a6 Mon Sep 17 00:00:00 2001 From: andrekir Date: Mon, 28 Mar 2022 15:50:33 -0300 Subject: [PATCH] handle received telemetry portnums --- .../geeksville/mesh/service/MeshService.kt | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt index 8faf0af33..a52ca08c5 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -780,6 +780,14 @@ class MeshService : Service(), Logging { handleReceivedUser(packet.from, u) } + // Handle new telemetry info + Portnums.PortNum.TELEMETRY_APP_VALUE -> { + var u = TelemetryProtos.Telemetry.parseFrom(data.payload) + if (u.time == 0 && packet.rxTime != 0) + u = u.toBuilder().setTime(packet.rxTime).build() + handleReceivedTelemetry(packet.from, u, dataPacket.time) + } + // Handle new style routing info Portnums.PortNum.ROUTING_APP_VALUE -> { shouldBroadcast = @@ -892,6 +900,17 @@ class MeshService : Service(), Logging { } } + /// Update our DB of users based on someone sending out a User subpacket + private fun handleReceivedTelemetry( + fromNum: Int, + p: TelemetryProtos.Telemetry, + defaultTime: Long = System.currentTimeMillis() + ) { + updateNodeInfo(fromNum) { + it.telemetry = Telemetry(p, (defaultTime / 1000L).toInt()) + } + } + /// If packets arrive before we have our node DB, we delay parsing them until the DB is ready // private val earlyReceivedPackets = mutableListOf() @@ -1269,12 +1288,18 @@ class MeshService : Service(), Logging { it.position = Position(info.position) } + if (info.hasTelemetry()) { + // For the local node, it might not be able to update its times because it doesn't have a valid GPS reading yet + // so if the info is for _our_ node we always assume time is current + it.telemetry = Telemetry(info.telemetry) + } + it.lastHeard = info.lastHeard } } private fun handleNodeInfo(info: MeshProtos.NodeInfo) { - debug("Received nodeinfo num=${info.num}, hasUser=${info.hasUser()}, hasPosition=${info.hasPosition()}") + debug("Received nodeinfo num=${info.num}, hasUser=${info.hasUser()}, hasPosition=${info.hasPosition()}, hasTelemetry=${info.hasTelemetry()}") val packetToSave = Packet( UUID.randomUUID().toString(),