SupperTomato/d06-pro-ring-mouse-toolkit
GitHub: SupperTomato/d06-pro-ring-mouse-toolkit
为 D06 Pro 指环鼠标提供 Android 输入解码 SDK 与 Linux 抓包检查工具,帮助开发者和用户在移动端及桌面端理解、测试和重新映射该设备的按键与手势输入。
Stars: 0 | Forks: 0
# D06 Pro 指环鼠标工具包
语言:English | [简体中文](README.zh-CN.md)
本项目旨在帮助大家了解并在 Android 和 Linux 上使用 D06 Pro 指环鼠标。
简单来说:D06 Pro 的行为就像一个普通的蓝牙或 USB 鼠标。本仓库记录了每个按键和手势发送的信号,提供了一个 Android SDK/示例应用,并包含用于检查指环鼠标状态的 Linux 工具。
有关 SDK 各个部分、命令和事件所能实现功能的通俗说明,请参阅 [FUNCTIONS.md](FUNCTIONS.md) 或 [简体中文](FUNCTIONS.zh-CN.md)。
有关 SDK 性能优化建议,请参阅 [PERFORMANCE.md](PERFORMANCE.md) 或 [简体中文](PERFORMANCE.zh-CN.md)。
## 适用人群
- 想了解各按键实际功能的 D06 Pro 用户。
- 希望在手机或平板上测试指环鼠标的 Android 用户。
- 希望在应用内解码 D06 输入的 Android 应用开发者。
- 希望检查或转换 D06 输入事件的 Linux 用户。
- 需要捕获的 HID/BLE 证据的逆向工程用户。
## 当前状态
已支持功能:
- 左键、右键和中键点击解码
- 上/下滚动解码
- 触控板移动方向映射
- 触控板点击/双击观察
- Android 输入解码器 SDK
- Android 示例应用
- Linux `evdev` 解码器
- Linux `hidraw` 和 BLE/GATT 检查工具
- Linux 上的 USB 接收器检测
仍有限制:
- 原生 Android 应用无法在全局范围内替换所有的硬件鼠标事件
- 在 HID 层级上,触控板点击与物理左键点击可能看起来完全相同
- 隐藏的按键 4/5、键盘模式和媒体模式仍需更多真机抓包数据
- 故意不支持对厂商/Telink 的写入操作
## 简易 Android 用法
用于常规测试:
1. 通过蓝牙将 D06 Pro 与您的 Android 设备配对,或通过 USB-OTG 连接 2.4 GHz 接收器。
2. 编译并安装示例应用:
```
cd android-sdk
./gradlew :d06-sample:installDebug
```
3. 打开 **D06 SDK Sample**。
4. 按下按键并滑动触控板。应用将显示解码后的 D06 事件。
目前,本仓库中尚未提供打包好的应用发行版(APK)。您仍然需要使用 Gradle/Android Studio,或者请他人为您编译示例 APK。
## 简易 Linux 用法
列出可能的 D06 输入设备:
```
python3 tools/linux/d06_evdev.py --list
```
打印解码后的事件:
```
python3 tools/linux/d06_evdev.py --seconds 30
```
如果 Linux 阻止了对 `/dev/input/event*` 的访问,请使用 `sudo` 运行、加入 `input` 用户组,或者安装位于 `tools/linux/99-d06-pro.rules` 的 udev 规则模板。
该 Linux 工具仅打印事件。它不会接管鼠标,也不会阻止指针的正常移动。
## 按键和手势映射表
| D06 动作 | 主机看到的内容 | SDK 事件 |
| --- | --- | --- |
| 左键点击 | 鼠标左键按下/抬起 | `LeftDown`, `LeftUp` |
| 右键点击 | 鼠标右键按下/抬起 | `RightDown`, `RightUp` |
| 中键点击 | 鼠标中键按下/抬起 | `MiddleDown`, `MiddleUp` |
| 向上滚动 | 鼠标滚轮正向步进 | `Scroll(Up, units)` |
| 向下滚动 | 鼠标滚轮负向步进 | `Scroll(Down, units)` |
| 触控板向右 | 相对 `+X` 移动 | `MousepadMove(+dx, 0)` |
| 触控板向左 | 相对 `-X` 移动 | `MousepadMove(-dx, 0)` |
| 触控板向上 | 相对 `-Y` 移动 | `MousepadMove(0, -dy)` |
| 触控板向下 | 相对 `+Y` 移动 | `MousepadMove(0, +dy)` |
| 触控板点击 | 与左键点击模式相同 | 仅在启用了点击检测时触发 `MousepadTap` |
| 触控板双击 | 重复的左键点击对 | 重复的点击/按键事件 |
相关说明书可能会描述诸如“下一个视频”、“点赞”或“相机”之类的应用操作。在设备底层,这些通常都是普通的鼠标、键盘或媒体控制事件。这些事件的具体含义由应用自行决定。
## 面向开发者的 Android SDK
SDK 位于 `android-sdk/` 目录下。
| 模块 | 用途 |
| --- | --- |
| `d06-core` | 纯 Kotlin 编写的 D06 事件模型和映射器 |
| `d06-input` | Android `MotionEvent` / `KeyEvent` 解码器 |
| `d06-ble` | BLE/GATT 元数据和电量助手 |
| `d06-remapper` | 功能受限的 AccessibilityService 重映射助手 |
| `d06-sample` | 用于真机测试的示例应用 |
编译所有内容:
```
cd android-sdk
./gradlew test assembleDebug
```
发布到 Maven local:
```
cd android-sdk
./gradlew publishToMavenLocal
```
如需基于本地源码开发,可以通过邻近的克隆仓库引入这些模块:
```
include(":d06-core")
project(":d06-core").projectDir = file("../d06-pro-ring-mouse-toolkit/android-sdk/d06-core")
include(":d06-input")
project(":d06-input").projectDir = file("../d06-pro-ring-mouse-toolkit/android-sdk/d06-input")
include(":d06-ble")
project(":d06-ble").projectDir = file("../d06-pro-ring-mouse-toolkit/android-sdk/d06-ble")
```
基础解码器用法:
```
class MainActivity : Activity() {
private val d06 = D06Input(
D06InputConfig(detectMousepadTap = true)
) { event ->
// Handle LeftDown, Scroll, MousepadMove, MousepadTap, etc.
}
override fun dispatchGenericMotionEvent(ev: MotionEvent): Boolean {
return d06.dispatch(ev) || super.dispatchGenericMotionEvent(ev)
}
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
return d06.dispatch(event) || super.dispatchKeyEvent(event)
}
}
```
有关完整的 SDK 用法、重映射预设、诊断以及 BLE 权限说明,请参阅 [android-sdk/README.md](android-sdk/README.md)。
## Linux 和 Android 抓包工具
Linux:
```
python3 tools/linux/d06_evdev.py --list
python3 tools/linux/d06_evdev.py --seconds 10
python3 tools/linux/d06_hid.py --list
sudo python3 tools/linux/d06_hid.py --dump --out artifacts/linux/hid/hid_caps.json
python3 tools/linux/dump_d06_gatt.py --address AA:BB:CC:DD:EE:FF --out-dir artifacts/linux/gatt
```
在 Linux 主机上通过 USB 或无线调试连接 Android:
```
tools/android/d06_android_input.sh list
tools/android/d06_android_input.sh capture --seconds 10 --out artifacts/android/getevent/android_getevent.txt
tools/android/d06_android_input.sh dump-input --out artifacts/android/dumpsys/input.txt
```
## 仓库目录说明
| 路径 | 包含内容 |
| --- | --- |
| `android-sdk/` | Android SDK 模块和示例应用 |
| `tools/` | Linux 和 Android 抓包工具 |
| `artifacts/` | 来自 Android、Linux 以及历史主机抓包的分组数据 |
| `FUNCTIONS.md` / `FUNCTIONS.zh-CN.md` | 工具包功能和特性的通俗指南 |
| `PERFORMANCE.md` / `PERFORMANCE.zh-CN.md` | SDK 性能优化指南 |
| `D06_PRO_RE.md` | 详细的逆向工程笔记 |
| `docs/research/` | SDK 功能研究 |
| `docs/superpowers/` | 实现规格和计划 |
## 安全与隐私
- 本项目不会刷入固件。
- 本项目不会对厂商/Telink 服务执行写入操作。
- 抓包文件可能包含设备名称、硬件 ID 或蓝牙地址。
- Android 重映射机制有意设计得比较保守,因为原生 Android 系统不允许普通应用在系统范围内替换所有的硬件鼠标输入。
标签:Android, DSL, 云资产清单, 后台面板检测, 硬件工具包, 蓝牙, 输入设备, 逆向工具, 逆向工程, 鼠标