#button #controller #touch #headset #oculus #interface #send

rust_oculus_touch

Rust API to interface your Oculus Touch controllers and headset

5 releases

0.1.0 Dec 22, 2023
0.0.6 Dec 22, 2023
0.0.5 Dec 22, 2023
0.0.4 Dec 22, 2023
0.0.3 Dec 22, 2023

#826 in Hardware support

MIT license

260KB
417 lines

Contains (Windows DLL, 180KB) lib/vJoyInterface.dll, (Windows DLL, 47KB) lib/auto_oculus_touch.dll

What is it?

This is a rust library that allows you to interface with your Oculus Touch controllers and headset. It is a wrapper for the auto_oculus_touch project.

With it, you can read the current state of the controllers and headset, send button presses to the controller, or move the thumbsticks.

Installation

cargo add rust_oculus_touch

Example Usage

Below is a short program that will vibrate both controllers for 1 second whenever the X button is pressed while the headset is being worn.

use rust_oculus_touch as ot;

fn main() {
    let oculus = ot::OculusTouch::new();
    oculus.InitOculus();

    while true {
        oculus.Poll();
        println!("\n");

        let wearing = oculus.Wearing();
        println!(
            "Headset is {} your head",
            if wearing { "ON" } else { "OFF" }
        );

        let x = oculus.GetPositionX(ot::OculusTouchControllerEnum::Head);
        let y = oculus.GetPositionY(ot::OculusTouchControllerEnum::Head);
        let z = oculus.GetPositionZ(ot::OculusTouchControllerEnum::Head);
        let yaw = oculus.GetYaw(ot::OculusTouchControllerEnum::Head);
        let pitch = oculus.GetPitch(ot::OculusTouchControllerEnum::Head);
        let roll = oculus.GetRoll(ot::OculusTouchControllerEnum::Head);
        println!(
            "Headset Position: ({}, {}, {}), Yaw: {}, Pitch: {}, Roll: {}",
            x, y, z, yaw, pitch, roll
        );

        let buttons_down = oculus.GetButtonsDownList(); // Get a list of buttons that are currently held down
        let sensors_touched = oculus.GetTouchDownList(); // Get a list of capacitive sensors that are currently being touched
        println!("These buttons are down: {:?}", buttons_down);
        println!("These sensors are touched: {:?}", sensors_touched);

        println!("Here's a vibration for fun!"); // Vibrate the controllers
        oculus.Vibrate(
            ot::OculusTouchControllerEnum::Left,
            ot::OculusTouchVibrationFrequencyEnum::Medium,
            128,
            1.0,
        );
        oculus.Vibrate(
            ot::OculusTouchControllerEnum::Right,
            ot::OculusTouchVibrationFrequencyEnum::Medium,
            128,
            1.0,
        );

        oculus.PollAndSleep(1.0 as u64); // Poll and wait 1 second
    }
}

This is a smaple output from the above program:

Headset is ON your head
Headset Position: (-0.011632837, 0.061689533, 0.34418005), Yaw: 6.269506, Pitch: 37.764984, Roll: 1.5803292
These buttons are down: [RThumb]
These sensors are touched: [RThumb]
Here's a vibration for fun!


Headset is ON your head
Headset Position: (-0.010339707, 0.061480127, 0.34358978), Yaw: 6.575623, Pitch: 37.657368, Roll: 1.8094705
These buttons are down: []
These sensors are touched: [A, B]
Here's a vibration for fun!


Headset is ON your head
Headset Position: (-0.0077772066, 0.06255522, 0.3305807), Yaw: 6.428792, Pitch: 37.119587, Roll: 1.9261029
These buttons are down: []
These sensors are touched: [A, B, RIndexTrigger]
Here's a vibration for fun!


Headset is ON your head
Headset Position: (0.040116116, 0.071848914, 0.05625144), Yaw: 3.89342, Pitch: 28.924469, Roll: 2.6751015
These buttons are down: []
These sensors are touched: []
Here's a vibration for fun!

API Reference

InitOculus

Initialize the Oculus API.

Parameters

  • poll: boolean (Optional): If true, polls the Oculus API after initializing. Defaults to true.

Returns

  • number: Return code from the initialization process.

Poll

Polls the Oculus Touch API for state updates.

Parameters

None

Returns

None

Sleep

Blocks the runtime and waits for the specified length. Useful for sleeping between polls.

Parameters

  • length: number (Optional): Length of time to sleep in seconds. Defaults to 0.1.

Returns

  • Promise<void>: A Promise that resolves after the specified length of time.

PollAndSleep

Combines the Poll() and Sleep() functions.

Parameters

  • length: number (Optional): Length of time to sleep in seconds. Defaults to 0.1.

