DualSense
Rust programmatic wrapper over HID messages sent and received by the PS5 DualSense controller. All communication is done via callback functions that are ran in a separate thread.
Usage
Read
Add callback functions to detect when properties change.
Log details about the left and right sticks' positions:
use dualsense_rs::DualSense;
fn main() {
let mut controller = DualSense::new();
controller.on_left_pad_x_changed(&|lpx| println!("left pad x: {lpx}"));
controller.on_left_pad_x_changed(&|lpx| {
if lpx > 127 {
println!("left pad x in right region: {lpx}")
}
});
controller.on_left_pad_y_changed(&|lpy| println!("left pad y: {lpy}"));
controller.on_right_pad_x_changed(&|rpx| println!("right pad x: {rpx}"));
let handle = controller.run();
controller.on_right_pad_y_changed(&|rpy| println!("right pad y: {rpy}"));
handle.join().ok();
}
Write
Output values are stored in an internal cache and will be sent in the following read/write cycle. Packets will
not be sent if nothing changed.
use dualsense_rs::DualSense;
fn main() {
let mut controller = DualSense::new();
controller.set_left_trigger_effect(TriggerEffect::Mode1);
let handle = controller.run();
controller.set_light_red(255);
handle.join().ok();
}
Examples
Try examples for:
- log_all -> log values for all buttons, analog sticks and touchpad
- sensors -> log values for the gyroscope and accelerometer
- triggers -> log values for the triggers and change their modes
cargo run --example <example>