The open source OpenXR runtime
0
fork

Configure Feed

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

d/remote: Expose a Index controller instead of simple controller

+134 -44
+59 -30
src/xrt/drivers/remote/r_device.c
··· 56 56 struct r_remote_controller_data *latest = rd->is_left ? &r->latest.left : &r->latest.right; 57 57 58 58 if (!latest->active) { 59 - xdev->inputs[0].active = false; 60 - xdev->inputs[0].timestamp = now; 61 - xdev->inputs[1].active = false; 62 - xdev->inputs[1].timestamp = now; 63 - xdev->inputs[2].active = false; 64 - xdev->inputs[2].timestamp = now; 65 - xdev->inputs[3].active = false; 66 - xdev->inputs[3].timestamp = now; 67 - } else { 68 - xdev->inputs[0].active = true; 69 - xdev->inputs[0].timestamp = now; 70 - xdev->inputs[0].value.boolean = latest->select; 71 - xdev->inputs[1].active = true; 72 - xdev->inputs[1].timestamp = now; 73 - xdev->inputs[1].value.boolean = latest->menu; 74 - xdev->inputs[2].active = true; 75 - xdev->inputs[2].timestamp = now; 76 - xdev->inputs[3].active = true; 77 - xdev->inputs[3].timestamp = now; 59 + for (uint32_t i = 0; i < 19; i++) { 60 + xdev->inputs[i].active = false; 61 + xdev->inputs[i].timestamp = now; 62 + U_ZERO(&xdev->inputs[i].value); 63 + } 64 + return; 65 + } 66 + 67 + for (uint32_t i = 0; i < 19; i++) { 68 + xdev->inputs[i].active = true; 69 + xdev->inputs[i].timestamp = now; 78 70 } 71 + 72 + // clang-format off 73 + xdev->inputs[0].value.boolean = latest->system_click; 74 + xdev->inputs[1].value.boolean = latest->system_touch; 75 + xdev->inputs[2].value.boolean = latest->a_click; 76 + xdev->inputs[3].value.boolean = latest->a_touch; 77 + xdev->inputs[4].value.boolean = latest->b_click; 78 + xdev->inputs[5].value.boolean = latest->b_touch; 79 + xdev->inputs[6].value.vec1 = latest->squeeze_value; 80 + xdev->inputs[7].value.vec1 = latest->squeeze_force; 81 + xdev->inputs[8].value.boolean = latest->trigger_click; 82 + xdev->inputs[9].value.vec1 = latest->trigger_value; 83 + xdev->inputs[10].value.boolean = latest->trigger_touch; 84 + xdev->inputs[11].value.vec2 = latest->thumbstick; 85 + xdev->inputs[12].value.boolean = latest->thumbstick_click; 86 + xdev->inputs[13].value.boolean = latest->thumbstick_touch; 87 + xdev->inputs[14].value.vec2 = latest->trackpad; 88 + xdev->inputs[15].value.vec1 = latest->trackpad_force; 89 + xdev->inputs[16].value.boolean = latest->trackpad_touch; 90 + // clang-format on 79 91 } 80 92 81 93 static void ··· 87 99 struct r_device *rd = r_device(xdev); 88 100 struct r_hub *r = rd->r; 89 101 90 - if (name != XRT_INPUT_SIMPLE_AIM_POSE && name != XRT_INPUT_SIMPLE_GRIP_POSE) { 102 + if (name != XRT_INPUT_INDEX_AIM_POSE && name != XRT_INPUT_INDEX_GRIP_POSE) { 91 103 U_LOG_E("Unknown input name"); 92 104 return; 93 105 } ··· 147 159 struct xrt_pose hand_on_handle_pose = XRT_POSE_IDENTITY; 148 160 149 161 struct xrt_space_relation relation; 150 - xrt_device_get_tracked_pose(xdev, XRT_INPUT_SIMPLE_GRIP_POSE, requested_timestamp_ns, &relation); 162 + xrt_device_get_tracked_pose(xdev, XRT_INPUT_INDEX_GRIP_POSE, requested_timestamp_ns, &relation); 151 163 152 164 u_hand_joints_set_out_data(&rd->hand_tracking, hand, &relation, &hand_on_handle_pose, out_value); 153 165 out_value->is_active = latest->hand_tracking_active; ··· 183 195 { 184 196 // Allocate. 185 197 const enum u_device_alloc_flags flags = 0; 186 - const uint32_t input_count = 5; 198 + const uint32_t input_count = 20; // 19 + hand tracker 187 199 const uint32_t output_count = 1; 188 200 struct r_device *rd = U_DEVICE_ALLOCATE( // 189 201 struct r_device, flags, input_count, output_count); ··· 199 211 rd->base.orientation_tracking_supported = true; 200 212 rd->base.position_tracking_supported = true; 201 213 rd->base.hand_tracking_supported = true; 202 - rd->base.name = XRT_DEVICE_SIMPLE_CONTROLLER; 214 + rd->base.name = XRT_DEVICE_INDEX_CONTROLLER; 203 215 rd->r = r; 204 216 rd->is_left = is_left; 205 217 ··· 207 219 snprintf(rd->base.str, sizeof(rd->base.str), "Remote %s Controller", is_left ? "Left" : "Right"); 208 220 snprintf(rd->base.serial, sizeof(rd->base.str), "Remote %s Controller", is_left ? "Left" : "Right"); 209 221 222 + 223 + 210 224 // Inputs and outputs. 211 - rd->base.inputs[0].name = XRT_INPUT_SIMPLE_SELECT_CLICK; 212 - rd->base.inputs[1].name = XRT_INPUT_SIMPLE_MENU_CLICK; 213 - rd->base.inputs[2].name = XRT_INPUT_SIMPLE_GRIP_POSE; 214 - rd->base.inputs[3].name = XRT_INPUT_SIMPLE_AIM_POSE; 225 + rd->base.inputs[0].name = XRT_INPUT_INDEX_SYSTEM_CLICK; 226 + rd->base.inputs[1].name = XRT_INPUT_INDEX_SYSTEM_TOUCH; 227 + rd->base.inputs[2].name = XRT_INPUT_INDEX_A_CLICK; 228 + rd->base.inputs[3].name = XRT_INPUT_INDEX_A_TOUCH; 229 + rd->base.inputs[4].name = XRT_INPUT_INDEX_B_CLICK; 230 + rd->base.inputs[5].name = XRT_INPUT_INDEX_B_TOUCH; 231 + rd->base.inputs[6].name = XRT_INPUT_INDEX_SQUEEZE_VALUE; 232 + rd->base.inputs[7].name = XRT_INPUT_INDEX_SQUEEZE_FORCE; 233 + rd->base.inputs[8].name = XRT_INPUT_INDEX_TRIGGER_CLICK; 234 + rd->base.inputs[9].name = XRT_INPUT_INDEX_TRIGGER_VALUE; 235 + rd->base.inputs[10].name = XRT_INPUT_INDEX_TRIGGER_TOUCH; 236 + rd->base.inputs[11].name = XRT_INPUT_INDEX_THUMBSTICK; 237 + rd->base.inputs[12].name = XRT_INPUT_INDEX_THUMBSTICK_CLICK; 238 + rd->base.inputs[13].name = XRT_INPUT_INDEX_THUMBSTICK_TOUCH; 239 + rd->base.inputs[14].name = XRT_INPUT_INDEX_TRACKPAD; 240 + rd->base.inputs[15].name = XRT_INPUT_INDEX_TRACKPAD_FORCE; 241 + rd->base.inputs[16].name = XRT_INPUT_INDEX_TRACKPAD_TOUCH; 242 + rd->base.inputs[17].name = XRT_INPUT_INDEX_GRIP_POSE; 243 + rd->base.inputs[18].name = XRT_INPUT_INDEX_AIM_POSE; 215 244 if (is_left) { 216 - rd->base.inputs[4].name = XRT_INPUT_GENERIC_HAND_TRACKING_LEFT; 245 + rd->base.inputs[19].name = XRT_INPUT_GENERIC_HAND_TRACKING_LEFT; 217 246 } else { 218 - rd->base.inputs[4].name = XRT_INPUT_GENERIC_HAND_TRACKING_RIGHT; 247 + rd->base.inputs[19].name = XRT_INPUT_GENERIC_HAND_TRACKING_RIGHT; 219 248 } 220 - rd->base.outputs[0].name = XRT_OUTPUT_NAME_SIMPLE_VIBRATION; 249 + rd->base.outputs[0].name = XRT_OUTPUT_NAME_INDEX_HAPTIC; 221 250 222 251 if (is_left) { 223 252 rd->base.device_type = XRT_DEVICE_TYPE_LEFT_HAND_CONTROLLER;
-4
src/xrt/drivers/remote/r_hub.c
··· 353 353 u_var_add_pose(r, &r->latest.hmd.pose, "hmd.pose"); 354 354 // u_var_add_gui_header(r, &r->gui.left, "Left"); 355 355 u_var_add_bool(r, &r->latest.left.active, "left.active"); 356 - u_var_add_bool(r, &r->latest.left.select, "left.select"); 357 - u_var_add_bool(r, &r->latest.left.menu, "left.menu"); 358 356 u_var_add_pose(r, &r->latest.left.pose, "left.pose"); 359 357 // u_var_add_gui_header(r, &r->gui.right, "Right"); 360 358 u_var_add_bool(r, &r->latest.right.active, "right.active"); 361 - u_var_add_bool(r, &r->latest.right.select, "right.select"); 362 - u_var_add_bool(r, &r->latest.right.menu, "right.menu"); 363 359 u_var_add_pose(r, &r->latest.right.pose, "right.pose"); 364 360 365 361
+24 -5
src/xrt/drivers/remote/r_interface.h
··· 38 38 * 39 39 * @ingroup drv_remote 40 40 */ 41 - #define R_HEADER_VALUE (*(uint64_t *)"mndrmt1\0") 41 + #define R_HEADER_VALUE (*(uint64_t *)"mndrmt2\0") 42 42 43 43 /*! 44 44 * Data per controller. ··· 51 51 52 52 float hand_curl[5]; 53 53 54 + struct xrt_vec1 trigger_value; 55 + struct xrt_vec1 squeeze_value; 56 + struct xrt_vec1 squeeze_force; 57 + struct xrt_vec2 thumbstick; 58 + struct xrt_vec1 trackpad_force; 59 + struct xrt_vec2 trackpad; 60 + 54 61 bool hand_tracking_active; 62 + bool active; 55 63 56 - bool active; 57 - bool select; 58 - bool menu; 59 - bool _pad; 64 + bool system_click; 65 + bool system_touch; 66 + bool a_click; 67 + bool a_touch; 68 + bool b_click; 69 + bool b_touch; 70 + bool trigger_click; 71 + bool trigger_touch; 72 + bool thumbstick_click; 73 + bool thumbstick_touch; 74 + bool trackpad_touch; 75 + bool _pad0; 76 + bool _pad1; 77 + bool _pad2; 78 + // active(2) + bools(11) + pad(3) = 16 60 79 }; 61 80 62 81 /*!
+51 -5
src/xrt/state_trackers/gui/gui_scene_remote.c
··· 106 106 } 107 107 108 108 static void 109 + handle_input(struct r_remote_controller_data *d) 110 + { 111 + igText("Hover buttons and sliders to touch component."); 112 + bool touched = false; 113 + 114 + d->system_click = handle_downable_button("System"); 115 + d->system_touch = igIsItemHovered(ImGuiHoveredFlags_RectOnly); 116 + igSameLine(0, 3); 117 + 118 + d->a_click = handle_downable_button("A"); 119 + d->a_touch = igIsItemHovered(ImGuiHoveredFlags_RectOnly); 120 + igSameLine(0, 3); 121 + 122 + d->b_click = handle_downable_button("B"); 123 + d->b_touch = igIsItemHovered(ImGuiHoveredFlags_RectOnly); 124 + igSameLine(0, 3); 125 + 126 + igCheckbox("Active", &d->active); 127 + 128 + // Squeeze 129 + igSliderFloat("Squeeze Value", &d->squeeze_value.x, 0, 1, "%.2f", 0); 130 + igSliderFloat("Squeeze Force", &d->squeeze_force.x, 0, 1, "%.2f", 0); 131 + 132 + // Trigger 133 + igText("Value > 0.0 causes touch, 0.7 > causes click"); 134 + igSliderFloat("Trigger", &d->trigger_value.x, 0, 1, "%.2f", 0); 135 + touched |= igIsItemHovered(ImGuiHoveredFlags_RectOnly); 136 + d->trigger_click = d->trigger_value.x > 0.7; 137 + touched |= d->trigger_value.x > 0.0001; 138 + d->trigger_touch = touched; 139 + 140 + // Thumbstick 141 + touched = false; 142 + d->thumbstick_click = handle_downable_button("Thumbstick Click"); 143 + touched |= igIsItemHovered(ImGuiHoveredFlags_RectOnly); 144 + igSliderFloat2("Thumbstick", &d->thumbstick.x, -1, 1, "%.2f", 0); 145 + touched |= igIsItemHovered(ImGuiHoveredFlags_RectOnly); 146 + d->thumbstick_touch = touched; 147 + 148 + // Trackpad 149 + touched = false; 150 + igSliderFloat2("Trackpad", &d->trackpad.x, -1, 1, "%.2f", 0); 151 + touched |= igIsItemHovered(ImGuiHoveredFlags_RectOnly); 152 + igSliderFloat("Trackpad Force", &d->trackpad_force.x, 0, 1, "%.2f", 0); 153 + touched |= igIsItemHovered(ImGuiHoveredFlags_RectOnly); 154 + touched |= d->trackpad_force.x >= 0.0001f; 155 + d->trackpad_touch = touched; 156 + } 157 + 158 + static void 109 159 render_cheat_menu(struct gui_remote *gr, struct gui_program *p) 110 160 { 111 161 struct r_remote_data *d = &gr->data; ··· 264 314 265 315 #define BUTTONS(prefix) \ 266 316 do { \ 267 - d->prefix.select = handle_downable_button("Select"); \ 268 - igSameLine(0, 3); \ 269 - d->prefix.menu = handle_downable_button("Menu"); \ 270 - igSameLine(0, 3); \ 271 - igCheckbox("Active", &d->prefix.active); \ 317 + handle_input(&d->prefix); \ 272 318 } while (false) 273 319 274 320 #define CURL(prefix, name, index) igDragFloat(#prefix "." #name, &d->prefix.hand_curl[index], 0.01, 0.0, 1.0, "%f", 0);