【免费下载链接】OpenSplitDeck

A steam deck-like controller made from a mix of off the shelf parts and 3d printed parts with custom hardware and firmware

项目地址: https://gitcode.com/gh_mirrors/op/OpenSplitDeck
点击查看 免费下载

OpenSplitDeck 是一款自制的 Steam Deck 风格模块化无线手柄,由左右两半独立模块 + USB Dongle 组成,通过 DS4(PS4 手柄)模式输出触摸板与 6 轴陀螺仪数据,让你用 Steam Input 手势层、陀螺仪瞄准玩到 PC 大作。本指南带你完整掌握 DS4 模式原理、触摸板手势映射与陀螺仪校准方法。


🎮 快速了解 OpenSplitDeck:拆成两半的 Steam Deck 手柄

OpenSplitDeck 的设计灵感来自 Steam Deck 和 Steam Controller:把一只手柄拆成左半和右半两个独立模块,通过 2.4GHz 无线链路(Enhanced ShockBurst 协议)汇聚到一个 USB Dongle,再由 Dongle 向电脑输出标准 HID 信号。

整个系统由 3 个固件模块构成:

模块位置职责
手柄半模块 ×2firmware/controller/采集按键、摇杆、扳机、触摸板、IMU,无线发送
USB Donglefirmware/hid-custom/接收无线数据,模拟 DS4 手柄 + 触摸板 + IMU 报告
构建资料Docs/、hardware/构建指南 PDF 与 PCB 工程文件

几个核心硬件:每半各一颗 nRF52840 主控(Seeed XIAO BLE 板)、一块 Azoteq IQS7211E 电容触摸板、一个 DRV2605 触觉电机、一块 128×32 OLED 小屏(定义见 display.h),以及 6 轴 IMU(LSM6DS3TR-C)。

💡 左右两半之间还通过磁吸 Pogo Pin 触点连接,目前主要用于充电(见 README.md)。


🔌 DS4 模式:为什么选择模拟 PS4 手柄?

模拟 DS4 而不是 Steam Deck 手柄的原因

在 README.md 中作者解释得直白:模拟 DS4(DualShock 4) 可以原生启用 Steam Input 的触摸板手势层,而让系统识别为 Steam Deck 手柄的难度远超预期。因此 Dongle 在 USB 层面把自己伪装成一只标准 PS4 手柄:

  • 设备 PID 被设置为 0x05C4(PS4 手柄编号),见 usb_hid_composite.c
  • 完整实现了 DS4 的复合 HID 报告:游戏手柄(Report ID 1)+ 触摸板坐标 + 6 轴 IMU 原始数据,报告结构见 usb_hid_composite.c
  • 为兼容 DS4Windows,还实现了 MAC 地址等 Feature Report 应答(usb_hid_composite.c)

无线链路如何保证低延迟

手柄半模块与 Dongle 之间的通信经过精心调优:

  • 2.4GHz 信道 50、2Mbps 速率、8dBm 发射功率,配置见 controller_esb.c
  • 左右两半的发送周期错开 2ms,避免空中碰撞,见 main.c
  • Dongle 通过 ACK payload 动态告知下一个包的发送间隔(默认 4ms),Dongle 侧以 250Hz(4ms) 向电脑输出 DS4 报告,见 main.c

接上电脑后的体验

  • Windows:DS4Windows 可识别为标准 PS4 手柄,游戏内直接按 PS4 手柄操作
  • Steam:识别为 DualShock 4,即可在 Steam Input 中启用触摸板层、陀螺仪层
  • Linux:内核自带 ds4 触摸板扩展支持,同样可用

震动反馈(Rumble)是怎么实现的

DS4 的输出报告(0x05)会把震动强度回传给 Dongle,Dongle 再经 ACK payload 下发到两半手柄,由 DRV2605 电机执行震动效果。固件按强度分级调整脉冲频率(12/48/72/108ms 四档),实现从轻柔到强烈的平滑过渡,实现见 main.c。


👆 触摸板手势操作:双触摸板如何映射成一块 DS4 板

DS4 只有一块触摸板,而 OpenSplitDeck 左右各有一块 IQS7211E 触摸板(1024×1024 分辨率,驱动见 IQS7211E.c)。固件的巧妙做法是:把左右两块板合并到虚拟 DS4 触摸板的左、右两个区域。

  • 右半触摸板 → 触摸点 1,坐标映射到右半区(+959 偏移),见 main.c
  • 左半触摸板 → 触摸点 2,坐标映射到左半区,见 main.c
  • 每帧还对坐标做 0.7 插值平滑,消除手指移动时的跳变,见 main.c

触摸板点击(Trackpad Click)

每半手柄的触摸板区域下方有物理按压开关(pad_click),按下时:

  1. 在 DS4 报告里置位"Touchpad"按键位,见 main.c
  2. 同时触发 DRV2605 的 SHARP_TICK_2 短促触感,模拟真实 DS4 的点击手感(main.c)

