monado/src/xrt/state_trackers/oxr/oxr_binding_data.h

286 lines
13 KiB
C
Raw Normal View History

// Copyright 2018-2019, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
/*!
* @file
* @brief Holds shipped binding data.
* @author Jakob Bornecrantz <jakob@collabora.com>
* @ingroup oxr_main
*/
#include "oxr_objects.h"
struct binding_template
{
enum oxr_sub_action_path sub_path;
const char *localized_name;
const char *paths[8];
2020-11-03 19:33:52 +00:00
enum xrt_input_name input;
enum xrt_output_name output;
};
struct profile_template
{
2020-11-03 19:33:52 +00:00
enum xrt_device_name name;
const char *path;
const char *localized_name;
struct binding_template *bindings;
size_t num_bindings;
};
/*
*
2020-11-03 19:33:52 +00:00
* Shipped bindings.
*
*/
#define MAKE_INPUT(COMPONENT, NAME, SUFFIX, INPUT) \
{ \
.sub_path = OXR_SUB_ACTION_PATH_LEFT, \
.localized_name = NAME, \
.paths = \
{ \
"/user/hand/left/input/" #COMPONENT "/" #SUFFIX, \
"/user/hand/left/input/" #COMPONENT, \
NULL, \
}, \
2020-11-03 19:33:52 +00:00
.input = INPUT, \
}, \
{ \
.sub_path = OXR_SUB_ACTION_PATH_RIGHT, \
.localized_name = NAME, \
.paths = \
{ \
"/user/hand/right/input/" #COMPONENT "/" #SUFFIX, \
"/user/hand/right/input/" #COMPONENT, \
NULL, \
}, \
2020-11-03 19:33:52 +00:00
.input = INPUT, \
},
// creates an input that can not be "downgraded" to the top level path.
// e.g. don't bind ../trackpad/click, ../trackpad/touch with just ../trackpad
#define MAKE_INPUT_SUFFIX_ONLY(COMPONENT, NAME, SUFFIX, INPUT) \
{ \
.sub_path = OXR_SUB_ACTION_PATH_LEFT, \
.localized_name = NAME, \
.paths = \
{ \
"/user/hand/left/input/" #COMPONENT "/" #SUFFIX, \
NULL, \
}, \
2020-11-03 19:33:52 +00:00
.input = INPUT, \
}, \
{ \
.sub_path = OXR_SUB_ACTION_PATH_RIGHT, \
.localized_name = NAME, \
.paths = \
{ \
"/user/hand/right/input/" #COMPONENT "/" #SUFFIX, \
NULL, \
}, \
2020-11-03 19:33:52 +00:00
.input = INPUT, \
},
// creates an input with a top level path and /x and /y sub paths
#define MAKE_INPUT_VEC2F(COMPONENT, NAME, INPUT) \
{ \
.sub_path = OXR_SUB_ACTION_PATH_LEFT, \
.localized_name = NAME, \
.paths = \
{ \
"/user/hand/left/input/" #COMPONENT, \
"/user/hand/left/input/" #COMPONENT "/x", \
"/user/hand/left/input/" #COMPONENT "/y", \
NULL, \
}, \
2020-11-03 19:33:52 +00:00
.input = INPUT, \
}, \
{ \
.sub_path = OXR_SUB_ACTION_PATH_RIGHT, \
.localized_name = NAME, \
.paths = \
{ \
"/user/hand/right/input/" #COMPONENT, \
"/user/hand/right/input/" #COMPONENT "/x", \
"/user/hand/right/input/" #COMPONENT "/y", \
NULL, \
}, \
2020-11-03 19:33:52 +00:00
.input = INPUT, \
},
#define MAKE_OUTPUT(COMPONENT, NAME, OUTPUT) \
{ \
.sub_path = OXR_SUB_ACTION_PATH_LEFT, \
.localized_name = NAME, \
.paths = \
{ \
"/user/hand/left/output/" #COMPONENT, \
NULL, \
}, \
2020-11-03 19:33:52 +00:00
.output = OUTPUT, \
}, \
{ \
.sub_path = OXR_SUB_ACTION_PATH_RIGHT, \
.localized_name = NAME, \
.paths = \
{ \
"/user/hand/right/output/" #COMPONENT, \
NULL, \
}, \
2020-11-03 19:33:52 +00:00
.output = OUTPUT, \
},
2020-11-03 19:33:52 +00:00
/*
*
* KHR Simple Controller
*
*/
static struct binding_template khr_simple_controller_bindings[10] = {
// clang-format off
MAKE_INPUT(select, "Select", click, XRT_INPUT_SIMPLE_SELECT_CLICK)
MAKE_INPUT(menu, "Menu", click, XRT_INPUT_SIMPLE_MENU_CLICK)
MAKE_INPUT(grip, "Grip", pose, XRT_INPUT_SIMPLE_GRIP_POSE)
MAKE_INPUT(aim, "Aim", pose, XRT_INPUT_SIMPLE_AIM_POSE)
MAKE_OUTPUT(haptic, "Haptic", XRT_OUTPUT_NAME_SIMPLE_VIBRATION)
// clang-format on
};
/*
*
* Monado ball on a stick controller
*
*/
static struct binding_template mndx_ball_on_a_stick_controller_bindings[26] = {
// clang-format off
MAKE_INPUT(system, "PS™ Logo", click, XRT_INPUT_PSMV_PS_CLICK)
MAKE_INPUT(menu, "Move™ Logo", click, XRT_INPUT_PSMV_MOVE_CLICK)
MAKE_INPUT(start, "Start/Options", click, XRT_INPUT_PSMV_START_CLICK)
MAKE_INPUT(select, "Select", click, XRT_INPUT_PSMV_SELECT_CLICK)
MAKE_INPUT(square_mndx, "Square™", click, XRT_INPUT_PSMV_SQUARE_CLICK)
MAKE_INPUT(cross_mndx, "Cross™", click, XRT_INPUT_PSMV_CROSS_CLICK)
MAKE_INPUT(circle_mndx, "Circle™", click, XRT_INPUT_PSMV_CIRCLE_CLICK)
MAKE_INPUT(triangle_mndx, "Trinangle™", click, XRT_INPUT_PSMV_TRIANGLE_CLICK)
MAKE_INPUT(trigger, "Trigger", value, XRT_INPUT_PSMV_TRIGGER_VALUE)
MAKE_INPUT(grip, "Grip", pose, XRT_INPUT_PSMV_GRIP_POSE)
MAKE_INPUT(ball_mndx, "Ball", pose, XRT_INPUT_PSMV_BALL_CENTER_POSE)
MAKE_INPUT(aim, "Aim", pose, XRT_INPUT_PSMV_AIM_POSE)
MAKE_OUTPUT(haptic, "Haptic", XRT_OUTPUT_NAME_PSMV_RUMBLE_VIBRATION)
// clang-format on
};
/*
*
* Valve Index controller
*
*/
static struct binding_template valve_index_controller_bindings[44] = {
// clang-format off
MAKE_INPUT(system, "System", click, XRT_INPUT_INDEX_SYSTEM_CLICK)
MAKE_INPUT(system, "System Touch", touch, XRT_INPUT_INDEX_SYSTEM_TOUCH)
MAKE_INPUT(a, "A", click, XRT_INPUT_INDEX_A_CLICK)
MAKE_INPUT(a, "A Touch", touch, XRT_INPUT_INDEX_A_TOUCH)
MAKE_INPUT(b, "B", click, XRT_INPUT_INDEX_B_CLICK)
MAKE_INPUT(b, "B Touch", touch, XRT_INPUT_INDEX_B_TOUCH)
MAKE_INPUT(squeeze, "Side-Squeeze", value, XRT_INPUT_INDEX_SQUEEZE_VALUE)
MAKE_INPUT(squeeze, "Side-Squeeze Force", force, XRT_INPUT_INDEX_SQUEEZE_FORCE)
MAKE_INPUT(trigger, "Trigger Click", click, XRT_INPUT_INDEX_TRIGGER_CLICK)
MAKE_INPUT(trigger, "Trigger", value, XRT_INPUT_INDEX_TRIGGER_VALUE)
MAKE_INPUT(trigger, "Trigger Touch", touch, XRT_INPUT_INDEX_TRIGGER_TOUCH)
MAKE_INPUT_VEC2F(thumbstick, "Thumbstick", XRT_INPUT_INDEX_THUMBSTICK)
MAKE_INPUT_SUFFIX_ONLY(thumbstick, "Thumbstick Click", click, XRT_INPUT_INDEX_THUMBSTICK_CLICK)
MAKE_INPUT_SUFFIX_ONLY(thumbstick, "Thumbstick Touch", touch, XRT_INPUT_INDEX_THUMBSTICK_TOUCH)
MAKE_INPUT_VEC2F(trackpad, "Trackpad", XRT_INPUT_INDEX_TRACKPAD)
MAKE_INPUT_SUFFIX_ONLY(trackpad, "Trackpad Force", force, XRT_INPUT_INDEX_TRACKPAD_FORCE)
MAKE_INPUT_SUFFIX_ONLY(trackpad, "Trackpad Touch", touch, XRT_INPUT_INDEX_TRACKPAD_TOUCH)
MAKE_INPUT(grip, "Grip", pose, XRT_INPUT_INDEX_GRIP_POSE)
MAKE_INPUT(aim, "Aim", pose, XRT_INPUT_INDEX_AIM_POSE)
MAKE_OUTPUT(haptic, "Haptic", XRT_OUTPUT_NAME_INDEX_HAPTIC)
// clang-format on
};
2020-11-03 19:33:52 +00:00
/*
*
* HTC Vive controller
*
*/
static struct binding_template htc_vive_controller_bindings[24] = {
// clang-format off
MAKE_INPUT(system, "System", click, XRT_INPUT_VIVE_SYSTEM_CLICK)
MAKE_INPUT(squeeze, "Side-Squeeze", click, XRT_INPUT_VIVE_SQUEEZE_CLICK)
MAKE_INPUT(menu, "Menu", click, XRT_INPUT_VIVE_MENU_CLICK)
MAKE_INPUT(trigger, "Trigger Click", click, XRT_INPUT_VIVE_TRIGGER_CLICK)
MAKE_INPUT(trigger, "Trigger", value, XRT_INPUT_VIVE_TRIGGER_VALUE)
MAKE_INPUT_VEC2F(trackpad, "Trackpad", XRT_INPUT_VIVE_TRACKPAD)
MAKE_INPUT_SUFFIX_ONLY(trackpad, "Trackpad Click", click, XRT_INPUT_VIVE_TRACKPAD_CLICK)
MAKE_INPUT_SUFFIX_ONLY(trackpad, "Trackpad Touch", touch, XRT_INPUT_VIVE_TRACKPAD_TOUCH)
MAKE_INPUT(grip, "Grip", pose, XRT_INPUT_VIVE_GRIP_POSE)
MAKE_INPUT(aim, "Aim", pose, XRT_INPUT_VIVE_AIM_POSE)
MAKE_OUTPUT(haptic, "Haptic", XRT_OUTPUT_NAME_VIVE_HAPTIC)
// clang-format on
};
2020-11-03 19:33:52 +00:00
/*
*
* Profiles
*
*/
static struct profile_template profiles[4] = {
{
2020-11-03 19:33:52 +00:00
.name = XRT_DEVICE_SIMPLE_CONTROLLER,
.path = "/interaction_profiles/khr/simple_controller",
.localized_name = "Simple Controller",
.bindings = khr_simple_controller_bindings,
.num_bindings = ARRAY_SIZE(khr_simple_controller_bindings),
},
2020-11-03 19:33:52 +00:00
#if 0
{
.path = "/interaction_profiles/google/daydream_controller",
.localized_name = "Daydream Controller",
.bindings = google_daydream_controller_bindings,
.num_bindings = ARRAY_SIZE(google_daydream_controller_bindings),
},
2020-11-03 19:33:52 +00:00
#endif
{
2020-11-03 19:33:52 +00:00
.name = XRT_DEVICE_PSMV,
.path = "/interaction_profiles/mndx/ball_on_a_stick_controller",
.localized_name = "PS Move",
.bindings = mndx_ball_on_a_stick_controller_bindings,
.num_bindings = ARRAY_SIZE(mndx_ball_on_a_stick_controller_bindings),
},
{
2020-11-03 19:33:52 +00:00
.name = XRT_DEVICE_INDEX_CONTROLLER,
.path = "/interaction_profiles/valve/index_controller",
.localized_name = "Index Controller",
.bindings = valve_index_controller_bindings,
.num_bindings = ARRAY_SIZE(valve_index_controller_bindings),
},
{
2020-11-03 19:33:52 +00:00
.name = XRT_DEVICE_VIVE_WAND,
.path = "/interaction_profiles/htc/vive_controller",
.localized_name = "Vive Wand",
.bindings = htc_vive_controller_bindings,
.num_bindings = ARRAY_SIZE(htc_vive_controller_bindings),
},
};