ffexis/obox-controller-vigem
GitHub: ffexis/obox-controller-vigem
该驱动通过对蜗牛 OBox 蓝牙手柄的 HID 协议进行完整逆向工程,将其在 Windows 上模拟为标准 Xbox 360 手柄,解锁全部按键、振动与 LED 功能。
Stars: 0 | Forks: 0
# OBOX Controller ViGEm Driver
**全球首个对蜗牛 OBox 手柄协议的完整逆向工程。**
## 背景
**Snail OBox(蜗牛OBox)** 是一台基于 Android 的国产游戏主机,最终在商业上彻底失败——主机本身几乎没有卖出去。然而,大量配套的蓝牙手柄流入二手市场,价格极其低廉,成为了爱好者们的宝藏。
该手柄可以通过蓝牙连接 Windows(VID `0x0A5C`,PID `0x4502`),但 Windows 无法正常使用它:
- **LT / RT 扳机** 无法正常工作
- **SELECT / START** 按键缺少正确映射
- **LED 控制** 和 **振动马达** 完全无法访问
本项目是 **全球首个也是唯一一个** 对 OBox 手柄 HID 协议的完整逆向工程,记录了手柄的全部功能——包括 LED 控制(RGB、HOME 指示灯、消费区)和双马达振动。通过本驱动,你可以在 Windows 上解锁手柄的 **全部功能**。
## 功能
- **Col01 Gamepad 接口** — 按钮、模拟摇杆(Y 轴反转以符合 XInput 规范)、模拟扳机(LT/RT)、支持斜向的 D-pad
- **Col03 Consumer 接口** — Back / Start / Guide 按键映射(0x224→BACK, 0x040→START, 0x0223→GUIDE),使用集合差集检测以应对槽位顺序变化
- **[ViGEmBus](https://github.com/nefarius/ViGEmBus) Xbox 360 虚拟手柄转发** — 向 Windows 呈现标准 Xbox 360 手柄
- **振动回调** — ViGEmBus 振动通知回传至物理手柄(HID Output Report 0xB3,双马达,脉冲模式 + 定时模式)
- **LED 控制** — RGB LED、HOME 键指示灯、消费区 LED(HID Output Report 0xB3)
- **[HidHide](https://github.com/nefarius/HidHide) 集成** — 自动注册本应用并隐藏物理手柄,使游戏只能看到虚拟 Xbox 360;配置幂等,保守处理全局 cloak 状态
- **蓝牙断开 / 自动重连** — 检测 HID 读取错误,断开虚拟 Xbox 360,等待手柄重新出现后自动重连;启动时若手柄未配对也会进入等待状态
- **系统托盘模式** — 后台运行,托盘图标显示连接状态/MAC地址,LED控制菜单,Windows通知提示连接事件
- **调试模式** — `--debug-keys`(实时打印 Col01/Col03 输入)和 `--debug-output`(交互式振动/LED 测试菜单)
- **CLI 子命令** — `--hidhide-status` / `--hidhide-disable` 用于查看和撤销 HidHide 配置
## 项目结构
```
.
├── src/ # Rust implementation (main project)
│ ├── main.rs # Entry point, session loop, debug modes
│ ├── hidhide.rs # HidHide CLI integration
│ ├── tray.rs # System tray, LED control, notifications
│ └── boxicons-joystick-filled.ico # Tray icon
├── docs/ # Protocol documentation
│ ├── HID_PROTOCOL.md # English
│ └── HID_PROTOCOL_cn.md # 中文
├── Cargo.toml
├── build.rs # Windows icon embedding
└── LICENSE
```
## 构建
```
cargo build --release
```
## 运行
```
cargo run --release
```
## CLI
```
obox-controller-driver Run in tray mode (auto when double-clicked)
obox-controller-driver --cli Run in CLI mode
obox-controller-driver --hidhide-status Show current HidHide configuration
obox-controller-driver --hidhide-disable Unhide OBOX from HidHide (keeps global cloak state)
obox-controller-driver --debug-keys Real-time Col01/Col03 input dump
obox-controller-driver --debug-output Interactive vibration/LED test menu
obox-controller-driver -h, --help Show help
```
### 托盘模式
双击可执行文件启动(无控制台)时,驱动以托盘模式运行:
- **Windows 通知** — 显示"Waiting for connection"、"Connected successfully!"和"Disconnected"
- **托盘菜单** — 显示连接状态、手柄MAC地址、LED控制选项
- **LED 控制** — RGB状态灯(红/绿/蓝 ON/OFF)、消费区LED(ON/OFF)、HOME键LED(ON/OFF)
- **单例运行** — 防止多个实例同时运行
### CLI 模式
从终端启动(有控制台)时,驱动以 CLI 模式运行,输出完整日志。使用 `--cli` 参数强制进入 CLI 模式。
## 协议文档
完整的 HID 协议规范见 [docs/HID_PROTOCOL.md](docs/HID_PROTOCOL.md)(English)和 [docs/HID_PROTOCOL_cn.md](docs/HID_PROTOCOL_cn.md)(中文)。
## 致谢
本项目依赖以下优秀的开源组件:
- **[ViGEmBus](https://github.com/nefarius/ViGEmBus)** — 虚拟手柄模拟总线驱动,由 Nefarius Software Solutions e.U. 开发
- **[HidHide](https://github.com/nefarius/HidHide)** — 游戏输入设备隐藏方案,由 Nefarius Software Solutions e.U. 开发
- **[hidapi-rs](https://github.com/Osspial/hidapi-rs)** — hidapi 库的 Rust 绑定
- **[vigem-client-rs](https://github.com/timniederhausen/vigem-client-rs)** — ViGEm 客户端 SDK 的 Rust 绑定
- **[tray-icon](https://github.com/tauri-apps/tray-icon)** — 跨平台系统托盘图标库
- **[muda](https://github.com/tauri-apps/muda)** — 跨平台菜单库
- **[winit](https://github.com/rust-windowing/winit)** — 跨平台窗口创建和管理库
- **[windows-rs](https://github.com/microsoft/windows-rs)** — Microsoft 官方的 Windows API Rust 绑定
- **[Boxicons](https://boxicons.com/)** — 精美的开源图标库(用于托盘图标)
## 许可证
[MIT](LICENSE)
# OBOX Controller ViGEm Driver
**全球首个对蜗牛 OBox 手柄协议的完整逆向工程。**
## 背景
**Snail OBox(蜗牛OBox)** 是一台基于 Android 的国产游戏主机,最终在商业上彻底失败——主机本身几乎没有卖出去。然而,大量配套的蓝牙手柄流入二手市场,价格极其低廉,成为了爱好者们的宝藏。
该手柄可以通过蓝牙连接 Windows(VID `0x0A5C`,PID `0x4502`),但 Windows 无法正常使用它:
- **LT / RT 扳机** 无法正常工作
- **SELECT / START** 按键缺少正确映射
- **LED 控制** 和 **振动马达** 完全无法访问
本项目是 **全球首个也是唯一一个** 对 OBox 手柄 HID 协议的完整逆向工程,记录了手柄的全部功能——包括 LED 控制(RGB、HOME 指示灯、消费区)和双马达振动。通过本驱动,你可以在 Windows 上解锁手柄的 **全部功能**。
## 功能
- **Col01 Gamepad 接口** — 按钮、模拟摇杆(Y 轴反转以符合 XInput 规范)、模拟扳机(LT/RT)、支持斜向的 D-pad
- **Col03 Consumer 接口** — Back / Start / Guide 按键映射(0x224→BACK, 0x040→START, 0x0223→GUIDE),使用集合差集检测以应对槽位顺序变化
- **[ViGEmBus](https://github.com/nefarius/ViGEmBus) Xbox 360 虚拟手柄转发** — 向 Windows 呈现标准 Xbox 360 手柄
- **振动回调** — ViGEmBus 振动通知回传至物理手柄(HID Output Report 0xB3,双马达,脉冲模式 + 定时模式)
- **LED 控制** — RGB LED、HOME 键指示灯、消费区 LED(HID Output Report 0xB3)
- **[HidHide](https://github.com/nefarius/HidHide) 集成** — 自动注册本应用并隐藏物理手柄,使游戏只能看到虚拟 Xbox 360;配置幂等,保守处理全局 cloak 状态
- **蓝牙断开 / 自动重连** — 检测 HID 读取错误,断开虚拟 Xbox 360,等待手柄重新出现后自动重连;启动时若手柄未配对也会进入等待状态
- **系统托盘模式** — 后台运行,托盘图标显示连接状态/MAC地址,LED控制菜单,Windows通知提示连接事件
- **调试模式** — `--debug-keys`(实时打印 Col01/Col03 输入)和 `--debug-output`(交互式振动/LED 测试菜单)
- **CLI 子命令** — `--hidhide-status` / `--hidhide-disable` 用于查看和撤销 HidHide 配置
## 项目结构
```
.
├── src/ # Rust 实现(主项目)
│ ├── main.rs # 入口、session 循环、调试模式
│ ├── hidhide.rs # HidHide CLI 集成
│ ├── tray.rs # 系统托盘、LED控制、通知
│ └── boxicons-joystick-filled.ico # 托盘图标
├── docs/ # 协议文档
│ ├── HID_PROTOCOL.md # English
│ └── HID_PROTOCOL_cn.md # 中文
├── Cargo.toml
├── build.rs # Windows 图标嵌入
└── LICENSE
```
## 构建
```
cargo build --release
```
## 运行
```
cargo run --release
```
## CLI
```
obox-controller-driver 托盘模式运行(双击自动进入)
obox-controller-driver --cli CLI模式运行
obox-controller-driver --hidhide-status 查看 HidHide 当前配置
obox-controller-driver --hidhide-disable 从 HidHide 中取消隐藏 OBOX(保留全局 cloak 状态)
obox-controller-driver --debug-keys 实时打印 Col01/Col03 输入
obox-controller-driver --debug-output 交互式振动/LED 测试菜单
obox-controller-driver -h, --help 显示帮助
```
### 托盘模式
双击可执行文件启动(无控制台)时,驱动以托盘模式运行:
- **Windows 通知** — 显示"Waiting for connection"、"Connected successfully!"和"Disconnected"
- **托盘菜单** — 显示连接状态、手柄MAC地址、LED控制选项
- **LED 控制** — RGB状态灯(红/绿/蓝 ON/OFF)、消费区LED(ON/OFF)、HOME键LED(ON/OFF)
- **单例运行** — 防止多个实例同时运行
### CLI 模式
从终端启动(有控制台)时,驱动以 CLI 模式运行,输出完整日志。使用 `--cli` 参数强制进入 CLI 模式。
## 协议文档
完整的 HID 协议规范见 [docs/HID_PROTOCOL.md](docs/HID_PROTOCOL.md)(English)和 [docs/HID_PROTOCOL_cn.md](docs/HID_PROTOCOL_cn.md)(中文)。
## 致谢
本项目依赖以下优秀的开源组件:
- **[ViGEmBus](https://github.com/nefarius/ViGEmBus)** — 虚拟手柄模拟总线驱动,由 Nefarius Software Solutions e.U. 开发
- **[HidHide](https://github.com/nefarius/HidHide)** — 游戏输入设备隐藏方案,由 Nefarius Software Solutions e.U. 开发
- **[hidapi-rs](https://github.com/Osspial/hidapi-rs)** — hidapi 库的 Rust 绑定
- **[vigem-client-rs](https://github.com/timniederhausen/vigem-client-rs)** — ViGEm 客户端 SDK 的 Rust 绑定
- **[tray-icon](https://github.com/tauri-apps/tray-icon)** — 跨平台系统托盘图标库
- **[muda](https://github.com/tauri-apps/muda)** — 跨平台菜单库
- **[winit](https://github.com/rust-windowing/winit)** — 跨平台窗口创建和管理库
- **[windows-rs](https://github.com/microsoft/windows-rs)** — Microsoft 官方的 Windows API Rust 绑定
- **[Boxicons](https://boxicons.com/)** — 精美的开源图标库(用于托盘图标)
## 贡献者
- **TRAE (by ByteDance)** — AI 编程助手
## 许可证
[MIT](LICENSE)
标签:HID协议, 云资产清单, 可视化界面, 游戏外设, 网络安全监控, 蓝牙, 逆向工程, 通知系统, 驱动开发