在 Steam Input 中玩转手势

由于输出的是标准 DS4 触摸板数据,你可以:

  • 单指拖动:映射为鼠标移动 / 视角转动
  • 双指滑动:Steam 手势层的标准双指操作(左右翻页、滚动等)
  • 触摸板点击:作为右键 / 确认动作
  • 触摸板 + 手指按压:组合触发高级手势

⚠️ 目前固件尚未实现独立的"gesture/tap/mouse/gamepad 可配置模式"(README 开发清单中标记为未完成),手势行为主要依赖 Steam Input 或系统驱动层面的配置。


🌀 6 轴陀螺仪:IMU 数据如何进入游戏

传感器与数据处理管线

右半手柄搭载 LSM6DS3TR-C 6 轴 IMU,数据链路为:

LSM6DS3TR-C (104Hz 采样)
  → 校准偏移扣除 + 静止漂移补偿 + 死区滤波
  → 指数低通滤波(alpha = 0.4)
  → ESB 无线上传至 Dongle
  → 写入 DS4 报告的 16 位 signed 陀螺/加速度字段
  • 采样率与滤波参数定义在 imu_driver.c
  • 漂移补偿:手柄静止约 20 个采样后,固件用 EMA(系数 0.01)缓慢学习陀螺零偏,静止判定容差 ±0.8 m/s²,见 imu_driver.c
  • 只有右半手柄的 IMU 数据被采用(DS4 报告只有一个 IMU 通道),且 Y 轴做了反向处理,见 main.c

陀螺仪校准:3 秒组合键

校准由"摇杆点击 + 触摸板点击"同时长按 3 秒触发,屏幕显示校准进度,完成后写入 Flash 保存。相关逻辑见 main.c,数据持久化由 controller_storage.c 负责。

校准步骤:

  1. 开机后等待屏幕显示状态页(电量 + L/R 标识)
  2. 同时按住摇杆点击键与触摸板按键约 3 秒
  3. 屏幕切换到校准页:先保持手柄不动(归中阶段),再缓慢转动(运动阶段)
  4. 完成后自动返回状态屏,校准值永久保存

典型使用场景

  • Steam 陀螺仪瞄准:FPS 游戏中微操修正,灵敏度建议在 0.1–0.3 之间
  • 视角平滑:配合摇杆使用,比纯鼠标更细腻
  • 体感操作:如《只狼》《对马岛之魂》的体感瞄准

🕹️ 按键布局与隐藏组合键速查

左右两半按键在 Dongle 端被映射为 DS4 标准按键(位映射见 button_driver.c):

物理按键(半)DS4 输出说明
十字键(左)DS4 十字键四方向 + 斜向 8 向支持
4 个面键(右)A / B / X / Y右半的面键区
摇杆 ×2左右摇杆4 点滑动平均 + 指数平滑降噪
扳机 ×2L2 / R2模拟量,20% 死区
摇杆点击 ×2L3 / R3也可参与校准组合键
肩键 ×2L1 / R1
触摸板按压 ×2Touchpad 键带触感反馈
开始 / 选择(右/左)Start / Select
Mode 键(左右任一)PS 键长按还可调出模拟量调试屏

⚡ 实用组合键

组合键效果
开始 + 肩键 长按 5 秒进入低功耗睡眠(main.c)
摇杆点击 + 触摸板点击 长按 3 秒执行 IMU/摇杆校准
Mode 键 长按OLED 屏显示模拟量调试数据
静置 5 分钟自动睡眠(power_mgmt_driver.c)

睡眠中任意唤醒键(Mode 键等)按下即可立即恢复,外设状态自动保存与恢复。


📚 遇到问题怎么办?

  • 触摸板初始化慢/失败:固件内置最多 7 秒的 ATI(自适应阈值初始化)超时与 4 次写寄存器重试,见 main.c,重启手柄半模块通常可恢复
  • 无线丢包:固件每 5 秒统计 Radio busy 比率并告警;保持 Dongle 与手柄距离 < 1 米、远离 USB 3.0 设备干扰
  • 摇杆漂移:先执行一次完整校准组合键;触发调试屏(长按 Mode)查看原始 ADC 值排查硬件
  • DS4 不被识别:确认 Windows 端已装 DS4Windows,或 Steam 中手动指定为 DualShock 4

🛠️ 更多资料入口

OpenSplitDeck 目前处于 v0.2 早期阶段,仍在快速迭代——期待可配置手势模式、电容摇杆与更完整的 UI 配置工具加入。如果你想打造一只带触摸板与体感瞄准的"PC 版 Steam Deck"手柄,这套完全开源的硬件 + 固件方案值得动手一试!🚀

【免费下载链接】OpenSplitDeck

A steam deck-like controller made from a mix of off the shelf parts and 3d printed parts with custom hardware and firmware

项目地址: https://gitcode.com/gh_mirrors/op/OpenSplitDeck
点击查看 免费下载
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