Skip to content

Commit dc8fd70

Browse files
committed
Improve logic of magnetometer toggle (#1225)
1 parent 0873615 commit dc8fd70

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

gui/src/components/tracker/TrackerSettings.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -418,13 +418,15 @@ export function TrackerSettingsPage() {
418418
</div>
419419
</div>
420420
)}
421-
{tracker?.tracker.info?.isImu && (
422-
<MagnetometerToggleSetting
423-
settingType="tracker"
424-
trackerNum={tracker.tracker.trackerId?.trackerNum}
425-
deviceId={tracker.tracker.trackerId?.deviceId?.id}
426-
/>
427-
)}
421+
{tracker?.tracker.info?.isImu &&
422+
tracker?.tracker.info?.magnetometer !==
423+
MagnetometerStatus.NOT_SUPPORTED && (
424+
<MagnetometerToggleSetting
425+
settingType="tracker"
426+
trackerNum={tracker.tracker.trackerId?.trackerNum}
427+
deviceId={tracker.tracker.trackerId?.deviceId?.id}
428+
/>
429+
)}
428430
<div className="flex flex-col gap-2 w-full mt-3">
429431
<Typography variant="section-title">
430432
{l10n.getString('tracker-settings-name_section')}

server/core/src/main/java/dev/slimevr/config/ServerConfig.kt

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.slimevr.config
22

33
import dev.slimevr.VRServer
4+
import dev.slimevr.tracking.trackers.udp.MagnetometerStatus
45
import kotlinx.coroutines.async
56
import kotlinx.coroutines.awaitAll
67
import kotlinx.coroutines.coroutineScope
@@ -20,18 +21,33 @@ class ServerConfig {
2021

2122
VRServer.instance.deviceManager.devices.filter { it.magSupport }.map {
2223
async {
24+
// Not using 255 as it sometimes could make one of the sensors go into
25+
// error mode (if there is more than one sensor inside the device)
2326
if (!state) {
24-
it.setMag(false)
27+
val trackers = it.trackers.filterValues {
28+
it.magStatus != MagnetometerStatus.NOT_SUPPORTED
29+
}
30+
// if(trackers.size == it.trackers.size) {
31+
// it.setMag(false)
32+
// } else {
33+
trackers.map { (_, t) ->
34+
async { it.setMag(false, t.trackerNum) }
35+
}.awaitAll()
36+
// }
2537
return@async
2638
}
2739

28-
val every = it.trackers.all { (_, t) -> t.config.shouldHaveMagEnabled == true }
29-
if (every) {
30-
it.setMag(true)
31-
return@async
32-
}
40+
// val every = it.trackers.all { (_, t) -> t.config.shouldHaveMagEnabled == true
41+
// && t.magStatus != MagnetometerStatus.NOT_SUPPORTED }
42+
// if (every) {
43+
// it.setMag(true)
44+
// return@async
45+
// }
3346

34-
it.trackers.filterValues { it.config.shouldHaveMagEnabled == true }
47+
it.trackers.filterValues {
48+
it.config.shouldHaveMagEnabled == true &&
49+
it.magStatus != MagnetometerStatus.NOT_SUPPORTED
50+
}
3551
.map { (_, t) ->
3652
async {
3753
// FIXME: Tracker gets restarted after each setMag, what will happen for devices with 3 trackers?

0 commit comments

Comments
 (0)