Returns

  • Promise<void>: A Promise that resolves after the specified length of time.

Wearing

Checks if the user is wearing the headset.

Parameters

None

Returns

  • boolean: True if the user is wearing the headset, false otherwise.

IsPressed

Checks if the specified button was pressed in the current poll. "Pressed" and "Down" are not the same thing.

Parameters

  • button: OculusTouchButtonEnum: The button to check.

Returns

  • boolean: True if the button was pressed, false otherwise.

IsReleased

Checks if the specified button was released in the current poll.

Parameters

  • button: OculusTouchButtonEnum: The button to check.

Returns

  • boolean: True if the button was released, false otherwise.

IsDown

Checks if the specified button is currently held down. "Pressed" and "Down" are not the same thing.

Parameters

  • button: OculusTouchButtonEnum: The button to check.

Returns

  • boolean: True if the button is held down, false otherwise.

IsTouchPressed

Checks if the specified button's capacitor was touched in the current poll. "Pressed" and "Down" are not the same thing.

Parameters

  • sensor: OculusTouchSensorEnum: The sensor to check.

Returns

  • boolean: True if the button's capacitor was touched, false otherwise.

IsTouchReleased

Checks if the specified button's capacitor was released in the current poll.

Parameters

  • sensor: OculusTouchSensorEnum: The sensor to check.

Returns

  • boolean: True if the button's capacitor was released, false otherwise.

IsTouchDown

Checks if the specified button's capacitor is currently being touched. "Pressed" and "Down" are not the same thing.

Parameters

  • sensor: OculusTouchSensorEnum: The sensor to check.

Returns

  • boolean: True if the button's capacitor is being touched, false otherwise.

Reached

Checks whether a specified axis has reached a specified threshold value in between the last poll.

Parameters

  • axis: OculusTouchAxisEnum: The axis to check.
  • value: number: The threshold value to check against.

Returns

  • number: Return code indicating if the axis has reached the threshold. 0 if the threshold wasn't crossed. 1 if the threshold was crossed in the positive direction. -1 if it was crossed in the negative direction.

GetAxis

Returns the value of the specified axis.

Parameters

  • axis: OculusTouchAxisEnum: The axis to query.

Returns

  • number: The current value of the specified axis.

GetButtonsDown

Returns a bitmask of all buttons currently held down. "Pressed" and "Down" are not the same thing.

Parameters

None

Returns

  • number: Bitmask representing buttons currently held down.

GetButtonsDownList

Returns a list of all buttons currently held down. "Pressed" and "Down" are not the same thing.

Parameters

None

Returns

  • OculusTouchButtonEnum[]: List of buttons currently held down.

GetButtonsReleased

Returns a bitmask of all buttons released in the current poll.

Parameters

None

Returns

  • number: Bitmask representing buttons released in the current poll.

GetButtonsReleasedList

Returns a list of all buttons released in the current poll.

Parameters

None

Returns

  • OculusTouchButtonEnum[]: List of buttons released in the current poll.

GetButtonsPressed

Returns a bitmask of all buttons pressed in the current poll. "Pressed" and "Down" are not the same thing.

Parameters

None

Returns

  • number: Bitmask representing buttons pressed in the current poll.

GetButtonsPressedList

Returns a list of all buttons pressed in the current poll. "Pressed" and "Down" are not the same thing.

Parameters

None

Returns

  • OculusTouchButtonEnum[]: List of buttons pressed in the current poll.

GetTouchDown

Returns a bitmask of all buttons whose capacitors are currently being touched. "Pressed" and "Down" are not the same thing.

Parameters

None

Returns

  • number: Bitmask representing buttons whose capacitors are currently being touched.

GetTouchDownList

Returns a list of all buttons whose capacitors are currently being touched. "Pressed" and "Down" are not the same thing.

Parameters

None

Returns

  • OculusTouchSensorEnum[]: List of buttons whose capacitors are currently being touched.

GetTouchPressed

Returns a bitmask of all buttons whose capacitors were touched in the current poll. "Pressed" and "Down" are not the same thing.

Parameters

None

Returns

  • number: Bitmask representing buttons whose capacitors were touched in the current poll.

GetTouchPressedList

Returns a list of all buttons whose capacitors were touched in the current poll. "Pressed" and "Down" are not the same thing.

Parameters

None

Returns

  • OculusTouchSensorEnum[]: List of buttons whose capacitors were touched in the current poll.

GetTouchReleased

Returns a bitmask of all buttons whose capacitors were released in the current poll.

Parameters

None

Returns

  • number: Bitmask representing buttons whose capacitors were released in the current poll.

GetTouchReleasedList

