Monado OpenXR Runtime
rift_internal.h File Reference

Interface to Oculus Rift driver code. More...

#include "xrt/xrt_byte_order.h"
#include "util/u_device.h"
#include "util/u_logging.h"
#include "math/m_imu_3dof.h"
#include "math/m_api.h"
#include "math/m_mathinclude.h"
#include "os/os_hid.h"
#include "os/os_threading.h"
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include "rift_interface.h"
Include dependency graph for rift_internal.h:

Go to the source code of this file.

Data Structures

struct  rift_config_report
 
struct  rift_display_info_report
 
struct  rift_catmull_rom_distortion_report_data
 
struct  rift_lens_distortion_report
 
struct  rift_dk2_keepalive_mux_report
 
struct  rift_display_report
 
struct  rift_dk2_sensor_sample
 
struct  rift_dk2_sample_pack
 
struct  rift_dk2_version_data
 
struct  rift_cv1_version_data
 
struct  dk2_in_report
 
struct  rift_enable_components_report
 
struct  rift_imu_calibration_report
 
struct  rift_radio_cmd_report
 
struct  rift_radio_data_read_cmd
 
struct  rift_radio_flash_read_response_header
 
struct  rift_radio_address_radio_report
 
struct  rift_radio_report_remote_message
 
struct  rift_radio_report_touch_message
 
struct  rift_radio_report_message
 
struct  rift_radio_report
 
struct  rift_catmull_rom_distortion_data
 
struct  rift_lens_distortion
 
struct  rift_scale_and_offset
 
struct  rift_viewport_fov_tan
 
struct  rift_extra_display_info
 
struct  rift_imu_calibration
 
struct  rift_touch_controller_led
 
struct  rift_touch_controller_calibration
 
struct  rift_touch_controller_input_state
 
struct  rift_touch_controller
 A Rift Touch controller device. More...
 
struct  rift_remote
 A Rift Remote device. More...
 
struct  rift_radio_command_data_read_serial
 
struct  rift_radio_command_data_read_flash
 
union  rift_radio_command_data
 
struct  rift_hmd
 A rift HMD device. More...
 

Macros

#define HMD_TRACE(hmd, ...)   U_LOG_XDEV_IFL_T(&hmd->base, hmd->log_level, __VA_ARGS__)
 
#define HMD_DEBUG(hmd, ...)   U_LOG_XDEV_IFL_D(&hmd->base, hmd->log_level, __VA_ARGS__)
 
#define HMD_INFO(hmd, ...)   U_LOG_XDEV_IFL_I(&hmd->base, hmd->log_level, __VA_ARGS__)
 
#define HMD_WARN(hmd, ...)   U_LOG_XDEV_IFL_W(&hmd->base, hmd->log_level, __VA_ARGS__)
 
#define HMD_ERROR(hmd, ...)   U_LOG_XDEV_IFL_E(&hmd->base, hmd->log_level, __VA_ARGS__)
 
#define REPORT_MAX_SIZE   69
 
#define KEEPALIVE_INTERVAL_NS   10000000000
 
#define KEEPALIVE_SEND_RATE_NS   ((KEEPALIVE_INTERVAL_NS * 19) / 20)
 
#define IMU_SAMPLE_RATE   (1000)
 
#define NS_PER_SAMPLE   (1000 * 1000)
 
#define SERIAL_NUMBER_LENGTH   14
 
#define CALIBRATION_HASH_BYTE_OFFSET   0x1bf0
 
#define CALIBRATION_HASH_BYTE_LENGTH   0x10
 
#define CALIBRATION_HEADER_BYTE_OFFSET   0x0
 
#define CALIBRATION_HEADER_BYTE_LENGTH   0x4
 
#define CALIBRATION_BODY_BYTE_OFFSET   0x4
 
#define CALIBRATION_BODY_BYTE_CHUNK_LENGTH   0x14
 
#define MICROMETERS_TO_METERS(microns)   ((float)microns / 1000000.0f)
 
#define DEFAULT_EXTRA_EYE_ROTATION   DEG_TO_RAD(30.0f)
 
#define IN_REPORT_DK2   11
 
#define IN_REPORT_RADIO_DATA   12
 
#define IN_REPORT_CV1_RADIO_KEEPALIVE   13
 
#define IN_REPORT_RADIO_DATA_SIZE   64
 
#define SIZE_ASSERT(type, size)    static_assert(sizeof(type) == (size), "Size of " #type " is not " #size " bytes as was expected")
 
#define CATMULL_COEFFICIENTS   11
 
#define CHROMATIC_ABBERATION_COEFFEICENT_COUNT   4
 
#define DK2_MAX_SAMPLES   2
 

Typedefs

typedef int(* flash_read_callback_t) (void *user_data, uint16_t address, uint16_t length)
 

Enumerations

