#gamepad #hid #controller #wrapper #messages #ps5 #dual-sense

dualsense-rs

Rust 程序包装库,用于处理 PS5 DualSense 控制器发送和接收的 HID 消息

6 个版本 (破坏性更新)

0.6.0 2024年3月23日
0.5.0 2024年2月19日
0.4.0 2024年2月4日
0.3.0 2024年1月8日
0.1.0 2023年12月18日

#219硬件支持

MIT 许可证

60KB
1.5K SLoC

DualSense

Rust 程序包装库,用于处理 PS5 DualSense 控制器发送和接收的 HID 消息。允许支持在给定时间间隔内连续按下的同时按键或组合(wip)。

用法

读取

添加回调函数以检测属性变化。

记录左右摇杆的位置详细信息

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();
    // can also add after the `.run()` call
    controller.on_right_pad_y_changed(&|rpy| println!("right pad y: {rpy}"));
    // make sure to join the thread so the program doesn't stop immediately
    handle.join().ok();
}

写入

输出值存储在内部缓存中,将在下一个读写周期中发送。如果没有任何变化,则不会发送数据包。


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();
}

示例

尝试以下示例:

  • log_all -> 记录所有按钮、模拟摇杆和触摸板的价值
  • sensors -> 记录陀螺仪和加速度计的值
  • triggers -> 记录扳机的值并更改它们的状态
cargo run --example <example>

路线图

目前以下功能是优先考虑的

  • 蓝牙支持
  • CRC 创建和验证
  • 充电状态
  • 改进 API
    • 使回调返回具有实用方法的结构体
    • 修复在回调中尝试更新局部变量时的借用问题
  • 组合
    • 添加在时间框架内检测多个按键被按下的可能性

依赖项

~0.4–11MB
~69K SLoC