The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

xrt: adapt drivers to new update_input api change

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2246>

+91 -46
+1
doc/changes/auxiliary/mr.2246.md
··· 1 + Change: `u_device_noop_update_inputs` returns `xrt_result_t`
+2 -1
src/xrt/auxiliary/util/u_device.c
··· 472 472 * 473 473 */ 474 474 475 - void 475 + xrt_result_t 476 476 u_device_noop_update_inputs(struct xrt_device *xdev) 477 477 { 478 478 // Empty, should only be used from a device without any inputs. 479 + return XRT_SUCCESS; 479 480 } 480 481 481 482
+1 -1
src/xrt/auxiliary/util/u_device.h
··· 187 187 * 188 188 * @ingroup aux_util 189 189 */ 190 - void 190 + xrt_result_t 191 191 u_device_noop_update_inputs(struct xrt_device *xdev); 192 192 193 193
+3 -1
src/xrt/drivers/arduino/arduino_device.c
··· 306 306 free(ad); 307 307 } 308 308 309 - static void 309 + static xrt_result_t 310 310 arduino_device_update_inputs(struct xrt_device *xdev) 311 311 { 312 312 struct arduino_device *ad = arduino_device(xdev); ··· 327 327 328 328 // Done now. 329 329 os_mutex_unlock(&ad->lock); 330 + 331 + return XRT_SUCCESS; 330 332 } 331 333 332 334 static void
+3 -1
src/xrt/drivers/daydream/daydream_device.c
··· 273 273 free(daydream); 274 274 } 275 275 276 - static void 276 + static xrt_result_t 277 277 daydream_device_update_inputs(struct xrt_device *xdev) 278 278 { 279 279 struct daydream_device *daydream = daydream_device(xdev); ··· 306 306 // Done now. 307 307 308 308 os_mutex_unlock(&daydream->lock); 309 + 310 + return XRT_SUCCESS; 309 311 } 310 312 311 313 static void
+4 -3
src/xrt/drivers/ht_ctrl_emu/ht_ctrl_emu.cpp
··· 378 378 *out = (dist < pinch_activation_dist); 379 379 } 380 380 381 - static void 381 + static xrt_result_t 382 382 cemu_device_update_inputs(struct xrt_device *xdev) 383 383 { 384 384 struct cemu_device *dev = cemu_device(xdev); ··· 388 388 389 389 xrt_device_get_hand_tracking(dev->sys->in_hand, dev->ht_input_name, os_monotonic_get_ns(), &joint_set, &noop); 390 390 391 - 392 391 if (!joint_set.is_active) { 393 392 xdev->inputs[CEMU_INDEX_SELECT].value.boolean = false; 394 393 xdev->inputs[CEMU_INDEX_MENU].value.boolean = false; 395 - return; 394 + return XRT_SUCCESS; 396 395 } 397 396 398 397 decide(joint_set.values.hand_joint_set_default[XRT_HAND_JOINT_INDEX_TIP].relation.pose.position, ··· 402 401 // For now, all other inputs are off - detecting any gestures more complicated than pinch is too unreliable for 403 402 // now. 404 403 xdev->inputs[CEMU_INDEX_MENU].value.boolean = false; 404 + 405 + return XRT_SUCCESS; 405 406 } 406 407 407 408
+3 -1
src/xrt/drivers/hydra/hydra_driver.c
··· 443 443 * 444 444 */ 445 445 446 - static void 446 + static xrt_result_t 447 447 hydra_device_update_inputs(struct xrt_device *xdev) 448 448 { 449 449 struct hydra_device *hd = hydra_device(xdev); ··· 478 478 // inputs[HYDRA_INDEX_POSE].timestamp = now; 479 479 // inputs[HYDRA_INDEX_POSE].value. 480 480 } 481 + 482 + return XRT_SUCCESS; 481 483 } 482 484 483 485 static void
+2 -2
src/xrt/drivers/multi_wrapper/multi.c
··· 209 209 return target->compute_distortion(target, view, u, v, result); 210 210 } 211 211 212 - static void 212 + static xrt_result_t 213 213 update_inputs(struct xrt_device *xdev) 214 214 { 215 215 struct multi_device *d = (struct multi_device *)xdev; 216 216 struct xrt_device *target = d->tracking_override.target; 217 - xrt_device_update_inputs(target); 217 + return xrt_device_update_inputs(target); 218 218 } 219 219 220 220
+4 -2
src/xrt/drivers/ohmd/oh_device.c
··· 300 300 } 301 301 } 302 302 303 - static void 303 + static xrt_result_t 304 304 oh_device_update_inputs(struct xrt_device *xdev) 305 305 { 306 306 struct oh_device *ohd = oh_device(xdev); 307 307 308 308 int control_count; 309 - float control_state[256]; 309 + float control_state[256] = {0}; 310 310 311 311 ohmd_device_geti(ohd->dev, OHMD_CONTROL_COUNT, &control_count); 312 312 if (control_count > 64) ··· 322 322 for (int i = 0; i < 256; i++) { 323 323 ohd->last_control_state[i] = control_state[i]; 324 324 } 325 + 326 + return XRT_SUCCESS; 325 327 } 326 328 327 329 static void
+3 -1
src/xrt/drivers/opengloves/opengloves_device.c
··· 136 136 out_joint_set->is_active = true; 137 137 } 138 138 139 - static void 139 + static xrt_result_t 140 140 opengloves_device_update_inputs(struct xrt_device *xdev) 141 141 { 142 142 struct opengloves_device *od = opengloves_device(xdev); ··· 155 155 od->last_input->joysticks.main.pressed; 156 156 157 157 os_mutex_unlock(&od->lock); 158 + 159 + return XRT_SUCCESS; 158 160 } 159 161 160 162 static void
+3 -1
src/xrt/drivers/psmv/psmv_driver.c
··· 857 857 free(psmv); 858 858 } 859 859 860 - static void 860 + static xrt_result_t 861 861 psmv_device_update_inputs(struct xrt_device *xdev) 862 862 { 863 863 struct psmv_device *psmv = psmv_device(xdev); ··· 883 883 884 884 // Done now. 885 885 os_mutex_unlock(&psmv->lock); 886 + 887 + return XRT_SUCCESS; 886 888 } 887 889 888 890 static xrt_result_t
+3 -1
src/xrt/drivers/pssense/pssense_driver.c
··· 637 637 free(pssense); 638 638 } 639 639 640 - static void 640 + static xrt_result_t 641 641 pssense_device_update_inputs(struct xrt_device *xdev) 642 642 { 643 643 struct pssense_device *pssense = (struct pssense_device *)xdev; ··· 672 672 673 673 // Done now. 674 674 os_mutex_unlock(&pssense->lock); 675 + 676 + return XRT_SUCCESS; 675 677 } 676 678 677 679 static void
+3 -1
src/xrt/drivers/psvr/psvr_device.c
··· 943 943 * 944 944 */ 945 945 946 - static void 946 + static xrt_result_t 947 947 psvr_device_update_inputs(struct xrt_device *xdev) 948 948 { 949 949 struct psvr_device *psvr = psvr_device(xdev); ··· 953 953 update_leds_if_changed(psvr); 954 954 955 955 os_mutex_unlock(&psvr->device_mutex); 956 + 957 + return XRT_SUCCESS; 956 958 } 957 959 958 960 static void
+5 -5
src/xrt/drivers/qwerty/qwerty_device.c
··· 103 103 return qc; 104 104 } 105 105 106 - static void 106 + static xrt_result_t 107 107 qwerty_update_inputs(struct xrt_device *xd) 108 108 { 109 - if (xd->name != XRT_DEVICE_SIMPLE_CONTROLLER) { 110 - return; 111 - } 109 + assert(xd->name == XRT_DEVICE_SIMPLE_CONTROLLER); 112 110 113 111 struct qwerty_controller *qc = qwerty_controller(xd); 114 112 struct qwerty_device *qd = &qc->base; ··· 119 117 xd->inputs[QWERTY_SELECT].timestamp = qc->select_timestamp; 120 118 xd->inputs[QWERTY_MENU].value.boolean = qc->menu_clicked; 121 119 xd->inputs[QWERTY_MENU].timestamp = qc->menu_timestamp; 120 + 121 + return XRT_SUCCESS; 122 122 } 123 123 124 124 static void ··· 258 258 259 259 xd->inputs[0].name = XRT_INPUT_GENERIC_HEAD_POSE; 260 260 261 - xd->update_inputs = qwerty_update_inputs; 261 + xd->update_inputs = u_device_noop_update_inputs; 262 262 xd->get_tracked_pose = qwerty_get_tracked_pose; 263 263 xd->get_view_poses = u_device_get_view_poses; 264 264 xd->destroy = qwerty_destroy;
+5 -2
src/xrt/drivers/remote/r_device.c
··· 50 50 u_device_free(&rd->base); 51 51 } 52 52 53 - static void 53 + static xrt_result_t 54 54 r_device_update_inputs(struct xrt_device *xdev) 55 55 { 56 56 struct r_device *rd = r_device(xdev); ··· 59 59 uint64_t now = os_monotonic_get_ns(); 60 60 struct r_remote_controller_data *latest = rd->is_left ? &r->latest.left : &r->latest.right; 61 61 62 + // TODO: refactor those loops into one 62 63 if (!latest->active) { 63 64 for (uint32_t i = 0; i < xdev->input_count; i++) { 64 65 xdev->inputs[i].active = false; 65 66 xdev->inputs[i].timestamp = now; 66 67 U_ZERO(&xdev->inputs[i].value); 67 68 } 68 - return; 69 + return XRT_SUCCESS; 69 70 } 70 71 71 72 for (uint32_t i = 0; i < xdev->input_count; i++) { ··· 92 93 xdev->inputs[15].value.vec1 = latest->trackpad_force; 93 94 xdev->inputs[16].value.boolean = latest->trackpad_touch; 94 95 // clang-format on 96 + 97 + return XRT_SUCCESS; 95 98 } 96 99 97 100 static void
+3 -2
src/xrt/drivers/rift_s/rift_s_controller.c
··· 442 442 ctrl->base.inputs[index].value.vec2.y = y; 443 443 } 444 444 445 - static void 445 + static xrt_result_t 446 446 rift_s_controller_update_inputs(struct xrt_device *xdev) 447 447 { 448 448 struct rift_s_controller *ctrl = (struct rift_s_controller *)(xdev); ··· 504 504 /* FIXME: Output touch detections: 505 505 OCULUS_TOUCH_THUMBREST_TOUCH, - does Rift S have a thumbrest? 506 506 */ 507 + os_mutex_unlock(&ctrl->mutex); 507 508 508 - os_mutex_unlock(&ctrl->mutex); 509 + return XRT_SUCCESS; 509 510 } 510 511 511 512 static void
+2 -1
src/xrt/drivers/sample/sample_hmd.c
··· 85 85 u_device_free(&hmd->base); 86 86 } 87 87 88 - static void 88 + static xrt_result_t 89 89 sample_hmd_update_inputs(struct xrt_device *xdev) 90 90 { 91 91 /* ··· 93 93 * put code to update the attached inputs fields. If not you can use 94 94 * the u_device_noop_update_inputs helper to make it a no-op. 95 95 */ 96 + return XRT_SUCCESS; 96 97 } 97 98 98 99 static void
+5 -2
src/xrt/drivers/simulated/simulated_controller.c
··· 93 93 u_device_free(&sd->base); 94 94 } 95 95 96 - static void 96 + static xrt_result_t 97 97 simulated_device_update_inputs(struct xrt_device *xdev) 98 98 { 99 99 struct simulated_device *sd = simulated_device(xdev); 100 100 101 101 uint64_t now = os_monotonic_get_ns(); 102 102 103 + // TODO refactor those loops into one 103 104 if (!sd->active) { 104 105 for (uint32_t i = 0; i < xdev->input_count; i++) { 105 106 xdev->inputs[i].active = false; 106 107 xdev->inputs[i].timestamp = now; 107 108 U_ZERO(&xdev->inputs[i].value); 108 109 } 109 - return; 110 + return XRT_SUCCESS; 110 111 } 111 112 112 113 for (uint32_t i = 0; i < xdev->input_count; i++) { 113 114 xdev->inputs[i].active = true; 114 115 xdev->inputs[i].timestamp = now; 115 116 } 117 + 118 + return XRT_SUCCESS; 116 119 } 117 120 118 121 static void
+3 -2
src/xrt/drivers/steamvr_lh/device.cpp
··· 209 209 this->form_factor_check_supported = false; 210 210 this->battery_status_supported = true; 211 211 212 + this->xrt_device::update_inputs = &device_bouncer<Device, &Device::update_inputs, xrt_result_t>; 212 213 #define SETUP_MEMBER_FUNC(name) this->xrt_device::name = &device_bouncer<Device, &Device::name> 213 - SETUP_MEMBER_FUNC(update_inputs); 214 214 SETUP_MEMBER_FUNC(get_tracked_pose); 215 215 SETUP_MEMBER_FUNC(get_battery_status); 216 216 #undef SETUP_MEMBER_FUNC ··· 379 379 this->outputs = output.get(); 380 380 } 381 381 382 - void 382 + xrt_result_t 383 383 Device::update_inputs() 384 384 { 385 385 std::lock_guard<std::mutex> lock(frame_mutex); 386 386 ctx->maybe_run_frame(++current_frame); 387 + return XRT_SUCCESS; 387 388 } 388 389 389 390 IndexFingerInput *
+1 -1
src/xrt/drivers/steamvr_lh/device.hpp
··· 55 55 xrt_input * 56 56 get_input_from_name(std::string_view name); 57 57 58 - void 58 + xrt_result_t 59 59 update_inputs(); 60 60 61 61 void
+3 -1
src/xrt/drivers/survive/survive_driver.c
··· 874 874 } 875 875 } 876 876 877 - static void 877 + static xrt_result_t 878 878 survive_device_update_inputs(struct xrt_device *xdev) 879 879 { 880 880 struct survive_device *survive = (struct survive_device *)xdev; ··· 886 886 } 887 887 888 888 os_mutex_unlock(&survive->sys->lock); 889 + 890 + return XRT_SUCCESS; 889 891 } 890 892 891 893 static bool
+6 -2
src/xrt/drivers/vive/vive_controller.c
··· 183 183 free(d); 184 184 } 185 185 186 - static void 186 + static xrt_result_t 187 187 vive_controller_device_wand_update_inputs(struct xrt_device *xdev) 188 188 { 189 189 struct vive_controller_device *d = vive_controller_device(xdev); ··· 240 240 VIVE_TRACE(d, "Trigger: %f", d->state.trigger); 241 241 242 242 os_mutex_unlock(&d->lock); 243 + 244 + return XRT_SUCCESS; 243 245 } 244 246 245 - static void 247 + static xrt_result_t 246 248 vive_controller_device_index_update_inputs(struct xrt_device *xdev) 247 249 { 248 250 XRT_TRACE_MARKER(); ··· 358 360 } 359 361 360 362 os_mutex_unlock(&d->lock); 363 + 364 + return XRT_SUCCESS; 361 365 } 362 366 363 367 static void
+3 -1
src/xrt/drivers/vive/vive_device.c
··· 95 95 u_device_free(&d->base); 96 96 } 97 97 98 - static void 98 + static xrt_result_t 99 99 vive_device_update_inputs(struct xrt_device *xdev) 100 100 { 101 101 XRT_TRACE_MARKER(); 102 102 103 103 struct vive_device *d = vive_device(xdev); 104 104 VIVE_TRACE(d, "ENTER!"); 105 + 106 + return XRT_SUCCESS; 105 107 } 106 108 107 109 static void
+3 -1
src/xrt/drivers/wmr/wmr_controller_hp.c
··· 278 278 return b; 279 279 } 280 280 281 - static void 281 + static xrt_result_t 282 282 wmr_controller_hp_update_inputs(struct xrt_device *xdev) 283 283 { 284 284 DRV_TRACE_MARKER(); ··· 302 302 xrt_inputs[WMR_CONTROLLER_INDEX_THUMBSTICK].value.vec2 = cur_inputs->thumbstick.values; 303 303 304 304 os_mutex_unlock(&wcb->data_lock); 305 + 306 + return XRT_SUCCESS; 305 307 } 306 308 307 309 static void
+3 -1
src/xrt/drivers/wmr/wmr_controller_og.c
··· 291 291 return b; 292 292 } 293 293 294 - static void 294 + static xrt_result_t 295 295 wmr_controller_og_update_inputs(struct xrt_device *xdev) 296 296 { 297 297 DRV_TRACE_MARKER(); ··· 315 315 xrt_inputs[WMR_CONTROLLER_INDEX_TRACKPAD].value.vec2 = cur_inputs->trackpad.values; 316 316 317 317 os_mutex_unlock(&wcb->data_lock); 318 + 319 + return XRT_SUCCESS; 318 320 } 319 321 320 322 static void
+3 -1
src/xrt/drivers/xreal_air/xreal_air_hmd.c
··· 1031 1031 * 1032 1032 */ 1033 1033 1034 - static void 1034 + static xrt_result_t 1035 1035 xreal_air_hmd_update_inputs(struct xrt_device *xdev) 1036 1036 { 1037 1037 struct xreal_air_hmd *hmd = xreal_air_hmd(xdev); ··· 1045 1045 adjust_display_mode(hmd); 1046 1046 1047 1047 os_mutex_unlock(&hmd->device_mutex); 1048 + 1049 + return XRT_SUCCESS; 1048 1050 } 1049 1051 1050 1052 static void
+2 -3
src/xrt/include/xrt/xrt_device.h
··· 293 293 * 294 294 * @param[in] xdev The device. 295 295 */ 296 - void (*update_inputs)(struct xrt_device *xdev); 296 + xrt_result_t (*update_inputs)(struct xrt_device *xdev); 297 297 298 298 /*! 299 299 * @brief Get relationship of a tracked device to the tracking origin ··· 564 564 static inline xrt_result_t 565 565 xrt_device_update_inputs(struct xrt_device *xdev) 566 566 { 567 - xdev->update_inputs(xdev); 568 - return XRT_SUCCESS; 567 + return xdev->update_inputs(xdev); 569 568 } 570 569 571 570 /*!
+2 -2
src/xrt/ipc/client/ipc_client_device.c
··· 73 73 u_device_free(&icd->base); 74 74 } 75 75 76 - static void 76 + static xrt_result_t 77 77 ipc_client_device_update_inputs(struct xrt_device *xdev) 78 78 { 79 79 ipc_client_device_t *icd = ipc_client_device(xdev); 80 80 81 81 xrt_result_t xret = ipc_call_device_update_input(icd->ipc_c, icd->device_id); 82 - IPC_CHK_ONLY_PRINT(icd->ipc_c, xret, "ipc_call_device_update_input"); 82 + IPC_CHK_ALWAYS_RET(icd->ipc_c, xret, "ipc_call_device_update_input"); 83 83 } 84 84 85 85 static void
+2 -2
src/xrt/ipc/client/ipc_client_hmd.c
··· 140 140 u_device_free(&ich->base); 141 141 } 142 142 143 - static void 143 + static xrt_result_t 144 144 ipc_client_hmd_update_inputs(struct xrt_device *xdev) 145 145 { 146 146 ipc_client_hmd_t *ich = ipc_client_hmd(xdev); 147 147 148 148 xrt_result_t xret = ipc_call_device_update_input(ich->ipc_c, ich->device_id); 149 - IPC_CHK_ONLY_PRINT(ich->ipc_c, xret, "ipc_call_device_update_input"); 149 + IPC_CHK_ALWAYS_RET(ich->ipc_c, xret, "ipc_call_device_update_input"); 150 150 } 151 151 152 152 static void
+5 -1
src/xrt/ipc/server/ipc_server_handler.c
··· 1857 1857 struct ipc_shared_device *isdev = &ism->isdevs[device_id]; 1858 1858 1859 1859 // Update inputs. 1860 - xrt_device_update_inputs(xdev); 1860 + xrt_result_t xret = xrt_device_update_inputs(xdev); 1861 + if (xret != XRT_SUCCESS) { 1862 + IPC_ERROR(ics->server, "Failed to update input"); 1863 + return xret; 1864 + } 1861 1865 1862 1866 // Copy data into the shared memory. 1863 1867 struct xrt_input *src = xdev->inputs;