Wasabules/OpenPeats

GitHub: Wasabules/OpenPeats

OpenPeats 是一个开源项目,通过逆向重构的蓝牙协议让用户在桌面和 Android 上无需官方 App 即可控制 SoundPEATS 耳机的各项功能。

Stars: 0 | Forks: 0

# OpenPeats 自由控制 **SoundPEATS** 耳机 —— ANC、均衡器、多点连接、 电池状态 —— 无需使用厂商的移动应用程序。 在 Ubuntu 24.04 环境下,基于 **SOUNDPEATS H3**(固件 `S5_20250605_V0.4.9`) 开发并验证。 ## 目录 | 文件夹 | 功能 | |---|---| | [`PROTOCOL.md`](PROTOCOL.md) | 协议规范,包含各项的验证状态 | | [`peatsaudio/`](peatsaudio/) | 桌面应用程序(Wails + Go + Svelte) | | [`android/`](android/) | Android 应用程序(Kotlin + Jetpack Compose) | | [`probe/`](probe/) | 用于探索协议的命令行探测工具 | 该协议基于同一份规范分别使用 Go 和 Kotlin 实现了两次。这是刻意为之: 约 350 行逻辑代码的移植成本很低,从而使每个平台都能保留其原生的 传输方式,无需额外的抽象层。`PROTOCOL.md` 仍然是唯一的参考标准。 ``` cd android ANDROID_HOME=$HOME/Android/Sdk ./gradlew :app:assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk ``` 可复用的核心部分是 [`peatsaudio/internal/peats`](peatsaudio/internal/peats): 纯协议实现(数据帧、操作码、均衡器编码)以及 RFCOMM/SPP 传输,且不依赖任何接口。 ## 功能 - 降噪:关闭 / ANC / 通透模式,外加 4 种子模式 (自适应、室内、室外、交通)以及 2 级通透度 - 5/8/10 段参量均衡器,支持曲线调整和 逐频段的 Q 值调节 - LDAC 与多点连接 —— 作为互斥选项呈现,因为 固件在多点连接激活时会切断 LDAC - 左耳 / 右耳 / 充电盒电量,并在低于阈值时提供桌面通知 - 游戏模式、LE Audio、禁用触控、语音提示 - 读取触控按键映射 - 用于探索的原始数据帧控制台 应用程序会在启动时查询每项功能,并将未响应的部分置灰: 因此它能够自适应仅暴露部分功能子集的设备型号。 ## 快速开始 ``` cd peatsaudio wails build -tags webkit2_41 # Ubuntu 24.04 : webkit2gtk-4.1 ./build/bin/peatsaudio ``` 耳机必须已完成配对并处于充电盒外。 ## 平台 协议运行在 RFCOMM(Bluetooth Classic,SPP profile)上。各系统间仅 传输层有所不同;核心逻辑是共用的。 | 系统 | 传输方式 | 状态 | |---|---|---| | Linux | `AF_BLUETOOTH` / `BTPROTO_RFCOMM` | ✅ 已在硬件上验证 | | Android | `BluetoothSocket` (Kotlin) | ✅ 已在硬件上验证 | | Windows | Winsock `AF_BTH` | ⚠️ 已编写,**从未测试** | | macOS | IOBluetooth | ❌ 待实现 —— 见下文 | | iOS | — | 🚫 无法实现 | **macOS** 是可行的,但需要通过 cgo 桥接到 IOBluetooth,这是一个 使用基于 delegate 的异步 API 的 Objective-C framework:它不像 Linux 和 Windows 那样提供 socket API,因此代码无法完全 照搬另外两种传输方式的实现。 **Android** 运行在支持 `AF_BLUETOOTH` 的 Linux 内核上,但 SELinux 和 权限模型阻止了 NDK 直接使用原始 Bluetooth socket。受支持的 实现路径是 Kotlin 端的 `android.bluetooth.BluetoothSocket`。 **iOS** 无论使用何种 framework 均无法实现:SPP profile 在该平台上 仅限经过 MFi 认证的配件使用,而这些耳机并不符合该条件。 ## 逆向工程状态 该协议是通过对官方 Android 应用程序进行分析后重构的,随后 在真实硬件上**逐帧进行了验证**。`PROTOCOL.md` 系统地区分了 在线路上已确认的行为与仍属推测的部分。 目前仍有两点未经验证,并在界面中已作如下标注: - 触控映射的**写入**(不过读取功能正常); - Android App 的触控演示模式:命令能收到确认回执,但 按键操作永远不会上报 —— 触控是由固件在本地处理的。 ## 法律声明 本项目属于**互操作性**范畴:它允许合法购买的硬件与 厂商未正式支持的操作系统协同工作。出于此目的的 逆向工程受欧洲指令 2009/24/CE(第 6 条)明确允许,在美国则受 17 U.S.C. §1201(f) 保护。 因此,本仓库**不包含也绝不会包含**: - 官方应用程序的 APK 或其任何组成部分; - 反编译的代码、smali 或提取的资源文件; - 厂商的商标、图标或图形元素。 此处发布的所有代码均是基于对观察到的行为描述 独立编写的。这些内容已通过 [`.gitignore`](.gitignore) 排除。 ## 开源许可证 MIT —— 见 [`LICENSE`](LICENSE)。
标签:Android应用, EVTX分析, Go, Kotlin, Ruby工具, SBOM分析, Svelte, 日志审计, 桌面应用, 蓝牙控制, 音频设备