遥控器与操控App接口控制文档
| 字段 | 内容 |
|---|---|
| 文档编号 | ICD-06-V0.2 |
| 版本 | V0.2 |
| 状态 | 草稿 |
| 作者 | 产品团队 |
| 日期 | 2026-04-16 |
| 审核人 | [TBD] |
| 接口双方 | 遥控器系统 (RC) ↔ 操控App系统 (APP) |
修订记录
| 版本 | 日期 | 修订人 | 修订内容 |
|---|---|---|---|
| V0.1 | 2026-04-14 | 产品团队 | 初稿 |
| V0.2 | 2026-04-16 | 产品团队 | 架构澄清修订,遥控器采用薄固件+厚App架构;删除AIDL/RC Service,简化为驱动接口 |
1. 概述
1.1 目的
本文档定义遥控器硬件与操控App之间的接口。本遥控器采用"薄固件+厚App"架构——固件仅负责硬件驱动,App直接持有全部业务协议(MAVLink、视频流、任务管理)。因此,本ICD定义的是App与底层驱动/硬件之间的接口,而非传统的"固件服务API"。
1.2 接口范围
遥控器与操控App之间的接口包括:
- AR8131驱动接口:虚拟网卡设备,App通过标准socket通信(方案B)
- 摇杆/按键输入接口:标准Linux Input Event,App通过Android InputEvent API读取
- 系统服务接口:最小集——固件版本、屏幕亮度、风扇状态等
- 升级配置接口:App与固件之间的版本管理
架构说明:App不通过AIDL/Binder向RC固件请求飞行数据。App直接通过网卡与飞控进行MAVLink UDP通信,直接接收RTP视频流。RC固件不解析MAVLink,不解码视频,不中转数据。
1.3 关联文档
| 文档编号 | 文档名称 |
|---|---|
| SUB-RC-V0.1 | 遥控器系统PRD |
| SUB-APP-V0.1 | 操控App系统PRD |
| ICD-02-V0.2 | 无线数据链路接口规格 |
| PRD-MASTER-V0.1 | 总体产品需求文档 |
1.4 术语定义
| 术语 | 定义 |
|---|---|
| AR8131 | 酷芯微图数传芯片,Host侧映射为虚拟网卡 |
| Linux Input Event | Linux内核标准输入事件机制(/dev/input/eventX) |
| HAL | Hardware Abstraction Layer,硬件抽象层 |
| APK | Android应用程序包 |
2. 运行环境
2.1 主方案:内置Android
| 编号 | 参数 | 规格 | 说明 |
|---|---|---|---|
| ICD-06-I-001 | 运行方案 | App 以 APK 形式安装在遥控器内置 Android 定制系统上 | — |
| ICD-06-I-002 | Android 版本 | ≥ Android 12 [TBD-需系统架构师确认] | 需支持目标 API Level |
| ICD-06-I-003 | 通信方式 | App通过标准Linux/Android接口访问硬件(网卡、输入设备、sysfs) | 无需AIDL/Binder中间层 |
| ICD-06-I-004 | App 安装路径 | /system/app/ 或 /data/app/ | 预装或用户安装 |
| ICD-06-I-005 | 硬件权限 | App 需获取:存储、网络、位置、USB 等系统权限 | 通过 Android 权限机制管理 |
2.2 备选方案:外接手机/平板
| 编号 | 参数 | 规格 | 说明 |
|---|---|---|---|
| ICD-06-I-010 | 有线连接 | USB-C,USB 3.0 协议,支持 OTG | 遥控器作为 USB 设备或主机 [TBD] |
| ICD-06-I-011 | 无线连接 | Wi-Fi Direct,5 GHz 频段优先 | 减少与遥控器2.4G链路的干扰 |
| ICD-06-I-012 | 数据协议 | 自定义 TCP/UDP 协议 over USB/Wi-Fi [TBD] | 需定义应用层协议 |
注意:V0.1版本以内置Android方案为主,外接方案作为备选。
3. 驱动接口
3.1 架构总览
┌──────────────────────────────────────────────┐
│ 操控 App (APK) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ MAVLink │ │ 视频流 │ │ 任务管理 │ │
│ │ 协议栈 │ │ RTP解码 │ │ 航线规划 │ │
│ └─────┬────┘ └─────┬────┘ └──────────┘ │
│ │ UDP socket │ RTP socket │
│ └──────┬───────┘ │
│ │ 标准网卡接口 │
├───────────────┼──────────────────────────────┤
│ Linux 内核 / Android HAL │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ AR8131 │ │ 摇杆ADC │ │ GPIO │ │
│ │ 网卡驱动 │ │ Input驱动 │ │ 按键驱动 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
├──────────────────────────────────────────────┤
│ 遥控器硬件 │
└──────────────────────────────────────────────┘3.2 AR8131驱动接口(App视角)
| 编号 | 参数 | 规格 | 说明 |
|---|---|---|---|
| ICD-06-D-001 | 虚拟网卡设备名 | usb0 或 eth1 [TBD] | App通过标准Android NetworkInterface访问 |
| ICD-06-D-002 | 网络配置 | 静态IP,遥控器端 192.168.144.2,飞控端 192.168.144.1 [TBD] | 点对点链路 |
| ICD-06-D-003 | 网关 | 192.168.144.1 [TBD] | — |
| ICD-06-D-004 | 驱动状态查询 | sysfs: /sys/class/net/<dev>/operstate | up = 链路已建立 |
| ICD-06-D-005 | 信号强度读取 | sysfs: /sys/class/net/<dev>/device/rssi [TBD] | App定期轮询或通过ioctl读取 |
| ICD-06-D-006 | 链路状态通知 | Android NetworkCallback / Linux netlink | 链路建立/断开事件 |
App通过此网卡发送MAVLink UDP(端口14550)和接收RTP视频流,与直接使用SIYI以太网口完全一致。
3.3 摇杆/按键输入接口(标准Linux Input Event)
3.3.1 摇杆输入
| 编号 | 参数 | 规格 | 说明 |
|---|---|---|---|
| ICD-06-J-001 | 设备路径 | /dev/input/eventX | 通过设备名或VID/PID匹配 |
| ICD-06-J-002 | 设备类型 | EV_ABS(绝对轴) | 标准Linux Joystick |
| ICD-06-J-003 | 右摇杆-横滚 | ABS_X,范围 0-4095 [TBD] | ADC分辨率12bit |
| ICD-06-J-004 | 右摇杆-俯仰 | ABS_Y,范围 0-4095 [TBD] | — |
| ICD-06-J-005 | 左摇杆-油门 | ABS_Z,范围 0-4095 [TBD] | — |
| ICD-06-J-006 | 左摇杆-航向 | ABS_RZ,范围 0-4095 [TBD] | — |
| ICD-06-J-007 | 左拨轮 | ABS_THROTTLE,范围 0-4095 [TBD] | 喷洒流量调节 |
| ICD-06-J-008 | 右拨轮 | ABS_RUDDER,范围 0-4095 [TBD] | 云台俯仰角 |
| ICD-06-J-009 | App读取方式 | Android InputDevice API / InputEvent | 标准Android Joystick API |
3.3.2 按键输入
| 编号 | 按键 | Linux Key Code | 说明 |
|---|---|---|---|
| ICD-06-K-001 | 紧急停机键 | KEY_STOP (128) [TBD] | P0优先级,App收到后立即发送MAVLink紧急停机 |
| ICD-06-K-002 | 一键返航键 | KEY_HOME (102) [TBD] | App发送MAVLink RTH指令 |
| ICD-06-K-003 | 喷洒开关键 | KEY_F1 (59) [TBD] | 切换喷洒开/关 |
| ICD-06-K-004 | 飞行挡位开关 | 三段开关,映射为3个Key Code [TBD] | 手动/姿态/GPS |
| ICD-06-K-005 | 自定义功能键C1 | KEY_F5 (63) [TBD] | 用户可在App中自定义功能 |
| ICD-06-K-006 | 自定义功能键C2 | KEY_F6 (64) [TBD] | 用户可在App中自定义功能 |
| ICD-06-K-007 | App读取方式 | Android KeyEvent / onKeyDown/onKeyUp | 标准Android按键事件 |
3.4 系统服务接口(最小集)
| 编号 | 接口 | 方式 | 说明 |
|---|---|---|---|
| ICD-06-S-001 | 固件版本查询 | getprop ro.rc.firmware.version 或 sysfs | App启动时读取,用于兼容性检查 |
| ICD-06-S-002 | 屏幕亮度控制 | Android Settings.System.SCREEN_BRIGHTNESS | 标准Android API |
| ICD-06-S-003 | 风扇转速查询 | sysfs: /sys/class/thermal/cooling_deviceX/cur_state [TBD] | 户外高温场景监控 |
| ICD-06-S-004 | 遥控器电池电量 | Android BatteryManager API | 标准Android API |
| ICD-06-S-005 | 遥控器温度 | sysfs: /sys/class/thermal/thermal_zoneX/temp | 过温告警 |
4. 升级与配置
4.1 App 版本管理
| 编号 | 功能 | 说明 |
|---|---|---|
| ICD-06-U-001 | App 版本检查 | App 启动时检查是否有新版本(需遥控器联网) |
| ICD-06-U-002 | App 在线升级 | 通过 Wi-Fi 网络下载 APK 并安装更新 |
| ICD-06-U-003 | App 离线升级 | 通过 microSD 卡或 USB 传入 APK 安装 |
| ICD-06-U-004 | App 与固件版本兼容性 | App 启动时通过 getprop 读取固件版本,校验兼容性 |
4.2 固件升级(App触发)
| 编号 | 功能 | 说明 |
|---|---|---|
| ICD-06-U-010 | AR8131固件升级 | App通过USB/sysfs通道将固件写入AR8131 [TBD] |
| ICD-06-U-011 | 飞行器固件升级 | App通过MAVLink协议直接向飞控传输固件包(FTP over MAVLink) |
| ICD-06-U-012 | 升级进度 | AR8131升级通过sysfs读取进度;飞控升级通过MAVLink回报进度 |
4.3 参数配置
| 编号 | 同步方向 | 说明 |
|---|---|---|
| ICD-06-C-001 | App → 飞控 | App直接通过MAVLink PARAM_SET发送参数至飞控(不经RC固件中转) |
| ICD-06-C-002 | 飞控 → App | 飞控通过MAVLink PARAM_VALUE回传参数,App直接接收 |
| ICD-06-C-003 | App → 遥控器硬件 | 屏幕亮度、音量等通过标准Android API设置 |
5. 事件通知机制
说明:原AIDL回调机制不再适用。App通过以下标准Android/Linux机制接收事件。
| 事件类型 | 获取方式 | 说明 |
|---|---|---|
| 飞行器连接/断连 | Android NetworkCallback(网卡状态)+ MAVLink心跳超时 | App自行判断 |
| 飞行模式切换 | MAVLink HEARTBEAT解析 | App直接从MAVLink流中读取 |
| 电池告警 | MAVLink SYS_STATUS解析 | App层逻辑 |
| 信号强度变化 | 定期轮询AR8131驱动sysfs接口 | App层逻辑 |
| 障碍物告警 | MAVLink自定义消息解析 | App层逻辑 |
| 按键事件 | Android KeyEvent回调(onKeyDown/onKeyUp) | 标准Android机制 |
| 摇杆输入 | Android InputEvent(onGenericMotionEvent) | 标准Android机制 |
| 遥控器电池/温度 | Android BatteryManager / thermal sysfs | 标准Android API |
6. 待决事项 (TBD)
| 编号 | 事项描述 | 责任人 | 期望决定日期 |
|---|---|---|---|
| TBD-ICD06-001 | 最终确认运行方案(内置Android vs 外接手机/平板) | 系统架构师 | 2025-05 |
| TBD-ICD06-002 | Android 版本和目标 API Level 确认 | 系统架构师 | 2025-05 |
| TBD-ICD06-003 | AR8131虚拟网卡设备名、IP段确认 | 驱动工程师 | 2025-05 |
| TBD-ICD06-004 | 摇杆ADC轴映射和Key Code分配确认 | 驱动+App团队 | 2025-05 |
| TBD-ICD06-005 | AR8131固件升级通道方案 | 驱动工程师 | 2025-06 |
| TBD-ICD06-006 | AR8131 RSSI/SNR sysfs路径确认 | 驱动工程师 | 2025-05 |
