From 41026ab8518593ff98d0e7883ea534b200b43f3f Mon Sep 17 00:00:00 2001 From: Butterscotch! Date: Thu, 4 Sep 2025 01:28:26 -0400 Subject: [PATCH] Move deviceIdLookup to HIDCommon --- .../tracking/trackers/hid/TrackersHID.kt | 33 ++---------------- .../tracking/trackers/hid/HIDCommon.kt | 34 +++++++++++++++++++ .../tracking/trackers/hid/TrackersHID.kt | 33 ++---------------- 3 files changed, 38 insertions(+), 62 deletions(-) diff --git a/server/android/src/main/java/dev/slimevr/android/tracking/trackers/hid/TrackersHID.kt b/server/android/src/main/java/dev/slimevr/android/tracking/trackers/hid/TrackersHID.kt index 9cd89fb14..aae33653a 100644 --- a/server/android/src/main/java/dev/slimevr/android/tracking/trackers/hid/TrackersHID.kt +++ b/server/android/src/main/java/dev/slimevr/android/tracking/trackers/hid/TrackersHID.kt @@ -8,7 +8,6 @@ import android.content.IntentFilter import android.hardware.usb.UsbDevice import android.hardware.usb.UsbManager import androidx.core.content.ContextCompat -import dev.slimevr.VRServer import dev.slimevr.tracking.trackers.Device import dev.slimevr.tracking.trackers.Tracker import dev.slimevr.tracking.trackers.TrackerStatus @@ -133,34 +132,6 @@ class TrackersHID( } } - private fun deviceIdLookup(hidDevice: UsbDevice, deviceId: Int, deviceName: String? = null, deviceList: MutableList): HIDDevice? { - synchronized(this.devices) { - deviceList.map { this.devices[it] }.find { it.hidId == deviceId }?.let { return it } - if (deviceName == null) { // not registered yet - return null - } - val device = HIDDevice(deviceId) - // server wants tracker to be unique, so use combination of hid serial and full id // TODO: use the tracker "address" instead - // TODO: the server should not setup any device, only when the receiver associates the id with the tracker "address" and sends this packet (0xff?) which it will do occasionally - // device.name = hidDevice.serialNumber ?: "Unknown HID Device" - // device.name += "-$deviceId" - device.name = deviceName - device.manufacturer = "HID Device" // TODO: - // device.manufacturer = hidDevice.manufacturer ?: "HID Device" -// device.hardwareIdentifier = hidDevice.serialNumber // hardwareIdentifier is not used to identify the tracker, so also display the receiver serial -// device.hardwareIdentifier += "-$deviceId/$deviceName" // receiver serial + assigned id in receiver + device address - device.hardwareIdentifier = deviceName // the rest of identifier wont fit in gui - this.devices.add(device) - deviceList.add(this.devices.size - 1) - VRServer.instance.deviceManager.addDevice(device) // actually add device to the server - LogManager - .info( - "[TrackerServer] Added device $deviceName for ${hidDevice.serialNumber}, id $deviceId", - ) - return device - } - } - private fun dataRead() { synchronized(devicesByHID) { var devicesPresent = false @@ -199,13 +170,13 @@ class TrackersHID( buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN) val addr = buffer.getLong() and 0xFFFFFFFFFFFF val deviceName = String.format("%012X", addr) - deviceIdLookup(hidDevice, deviceId, deviceName, deviceList) // register device + HIDCommon.deviceIdLookup(devices, hidDevice.serialNumber, deviceId, deviceName, deviceList) // register device // server wants tracker to be unique, so use combination of hid serial and full id i += PACKET_SIZE continue } - val device: HIDDevice? = deviceIdLookup(hidDevice, deviceId, null, deviceList) + val device: HIDDevice? = HIDCommon.deviceIdLookup(devices, hidDevice.serialNumber, deviceId, null, deviceList) if (device == null) { // not registered yet i += PACKET_SIZE continue 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 c8cc08dc6..4b1a6e188 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 @@ -29,6 +29,40 @@ class HIDCommon { private val AXES_OFFSET = fromRotationVector(-FastMath.HALF_PI, 0f, 0f) + fun deviceIdLookup( + hidDevices: MutableList, + hidSerialNumber: String?, + deviceId: Int, + deviceName: String? = null, + deviceList: MutableList, + ): HIDDevice? { + synchronized(hidDevices) { + deviceList.map { hidDevices[it] }.find { it.hidId == deviceId }?.let { return it } + if (deviceName == null) { // not registered yet + return null + } + val device = HIDDevice(deviceId) + // server wants tracker to be unique, so use combination of hid serial and full id // TODO: use the tracker "address" instead + // TODO: the server should not setup any device, only when the receiver associates the id with the tracker "address" and sends this packet (0xff?) which it will do occasionally + // device.name = hidDevice.serialNumber ?: "Unknown HID Device" + // device.name += "-$deviceId" + device.name = deviceName + device.manufacturer = "HID Device" // TODO: + // device.manufacturer = hidDevice.manufacturer ?: "HID Device" +// device.hardwareIdentifier = hidDevice.serialNumber // hardwareIdentifier is not used to identify the tracker, so also display the receiver serial +// device.hardwareIdentifier += "-$deviceId/$deviceName" // receiver serial + assigned id in receiver + device address + device.hardwareIdentifier = deviceName // the rest of identifier wont fit in gui + hidDevices.add(device) + deviceList.add(hidDevices.size - 1) + VRServer.instance.deviceManager.addDevice(device) // actually add device to the server + LogManager + .info( + "[TrackerServer] Added device $deviceName for ${hidSerialNumber ?: "Unknown HID Device"}, id $deviceId", + ) + return device + } + } + private fun setUpSensor( device: HIDDevice, trackerId: Int, diff --git a/server/desktop/src/main/java/dev/slimevr/desktop/tracking/trackers/hid/TrackersHID.kt b/server/desktop/src/main/java/dev/slimevr/desktop/tracking/trackers/hid/TrackersHID.kt index eea86e5e1..fde614c54 100644 --- a/server/desktop/src/main/java/dev/slimevr/desktop/tracking/trackers/hid/TrackersHID.kt +++ b/server/desktop/src/main/java/dev/slimevr/desktop/tracking/trackers/hid/TrackersHID.kt @@ -1,6 +1,5 @@ package dev.slimevr.desktop.tracking.trackers.hid -import dev.slimevr.VRServer import dev.slimevr.tracking.trackers.Device import dev.slimevr.tracking.trackers.Tracker import dev.slimevr.tracking.trackers.TrackerStatus @@ -106,34 +105,6 @@ class TrackersHID(name: String, private val trackersConsumer: Consumer) } } - private fun deviceIdLookup(hidDevice: HidDevice, deviceId: Int, deviceName: String? = null, deviceList: MutableList): HIDDevice? { - synchronized(this.devices) { - deviceList.map { this.devices[it] }.find { it.hidId == deviceId }?.let { return it } - if (deviceName == null) { // not registered yet - return null - } - val device = HIDDevice(deviceId) - // server wants tracker to be unique, so use combination of hid serial and full id // TODO: use the tracker "address" instead - // TODO: the server should not setup any device, only when the receiver associates the id with the tracker "address" and sends this packet (0xff?) which it will do occasionally - // device.name = hidDevice.serialNumber ?: "Unknown HID Device" - // device.name += "-$deviceId" - device.name = deviceName - device.manufacturer = "HID Device" // TODO: - // device.manufacturer = hidDevice.manufacturer ?: "HID Device" -// device.hardwareIdentifier = hidDevice.serialNumber // hardwareIdentifier is not used to identify the tracker, so also display the receiver serial -// device.hardwareIdentifier += "-$deviceId/$deviceName" // receiver serial + assigned id in receiver + device address - device.hardwareIdentifier = deviceName // the rest of identifier wont fit in gui - this.devices.add(device) - deviceList.add(this.devices.size - 1) - VRServer.instance.deviceManager.addDevice(device) // actually add device to the server - LogManager - .info( - "[TrackerServer] Added device $deviceName for ${hidDevice.serialNumber}, id $deviceId", - ) - return device - } - } - @get:Synchronized private val dataReadRunnable: Runnable get() = Runnable { @@ -205,13 +176,13 @@ class TrackersHID(name: String, private val trackersConsumer: Consumer) buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN) val addr = buffer.getLong() and 0xFFFFFFFFFFFF val deviceName = String.format("%012X", addr) - deviceIdLookup(hidDevice, deviceId, deviceName, deviceList) // register device + HIDCommon.deviceIdLookup(devices, hidDevice.serialNumber, deviceId, deviceName, deviceList) // register device // server wants tracker to be unique, so use combination of hid serial and full id i += PACKET_SIZE continue } - val device: HIDDevice? = deviceIdLookup(hidDevice, deviceId, null, deviceList) + val device: HIDDevice? = HIDCommon.deviceIdLookup(devices, hidDevice.serialNumber, deviceId, null, deviceList) if (device == null) { // not registered yet i += PACKET_SIZE continue