enum  rift_feature_reports {
  FEATURE_REPORT_CONFIG = 2 , FEATURE_REPORT_CALIBRATE = 3 , FEATURE_REPORT_RANGE = 4 , FEATURE_REPORT_REGISTER = 5 ,
  FEATURE_REPORT_DFU = 6 , FEATURE_REPORT_DK1_KEEP_ALIVE = 8 , FEATURE_REPORT_DISPLAY_INFO = 9 , FEATURE_REPORT_SERIAL = 10 ,
  FEATURE_REPORT_TRACKING = 12 , FEATURE_REPORT_DISPLAY = 13 , FEATURE_REPORT_MAG_CALIBRATION = 14 , FEATURE_REPORT_POS_CALIBRATION = 15 ,
  FEATURE_REPORT_CUSTOM_PATTERN = 16 , FEATURE_REPORT_KEEPALIVE_MUX = 17 , FEATURE_REPORT_MANUFACTURING = 18 , FEATURE_REPORT_UUID = 19 ,
  FEATURE_REPORT_TEMPERATURE = 20 , FEATURE_REPORT_GYROOFFSET = 21 , FEATURE_REPORT_LENS_DISTORTION = 22 , FEATURE_REPORT_RADIO_CONTROL = 26 ,
  FEATURE_REPORT_RADIO_READ_DATA_CMD = 27 , FEATURE_REPORT_ENABLE_COMPONENTS = 29
}
 
enum  rift_config_report_flags {
  RIFT_CONFIG_REPORT_USE_RAW = 1 , RIFT_CONFIG_REPORT_INTERNAL_CALIBRATION = 1 << 1 , RIFT_CONFIG_REPORT_USE_CALIBRATION = 1 << 2 , RIFT_CONFIG_REPORT_AUTO_CALIBRATION = 1 << 3 ,
  RIFT_CONFIG_REPORT_MOTION_KEEP_ALIVE = 1 << 4 , RIFT_CONFIG_REPORT_COMMAND_KEEP_ALIVE = 1 << 5 , RIFT_CONFIG_REPORT_USE_SENSOR_COORDINATES = 1 << 6 , RIFT_CONFIG_REPORT_OVERRIDE_POWER = 1 << 7
}
 
enum  rift_distortion_type { RIFT_DISTORTION_TYPE_DIMS = 1 , RIFT_DISTORTION_TYPE_K = 2 }
 
enum  rift_lens_type { RIFT_LENS_TYPE_A = 0 , RIFT_LENS_TYPE_B = 1 }
 
enum  rift_lens_distortion_version { RIFT_LENS_DISTORTION_NONE = 0 , RIFT_LENS_DISTORTION_LCSV_CATMULL_ROM_10_VERSION_1 = 1 }
 
enum  rift_component_flags { RIFT_COMPONENT_DISPLAY = 1 << 0 , RIFT_COMPONENT_AUDIO = 1 << 1 , RIFT_COMPONENT_LEDS = 1 << 2 }
 
enum  rift_display_mode { RIFT_DISPLAY_MODE_GLOBAL , RIFT_DISPLAY_MODE_ROLLING_TOP_BOTTOM , RIFT_DISPLAY_MODE_ROLLING_LEFT_RIGHT , RIFT_DISPLAY_MODE_ROLLING_RIGHT_LEFT }
 
enum  rift_display_limit { RIFT_DISPLAY_LIMIT_ACL_OFF = 0 , RIFT_DISPLAY_LIMIT_ACL_30 = 1 , RIFT_DISPLAY_LIMIT_ACL_25 = 2 , RIFT_DISPLAY_LIMIT_ACL_50 = 3 }
 
enum  rift_display_flags {
  RIFT_DISPLAY_USE_ROLLING = 1 << 6 , RIFT_DISPLAY_REVERSE_ROLLING = 1 << 7 , RIFT_DISPLAY_HIGH_BRIGHTNESS = 1 << 8 , RIFT_DISPLAY_SELF_REFRESH = 1 << 9 ,
  RIFT_DISPLAY_READ_PIXEL = 1 << 10 , RIFT_DISPLAY_DIRECT_PENTILE = 1 << 11
}
 
enum  rift_radio_read_cmd { RIFT_RADIO_READ_CMD_FLASH_CONTROL = 0x0a , RIFT_RADIO_READ_CMD_SERIAL = 0x88 }
 
enum  rift_radio_report_remote_button_masks {
  RIFT_REMOTE_BUTTON_MASK_DPAD_UP = 0x001 , RIFT_REMOTE_BUTTON_MASK_DPAD_DOWN = 0x002 , RIFT_REMOTE_BUTTON_MASK_DPAD_LEFT = 0x004 , RIFT_REMOTE_BUTTON_MASK_DPAD_RIGHT = 0x008 ,
  RIFT_REMOTE_BUTTON_MASK_SELECT = 0x010 , RIFT_REMOTE_BUTTON_MASK_VOLUME_UP = 0x020 , RIFT_REMOTE_BUTTON_MASK_VOLUME_DOWN = 0x040 , RIFT_REMOTE_BUTTON_MASK_OCULUS = 0x080 ,
  RIFT_REMOTE_BUTTON_MASK_BACK = 0x100
}
 
