The open source OpenXR runtime
0
fork

Configure Feed

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

d/wmr: Add more to the I/O

+85 -7
+49 -7
src/xrt/drivers/wmr/wmr_bt_controller.c
··· 39 39 #define WMR_WARN(d, ...) U_LOG_XDEV_IFL_W(&d->base, d->ll, __VA_ARGS__) 40 40 #define WMR_ERROR(d, ...) U_LOG_XDEV_IFL_E(&d->base, d->ll, __VA_ARGS__) 41 41 42 + #define SET_INPUT(NAME) (d->base.inputs[WMR_INDEX_##NAME].name = XRT_INPUT_WMR_##NAME) 43 + 42 44 43 45 static inline struct wmr_bt_controller * 44 46 wmr_bt_controller(struct xrt_device *p) ··· 113 115 static void 114 116 wmr_bt_controller_update_inputs(struct xrt_device *xdev) 115 117 { 116 - // struct wmr_bt_controller *d = wmr_bt_controller(xdev); 117 - // Todo: implement 118 + struct wmr_bt_controller *d = wmr_bt_controller(xdev); 119 + 120 + struct xrt_input *inputs = d->base.inputs; 121 + 122 + //! @todo Mutex protect the input struct. 123 + 124 + inputs[WMR_INDEX_MENU_CLICK].value.boolean = d->input.menu; 125 + inputs[WMR_INDEX_SQUEEZE_CLICK].value.boolean = d->input.squeeze; 126 + inputs[WMR_INDEX_TRIGGER_VALUE].value.vec1.x = d->input.trigger; 127 + inputs[WMR_INDEX_THUMBSTICK_CLICK].value.boolean = d->input.thumbstick.click; 128 + inputs[WMR_INDEX_THUMBSTICK].value.vec2 = d->input.thumbstick.values; 129 + inputs[WMR_INDEX_TRACKPAD_CLICK].value.boolean = d->input.trackpad.click; 130 + inputs[WMR_INDEX_TRACKPAD_TOUCH].value.boolean = d->input.trackpad.touch; 131 + inputs[WMR_INDEX_TRACKPAD].value.vec2 = d->input.trackpad.values; 118 132 } 119 133 120 134 static void * ··· 143 157 wmr_bt_controller_destroy(struct xrt_device *xdev) 144 158 { 145 159 struct wmr_bt_controller *d = wmr_bt_controller(xdev); 160 + 161 + // Remove the variable tracking. 162 + u_var_remove_root(d); 146 163 147 164 // Destroy the thread object. 148 165 os_thread_helper_destroy(&d->controller_thread); ··· 201 218 { 202 219 203 220 enum u_device_alloc_flags flags = U_DEVICE_ALLOC_TRACKING_NONE; 204 - struct wmr_bt_controller *d = U_DEVICE_ALLOCATE(struct wmr_bt_controller, flags, 2, 0); 221 + struct wmr_bt_controller *d = U_DEVICE_ALLOCATE(struct wmr_bt_controller, flags, 10, 1); 205 222 206 223 d->ll = ll; 207 224 d->controller_hid = controller_hid; ··· 217 234 d->base.set_output = wmr_bt_controller_set_output; 218 235 d->base.update_inputs = wmr_bt_controller_update_inputs; 219 236 220 - d->base.inputs[0].name = XRT_INPUT_WMR_GRIP_POSE; 221 - d->base.inputs[0].active = true; 222 - d->base.inputs[1].name = XRT_INPUT_WMR_AIM_POSE; 223 - d->base.inputs[1].active = true; 237 + SET_INPUT(MENU_CLICK); 238 + SET_INPUT(SQUEEZE_CLICK); 239 + SET_INPUT(TRIGGER_VALUE); 240 + SET_INPUT(THUMBSTICK_CLICK); 241 + SET_INPUT(THUMBSTICK); 242 + SET_INPUT(TRACKPAD_CLICK); 243 + SET_INPUT(TRACKPAD_TOUCH); 244 + SET_INPUT(TRACKPAD); 245 + SET_INPUT(GRIP_POSE); 246 + SET_INPUT(AIM_POSE); 247 + 248 + for (uint32_t i = 0; i < d->base.input_count; i++) { 249 + d->base.inputs[0].active = true; 250 + } 251 + 252 + d->base.outputs[0].name = XRT_OUTPUT_NAME_WMR_HAPTIC; 253 + 224 254 d->base.binding_profiles = binding_profiles; 225 255 d->base.binding_profile_count = ARRAY_SIZE(binding_profiles); 226 256 ··· 256 286 return NULL; 257 287 } 258 288 289 + 290 + u_var_add_root(d, d->base.str, true); 291 + u_var_add_bool(d, &d->input.menu, "input.menu"); 292 + u_var_add_bool(d, &d->input.squeeze, "input.squeeze"); 293 + u_var_add_f32(d, &d->input.trigger, "input.trigger"); 294 + u_var_add_bool(d, &d->input.thumbstick.click, "input.thumbstick.click"); 295 + u_var_add_f32(d, &d->input.thumbstick.values.x, "input.thumbstick.values.y"); 296 + u_var_add_f32(d, &d->input.thumbstick.values.y, "input.thumbstick.values.x"); 297 + u_var_add_bool(d, &d->input.trackpad.click, "input.trackpad.click"); 298 + u_var_add_bool(d, &d->input.trackpad.touch, "input.trackpad.touch"); 299 + u_var_add_f32(d, &d->input.trackpad.values.x, "input.trackpad.values.x"); 300 + u_var_add_f32(d, &d->input.trackpad.values.y, "input.trackpad.values.y"); 259 301 260 302 return &d->base; 261 303 }
+36
src/xrt/drivers/wmr/wmr_bt_controller.h
··· 24 24 25 25 26 26 /*! 27 + * Indices where each input is in the input list. 28 + */ 29 + enum wmr_bt_input_index 30 + { 31 + WMR_INDEX_MENU_CLICK, 32 + WMR_INDEX_SQUEEZE_CLICK, 33 + WMR_INDEX_TRIGGER_VALUE, 34 + WMR_INDEX_THUMBSTICK_CLICK, 35 + WMR_INDEX_THUMBSTICK, 36 + WMR_INDEX_TRACKPAD_CLICK, 37 + WMR_INDEX_TRACKPAD_TOUCH, 38 + WMR_INDEX_TRACKPAD, 39 + WMR_INDEX_GRIP_POSE, 40 + WMR_INDEX_AIM_POSE, 41 + }; 42 + 43 + /*! 27 44 * A Bluetooth connected WMR Controller device, representing just a single controller. 28 45 * 29 46 * @ingroup drv_wmr ··· 52 69 enum u_logging_level ll; 53 70 54 71 uint32_t last_ticks; 72 + 73 + struct 74 + { 75 + bool menu; 76 + bool squeeze; 77 + float trigger; 78 + 79 + struct 80 + { 81 + bool click; 82 + struct xrt_vec2 values; 83 + } thumbstick; 84 + struct 85 + { 86 + bool click; 87 + bool touch; 88 + struct xrt_vec2 values; 89 + } trackpad; 90 + } input; 55 91 }; 56 92 57 93