| Monado OpenXR Runtime
    | 
PlayStation Sense controller prober and driver code. More...
#include "xrt/xrt_prober.h"#include "os/os_threading.h"#include "os/os_hid.h"#include "os/os_time.h"#include "math/m_api.h"#include "tracking/t_imu.h"#include "util/u_var.h"#include "util/u_debug.h"#include "util/u_device.h"#include "util/u_logging.h"#include "util/u_trace_marker.h"#include "pssense_interface.h"#include "math/m_mathinclude.h"#include "math/m_space.h"#include "math/m_imu_3dof.h"#include <stdio.h>
| Data Structures | |
| struct | pssense_i16_le | 
| 16-bit little-endian int  More... | |
| struct | pssense_i32_le | 
| 32-bit little-endian int  More... | |
| struct | pssense_input_report | 
| HID input report data packet.  More... | |
| struct | pssense_output_report | 
| HID output report data packet.  More... | |
| struct | pssense_feature_report | 
| HID output report data packet.  More... | |
| struct | pssense_input_state | 
| PlayStation Sense state parsed from a data packet.  More... | |
| struct | pssense_device | 
| A single PlayStation Sense Controller.  More... | |
| Macros | |
| #define | PSSENSE_TRACE(p, ...) U_LOG_XDEV_IFL_T(&p->base, p->log_level, __VA_ARGS__) | 
| #define | PSSENSE_DEBUG(p, ...) U_LOG_XDEV_IFL_D(&p->base, p->log_level, __VA_ARGS__) | 
| #define | PSSENSE_WARN(p, ...) U_LOG_XDEV_IFL_W(&p->base, p->log_level, __VA_ARGS__) | 
| #define | PSSENSE_ERROR(p, ...) U_LOG_XDEV_IFL_E(&p->base, p->log_level, __VA_ARGS__) | 
| #define | DEG_TO_RAD(DEG) (DEG * M_PI / 180.) | 
| #define | INPUT_REPORT_LENGTH 78 | 
| #define | OUTPUT_REPORT_LENGTH 78 | 
| #define | FEATURE_REPORT_LENGTH 64 | 
| #define | CALIBRATION_DATA_LENGTH 116 | 
| #define | SET_INPUT(NAME) (pssense->base.inputs[PSSENSE_INDEX_##NAME].name = XRT_INPUT_PSSENSE_##NAME) | 
| Enumerations | |
| enum | pssense_input_index { PSSENSE_INDEX_PS_CLICK , PSSENSE_INDEX_SHARE_CLICK , PSSENSE_INDEX_OPTIONS_CLICK , PSSENSE_INDEX_SQUARE_CLICK , PSSENSE_INDEX_SQUARE_TOUCH , PSSENSE_INDEX_TRIANGLE_CLICK , PSSENSE_INDEX_TRIANGLE_TOUCH , PSSENSE_INDEX_CROSS_CLICK , PSSENSE_INDEX_CROSS_TOUCH , PSSENSE_INDEX_CIRCLE_CLICK , PSSENSE_INDEX_CIRCLE_TOUCH , PSSENSE_INDEX_SQUEEZE_CLICK , PSSENSE_INDEX_SQUEEZE_TOUCH , PSSENSE_INDEX_SQUEEZE_PROXIMITY , PSSENSE_INDEX_TRIGGER_CLICK , PSSENSE_INDEX_TRIGGER_TOUCH , PSSENSE_INDEX_TRIGGER_VALUE , PSSENSE_INDEX_TRIGGER_PROXIMITY , PSSENSE_INDEX_THUMBSTICK , PSSENSE_INDEX_THUMBSTICK_CLICK , PSSENSE_INDEX_THUMBSTICK_TOUCH , PSSENSE_INDEX_GRIP_POSE , PSSENSE_INDEX_AIM_POSE } | 
| Indices where each input is in the input list.  More... | |
| Functions | |
| static uint32_t | pssense_i32_le_to_u32 (const struct pssense_i32_le *from) | 
| static struct pssense_i32_le | pssense_u32_to_i32_le (uint32_t from) | 
| static int16_t | pssense_i16_le_to_i16 (const struct pssense_i16_le *from) | 
| static uint32_t | crc32_le (uint32_t crc, uint8_t const *p, size_t len) | 
| static bool | pssense_read_one_packet (struct pssense_device *pssense, uint8_t *buffer, size_t size, bool check_size) | 
| Reads one packet from the device, handles time out, locking and checking if the thread has been told to shut down.  More... | |
| static bool | pssense_parse_packet (struct pssense_device *pssense, struct pssense_input_report *data, struct pssense_input_state *input) | 
| static void | pssense_update_fusion (struct pssense_device *pssense) | 
| static void | pssense_send_output_report_locked (struct pssense_device *pssense) | 
| static void * | pssense_run_thread (void *ptr) | 
| static void | pssense_device_destroy (struct xrt_device *xdev) | 
| static xrt_result_t | pssense_device_update_inputs (struct xrt_device *xdev) | 
| static xrt_result_t | pssense_set_output (struct xrt_device *xdev, enum xrt_output_name name, const struct xrt_output_value *value) | 
| static void | pssense_get_fusion_pose (struct pssense_device *pssense, enum xrt_input_name name, int64_t at_timestamp_ns, struct xrt_space_relation *out_relation) | 
| static xrt_result_t | pssense_get_tracked_pose (struct xrt_device *xdev, enum xrt_input_name name, int64_t at_timestamp_ns, struct xrt_space_relation *out_relation) | 
| static xrt_result_t | pssense_get_battery_status (struct xrt_device *xdev, bool *out_present, bool *out_charging, float *out_charge) | 
| bool | pssense_get_calibration_data (struct pssense_device *pssense) | 
| Retrieving the calibration data report will switch the Sense controller from compat mode into full mode.  More... | |
| int | pssense_found (struct xrt_prober *xp, struct xrt_prober_device **devices, size_t device_count, size_t index, cJSON *attached_data, struct xrt_device **out_xdevs) | 
| Probing function for PlayStation Sense devices.  More... | |
| Variables | |
| static struct xrt_binding_input_pair | simple_inputs_pssense [4] | 
| static struct xrt_binding_output_pair | simple_outputs_pssense [1] | 
| static struct xrt_binding_profile | binding_profiles_pssense [1] | 
| const uint8_t | INPUT_REPORT_ID = 0x31 | 
| const uint8_t | OUTPUT_REPORT_ID = 0x31 | 
| const uint8_t | OUTPUT_REPORT_TAG = 0x10 | 
| const uint8_t | CALIBRATION_DATA_FEATURE_REPORT_ID = 0x05 | 
| const uint8_t | CALIBRATION_DATA_PART_ID_1 = 0 | 
| const uint8_t | CALIBRATION_DATA_PART_ID_2 = 0x81 | 
| const uint8_t | INPUT_REPORT_CRC32_SEED = 0xa1 | 
| const uint8_t | OUTPUT_REPORT_CRC32_SEED = 0xa2 | 
| const uint8_t | FEATURE_REPORT_CRC32_SEED = 0xa3 | 
| const double | PSSENSE_GYRO_SCALE_DEG = 180.0 / 1024 | 
| Gyro read value range is +-32768.  More... | |
| const double | PSSENSE_ACCEL_SCALE = MATH_GRAVITY_M_S2 / 4096 | 
| Accelerometer read value range is +-32768 and covers +-8 g.  More... | |
| const uint8_t | VIBRATE_ENABLE_BITS = 0x03 | 
| Flag bits to enable setting vibration in an output report.  More... | |
| const uint8_t | VIBRATE_MODE_HIGH_120HZ = 0x00 | 
| Pure 120Hz vibration.  More... | |
| const uint8_t | VIBRATE_MODE_LOW_60HZ = 0x20 | 
| Pure 60Hz vibration.  More... | |
| const uint8_t | VIBRATE_MODE_CLASSIC_RUMBLE = 0x40 | 
| Emulates a legacy vibration motor.  More... | |
| const uint8_t | VIBRATE_MODE_DIET_RUMBLE = 0x60 | 
| Softer rumble emulation, like an engine running.  More... | |
| const uint8_t | TRIGGER_FEEDBACK_ENABLE_BITS = 0x04 | 
| Flag bits to enable setting trigger feedback in an output report.  More... | |
| const uint8_t | TRIGGER_FEEDBACK_MODE_NONE = 0x00 | 
| Clear the trigger feedback setting.  More... | |
| const uint8_t | TRIGGER_FEEDBACK_MODE_CONSTANT = 0x01 | 
| Constant resistance throughout the trigger movement.  More... | |
| const uint8_t | TRIGGER_FEEDBACK_MODE_CATCH = 0x02 | 
| A single point of resistance at the beginning of the trigger, right before the click flag is activated.  More... | |
| const uint8_t | CHARGE_STATE_DISCHARGING = 0x00 | 
| const uint8_t | CHARGE_STATE_CHARGING = 0x01 | 
| const uint8_t | CHARGE_STATE_FULL = 0x02 | 
| const uint8_t | CHARGE_STATE_ABNORMAL_VOLTAGE = 0x0A | 
| const uint8_t | CHARGE_STATE_ABNORMAL_TEMP = 0x0B | 
| const uint8_t | CHARGE_STATE_CHARGING_ERROR = 0x0F | 
| const uint32_t | CRC_POLYNOMIAL = 0xedb88320 | 
PlayStation Sense controller prober and driver code.