The open source OpenXR runtime
1// Copyright 2020-2021, N Madsen.
2// Copyright 2020-2023, Collabora, Ltd.
3// Copyright 2020-2023, Jan Schmidt
4// SPDX-License-Identifier: BSL-1.0
5/*!
6 * @file
7 * @brief Driver for WMR Controllers.
8 * @author Jan Schmidt <jan@centricular.com>
9 * @ingroup drv_wmr
10 */
11#include <assert.h>
12
13#include "wmr_common.h"
14#include "wmr_controller.h"
15
16struct wmr_controller_base *
17wmr_controller_og_create(struct wmr_controller_connection *conn,
18 enum xrt_device_type controller_type,
19 uint16_t pid,
20 enum u_logging_level log_level);
21
22struct wmr_controller_base *
23wmr_controller_hp_create(struct wmr_controller_connection *conn,
24 enum xrt_device_type controller_type,
25 enum u_logging_level log_level);
26
27struct wmr_controller_base *
28wmr_controller_create(struct wmr_controller_connection *conn,
29 enum xrt_device_type controller_type,
30 uint16_t vid,
31 uint16_t pid,
32 enum u_logging_level log_level)
33{
34 struct wmr_controller_base *ret = NULL;
35
36 assert(vid == MICROSOFT_VID); /* The only known controllers all use Microsoft VID right now */
37
38 switch (pid) {
39 case WMR_CONTROLLER_PID:
40 case ODYSSEY_CONTROLLER_PID: ret = wmr_controller_og_create(conn, controller_type, pid, log_level); break;
41 case REVERB_G2_CONTROLLER_PID: ret = wmr_controller_hp_create(conn, controller_type, log_level); break;
42 default: break;
43 }
44
45 return ret;
46}