Returns a list of all buttons whose capacitors were released in the current poll.

Parameters

None

Returns

  • OculusTouchSensorEnum[]: List of buttons whose capacitors were released in the current poll.

GetTrigger

Returns the value of a specified trigger.

Parameters

  • hand: OculusTouchHandEnum: The hand (left or right) of the trigger.
  • trigger: OculusTouchTriggerEnum: The trigger (index or hand) to query.

Returns

  • number: The value of the specified trigger.

GetThumbStick

Returns the value of a specified thumbstick's axis.

Parameters

  • hand: OculusTouchHandEnum: The hand (left or right) of the thumbstick.
  • axis: OculusTouchAxisEnum: The axis (x or y) of the thumbstick to query.

Returns

  • number: The value of the specified thumbstick's axis.

Vibrate

Vibrates a specified controller.

Parameters

  • controller: OculusTouchControllerEnum: The controller to vibrate.
  • frequency: OculusTouchVibrationFrequencyEnum (Optional): The vibration frequency. Default is OculusTouchVibrationFrequencyEnum.Medium.
  • amplitude: number (Optional): The amplitude of the vibration, range [0, 255]. Default is 128.
  • length: number (Optional): The length of the vibration in seconds, 0 for infinite. Default is 1.0.

Throws

  • Error: If the amplitude is not in the range [0, 255].

Returns

None

GetYaw

Returns the yaw of a specified controller. Yaw is rotation around the y-axis.

Parameters

  • controller: OculusTouchControllerEnum: The controller to query.

Returns

  • number: The yaw (rotation around the y-axis) of the specified controller.

GetPitch

Returns the pitch of a specified controller. Pitch is rotation around the x-axis.

Parameters

  • controller: OculusTouchControllerEnum: The controller to query.

Returns

  • number: The pitch (rotation around the x-axis) of the specified controller.

GetRoll

Returns the roll of a specified controller. Roll is rotation around the z-axis.

Parameters

  • controller: OculusTouchControllerEnum: The controller to query.

Returns

  • number: The roll (rotation around the z-axis) of the specified controller.

GetPositionX

Returns the x position of a specified controller.

Parameters

  • controller: OculusTouchControllerEnum: The controller to query.

Returns

  • number: The x position of the specified controller.

GetPositionY

Returns the y position of a specified controller.

Parameters

  • controller: OculusTouchControllerEnum: The controller to query.

Returns

  • number: The y position of the specified controller.

GetPositionZ

Returns the z position of a specified controller.

Parameters

  • controller: OculusTouchControllerEnum: The controller to query.

Returns

  • number: The z position of the specified controller.

SetTrackingOrigin

Sets the tracking origin of the headset. This is the point in space that the headset will consider to be the origin (0, 0, 0).

Parameters

  • origin: OculusTouchTrackingOriginEnum: The tracking origin to set.

Returns

None

ResetFacing

Resets the yaw of a specified controller. Yaw is rotation around the y-axis.

Parameters

  • controller: OculusTouchControllerEnum: The controller for which to reset the yaw.

Returns

None

InitvJoy

Initializes the vJoy driver. This must be called before any vJoy functions can be used.

Parameters

  • device: number: The vJoy device number to initialize.

Throws

  • Error: If there is an error during initialization.

Returns

None

SetvJoyAxis

Sets the value of a specified vJoy axis.

Parameters

  • axis: OculusTouchvJoyDeviceEnum: The vJoy axis to set.
  • value: number: The value to set, range [0.0, 1.0].

Returns

None

SetvJoyAxisU

Sets the value of a specified vJoy axis using a different range.

Parameters

  • axis: OculusTouchvJoyDeviceEnum: The vJoy axis to set.
  • value: number: The value to set, range [0.0, 1.0], mapped to [-1.0, 1.0].

Returns

None

SetvJoyButton

Sets the value of a specified vJoy button.

Parameters

  • button: OculusTouchButtonEnum: The vJoy button to set.
  • value: number: The value to set, range [0, 1].

Returns

None

SendRawMouseMove

Sends a raw mouse move event to the host computer.

Parameters

  • x: number: The relative movement in the x direction.
  • y: number: The relative movement in the y direction.
  • z: number: The relative movement in the z direction.

Returns

None

SendRawMouseButtonDown

Sends a raw mouse button down event to the host computer.

Parameters

  • button: OculusTouchRawMouseButtonEnum: The button to press.

Returns

None

SendRawMouseButtonUp

Sends a raw mouse button up event to the host computer.

Parameters

  • button: OculusTouchRawMouseButtonEnum: The button to release.

Returns

None

Dependencies

~0.5–6MB
~23K SLoC