Skip to content

Commit bf2c5d5

Browse files
authored
Add Positional UDP packet (#1546)
1 parent 94b2309 commit bf2c5d5

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ class Tracker @JvmOverloads constructor(
328328

329329
/**
330330
* Tells the tracker that it received new data
331+
* NOTE: Use only when rotation is received
331332
*/
332333
fun dataTick() {
333334
timer.update()

server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,13 @@ class TrackersUDPServer(private val port: Int, name: String, private val tracker
576576
tracker.dataTick()
577577
}
578578

579+
is UDPPacket27Position -> {
580+
tracker = connection?.getTracker(packet.sensorId)
581+
if (tracker == null) return
582+
tracker.position = packet.position
583+
// dont call dataTick here as this is just position update
584+
}
585+
579586
is UDPPacket200ProtocolChange -> {}
580587
}
581588
}

server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,20 @@ data class UDPPacket26FlexData(
396396
}
397397
}
398398

399+
data class UDPPacket27Position(
400+
var position: Vector3 = Vector3.NULL,
401+
) : UDPPacket(27),
402+
SensorSpecificPacket {
403+
override var sensorId = 0
404+
override fun readData(buf: ByteBuffer) {
405+
sensorId = buf.get().toInt() and 0xFF
406+
val x = UDPUtils.getSafeBufferFloat(buf)
407+
val y = UDPUtils.getSafeBufferFloat(buf)
408+
val z = UDPUtils.getSafeBufferFloat(buf)
409+
position = Vector3(x, y, z)
410+
}
411+
}
412+
399413
data class UDPPacket200ProtocolChange(
400414
var targetProtocol: Int = 0,
401415
var targetProtocolVersion: Int = 0,

server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class UDPProtocolParser {
116116
PACKET_FEATURE_FLAGS -> UDPPacket22FeatureFlags()
117117
PACKET_ACK_CONFIG_CHANGE -> UDPPacket24AckConfigChange()
118118
PACKET_FLEX_DATA -> UDPPacket26FlexData()
119+
PACKET_POSITION -> UDPPacket27Position()
119120
PACKET_PROTOCOL_CHANGE -> UDPPacket200ProtocolChange()
120121
else -> null
121122
}
@@ -152,6 +153,7 @@ class UDPProtocolParser {
152153
const val PACKET_ACK_CONFIG_CHANGE = 24
153154
const val PACKET_SET_CONFIG_FLAG = 25
154155
const val PACKET_FLEX_DATA = 26
156+
const val PACKET_POSITION = 27
155157
const val PACKET_BUNDLE = 100
156158
const val PACKET_BUNDLE_COMPACT = 101
157159
const val PACKET_PROTOCOL_CHANGE = 200

0 commit comments

Comments
 (0)