NegligentNarwhal/openmoto

GitHub: NegligentNarwhal/openmoto

OpenMoto 是一款让 CFMoto 摩托车车主将手机的 Android Auto 和屏幕镜像投射到 MotoPlay 仪表盘上的 Android 应用。

Stars: 13 | Forks: 2

# OpenMoto — 适用于 CFMoto MotoPlay 仪表盘的 Android Auto 与屏幕镜像 直接从您的手机在 CFMoto MotoPlay 仪表盘上运行 **Android Auto**(或镜像任何应用)——无需笔记本电脑,手机装在口袋里即可。这是 [dcoletto/open-cfmoto](https://github.com/dcoletto/open-cfmoto) 的社区 fork 版本,添加了对 **CFMoto 800NK(美规)** 的全面支持、**屏幕镜像**模式、**记忆摩托车/一键连接**功能,以及在出发前用于驱动 Android Auto 的**应用内触摸控制面板**。 ## 支持的摩托车 | 摩托车型号 | 仪表盘系列 | QR modelId | 面板 | 状态 | |------|-------------|-----------|-------|--------| | **CFMoto 675 SR-R** | CFDL16 (sdk 0.9.29.1) | `37416` | 横屏 ~800×480 | ✅ 原始目标 —— 行为与上游保持一致 *(见说明)* | | **CFMoto 800NK (US)** | CRCP (sdk 0.9.23.4) | `66660703` | 横屏 800×400, Wi-Fi Direct | ✅ **完全正常工作 —— 由本 fork 添加**,已在实车上确认 | | **CFMoto 1000 MT-X** | CFDL26 / MotoPlay (sdk 1.1.4) | `37426` | 竖屏 ~800×951 | 🧪 **实验性** —— 握手未完成,从未进行端到端确认 | **说明** - **800NK** 是该 fork 作者唯一拥有并已完成端到端验证的摩托车。 - **675** 的代码路径与上游保持字节级一致,是有保证的兜底方案,但在这个分支上尚未*重新运行*过 —— 如果您有一辆 675,非常欢迎您提供确认报告。 - **1000 MT-X** 配置文件可以连接并握手,但仪表盘从未打开其媒体端口(它可能需要目前尚未实现的真正的 sock-server 认证交换)。如果您有 1000 MT-X 并能协助测试,这是完成该支持的最快方法。 ## 功能 - **仪表盘上的 Android Auto** —— 手机在环回("self")模式下运行 Android Auto,并通过 CFMoto 的 Carbit/EasyConn "PXC" 协议将其流式传输到仪表盘。支持 Google Maps 逐向导航、媒体播放等。 - **屏幕镜像** —— 改为镜像整个手机屏幕,可将*任何*应用放到仪表盘上(例如 AA 不支持的导航应用)。请在**横屏**模式下运行应用以获得全屏画面;镜像期间手机屏幕必须保持常亮。 - **记忆摩托车** —— 扫描配对二维码一次即可;之后只需点一下即可重新连接,无需二维码。 - **应用内控制面板** —— Android Auto 的紧凑实时视图,您可以在收起手机前**触摸控制**(设置导航、选择音乐、更改视图),此外还提供全屏模式。 ### 刻意**不**提供的功能 - **无车辆遥测数据。** 油量、速度、档位、行程数据等在此连接下**不可用** —— 这只是一个显示/镜像通道。(已确认:仪表盘不通过 Wi-Fi 暴露遥测数据,且摩托车的 BLE 服务仅限认证访问。骑行数据通过蜂窝网络发送至 CFMoto 云端。) - **车把按钮无法控制 Android Auto** —— 仪表盘会在原生层消耗这些按钮指令且不进行任何转发。请使用应用内触摸面板、与*手机*配对的蓝牙车把遥控器或语音控制。 - **无硬件按键/方向键输入至 AA。** 我们曾尝试过;广播键码会导致 Android Auto 进入对焦模式,从而破坏视频流的稳定性。仅触摸操作是稳定的方案。 ## 工作原理(简述) **手机充当主机单元**。它会: 针对不同仪表盘的特殊处理位于 `BikeProfile` 实现中,因此共享的握手/视频代码保持通用。 ## 环境要求 - 一台 **Android 手机**,Android 10+ (minSdk 29),已安装并配置好 **Google Android Auto**。 - 一辆 **带 MotoPlay 的 CFMoto 摩托车**(即具备仪表盘 QR 配对屏幕的车型)。 - 侧载安装:需要一台装有 Android SDK platform tools (`adb`) 的计算机。 ## 构建与安装 工具链:**JDK 17**,Android **SDK platform 36** + **build-tools 36**。Gradle 9.4.1 / AGP 9.2.1 通过 wrapper 附带。 ``` # 从 repo 根目录 ./gradlew :app:assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk ``` 安装后的应用 ID 为:`io.github.negligentnarwhal.openmoto`。(内部 Kotlin 命名空间保留为 `dev.coletz.opencfmoto`,以便上游更改仍能顺利合并。) ## 使用说明 1. 唤醒摩托车至其 **MotoPlay / QR 连接屏幕**。 2. 打开应用,点击 **PAIR BIKE**,并扫描仪表盘上的二维码(只需扫描一次)。 3. 点击 **ANDROID AUTO**(或 **MIRROR**)。如果出现提示,请接受 Wi-Fi 请求。流媒体将显示在仪表盘上。 4. 使用**紧凑控制视图**设置导航/音乐;点击 **⛶** 进入全屏触摸视图。 5. **STOP**(连接时显示为 *Cancel*,连接成功后显示为 *Disconnect*)将关闭并断开所有连接。 ## 许可证 由于本应用包含了基于 **GNU Affero General Public License v3.0 (AGPL-3.0)** 许可的 **headunit-revived** 代码,因此本项目同样基于 **AGPL-3.0** 许可。如果您分发本应用——包括将修改后的版本作为网络服务运行——您必须在相同的许可证下公开您的源代码。 CFMoto 和 MotoPlay 是其各自所有者的商标。本项目与 CFMoto 或 Google 没有任何关联、认可或支持关系。
标签:Android Auto, CFMoto, 后台面板检测, 屏幕镜像, 摩托车仪表盘, 移动应用, 车机互联