The open source OpenXR runtime
0
fork

Configure Feed

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

d/hydra + a/bindings: Split hydra pose into separate grip/aim poses

This should be a backwards-compatible change.

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

+53 -24
+14 -2
src/xrt/auxiliary/bindings/bindings.json
··· 2098 2098 "/input/grip": { 2099 2099 "type": "pose", 2100 2100 "localized_name": "Grip", 2101 - "components": ["pose"], 2101 + "components": [ 2102 + "pose" 2103 + ], 2102 2104 "monado_bindings": { 2103 - "pose": "XRT_INPUT_HYDRA_POSE" 2105 + "pose": "XRT_INPUT_HYDRA_GRIP_POSE" 2106 + } 2107 + }, 2108 + "/input/aim": { 2109 + "type": "pose", 2110 + "localized_name": "Aim", 2111 + "components": [ 2112 + "pose" 2113 + ], 2114 + "monado_bindings": { 2115 + "pose": "XRT_INPUT_HYDRA_AIM_POSE" 2104 2116 } 2105 2117 } 2106 2118 }
+35 -19
src/xrt/drivers/hydra/hydra_driver.c
··· 23 23 #include "os/os_time.h" 24 24 25 25 #include "math/m_api.h" 26 + #include "math/m_relation_history.h" 27 + #include "math/m_space.h" 28 + 26 29 #include "util/u_debug.h" 27 30 #include "util/u_device.h" 28 31 #include "util/u_misc.h" ··· 58 61 HYDRA_INDEX_JOYSTICK_CLICK, 59 62 HYDRA_INDEX_JOYSTICK_VALUE, 60 63 HYDRA_INDEX_TRIGGER_VALUE, 61 - HYDRA_INDEX_POSE, 64 + HYDRA_INDEX_GRIP_POSE, 65 + HYDRA_INDEX_AIM_POSE, 62 66 HYDRA_MAX_CONTROLLER_INDEX 63 67 }; 64 68 ··· 510 514 511 515 hydra_system_update(hs); 512 516 513 - out_relation->pose = hd->state.pose; 517 + struct xrt_relation_chain xrc = {0}; 514 518 515 - //! @todo how do we report this is not (necessarily) the same base space 516 - //! as the HMD? 517 - out_relation->relation_flags = (enum xrt_space_relation_flags)( 518 - XRT_SPACE_RELATION_POSITION_VALID_BIT | XRT_SPACE_RELATION_POSITION_TRACKED_BIT | 519 - XRT_SPACE_RELATION_ORIENTATION_VALID_BIT | XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT); 520 - // struct xrt_vec3 pos = out_relation->pose.position; 521 - // struct xrt_quat quat = out_relation->pose.orientation; 522 - // HYDRA_SPEW(hd, "GET_TRACKED_POSE (%f, %f, %f) (%f, %f, %f, %f) ", 523 - // pos.x, 524 - // pos.y, pos.z, quat.x, quat.y, quat.z, quat.w); 519 + switch (name) { 520 + case XRT_INPUT_HYDRA_AIM_POSE: { 521 + const struct xrt_pose aim_offset = { 522 + .position = {0, 0.045, -0.08}, 523 + .orientation = {-0.258819, 0, 0, 0.9659258}, 524 + }; 525 + m_relation_chain_push_pose(&xrc, &aim_offset); 526 + break; 527 + } 528 + case XRT_INPUT_HYDRA_GRIP_POSE: 529 + default: break; 530 + } 531 + 532 + struct xrt_space_relation device_relation = { 533 + .pose = hd->state.pose, 534 + .relation_flags = XRT_SPACE_RELATION_POSITION_VALID_BIT | XRT_SPACE_RELATION_POSITION_TRACKED_BIT | 535 + XRT_SPACE_RELATION_ORIENTATION_VALID_BIT | XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT}; 536 + 537 + m_relation_chain_push_relation(&xrc, &device_relation); 538 + 539 + m_relation_chain_resolve(&xrc, out_relation); 525 540 526 541 return XRT_SUCCESS; 527 542 } ··· 604 619 {XRT_INPUT_TOUCH_TRIGGER_VALUE, XRT_INPUT_HYDRA_TRIGGER_VALUE}, 605 620 {XRT_INPUT_TOUCH_THUMBSTICK_CLICK, XRT_INPUT_HYDRA_JOYSTICK_CLICK}, 606 621 {XRT_INPUT_TOUCH_THUMBSTICK, XRT_INPUT_HYDRA_JOYSTICK_VALUE}, 607 - {XRT_INPUT_TOUCH_GRIP_POSE, XRT_INPUT_HYDRA_POSE}, 608 - {XRT_INPUT_TOUCH_AIM_POSE, XRT_INPUT_HYDRA_POSE}, 622 + {XRT_INPUT_TOUCH_GRIP_POSE, XRT_INPUT_HYDRA_GRIP_POSE}, 623 + {XRT_INPUT_TOUCH_AIM_POSE, XRT_INPUT_HYDRA_AIM_POSE}, 609 624 }; 610 625 611 626 static struct xrt_binding_input_pair simple_inputs[4] = { 612 627 {XRT_INPUT_SIMPLE_SELECT_CLICK, XRT_INPUT_HYDRA_TRIGGER_VALUE}, 613 628 {XRT_INPUT_SIMPLE_MENU_CLICK, XRT_INPUT_HYDRA_MIDDLE_CLICK}, 614 - {XRT_INPUT_SIMPLE_GRIP_POSE, XRT_INPUT_HYDRA_POSE}, 615 - {XRT_INPUT_SIMPLE_AIM_POSE, XRT_INPUT_HYDRA_POSE}, 629 + {XRT_INPUT_SIMPLE_GRIP_POSE, XRT_INPUT_HYDRA_GRIP_POSE}, 630 + {XRT_INPUT_SIMPLE_AIM_POSE, XRT_INPUT_HYDRA_AIM_POSE}, 616 631 }; 617 632 618 633 static struct xrt_binding_profile binding_profiles[2] = { ··· 664 679 hs->command_hid = command_hid; 665 680 666 681 enum u_device_alloc_flags flags = (enum u_device_alloc_flags)0; 667 - hs->devs[0] = U_DEVICE_ALLOCATE(struct hydra_device, flags, 10, 0); 668 - hs->devs[1] = U_DEVICE_ALLOCATE(struct hydra_device, flags, 10, 0); 682 + hs->devs[0] = U_DEVICE_ALLOCATE(struct hydra_device, flags, HYDRA_MAX_CONTROLLER_INDEX, 0); 683 + hs->devs[1] = U_DEVICE_ALLOCATE(struct hydra_device, flags, HYDRA_MAX_CONTROLLER_INDEX, 0); 669 684 670 685 hs->report_counter = -1; 671 686 hs->refs = 2; ··· 692 707 SET_INPUT(JOYSTICK_CLICK); 693 708 SET_INPUT(JOYSTICK_VALUE); 694 709 SET_INPUT(TRIGGER_VALUE); 695 - SET_INPUT(POSE); 710 + SET_INPUT(GRIP_POSE); 711 + SET_INPUT(AIM_POSE); 696 712 hd->index = i; 697 713 hd->sys = hs; 698 714
+2 -1
src/xrt/include/xrt/xrt_defines.h
··· 926 926 _(XRT_INPUT_HYDRA_JOYSTICK_CLICK , XRT_INPUT_NAME(0x0036, BOOLEAN)) \ 927 927 _(XRT_INPUT_HYDRA_JOYSTICK_VALUE , XRT_INPUT_NAME(0x0037, VEC2_MINUS_ONE_TO_ONE)) \ 928 928 _(XRT_INPUT_HYDRA_TRIGGER_VALUE , XRT_INPUT_NAME(0x0038, VEC1_ZERO_TO_ONE)) \ 929 - _(XRT_INPUT_HYDRA_POSE , XRT_INPUT_NAME(0x0039, POSE)) \ 929 + _(XRT_INPUT_HYDRA_AIM_POSE , XRT_INPUT_NAME(0x0039, POSE)) \ 930 + _(XRT_INPUT_HYDRA_GRIP_POSE , XRT_INPUT_NAME(0x0040, POSE)) \ 930 931 \ 931 932 _(XRT_INPUT_DAYDREAM_TOUCHPAD_CLICK , XRT_INPUT_NAME(0x0040, BOOLEAN)) \ 932 933 _(XRT_INPUT_DAYDREAM_BAR_CLICK , XRT_INPUT_NAME(0x0041, BOOLEAN)) \
+1 -1
src/xrt/state_trackers/oxr/oxr_xdev.c
··· 57 57 case XRT_INPUT_PICO_NEO3_GRIP_POSE: return name; 58 58 case XRT_INPUT_PICO4_GRIP_POSE: return name; 59 59 case XRT_INPUT_OPPO_MR_GRIP_POSE: return name; 60 - case XRT_INPUT_HYDRA_POSE: return name; 60 + case XRT_INPUT_HYDRA_GRIP_POSE: return name; 61 61 default: break; 62 62 } 63 63 }
+1 -1
src/xrt/state_trackers/steamvr_drv/ovrd_driver.cpp
··· 866 866 } else if (m_xdev->name == XRT_DEVICE_DAYDREAM) { 867 867 grip_name = XRT_INPUT_DAYDREAM_POSE; 868 868 } else if (m_xdev->name == XRT_DEVICE_HYDRA) { 869 - grip_name = XRT_INPUT_HYDRA_POSE; 869 + grip_name = XRT_INPUT_HYDRA_GRIP_POSE; 870 870 } else if (m_xdev->name == XRT_DEVICE_TOUCH_CONTROLLER) { 871 871 grip_name = XRT_INPUT_TOUCH_GRIP_POSE; 872 872 } else if (m_xdev->name == XRT_DEVICE_SIMPLE_CONTROLLER) {