From 7f536528d0977ba488ed7e9d18871851594452f9 Mon Sep 17 00:00:00 2001 From: sctanf <36978460+sctanf@users.noreply.github.com> Date: Sat, 13 Dec 2025 19:04:44 -0600 Subject: [PATCH] Parse runtime from HID tracker --- .../dev/slimevr/protocol/datafeed/DataFeedBuilder.java | 3 +++ .../main/java/dev/slimevr/tracking/trackers/Tracker.kt | 1 + .../java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt | 9 +++++++++ solarxr-protocol | 2 +- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java b/server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java index 3c256ff2f..78d2e3dd0 100644 --- a/server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java +++ b/server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java @@ -310,6 +310,9 @@ public class DataFeedBuilder { HardwareStatus.addRssi(fbb, (short) tracker.getSignalStrength().floatValue()); } + if (tracker.getBatteryRemainingRuntime() != null) { + HardwareStatus.addBatteryRuntimeEstimate(fbb, tracker.getBatteryRemainingRuntime()); + } int hardwareDataOffset = HardwareStatus.endHardwareStatus(fbb); int hardwareInfoOffset = DataFeedBuilder.createHardwareInfo(fbb, device); diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt index 6392d2f7c..0212b1982 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt @@ -112,6 +112,7 @@ class Tracker @JvmOverloads constructor( val trackerFlexHandler: TrackerFlexHandler = TrackerFlexHandler(this) var batteryVoltage: Float? = null var batteryLevel: Float? = null + var batteryRemainingRuntime: Long? = null var ping: Int? = null var signalStrength: Int? = null var temperature: Float? = null diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt index 23d0a27ba..584af8604 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt @@ -138,6 +138,7 @@ class HIDCommon { } // Packet data + var runtime: Long? = null var batt: Int? = null var batt_v: Int? = null var temp: Int? = null @@ -221,6 +222,11 @@ class HIDCommon { } } + 5 -> { // runtime + // ulong as little endian + runtime = (dataReceived[i + 9].toUByte().toLong() shl 56) or (dataReceived[i + 8].toUByte().toLong() shl 48) or (dataReceived[i + 7].toUByte().toLong() shl 40) or (dataReceived[i + 6].toUByte().toLong() shl 32) or (dataReceived[i + 5].toUByte().toLong() shl 24) or (dataReceived[i + 4].toUByte().toLong() shl 16) or (dataReceived[i + 3].toUByte().toLong() shl 8) or dataReceived[i + 2].toUByte().toLong() + } + 6 -> { // data button = dataReceived[i + 2].toUByte().toInt() rssi = dataReceived[i + 15].toUByte().toInt() @@ -248,6 +254,9 @@ class HIDCommon { } // Assign data + if (runtime != null) { + tracker.batteryRemainingRuntime = runtime + } if (batt != null) { tracker.batteryLevel = if (batt == 128) 1f else (batt and 127).toFloat() } diff --git a/solarxr-protocol b/solarxr-protocol index b0147eeff..d386d56d7 160000 --- a/solarxr-protocol +++ b/solarxr-protocol @@ -1 +1 @@ -Subproject commit b0147eeffaa97a16400de174383c91be2ec31ab5 +Subproject commit d386d56d74325c603b1a2eddb53e37ca7e71cb89