一、对频是什么:谁跟谁的对频,依据什么对频?
1.1 对频定义
对频(Pairing / 绑定) 是 遥控器(地面端 AP) 与 天空端设备(DEV) 之间建立 GLink 射频通信链路 的过程。
1.2 对频双方
| 角色 | 设备 | 说明 |
|---|---|---|
| 地面端(AP / 遥控器端) | G 系列遥控器 | 由 Android App 控制,通过 USB OTG 连接遥控器固件 MCU |
| 天空端(DEV / 无人机端) | 接收机;中继器;配套设备 | 挂载于无人机,通过 GLink 射频模块与遥控器通信 |
1.3 对频依据
对频的核心依据是 MAC 地址 和 跳频信道序列:
- MAC 地址识别:天空端设备(接收机)有唯一 8 位 MAC 地址(如
"12345678"),作为设备身份标识 - GLink 跳频协议:对频后双方使用预定义的跳频序列(频率列表 + 帧间隔)建立同步通信
- 心跳机制:连接成功后,双方通过周期性心跳包维持
dev_connect = true状态
二、硬件层链路
2.1 硬件拓扑
┌─────────────────────────────────────────────────────────────────────────────┐
│ 完整硬件链路 │
│ │
│ ┌──────────────────┐ USB OTG ┌──────────────────┐ │
│ │ Android 手机/Pad │◄────────────────────────►│ 遥控器 MCU │ │
│ │ (运行 devicetool) │ CDC/FTDI/CH340/CP2102 │ (STM32 系列) │ │
│ └────────┬─────────┘ └───────┬──────────┘ │
│ │ │ UART (921600) │
│ │ ▼ │
│ │ ┌─────────────────────┐ │
│ │ │ AR8030 GLink 射频模块 │ │
│ │ │ (2.4GHz 跳频扩频) │ │
│ │ └──────────┬──────────┘ │
│ │ │ 2.4GHz 无线链路 │
│ │ ▼ │
│ │ ┌─────────────────────┐ │
│ │ │ AR8030 GLink 射频模块 │ │
│ │ │ (无人机端) │ │
│ │ └──────────┬──────────┘ │
│ │ │ │
│ │ ▼ │
│ │ ┌─────────────────────┐ │
│ │ │ 天空端接收机 │ │
│ │ │ │ │
│ │ └─────────────────────┘ │
│ │ │
│ └──────────────────────── 青鳉 D2D 方案(可选)─────────────────┘
│ LTE 直连,无需 WiFi │
└─────────────────────────────────────────────────────────────────────────────┘
2.2 通信介质矩阵
| 通信方式 | 适用场景 | 物理链路 | 典型波特率 |
|---|---|---|---|
| SerialPort(USB CDC) | 所有设备(主力方案) | Android USB Host → CH340/CP2102 → UART | 921600 bps |
| UDP Socket | 开发调试版本 | Android WiFi → 天空端 IP (192.168.144.10) | — |
| Android D2D Service | 青鳉 D2D 硬件模块 | LTE 直连(3GPP Rel-13) | — |
| TCP Comm | 备用长距离方案 | WiFi / 移动数据 | — |
2.3 关键硬件模块
| 模块 | 说明 |
|---|---|
| AR8030 | GLink 射频模块,负责 2.4GHz 跳频通信,内置 RSSI/功率测量 |
| STM32 MCU | 遥控器主控,负责协议解析、信号质量采集、组包下发 |
| GR01/GR02/GR03 | 天空端接收机,搭载 GLink 射频模块,接收对频命令并建立链路 |
| TR01 | 中继器,扩展通信距离 |
| 青鳉 D2D 模块 | 可选方案,通过 LTE 频段直连,无需 WiFi |
三、底层软件层(rcsdk SDK)
3.1 SDK 架构
┌─────────────────────────────────────────────────────────────────┐
│ rcsdk 通信 SDK 架构 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ KeyManager(统一入口) │ │
│ │ get(key, callback) / set(key, value, callback) │ │
│ │ action(key, callback) / listen(key, listener) │ │
│ └────────────────────────┬────────────────────────────────┘ │
│ │ │
│ ┌─────────────────┼─────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │
│ │ SerialPort │ │ UDPComm │ │ D2dController│ │
│ │ (串口/USB) │ │ (网络调试) │ │ (LTE D2D) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬───────┘ │
│ │ │ │ │
│ └────────────────┴────────────────┘ │
│ │ │
│ ▼ 协议解码 + Key 映射 │
│ ┌───────────────────────┐ │
│ │ firmware MCU 固件层 │ │
│ │ (STM32 协议解析) │ │
│ └───────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
3.2 核心类索引
| 类 | 包路径 | 作用 |
|---|---|---|
KeyManager | rcsdk/KeyManager.java | 参数读写统一入口(get/set/action/listen) |
SerialPort | rcsdk/comm/SerialPort.java | JNI 封装,调用 /dev/ttyUSBx 串口设备 |
AR8030Comm | rcsdk/comm/AR8030Comm.java | AR8030 射频模块通信协议封装 |
UdpConnectManager | h12ptool/common/UdpConnectManager.java | UDP 连接管理 |
D2dController | fishsemi/sdk/d2dcontrol/D2dController.java | D2D 系统级控制器(LTE 直连) |
InternalKey | rcsdk/internal/InternalKey.java | 内部状态管理(Ar8030Pairing、onlyConnect 等) |
RemoteControllerKey | rcsdk/key/RemoteControllerKey.java | 对频动作 Key 定义 |
AirLinkKey | rcsdk/key/AirLinkKey.java | 信号质量、频段、信道等 Key 定义 |
3.3 对频相关 SDK Key
对频动作 Key
| Key | 所属类 | 方法 | 参数类型 | 说明 |
|---|---|---|---|---|
KeyRequestPairing | RemoteControllerKey | action | EmptyMsg | 请求开始对频(广播模式) |
KeyRequestStopPair | RemoteControllerKey | action | EmptyMsg | 请求停止对频 / 解绑 |
KeyRequestPairingAtSetMac | InternalKey | set | PairParam | 指定 MAC 地址绑定接收机 |
状态监听 Key
| Key | 所属类 | 读取方法 | 返回值类型 | 说明 |
|---|---|---|---|---|
KeyRawSignalQuality | AirLinkKey | listen | String (JSON) | 原始信号质量(含 dev_connect) |
KeyRawSignalQuality2 | AirLinkKey | listen | String (JSON) | 备用信号质量 |
KeySignalQuality | AirLinkKey | listen | Integer | 通用信号强度 |
KeyGLinkSkyDevice | AirLinkKey | listen | GLinkSkyDevice[] | 已连接的天空端设备列表 |
KeyGLinkThroughput | AirLinkKey | get | GLinkThroughput | 链路吞吐量(RX/TX kbps) |
KeyMAC | AirLinkKey | get | String | 设备 MAC 地址 |
InternalKey.isAr8030Pairing() | InternalKey | — | boolean | Ar8030 是否处于对频状态 |
四、APP 层完整流程
4.1 对频入口与页面结构
| UI 入口 | 主 Fragment / Activity | 核心功能 |
|---|---|---|
| 点击"对频"按钮 | D2dFragment / D2dActivity | 开始对频 |
| 点击"停止对频"按钮 | D2dFragment / D2dActivity | 停止对频 / 解绑 |
| 点击"新增接收机"按钮 | D2dFragment / D2dActivity | 指定 MAC 绑定接收机 |
| 信号质量页面 | NewuiG12SignalFragment | 实时信号强度图表 |
| MAC 设置页面 | NewuiG12MacPairFragment | MAC 地址读取/设置 |
| 无线设置入口 | NewuiWirelessSettingsFragment | 频段、跳频等配置 |
4.2 流程一:开始对频(广播模式)
┌─────────────────────────────────────────────────────────────────────────────┐
│ 开始对频完整流程 │
│ │
│ 【用户操作】 │
│ 用户点击"对频"按钮(buttonContraband) │
│ ↓ │
│ D2dFragment.onClick() → showD2dDialog()(弹出确认对话框) │
│ ↓ │
│ 用户确认后 → sendReset() │
│ ↓ │
│ Toast 提示 "对频中…" │
│ ↓ │
│ 【G 系列遥控器分支】isG_RC_App() = true │
│ KeyManager.action(KeyRequestPairing, callback) │
│ ↓ │
│ 下发对频请求到遥控器固件(通过 SerialPort/USB) │
│ ↓ │
│ onSuccess → 启动 pairCheckStatusThread(后台线程,每 500ms 检查) │
│ │ │
│ │ ┌─────────────────────────────────────────────────────┐ │
│ │ │ pairCheckStatusThread 循环: │ │
│ │ │ while (isStartPair) { │ │
│ │ │ if (InternalKey.isAr8030Pairing()) { │ │
│ │ │ → tvPairing 显示可见(对频进行中) │ │
│ │ │ } else { │ │
│ │ │ → isStartPair = false,隐藏 tvPairing │ │
│ │ │ } │ │
│ │ │ Thread.sleep(500ms) │ │
│ │ │ } │ │
│ │ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ 1 秒后设置 isCanShowPairEnd = true │
│ ↓ │
│ 【等待连接确认】 │
│ KeyManager.listen(KeyRawSignalQuality, listener) 持续监听 │
│ ↓ │
│ 回调解析 JSON: │
│ ├── dev_connect = true → d2dConnection 显示 "已连接" │
│ │ 且 isCanShowPairEnd = true → Toast "对频成功" ✓ │
│ └── dev_connect = false → 保持 "未连接" 状态 │
│ ↓ │
│ 【超时保护】5 秒内无有效数据 → checkTimeoutRunnable 触发 │
│ → d2dConnection 显示 "未连接",清空详细字段 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
关键代码位置:
- 触发入口:
D2dFragment.java:1008-1016(buttonContraband onClick) - 对频动作:
D2dFragment.java:1057-1070(sendReset()) - 状态轮询:
D2dFragment.java:1115-1144(pairCheckStatusThread) - 连接确认:
D2dFragment.java:166-344(keyRawSignalQualityListener)
4.3 流程二:新增接收机(指定 MAC 绑定)
┌─────────────────────────────────────────────────────────────────────────────┐
│ 新增接收机(指定 MAC 绑定)流程 │
│ │
│ 用户点击"新增接收机"按钮(buttonAddReceiver) │
│ ↓ │
│ getMac() → KeyManager.get(KeyMAC, callback) │
│ ↓ │
│ onSuccess(mac) → getMacStr = mac(读取当前设备 MAC) │
│ ↓ │
│ showReceiverDialog2() → 弹出确认对话框,显示接收机 MAC │
│ ↓ │
│ 用户确认 → setMac(getMacStr) │
│ ↓ │
│ 参数校验: │
│ ├── MAC 为空 → Toast "设置失败" │
│ ├── MAC 长度 ≠ 8 → Toast "设置失败" │
│ └── MAC 合法 → 继续 │
│ ↓ │
│ 构建 PairParam(mac, timeout=5s) │
│ KeyManager.set(KeyRequestPairingAtSetMac, pairParam, callback) │
│ ↓ │
│ onResult(null) → 绑定成功 │
│ onResult(exception) → 绑定失败 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
关键代码位置:
- 触发入口:
D2dFragment.java:607-614(buttonAddReceiver onClick) - MAC 读取:
D2dFragment.java:946-978(getMac 回调) - MAC 绑定:
D2dFragment.java:916-943(setMac())
4.4 流程三:停止对频 / 解绑
用户点击"停止对频"按钮(buttonStopPair)
↓
KeyManager.action(KeyRequestStopPair, callback)
↓
onResult(null) → Toast "停止对频中…"
onResult(exception) → 不提示
↓
pairCheckStatusThread.interrupt()(中断检查线程)
isStartPair = false
↓
遥控器断开与天空端的链路
↓
KeyRawSignalQuality 回调 dev_connect = false
↓
d2dConnection 显示 "未连接"
4.5 流程四:信号质量实时监听
onResume() → initConnect()
↓
G 系列设备(非调试模式):
KeyManager.listen(KeyRawSignalQuality, keyRawSignalQualityListener)
↓
SDK 主动推送 JSON 数据(无需轮询)
↓
解析 JSON,提取:
├── dev_connect → Boolean:连接状态
├── signal → Integer:综合信号强度
├── ap_tx_chan → Integer:地面端当前发射信道
└── dev_tx_chan → Integer:天空端当前发射信道
↓
重置 5 秒超时计时器
↓
runOnUiThread → 更新 UI:
├── d2dConnection.setText("已连接" / "未连接")
└── tvLeft / tvCenter / tvRight 显示详细字段
调试模式(is401DDeveloper = true):
创建 UDP Socket:本地 12581 ↔ 天空端 192.168.144.10:12580
启动 GetInfoThread 每秒发送 "GET_INFO_REQUEST\n"
天空端收到后回复 JSON 格式状态数据
App 解析并更新 UI
五、信号数据完整流向
┌──────────────────────────────────────────────────────────────────────────────────┐
│ 信号质量数据完整流向 │
│ │
│ 【物理层 - 射频链路】 │
│ ┌──────────────────┐ 2.4GHz 跳频通信 ┌──────────────────┐ │
│ │ 地面端 GLink 射频 │◄──────────────────────────────►│ 天空端 GLink 射频 │ │
│ │ (AP 侧 - AR8030) │ GLink 协议 │ (DEV 侧 - AR8030) │ │
│ └────────┬─────────┘ └────────┬─────────┘ │
│ │ RSSI / 信道 / 功率 / 吞吐量测量 │ │
│ └────────────────────────┬─────────────────────────────┘ │
│ ▼ │
│ 【固件层 - 遥控器 MCU (STM32)】 │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ • 定时读取 RF 寄存器(RSSI、信道状态) │ │
│ │ • 统计链路吞吐量(TX/RX 字节数) │ │
│ │ • 心跳检测(维护 dev_connect 状态) │ │
│ │ • 组包:将数据封装为二进制协议包 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ 串口/USB (921600 baud) │
│ 【SDK 层 - rcsdk Android 库】 │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ SerialPort / UDPComm / D2dController │ │
│ │ ↓ │ │
│ │ KeyManager(协议解码 + Key 映射) │ │
│ │ ↓ │ │
│ │ KeyRawSignalQuality → JSON 字符串 │ │
│ │ KeyGLinkThroughput → GLinkThroughput 对象 │ │
│ │ KeyG12RCScanChanInfo→ ChanInfo 对象(地面端) │ │
│ │ KeyG12SkyScanChanInfo→ ChanInfo 对象(天空端) │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ KeyListener 回调 │
│ 【App 层 - D2dFragment / NewuiG12SignalFragment】 │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ 主线程 UI 更新: │ │
│ │ ├── d2dConnection:显示 "已连接" / "未连接" │ │
│ │ ├── tvCHANNEL:显示完整 JSON 信息 │ │
│ │ ├── tvLeft/Center/Right:分栏显示详细指标 │ │
│ │ ├── BarChart:显示各信道功率分布 (-110 ~ -50 dBm) │ │
│ │ └── FloatWindow:全局悬浮窗显示信号强度和吞吐量 │ │
│ │ │ │
│ │ 超时检测: │ │
│ │ └── 5 秒无数据 → 自动切换为"未连接"状态 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────────┘
六、对频完成后的状态确认
6.1 连接成功判定条件
条件1:InternalKey.isAr8030Pairing() = true(射频模块处于对频/同步状态)
AND
条件2:KeyRawSignalQuality 回调中 dev_connect = true(应用层心跳正常)
AND
条件3:isCanShowPairEnd = true(对频窗口已开放,首次确认)
→ 触发 Toast "对频成功"
6.2 连接断开判定条件
条件1:KeyRawSignalQuality 回调中 dev_connect = false
OR
条件2:5 秒内未收到任何有效信号数据 → checkTimeoutRunnable 触发
→ d2dConnection 显示 "未连接"
6.3 典型信号数据 JSON 示例
正常连接状态:
{
"dev_connect": true,
"signal": -62,
"ap_tx_chan": 6,
"dev_tx_chan": 6,
"ap_signal_strength": -65,
"dev_signal_strength": -60,
"acs_chan": 6,
"work_chan": 6,
"tx_real": 2400,
"rx_real": 2350
}
断开连接状态:
{
"dev_connect": false,
"signal": -110,
"ap_tx_chan": -1,
"dev_tx_chan": -1
}
对频进行中状态:
{
"dev_connect": false,
"signal": -105,
"pairing": true,
"scan_progress": 3
}
七、完整流程图
┌─────────────────────────────────────────────────────────────────────────────────┐
│ 对频全流程总览 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 硬件准备 │ ───→ │ SDK 初始化 │ ───→ │ APP 页面 │ │
│ │ 遥控器 │ │ rcsdk加载 │ │ D2dFragment │ │
│ │ 连接接收机 │ │ SerialPort │ │ 注册监听 │ │
│ └─────────────┘ └─────────────┘ └──────┬──────┘ │
│ │ │
│ ┌───────────┴───────────┐ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 广播对频 │ │ 指定MAC绑定 │ │
│ │按键触发 │ │ 按键触发 │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ ┌────────────────────┼─────────────────────┼────────┐ │
│ │ ▼ ▼ │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ KeyRequestPairing │ │KeyRequestPairing │ │ │
│ │ │ (广播模式) │ │AtSetMac (MAC绑定)│ │ │
│ │ └────────┬─────────┘ └────────┬─────────┘ │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ ┌──────────────────────────────────────┐ │ │
│ │ │ 遥控器固件 MCU (STM32) │ │ │
│ │ │ 解析命令 → 控制 AR8030 进入对频模式 │ │ │
│ │ │ isAr8030Pairing() = true │ │ │
│ │ └──────────────────┬───────────────────┘ │ │
│ │ │ │ │
│ │ ▼ 2.4GHz 跳频无线链路 │ │
│ │ ┌──────────────────────────────────────┐ │ │
│ │ │ 天空端接收机 (GR01/GR02/GR03) │ │ │
│ │ │ 检测到对频请求 → 同步跳频序列 │ │ │
│ │ │ 建立 GLink 射频链路 │ │ │
│ │ └──────────────────┬───────────────────┘ │ │
│ │ │ │ │
│ │ ▼ 心跳包 / 信号数据 │ │
│ │ ┌──────────────────────────────────────┐ │ │
│ │ │ KeyRawSignalQuality JSON 回调 │ │ │
│ │ │ dev_connect=true, signal=-62dBm │ │ │
│ │ └──────────────────┬───────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────────────────────────────┐ │ │
│ │ │ UI 更新 + Toast "对频成功" ✓ │ │ │
│ │ └──────────────────────────────────────┘ │ │
│ │ │ │
│ └──────────────────── 持续监控 ────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ 5秒超时 → "未连接" │ │
│ │ KeyRequestStopPair │ │
│ │ → 停止对频 / 解绑 │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
八、关键技术细节
8.1 对频参数模型(PairParam)
// com/skydroid/rcsdk/common/airlink/PairParam.java
public final class PairParam {
private String mac; // 目标接收机 MAC 地址(8位字符串)
private int timeout; // 对频超时时间(秒),默认 1 秒
}
// 构造方式
new PairParam(mac, 0, 2, null) // 实际等价于 (mac, timeout=1)
new PairParam(mac, timeout=5) // 指定 MAC 绑定时默认 5 秒超时
8.2 内部状态管理(InternalKey)
| 状态字段 | 类型 | 说明 |
|---|---|---|
isAr8030Pairing() | boolean | AR8030 射频模块是否处于对频状态 |
isRCApAtAr8030() | boolean | 遥控器是否作为 AP 模式连接到 AR8030 |
onlyConnect | int | 连接模式:0=无限制, 1=仅AirLink, 2=仅遥控器 |
8.3 天空端设备类型(GLinkSkyDevice)
public enum GLinkSkyDevice {
UNKNOWN(0), // 未识别
GR01(1), // GR01 接收机
GR03(2), // GR03 接收机
TR01(3), // TR01 中继器
GR02(4), // GR02 接收机
YL20(5), // YL20 配套设备
}
8.4 频段与跳频配置
| Key | 说明 |
|---|---|
KeyRCSetBand / KeySkySetBand | 设置地面端/天空端频段(BandValue: 1G/2G/5G) |
KeyRCSetBandAutoMode / KeySkySetBandAutoMode | 设置自动跳频模式 |
KeyRCSetBandSave / KeySkySetBandSave | 保存频段设置 |
KeySetFrameChangeDuration | 跳频帧间隔 |
KeyRCFreqList | 地面端可用频率列表(long[]) |
KeyG12RCScanChanInfo / KeyG12SkyScanChanInfo | 信道扫描信息(频率 + 功率) |
九、对频失败常见原因
| 原因 | 现象 | 排查建议 |
|---|---|---|
| 天空端未上电 | dev_connect=false,信号 -110dBm | 确认接收机电源正常 |
| 距离过远 | 信号强度 < -95dBm | 缩短距离后重新对频 |
| MAC 地址错误 | 指定 MAC 绑定失败 | 重新读取 MAC 确认 |
| 频段不匹配 | 对频超时 | 检查两端频段配置是否一致 |
| 干扰严重 | 信号波动大,频繁断连 | 切换频段或远离干扰源 |
| 固件异常 | isAr8030Pairing() 始终 false | 重启遥控器或重新插拔 USB |
| 5 秒超时 | checkTimeoutRunnable 触发 | 检查 USB 连接稳定性 |
十、关键类速查表
| 类 | 文件路径 | 作用 |
|---|---|---|
D2dFragment | h12ptool/newuifragment/D2dFragment.java | 对频主页面(新 UI) |
D2dActivity | h12ptool/p006ui/activity/D2dActivity.java | 对频页面(旧 UI) |
NewuiG12MacPairFragment | h12ptool/newuifragment/NewuiG12MacPairFragment.java | MAC 读取/设置页面 |
NewuiG12SignalFragment | h12ptool/newuifragment/NewuiG12SignalFragment.java | 信号质量图表 |
NewuiWirelessSettingsFragment | h12ptool/newuifragment/NewuiWirelessSettingsFragment.java | 无线设置入口 |
D2dController | fishsemi/sdk/d2dcontrol/D2dController.java | D2D 系统级控制器 |
KeyManager | rcsdk/KeyManager.java | 参数读写统一入口 |
AirLinkKey | rcsdk/key/AirLinkKey.java | 信号质量/频段 Key 定义 |
RemoteControllerKey | rcsdk/key/RemoteControllerKey.java | 对频动作 Key 定义 |
InternalKey | rcsdk/internal/InternalKey.java | 内部状态 Key |
PairParam | rcsdk/common/airlink/PairParam.java | 对频参数(MAC + 超时) |
ChanInfo | rcsdk/common/airlink/ChanInfo.java | 信道扫描数据 |
GLinkThroughput | rcsdk/common/airlink/GLinkThroughput.java | 链路吞吐量 |
GLinkSkyDevice | rcsdk/common/airlink/GLinkSkyDevice.java | 天空端设备类型 |
SerialPort | rcsdk/comm/SerialPort.java | JNI 串口操作 |
AR8030Comm | rcsdk/comm/AR8030Comm.java | AR8030 模块通信 |
StringUtils | business/util/StringUtils.java | 连接状态字符串工具 |
十一、总结
对频本质:遥控器(地面端 AP)通过 USB 串口向遥控器固件 MCU 下发对频命令,MCU 控制 AR8030 GLink 射频模块进入对频模式,通过 2.4GHz 跳频无线链路广播对频请求;天空端接收机检测到对频信号后同步跳频序列,建立稳定射频链路;App 层通过监听 KeyRawSignalQuality 回调中的 dev_connect 字段确认连接成功。
对频依据:
- MAC 地址:用于指定设备绑定(新增接收机场景)
- 跳频信道序列:由 GLink 协议自动协商,包含频率列表和帧间隔
- 心跳机制:连接建立后通过周期性心跳包维持链路,5 秒无心跳判定为断开
完整链路层级:
APP 层 (D2dFragment)
→ SDK 层 (KeyManager + rcsdk)
→ 传输层 (SerialPort/UDP/D2D)
→ 固件层 (STM32 MCU + AR8030 协议解析)
→ 射频层 (GLink 2.4GHz 跳频通信)
→ 天空端接收机 (GR01/GR02/GR03)