Skip to content

Commit

Permalink
Fix Windows bridge exceptions on other OSes and handle serial excepti…
Browse files Browse the repository at this point in the history
…ons better (#297)
  • Loading branch information
ButterscotchV authored Nov 24, 2022
1 parent 5c59c4e commit b5f12b4
Showing 1 changed file with 78 additions and 67 deletions.
145 changes: 78 additions & 67 deletions server/src/main/java/dev/slimevr/protocol/RPCHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,13 @@ public void onOpenSerialRequest(GenericConnection conn, RpcMessageHeader message

conn.getContext().setUseSerial(true);

this.api.server.getSerialHandler().openSerial();
try {
this.api.server.getSerialHandler().openSerial();
} catch (Exception e) {
LogManager.severe("Unable to open serial port", e);
} catch (Throwable e) {
LogManager.severe("Using serial ports is not supported on this platform", e);
}

FlatBufferBuilder fbb = new FlatBufferBuilder(32);
SerialUpdateResponse.startSerialUpdateResponse(fbb);
Expand Down Expand Up @@ -292,18 +298,21 @@ public void onSettingsRequest(GenericConnection conn, RpcMessageHeader messageHe

WindowsNamedPipeBridge bridge = this.api.server.getVRBridge(WindowsNamedPipeBridge.class);

int steamvrTrackerSettings = SteamVRTrackersSetting
.createSteamVRTrackersSetting(
fbb,
bridge.getShareSetting(TrackerRole.WAIST),
bridge.getShareSetting(TrackerRole.CHEST),
bridge.getShareSetting(TrackerRole.LEFT_FOOT)
&& bridge.getShareSetting(TrackerRole.RIGHT_FOOT),
bridge.getShareSetting(TrackerRole.LEFT_KNEE)
&& bridge.getShareSetting(TrackerRole.RIGHT_KNEE),
bridge.getShareSetting(TrackerRole.LEFT_ELBOW)
&& bridge.getShareSetting(TrackerRole.RIGHT_ELBOW)
);
int steamvrTrackerSettings = 0;
if (bridge != null) {
steamvrTrackerSettings = SteamVRTrackersSetting
.createSteamVRTrackersSetting(
fbb,
bridge.getShareSetting(TrackerRole.WAIST),
bridge.getShareSetting(TrackerRole.CHEST),
bridge.getShareSetting(TrackerRole.LEFT_FOOT)
&& bridge.getShareSetting(TrackerRole.RIGHT_FOOT),
bridge.getShareSetting(TrackerRole.LEFT_KNEE)
&& bridge.getShareSetting(TrackerRole.RIGHT_KNEE),
bridge.getShareSetting(TrackerRole.LEFT_ELBOW)
&& bridge.getShareSetting(TrackerRole.RIGHT_ELBOW)
);
}

FiltersConfig filtersConfig = this.api.server
.getConfigManager()
Expand All @@ -326,31 +335,28 @@ public void onSettingsRequest(GenericConnection conn, RpcMessageHeader messageHe
vrcOSCConfig
);

int modelSettings;
{
var config = this.api.server.humanPoseProcessor.getSkeletonConfig();
int togglesOffset = ModelToggles
.createModelToggles(
fbb,
config.getToggle(SkeletonConfigToggles.EXTENDED_SPINE_MODEL),
config.getToggle(SkeletonConfigToggles.EXTENDED_PELVIS_MODEL),
config.getToggle(SkeletonConfigToggles.EXTENDED_KNEE_MODEL),
config.getToggle(SkeletonConfigToggles.FORCE_ARMS_FROM_HMD),
config.getToggle(SkeletonConfigToggles.SKATING_CORRECTION),
config.getToggle(SkeletonConfigToggles.FLOOR_CLIP)
);
int ratiosOffset = ModelRatios
.createModelRatios(
fbb,
config.getValue(SkeletonConfigValues.WAIST_FROM_CHEST_HIP_AVERAGING),
config.getValue(SkeletonConfigValues.WAIST_FROM_CHEST_LEGS_AVERAGING),
config.getValue(SkeletonConfigValues.HIP_FROM_CHEST_LEGS_AVERAGING),
config.getValue(SkeletonConfigValues.HIP_FROM_WAIST_LEGS_AVERAGING),
config.getValue(SkeletonConfigValues.HIP_LEGS_AVERAGING),
config.getValue(SkeletonConfigValues.KNEE_TRACKER_ANKLE_AVERAGING)
);
modelSettings = ModelSettings.createModelSettings(fbb, togglesOffset, ratiosOffset);
}
var config = this.api.server.humanPoseProcessor.getSkeletonConfig();
int togglesOffset = ModelToggles
.createModelToggles(
fbb,
config.getToggle(SkeletonConfigToggles.EXTENDED_SPINE_MODEL),
config.getToggle(SkeletonConfigToggles.EXTENDED_PELVIS_MODEL),
config.getToggle(SkeletonConfigToggles.EXTENDED_KNEE_MODEL),
config.getToggle(SkeletonConfigToggles.FORCE_ARMS_FROM_HMD),
config.getToggle(SkeletonConfigToggles.SKATING_CORRECTION),
config.getToggle(SkeletonConfigToggles.FLOOR_CLIP)
);
int ratiosOffset = ModelRatios
.createModelRatios(
fbb,
config.getValue(SkeletonConfigValues.WAIST_FROM_CHEST_HIP_AVERAGING),
config.getValue(SkeletonConfigValues.WAIST_FROM_CHEST_LEGS_AVERAGING),
config.getValue(SkeletonConfigValues.HIP_FROM_CHEST_LEGS_AVERAGING),
config.getValue(SkeletonConfigValues.HIP_FROM_WAIST_LEGS_AVERAGING),
config.getValue(SkeletonConfigValues.HIP_LEGS_AVERAGING),
config.getValue(SkeletonConfigValues.KNEE_TRACKER_ANKLE_AVERAGING)
);
int modelSettings = ModelSettings.createModelSettings(fbb, togglesOffset, ratiosOffset);

int settings = SettingsResponse
.createSettingsResponse(
Expand Down Expand Up @@ -411,14 +417,17 @@ public void onChangeSettingsRequest(GenericConnection conn, RpcMessageHeader mes
if (req.steamVrTrackers() != null) {
WindowsNamedPipeBridge bridge = this.api.server
.getVRBridge(WindowsNamedPipeBridge.class);
bridge.changeShareSettings(TrackerRole.WAIST, req.steamVrTrackers().waist());
bridge.changeShareSettings(TrackerRole.CHEST, req.steamVrTrackers().chest());
bridge.changeShareSettings(TrackerRole.LEFT_FOOT, req.steamVrTrackers().feet());
bridge.changeShareSettings(TrackerRole.RIGHT_FOOT, req.steamVrTrackers().feet());
bridge.changeShareSettings(TrackerRole.LEFT_KNEE, req.steamVrTrackers().knees());
bridge.changeShareSettings(TrackerRole.RIGHT_KNEE, req.steamVrTrackers().knees());
bridge.changeShareSettings(TrackerRole.LEFT_ELBOW, req.steamVrTrackers().elbows());
bridge.changeShareSettings(TrackerRole.RIGHT_ELBOW, req.steamVrTrackers().elbows());

if (bridge != null) {
bridge.changeShareSettings(TrackerRole.WAIST, req.steamVrTrackers().waist());
bridge.changeShareSettings(TrackerRole.CHEST, req.steamVrTrackers().chest());
bridge.changeShareSettings(TrackerRole.LEFT_FOOT, req.steamVrTrackers().feet());
bridge.changeShareSettings(TrackerRole.RIGHT_FOOT, req.steamVrTrackers().feet());
bridge.changeShareSettings(TrackerRole.LEFT_KNEE, req.steamVrTrackers().knees());
bridge.changeShareSettings(TrackerRole.RIGHT_KNEE, req.steamVrTrackers().knees());
bridge.changeShareSettings(TrackerRole.LEFT_ELBOW, req.steamVrTrackers().elbows());
bridge.changeShareSettings(TrackerRole.RIGHT_ELBOW, req.steamVrTrackers().elbows());
}
}

if (req.filtering() != null) {
Expand All @@ -442,27 +451,29 @@ public void onChangeSettingsRequest(GenericConnection conn, RpcMessageHeader mes
.getConfigManager()
.getVrConfig()
.getVrcOSC();
VRCOSCHandler VRCOSCHandler = this.api.server.getVRCOSCHandler();
var trackers = req.vrcOsc().trackers();

vrcOSCConfig.setEnabled(req.vrcOsc().enabled());
vrcOSCConfig.setPortIn(req.vrcOsc().portIn());
vrcOSCConfig.setPortOut(req.vrcOsc().portOut());
vrcOSCConfig.setAddress(req.vrcOsc().address());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.HEAD, trackers.head());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.CHEST, trackers.chest());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.WAIST, trackers.waist());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.LEFT_KNEE, trackers.knees());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.RIGHT_KNEE, trackers.knees());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.LEFT_FOOT, trackers.feet());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.RIGHT_FOOT, trackers.feet());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.LEFT_ELBOW, trackers.elbows());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.RIGHT_ELBOW, trackers.elbows());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.LEFT_HAND, trackers.hands());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.RIGHT_HAND, trackers.hands());


VRCOSCHandler.refreshSettings();
if (vrcOSCConfig != null) {
VRCOSCHandler VRCOSCHandler = this.api.server.getVRCOSCHandler();
var trackers = req.vrcOsc().trackers();

vrcOSCConfig.setEnabled(req.vrcOsc().enabled());
vrcOSCConfig.setPortIn(req.vrcOsc().portIn());
vrcOSCConfig.setPortOut(req.vrcOsc().portOut());
vrcOSCConfig.setAddress(req.vrcOsc().address());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.HEAD, trackers.head());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.CHEST, trackers.chest());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.WAIST, trackers.waist());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.LEFT_KNEE, trackers.knees());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.RIGHT_KNEE, trackers.knees());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.LEFT_FOOT, trackers.feet());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.RIGHT_FOOT, trackers.feet());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.LEFT_ELBOW, trackers.elbows());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.RIGHT_ELBOW, trackers.elbows());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.LEFT_HAND, trackers.hands());
vrcOSCConfig.setOSCTrackerRole(TrackerRole.RIGHT_HAND, trackers.hands());


VRCOSCHandler.refreshSettings();
}
}

var modelSettings = req.modelSettings();
Expand Down

0 comments on commit b5f12b4

Please sign in to comment.