enum  rift_radio_report_touch_buttons {
  RIFT_TOUCH_CONTROLLER_BUTTON_A = 0x01 , RIFT_TOUCH_CONTROLLER_BUTTON_X = 0x01 , RIFT_TOUCH_CONTROLLER_BUTTON_B = 0x02 , RIFT_TOUCH_CONTROLLER_BUTTON_Y = 0x02 ,
  RIFT_TOUCH_CONTROLLER_BUTTON_MENU = 0x04 , RIFT_TOUCH_CONTROLLER_BUTTON_OCULUS = 0x04 , RIFT_TOUCH_CONTROLLER_BUTTON_STICK = 0x08
}
 
enum  rift_radio_device_type { RIFT_RADIO_DEVICE_REMOTE = 1 , RIFT_RADIO_DEVICE_LEFT_TOUCH = 2 , RIFT_RADIO_DEVICE_RIGHT_TOUCH = 3 , RIFT_RADIO_DEVICE_TRACKED_OBJECT = 6 }
 
enum  rift_touch_controller_input {
  RIFT_TOUCH_CONTROLLER_INPUT_X_CLICK = 0 , RIFT_TOUCH_CONTROLLER_INPUT_X_TOUCH = 1 , RIFT_TOUCH_CONTROLLER_INPUT_Y_CLICK = 2 , RIFT_TOUCH_CONTROLLER_INPUT_Y_TOUCH = 3 ,
  RIFT_TOUCH_CONTROLLER_INPUT_SYSTEM_CLICK = 4 , RIFT_TOUCH_CONTROLLER_INPUT_A_CLICK = 0 , RIFT_TOUCH_CONTROLLER_INPUT_A_TOUCH = 1 , RIFT_TOUCH_CONTROLLER_INPUT_B_CLICK = 2 ,
  RIFT_TOUCH_CONTROLLER_INPUT_B_TOUCH = 3 , RIFT_TOUCH_CONTROLLER_INPUT_MENU_CLICK = 4 , RIFT_TOUCH_CONTROLLER_INPUT_SQUEEZE_VALUE = 5 , RIFT_TOUCH_CONTROLLER_INPUT_TRIGGER_TOUCH = 6 ,
  RIFT_TOUCH_CONTROLLER_INPUT_TRIGGER_VALUE = 7 , RIFT_TOUCH_CONTROLLER_INPUT_THUMBSTICK_CLICK = 8 , RIFT_TOUCH_CONTROLLER_INPUT_THUMBSTICK_TOUCH = 9 , RIFT_TOUCH_CONTROLLER_INPUT_THUMBSTICK = 10 ,
  RIFT_TOUCH_CONTROLLER_INPUT_THUMBREST_TOUCH = 11 , RIFT_TOUCH_CONTROLLER_INPUT_GRIP_POSE = 12 , RIFT_TOUCH_CONTROLLER_INPUT_AIM_POSE = 13 , RIFT_TOUCH_CONTROLLER_INPUT_TRIGGER_PROXIMITY = 14 ,
  RIFT_TOUCH_CONTROLLER_INPUT_THUMB_PROXIMITY = 15 , RIFT_TOUCH_CONTROLLER_INPUT_COUNT = 16
}
 
enum  rift_remote_inputs {
  RIFT_REMOTE_INPUT_DPAD_UP , RIFT_REMOTE_INPUT_DPAD_DOWN , RIFT_REMOTE_INPUT_DPAD_LEFT , RIFT_REMOTE_INPUT_DPAD_RIGHT ,
  RIFT_REMOTE_INPUT_SELECT , RIFT_REMOTE_INPUT_VOLUME_UP , RIFT_REMOTE_INPUT_VOLUME_DOWN , RIFT_REMOTE_INPUT_BACK ,
  RIFT_REMOTE_INPUT_OCULUS , RIFT_REMOTE_INPUT_COUNT
}
 
enum  rift_radio_command { RIFT_RADIO_COMMAND_NONE = 0 , RIFT_RADIO_COMMAND_READ_SERIAL , RIFT_RADIO_COMMAND_READ_FLASH }
 

Functions

static struct rift_hmdrift_hmd (struct xrt_device *xdev)
 Casting helper function. More...
 
static struct rift_touch_controllerrift_touch_controller (struct xrt_device *xdev)
 
static struct rift_remoterift_remote (struct xrt_device *xdev)
 
static size_t rift_radio_device_type_to_touch_index (enum rift_radio_device_type device_type)
 
static enum rift_radio_device_type rift_radio_touch_index_to_device_type (size_t index)
 
bool rift_touch_calibration_parse (const char *calibration_data, size_t calibration_size, struct rift_touch_controller_calibration *out_calibration)
 

Detailed Description

Interface to Oculus Rift driver code.

Author
Beyley Cardellio ep1cm.nosp@m.1n10.nosp@m.n123@.nosp@m.gmai.nosp@m.l.com

Function Documentation

◆ rift_hmd()

static struct rift_hmd * rift_hmd ( struct xrt_device xdev)
inlinestatic

Casting helper function.