用 Android 手机,把喜德盛 AD350 功率计的数据桥接给迈金 C606 Pro。
AD350 私有 BLE → Android 手机 → Cycling Power BLE → 码表
这个项目起于一个实际问题:车上已经有功率计,但自己的码表连接不上。现在用一台 vivo X200s 做中转,已经实测在 C606 Pro 上显示真实功率与踏频。它仍是实验项目,兼容范围以下表为准。
在 Releases 下载 power-bridge-v0.11.apk。无需购买额外转发硬件,也不需要给手机 root。
- 打开手机蓝牙,转动曲柄唤醒功率计;关闭其他占用功率计连接的 App 或码表。
- 安装并打开“功率桥接”,点击“开始桥接”,允许附近设备权限。
- 首次从列表中选择功率计,优先选择标记为“喜德盛私有服务”的设备。
- 等 App 显示真实功率、踏频。在码表添加蓝牙功率计,选择
P715 49688。 - 下滑可查看电量、信号、参考左右功率/比例、参考曲柄角度和设备信息。
- 使用后点击 App 或常驻通知的“停止”。
如果码表缓存了旧版本能力、踏频不显示,可以删除旧传感器后重新添加。Android 11 及以下扫描还需定位权限与系统定位开关;Android 12+ 使用附近设备权限。熄屏使用建议在手机电池管理中允许后台运行。
P715 49688 是为兼容这台码表采用的固定广播样本名称,不是新增了一台真实 P715。运行时会临时更改手机蓝牙名称,正常停止时请求恢复;异常退出后可以重新开始并停止以恢复。不要同时运行多个使用同一广播样本的桥接器。
| 组件 | 已验证配置 |
|---|---|
| 输入 | 喜德盛 AD350 配套功率计,XDS-A001 系列 |
| 手机 | vivo X200s / Android 16 |
| 码表 | Magene C606 Pro,固件 v1.916 |
| 应用 | v0.11;功率/踏频链路在 v0.10 已打通 |
一次约7分钟抓包收到415个输入测量包、299个输出通知。记录到功率0–7W、踏频0–93rpm,输出功率均匹配当时最新输入;这是短时低负载测试,不是功率精度标定。v0.11 实读到传感器电量、信号、固件和硬件信息,新增读取后仍可接收数据并恢复码表订阅。
**未完成验证:**其他手机/码表、长时间熄屏、正式骑行记录、带负载功率精度、电量随放电变化的准确性。请勿据此认定所有 AD350 批次都使用相同协议。
| 数据 | App | 转发给码表 |
|---|---|---|
| 总功率 | 实时 | 是 |
| 踏频 | 实时 | 是,以实际 rpm 换算标准曲柄事件 |
| 电量 | 约60秒读取一次 | 暂未提供 |
| 蓝牙信号 RSSI | 约30秒读取一次 | 否 |
| 左/右功率、左右比例 | 参考值 | 否 |
| 曲柄角度 | 参考值,零点未标定 | 否 |
| 型号、固件、硬件、制造商 | 设备有可读字段时显示 | 否 |
左右字段在已抓到的415个样本中均满足“左+右=总功率”,但这不能证明硬件是独立双边测量。总功率低于10W时不计算比例,避免低功率取整产生误导。缺失、无效或过期数据显示“—”,不伪造电量或50/50平衡。
没有校准、温度、扭矩效率、踩踏平顺度、ANT+ 输出或 iOS 桥接功能。
- 手机同时充当 BLE Central(连接功率计)和 BLE Peripheral(供码表连接)。
- 输入:私有服务
1828,测量2A63,启动特征2A55。订阅通知后发送参考项目的启动字节02 16 AA 10。 - 输出:标准 CPS 服务
1818、测量2A63,配合实测有效的 P715 广播名称/厂商数据。兼容 C606 写入的 CCCD03 00,仍以 Notify 发送。 - 每秒转发一次;真实数据超过3秒未更新则暂停通知,避免持续转发旧数值。码表可能保留最后读数,直到其自身超时。
- 前台 connectedDevice 服务和运行期间的 partial wake lock;停止时释放。运行中断线会分段搜索并重连已选择的传感器;不在系统杀进程后自动启动。
协议说明与限制见 docs/PROTOCOL.md。
原生 Java,无第三方运行时依赖;Android 8.0+,compile/target SDK34。
打开仓库根目录,安装 SDK34,设置 JDK17+ 并同步 Gradle。项目带 Gradle8.7 wrapper、AGP8.3.0;首次同步需要联网。本项目已验证的是下方本机SDK构建路径,尚未把 Android Studio Run/Gradle 构建列为已验证。
需要 Python3、JDK17+、Android SDK34、Build Tools36.1.0:
export JAVA_HOME="/path/to/jdk"
export ANDROID_HOME="/path/to/android-sdk"
python3 test-local.py
python3 build-local.pymacOS 未设置环境变量时,会尝试 Android Studio 自带 JDK 和 ~/Library/Android/sdk。构建输出为 build-local/power-bridge-probe.apk。
脚本在本地生成调试签名密钥,不会上传。Release APK 使用开发阶段的实验签名;自行编译或换签名后,可能需要先卸载已装版本。请保管自己的签名密钥,不要提交到仓库。
python3 test-local.py 运行六组纯Java检查:私有解码、数据失效/踏频积分、启动等待窗口、电量/元数据校验、CCCD兼容和广播包预算。可选的 GitHub Actions 配置示例见 docs/protocol-tests.workflow-example.yml;这些检查不替代实车验证。
反馈请注明手机/Android版本、码表型号/固件、功率计型号、复现步骤。日志可从折叠的“连接诊断”复制;分享前删除设备地址、序列号和其他私人信息。不要上传完整手机 bugreport 或 HCI 抓包。
App 无联网权限、账号、云端和统计SDK。所选传感器地址、临时蓝牙名称恢复信息仅保存在手机本地;部分测量包与连接事件进入本地诊断日志。新增设备信息读取为只读,不操作未知私有特征。详见 docs/PRIVACY.md。
- 喜德盛私有字段与启动序列参考 DuoDuoJuZi/xds_forwarding,本项目独立实现 Android 桥接,未打包其固件或源文件。
- P715 广播观察来自 GROWTAC P715 文档 的真实设备截图;不宣称获得厂商授权或实现完整设备仿真。
- 自有源码采用 MIT。Gradle Wrapper 等第三方材料保留各自许可,见 THIRD_PARTY_NOTICES.md。
本项目与喜德盛、迈金、vivo 均无隶属或官方合作关系;产品名称和商标属于各自权利人。