Skip to content

Commit

Permalink
Added a button to switch between 3 and 1 vive trackers mode
Browse files Browse the repository at this point in the history
  • Loading branch information
Eirenliel committed Jul 4, 2021
1 parent a7aec87 commit 143cf49
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 4 deletions.
18 changes: 18 additions & 0 deletions src/main/java/io/eiren/gui/VRServerGUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import io.eiren.util.ann.AWTThread;
import io.eiren.vr.VRServer;
import io.eiren.vr.bridge.NamedPipeVRBridge;

import java.awt.event.MouseEvent;
import java.util.TimerTask;
Expand Down Expand Up @@ -57,8 +58,12 @@ public void run() {
private void build() {
pane.removeAll();

NamedPipeVRBridge npvb = server.getVRBridge(NamedPipeVRBridge.class);

pane.add(new EJBox(LINE_AXIS) {{
setBorder(new EmptyBorder(i(5)));

add(Box.createHorizontalGlue());
add(resetButton = new JButton("RESET") {{
addMouseListener(new MouseInputAdapter() {
@Override
Expand All @@ -67,6 +72,19 @@ public void mouseClicked(MouseEvent e) {
}
});
}});
add(Box.createHorizontalGlue());
if(npvb != null) {
add(new JButton(npvb.isOneTrackerMode() ? "1" : "3") {{
addMouseListener(new MouseInputAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
npvb.setSpawnOneTracker(!npvb.isOneTrackerMode());
setText(npvb.isOneTrackerMode() ? "1" : "3");
}
});
}});
add(Box.createHorizontalStrut(10));
}
}});

pane.add(new EJBox(LINE_AXIS) {{
Expand Down
14 changes: 12 additions & 2 deletions src/main/java/io/eiren/vr/VRServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,15 @@ public class VRServer extends Thread {

public VRServer() {
super("VRServer");
loadConfig();
hmdTracker = new HMDTracker("HMD");
hmdTracker.position.set(0, 1.8f, 0); // Set starting position for easier debugging
// TODO Multiple processors
humanPoseProcessor = new HumanPoseProcessor(this, hmdTracker);
List<? extends Tracker> shareTrackers = humanPoseProcessor.getComputedTrackers();

// Create named pipe bridge for SteamVR driver
NamedPipeVRBridge driverBridge = new NamedPipeVRBridge(hmdTracker, shareTrackers);
NamedPipeVRBridge driverBridge = new NamedPipeVRBridge(hmdTracker, shareTrackers, this);
tasks.add(() -> driverBridge.start());
bridges.add(driverBridge);

Expand All @@ -71,6 +72,16 @@ public VRServer() {
for(int i = 0; i < shareTrackers.size(); ++i)
registerTracker(shareTrackers.get(i));
}

@ThreadSafe
public <E extends VRBridge> E getVRBridge(Class<E> cls) {
for(int i = 0; i < bridges.size(); ++i) {
VRBridge b = bridges.get(i);
if(cls.isInstance(b))
return cls.cast(b);
}
return null;
}

@ThreadSafe
public TrackerConfig getTrackerConfig(Tracker tracker) {
Expand Down Expand Up @@ -169,7 +180,6 @@ public void saveConfig() {
@Override
@VRServerThread
public void run() {
loadConfig();
trackersServer.start();
while(true) {
//final long start = System.currentTimeMillis();
Expand Down
31 changes: 29 additions & 2 deletions src/main/java/io/eiren/vr/bridge/NamedPipeVRBridge.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import io.eiren.util.collections.FastList;
import io.eiren.util.logging.LogManager;
import io.eiren.vr.VRServer;
import io.eiren.vr.trackers.ComputedTracker;
import io.eiren.vr.trackers.HMDTracker;
import io.eiren.vr.trackers.Tracker;
Expand All @@ -32,6 +33,7 @@ public class NamedPipeVRBridge extends Thread implements VRBridge {
private final Quaternion qBuffer = new Quaternion();
private final Quaternion qBuffer2 = new Quaternion();

private final VRServer server;
private Pipe hmdPipe;
private final HMDTracker hmd;
private final List<Pipe> trackerPipes;
Expand All @@ -41,8 +43,11 @@ public class NamedPipeVRBridge extends Thread implements VRBridge {
private final HMDTracker internalHMDTracker = new HMDTracker("itnernal://HMD");
private final AtomicBoolean newHMDData = new AtomicBoolean(false);

public NamedPipeVRBridge(HMDTracker hmd, List<? extends Tracker> shareTrackers) {
private boolean spawnOneTracker = false;

public NamedPipeVRBridge(HMDTracker hmd, List<? extends Tracker> shareTrackers, VRServer server) {
super("Named Pipe VR Bridge");
this.server = server;
this.hmd = hmd;
this.shareTrackers = new FastList<>(shareTrackers);
this.trackerPipes = new FastList<>(shareTrackers.size());
Expand All @@ -53,6 +58,26 @@ public NamedPipeVRBridge(HMDTracker hmd, List<? extends Tracker> shareTrackers)
ct.setStatus(TrackerStatus.OK);
this.internalTrackers.add(ct);
}
this.spawnOneTracker = server.config.getBoolean("openvr.onetracker", spawnOneTracker);
}

public boolean isOneTrackerMode() {
return this.spawnOneTracker;
}

/**
* Makes OpenVR bridge spawn only 1 tracker instead of 3, for
* use with only waist/chest tracking. Requires restart.
*/
public void setSpawnOneTracker(boolean spawnOneTracker) {
if(spawnOneTracker == this.spawnOneTracker)
return;
this.spawnOneTracker = spawnOneTracker;
if(this.spawnOneTracker)
this.server.config.setProperty("openvr.onetracker", true);
else
this.server.config.removeProperty("openvr.onetracker");
this.server.saveConfig();
}

@Override
Expand Down Expand Up @@ -108,6 +133,8 @@ private void waitForPipesToOpen() {
if(tryOpeningPipe(trackerPipe))
initTrackerPipe(trackerPipe, i);
}
if(spawnOneTracker)
return;
}
}

Expand Down Expand Up @@ -167,7 +194,7 @@ private void initHMDPipe(Pipe pipe) {
}

private void initTrackerPipe(Pipe pipe, int trackerId) {
String trackerHello = this.shareTrackers.size() + " 0";
String trackerHello = (spawnOneTracker ? "1" : this.shareTrackers.size()) + " 0";
System.arraycopy(trackerHello.getBytes(ASCII), 0, buffer, 0, trackerHello.length());
buffer[trackerHello.length()] = '\0';
IntByReference lpNumberOfBytesWritten = new IntByReference(0);
Expand Down

0 comments on commit 143cf49

Please sign in to comment.