From b49ff83a3e7b8618c92f4a7656ded3edc339e42f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20L=C3=BCssing?= Date: Fri, 2 Jun 2023 02:19:16 +0200 Subject: [PATCH] Fix segfault with WMR controllers and SteamVR-Monado plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With the Reverb G2 controllers connected to the Linux host system via Bluetooth the following segmentation fault occurs for me when starting SteamVR with the SteamVR-Monado plugin installed: ``` $ gdb ... ... (gdb) bt #0 0x0000000000000000 in ?? () #1 0x00007f82de21bac7 in CDeviceDriver_Monado_Controller::RunFrame (this=0x7f82bc610e40) at /home/linus/dev-priv/vr/monado/src/xrt/state_trackers/steamvr_drv/ovrd_driver.cpp:966 #2 0x00007f82de218b5d in CServerDriver_Monado::RunFrame (this=0x7f82de7c6ca0 ) at /home/linus/dev-priv/vr/monado/src/xrt/state_trackers/steamvr_drv/ovrd_driver.cpp:1574 #3 0x00000000004b7a77 in ?? () #4 0x0000000000000000 in ?? () (gdb) l /home/linus/dev-priv/vr/monado/src/xrt/state_trackers/steamvr_drv/ovrd_driver.cpp:966 959 if (m_xdev->hand_tracking_supported && m_skeletal_input_control.control_handle) { 960 vr::VRBoneTransform_t bone_transforms[OPENVR_BONE_COUNT]; 961 962 timepoint_ns now_ns = os_monotonic_get_ns(); 963 struct xrt_hand_joint_set out_joint_set_value; 964 uint64_t out_timestamp_ns; 965 966 m_xdev->get_hand_tracking(m_xdev, 967 m_hand == XRT_HAND_LEFT ? XRT_INPUT_GENERIC_HAND_TRACKING_LEFT 968 : XRT_INPUT_GENERIC_HAND_TRACKING_RIGHT, 969 now_ns, &out_joint_set_value, &out_timestamp_ns); ``` This happens because the "m_xdev->hand_tracking_supported" flag is set but m_xdev->get_hand_tracking() is not implemented for WMR controllers. Fixing this crash by setting hand_tracking_supported to false for WMR controllers for now until get_hand_tracking() is implemented. Link: https://gitlab.freedesktop.org/monado/monado/-/issues/251 Fixes: c4db3dfccc4a ("d/wmr: Add basic Reverb (G1, Bluetooth) motion controller support.") Signed-off-by: Linus Lüssing --- src/xrt/drivers/wmr/wmr_controller_base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xrt/drivers/wmr/wmr_controller_base.c b/src/xrt/drivers/wmr/wmr_controller_base.c index c2ee2e5db..f48ed6cb8 100644 --- a/src/xrt/drivers/wmr/wmr_controller_base.c +++ b/src/xrt/drivers/wmr/wmr_controller_base.c @@ -418,7 +418,7 @@ wmr_controller_base_init(struct wmr_controller_base *wcb, wcb->base.device_type = controller_type; wcb->base.orientation_tracking_supported = true; wcb->base.position_tracking_supported = false; - wcb->base.hand_tracking_supported = true; + wcb->base.hand_tracking_supported = false; m_imu_3dof_init(&wcb->fusion, M_IMU_3DOF_USE_GRAVITY_DUR_20MS);