diff --git a/gui/public/i18n/cs/translation.ftl b/gui/public/i18n/cs/translation.ftl index f2d7dbfbc3..a6b4794c79 100644 --- a/gui/public/i18n/cs/translation.ftl +++ b/gui/public/i18n/cs/translation.ftl @@ -95,6 +95,8 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = Obecné nRF board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion + ## Proportions diff --git a/gui/public/i18n/de/translation.ftl b/gui/public/i18n/de/translation.ftl index f3df11fb50..9b695edaba 100644 --- a/gui/public/i18n/de/translation.ftl +++ b/gui/public/i18n/de/translation.ftl @@ -120,6 +120,7 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = Generisches nRF board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion ## Proportions diff --git a/gui/public/i18n/en/translation.ftl b/gui/public/i18n/en/translation.ftl index 7158573da2..1c6a02f9a1 100644 --- a/gui/public/i18n/en/translation.ftl +++ b/gui/public/i18n/en/translation.ftl @@ -114,6 +114,8 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = Generic nRF board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion +board_type-undefined = Undefined ## Proportions skeleton_bone-NONE = None diff --git a/gui/public/i18n/es-419/translation.ftl b/gui/public/i18n/es-419/translation.ftl index 8fbb9f4467..de9902ec17 100644 --- a/gui/public/i18n/es-419/translation.ftl +++ b/gui/public/i18n/es-419/translation.ftl @@ -120,6 +120,7 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = nRF Genérico board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion ## Proportions diff --git a/gui/public/i18n/fr/translation.ftl b/gui/public/i18n/fr/translation.ftl index 7bd5e93a68..631186501c 100644 --- a/gui/public/i18n/fr/translation.ftl +++ b/gui/public/i18n/fr/translation.ftl @@ -120,6 +120,7 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = nRF Générique board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion ## Proportions diff --git a/gui/public/i18n/nl/translation.ftl b/gui/public/i18n/nl/translation.ftl index 3fd083bde7..49eaabb789 100644 --- a/gui/public/i18n/nl/translation.ftl +++ b/gui/public/i18n/nl/translation.ftl @@ -120,6 +120,7 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = Generic nRF board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion ## Proportions diff --git a/gui/public/i18n/pt-BR/translation.ftl b/gui/public/i18n/pt-BR/translation.ftl index c7a92c34ca..9fc98007f7 100644 --- a/gui/public/i18n/pt-BR/translation.ftl +++ b/gui/public/i18n/pt-BR/translation.ftl @@ -120,6 +120,7 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = nRF genérico board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion ## Proportions diff --git a/gui/public/i18n/th/translation.ftl b/gui/public/i18n/th/translation.ftl index f16b9f5717..8235e90ea8 100644 --- a/gui/public/i18n/th/translation.ftl +++ b/gui/public/i18n/th/translation.ftl @@ -120,6 +120,7 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = บอร์ด NRF ทั่วไป board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion ## Proportions diff --git a/gui/public/i18n/zh-Hans/translation.ftl b/gui/public/i18n/zh-Hans/translation.ftl index 760875d9c5..b0cbdfaf09 100644 --- a/gui/public/i18n/zh-Hans/translation.ftl +++ b/gui/public/i18n/zh-Hans/translation.ftl @@ -120,6 +120,7 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = nRF系列 board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR蝴蝶 开发版 board_type-SLIMEVR_BUTTERFLY = SlimeVR蝴蝶 +board_type-SOMATICVR_ORION = Somatic Orion ## Proportions diff --git a/gui/public/i18n/zh-Hant/translation.ftl b/gui/public/i18n/zh-Hant/translation.ftl index 8c620b7a71..3f00a53819 100644 --- a/gui/public/i18n/zh-Hant/translation.ftl +++ b/gui/public/i18n/zh-Hant/translation.ftl @@ -120,6 +120,7 @@ board_type-ESP32S3_SUPERMINI = ESP32-S3 Supermini board_type-GENERIC_NRF = 通用 nRF board_type-SLIMEVR_BUTTERFLY_DEV = SlimeVR Dev Butterfly board_type-SLIMEVR_BUTTERFLY = SlimeVR Butterfly +board_type-SOMATICVR_ORION = Somatic Orion ## Proportions diff --git a/gui/src/components/tracker/TrackerSettings.tsx b/gui/src/components/tracker/TrackerSettings.tsx index 7f6acd8fd7..fe0ba16bc6 100644 --- a/gui/src/components/tracker/TrackerSettings.tsx +++ b/gui/src/components/tracker/TrackerSettings.tsx @@ -133,6 +133,7 @@ export function TrackerSettingsPage() { }, []); const boardType = useMemo(() => { + if (tracker?.device?.hardwareInfo?.officialBoardType) { return l10n.getString( 'board_type-' + diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt index bac7d126b9..5b5ce8c741 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt @@ -61,6 +61,7 @@ enum class BoardType(val id: UInt) { GENERIC_NRF(24u), SLIMEVR_BUTTERFLY_DEV(25u), SLIMEVR_BUTTERFLY(26u), + SOMATICVR_ORION(27u), DEV_RESERVED(250u), ; @@ -94,6 +95,7 @@ enum class BoardType(val id: UInt) { GENERIC_NRF -> "Generic nRF" SLIMEVR_BUTTERFLY_DEV -> "SlimeVR Dev Butterfly" SLIMEVR_BUTTERFLY -> "SlimeVR Butterfly" + SOMATICVR_ORION -> "Somatic Orion" DEV_RESERVED -> "Prototype" } diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt index ea5c6d5ba1..6b3285b3ef 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt @@ -133,6 +133,7 @@ class TrackersUDPServer(private val port: Int, name: String, private val tracker handshake.macString ?: addr.hostAddress, handshake.boardType, handshake.mcuType, + handshake.manufacturer, ) VRServer.instance.deviceManager.addDevice(connection) connection.protocolVersion = handshake.protocolVersion @@ -150,6 +151,7 @@ class TrackersUDPServer(private val port: Int, name: String, private val tracker // Fixing this would break config! connection.descriptiveName = "udp:/$addr" connection.firmwareVersion = handshake.firmware + connection.manufacturer = handshake.manufacturer synchronized(connections) { // Register the new connection val i = connections.size diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.kt index bed58741c8..cf37c18ec9 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.kt @@ -14,6 +14,7 @@ class UDPDevice( override val hardwareIdentifier: String, override val boardType: BoardType = BoardType.UNKNOWN, override val mcuType: MCUType = MCUType.UNKNOWN, + override var manufacturer: String? = null, ) : Device(true) { override val id: Int = nextLocalDeviceId.incrementAndGet() @@ -75,11 +76,5 @@ class UDPDevice( override fun toString(): String = "udp:/$ipAddress" - override var manufacturer: String? - get() = "SlimeVR" - set(manufacturer) { - super.manufacturer = manufacturer - } - fun getTracker(id: Int): Tracker? = trackers[id] } diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt index c83277b2cc..bde327eed1 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt @@ -99,6 +99,7 @@ data class UDPPacket3Handshake( var protocolVersion: Int = 0, var firmware: String? = null, var macString: String? = null, + var manufacturer: String? = null, ) : UDPPacket(3) { override fun readData(buf: ByteBuffer) { if (buf.remaining() == 0) return @@ -136,6 +137,24 @@ data class UDPPacket3Handshake( ) if (macString == "00:00:00:00:00:00") macString = null } + + var trackerType: UInt = 0u + if (buf.remaining() > 1) { + // not sure if this is the right type etc., but we just want to skip over it + trackerType = buf.get().toUInt() + } + + var vendorLength = 0 + if (buf.remaining() > 0) vendorLength = buf.get().toInt() + + // VENDOR_NAME/manufacturer length is 1 longer than + // that because it's null-terminated + var vendor: String = "placeholder" + vendor = readASCIIString(buf, vendorLength) + + // redundant, but just in case they are somehow different + manufacturer = vendor + } override fun writeData(buf: ByteBuffer) {