Radio Remote CAT V3 プロトコル仕様

Radio Remote CAT V3 プロトコル仕様の仕様、接続条件、実装上の注意点を説明します。

版本:3.0
许可:本文档采用 Creative Commons Attribution 4.0 International(CC BY 4.0) 许可。

1. 范围

Radio Remote CAT V3 是面向业余无线电收发机的开放远控协议。它提供:

  • 必需的收发角色 CAT 控制;
  • 可选的单色屏幕同步;
  • 可选的普通按键注入;
  • 可选的带租约 PTT 控制。

实现只要支持 CAT,即可与 V3 主机连接。屏幕、按键和 PTT 均通过握手能力位独立声明。Radio Remote V2 是独立的旧协议,不属于本规范,V3 主机不得自动降级到 V2。

2. 传输约定

同一全双工字节流同时承载文本 CAT 和可选二进制消息。UART、USB CDC、蓝牙转串口和 TCP 串口桥均可作为传输层。

  • 文本使用 ASCII,大写命令,以分号 ; 结束。
  • 固件可以接收分段到达的数据,不得假设一次写入就是一条完整命令。
  • 文本命令最大长度为 64 字节(包括结束分号)。
  • 二进制多字节整数均为小端序。
  • 每个物理或逻辑端口必须维护独立的握手、解析、屏幕订阅、按键和 PTT 租约状态。
  • 未完成的文本命令或二进制帧从最后一个接收字节起计时,500ms 内没有新字节时静默丢弃。
  • 单独收到 ; 时静默丢弃。
  • 文本残包中发现二进制头 AB CD 时,丢弃其前面的文本并从二进制头重新同步。
  • 长度、CRC 或尾标志错误时,接收方必须继续搜索下一条合法文本命令或 AB CD,不能要求设备重启。

推荐主机在连接或重连时发送单独的 ;,等待 100ms,清空本地解析缓存,然后发送 RHI3;。

3. 握手与能力协商

主机查询:

RHI3;

设备成功回复:

RHI3,<width>,<height>,<pageHeight>,<pageCount>,<pageSize>,<pixelFormat>,<capabilities>,<model>,<firmware>;

完整实现示例:

RHI3,128,64,8,8,128,MVLSB,0000001F,UVK5V1,EGZUMER_RRCAT3;

仅 CAT 实现示例:

RHI3,0,0,0,0,0,NONE,00000008,OTHER_RADIO,V1.0;

字段约束:

字段 约束
width、height 屏幕像素尺寸;无屏幕能力时为 0
pageHeight MVLSB 固定为 8;无屏幕能力时为 0
pageCount 1–8;应满足 height = pageHeight × pageCount;无屏幕能力时为 0
pageSize 每页字节数,MVLSB 下等于 width;无屏幕能力时为 0
pixelFormat MVLSB 或 NONE
capabilities 固定 8 位大写十六进制数
model、firmware 仅允许大写字母、数字、点、下划线和短横线;空格应转换为下划线

能力是 32 位无符号位图。每一位的 1 表示支持,0 表示不支持。下表以十进制列出每个能力位的数值;RHI3 在线字段仍按固定 8 位大写十六进制编码:

位 十进制 名称 含义
0 1 DISPLAY_PUSH 支持屏幕订阅、页面读取和变化推送
1 2 KEYPAD 支持普通按键事件和全部释放
2 4 PTT_LEASE 支持文本 PTT 查询、租约和状态推送
3 8 CAT 支持第 4.1–4.3 节定义的收发角色 CAT 指令(含 AB);V3 必需
4 16 SQUELCH 支持静噪等级查询、设置和状态推送
5–31 — 保留 发送方当前置零,接收方必须忽略未知置位

例如 0000001F 表示五项已知能力全部支持;0000000F 表示不支持静噪指令的早期完整实现;00000008 只支持基础 CAT。

握手错误为 ERHI01;(格式)、ERHI02;(版本或参数不支持)或 ERHI05;(当前状态无法握手)。每次成功握手必须重置该端口的显示订阅、普通按键状态和远程 PTT 租约。

4. 收发角色 CAT

4.1 通用规则

  • 查询命令无参数;设置成功必须回显设备最终采用的规范值。
  • 频率为固定 9 位十进制 Hz。
  • 模式只能是 FM、NFM、AM、NAM、USB。
  • 亚音为固定 4 位十进制数,单位 0.1Hz;0000 表示关闭。例如 77.0Hz 为 0770。
  • MAIN 表示收发使用相同的频率、模式和亚音。
  • CROSS 表示 RX 与 TX 参数独立。具体内部 VFO 编号由固件实现决定,不属于线协议。
  • LSB、CW 和未列出的模式不受支持。
属性 查询 设置示例 成功回复示例
工作方式 TR; TRMAIN; / TRCROSS; TRMAIN;
接收频率 RF; RF439450000; RF439450000;
发射频率 TF; TF431800000; TF431800000;
接收模式 RM; RMFM; RMFM;
发射模式 TM; TMNFM; TMNFM;
接收亚音 RC; RC0000; RC0000;
发射亚音 TC; TC0770; TC0770;

在 MAIN 下,设置任一 RX/TX 属性必须同步另一角色,所有查询应返回一致值。在 CROSS 下,两组属性互不影响。

4.2 A/B 切换

AB; 是无参数操作命令,行为等同电台物理机的 A/B(F+2)切换。它不改变当前 MAIN 或 CROSS 工作方式:

  • MAIN 下切换当前 A/B VFO,并以切换后 VFO 的参数作为共同 RX/TX 状态;
  • CROSS 下切换活动 VFO,即交换逻辑 RX/TX 角色;
  • 成功时直接回复切换后的完整 TRA...;,不回显 AB;;
  • 格式错误返回 EAB01;,发射中返回 EAB04;,未握手、Dual Watch 或目标状态无法用 TRA 表示时返回 EAB05;;
  • 失败不得改变 VFO、工作方式或任何收发参数。

4.3 TRA 原子批量命令

查询完整状态:

TRA;

原子设置和成功回显:

TRACROSS,439450000,FM,0000,431800000,FM,0770;

字段顺序固定为:

TRA<工作方式>,<RX频率>,<RX模式>,<RX亚音>,<TX频率>,<TX模式>,<TX亚音>;

固件必须先解析和验证全部字段,再一次性应用。任一字段错误时不得产生部分修改。MAIN 要求 RX/TX 的频率、模式和亚音完全一致,否则返回 ETRA02;。

设备本机操作导致频率、模式、亚音、工作方式或逻辑 RX/TX 角色改变后,应向所有已完成 RHI3 的端口主动发送一条最终 TRA...;。此推送不依赖屏幕订阅或背光状态。短时间内连续变化可以合并为最终状态。进入无法用 MAIN 或 CROSS 表示的状态时只推送一次 ETRA05;,恢复后重新推送完整状态。

4.4 静噪等级

静噪是独立的可选 CAT 能力。设备只有在握手能力包含 SQUELCH 时才接受以下命令:

命令 行为
SQ; 查询当前全局静噪等级,回复 SQ0;~SQ9;
SQ0;~SQ9; 设置并持久化静噪等级,成功时回显最终值;0 表示关闭静噪
  • 查询在发射期间仍然可用;发射期间设置返回 ESQ04;。
  • 格式或长度错误返回 ESQ01;,未完成 RHI3 握手返回 ESQ05;。
  • 重复设置当前等级必须成功回显,但不应重复写入非易失存储。
  • 本机操作改变静噪等级后,设备向所有已完成 RHI3 的端口主动推送最终 SQn;,不依赖显示订阅。

4.5 CAT 错误

错误格式为 E<命令><代码>;,例如 ETF03;、ETRA05;:

代码 含义
01 格式或长度错误
02 参数值不支持
03 频率越界
04 电台正在发射,当前不能配置
05 当前状态无法完成配置

5. PTT 查询、租约和推送

PTT 是文本命令,不使用二进制按键事件:

命令 行为
PT; 查询真实发射状态,回复 PT0; 或 PT1;
PT1; 当前端口获取或续租远程 PTT,成功回显 PT1;
PT0; 仅释放当前端口持有的租约,回复释放后的真实状态
  • 租期为 1 秒;持续按下时,主机应每 250ms 发送一次 PT1;。
  • 真实状态包含物理 PTT 和任一远程 PTT 租约。
  • 物理 PTT 已按下或租约属于其他端口时,PT1; 返回 EPT04;。
  • PT0; 不得释放其他端口的租约;若其他来源仍在发射,应回复 PT1;。
  • 格式错误返回 EPT01;;未握手或当前状态不可用返回 EPT05;。
  • 真实 PTT 状态发生变化时,设备向所有已完成 RHI3 的端口主动推送 PT0; 或 PT1;,不依赖屏幕订阅。
  • 端口重新握手、断开或租约超时后,固件必须释放该端口持有的 PTT。

6. 二进制帧

二进制功能只在对应能力置位时使用。帧结构如下:

AB CD | bodyLength:u16le | command:u16le | payloadLength:u16le | payload | crc:u16le | DC BA
  • bodyLength = 4 + payloadLength。
  • CRC 使用 CRC-16/CCITT 计算过程(初值 0x0000,多项式 0x1021,不反射,无最终异或),覆盖从 command 到 payload 的完整 body。
  • V3 的 0x0612–0x061A 帧不得加密或混淆。
  • 回复负载首字节为状态码时,0 表示成功,1–7 依次表示版本错误、长度错误、页面错误、按键错误、状态错误、保留的电源状态错误、功能未实现。
  • 对未声明或未实现的可选二进制功能,设备回复状态 7(UNSUPPORTED)。

7. 屏幕同步(可选)

只有 DISPLAY_PUSH 置位时,主机才可使用下列命令:

ID 方向 名称 负载
0x0612 主机→设备 DISPLAY_SUBSCRIBE enabled:u8
0x0613 设备→主机 DISPLAY_SUBSCRIBE_REPLY status:u8, enabled:u8, dirtyMask:u8, revisions:u16le[pageCount]
0x0614 主机→设备 DISPLAY_PAGE page:u8
0x0615 设备→主机 DISPLAY_PAGE_REPLY status:u8, page:u8, revision:u16le, pageCrc:u16le, pixels:u8[pageSize]
0x061A 设备→主机 DISPLAY_CHANGED dirtyMask:u8, revisions:u16le[pageCount]

V3 显示负载不包含软件电源字段。订阅成功时设备返回全部页面修订号,并把全部页面标为脏;主机随后读取所需页面。pageCrc 使用与帧相同的 CRC 算法,但只覆盖页面字节。

MVLSB(Monochrome Vertical Least-Significant Bit)中,每个字节表示同一列的 8 个垂直像素,最低位是该页最上方像素。页面按从上到下排列。几何尺寸必须从 RHI3 动态读取,主机不能固定假设为 128×64;96×32(4 页、每页 96 字节)同样是合法实现。

关闭远程屏幕窗口只应取消显示订阅,不能停止 CAT 或 PTT 主动推送。

8. 普通按键(可选)

只有 KEYPAD 置位时,主机才可使用:

ID 方向 名称 负载
0x0616 主机→设备 KEY_EVENT key:u8, action:u8
0x0617 设备→主机 KEY_EVENT_REPLY status:u8, key:u8, action:u8, reserved:u8
0x0618 主机→设备 RELEASE_ALL 空
0x0619 设备→主机 RELEASE_ALL_REPLY status:u8, reserved:u8[3]

action:0=UP、1=DOWN、2=RENEW。普通按键租期为 1 秒,持续按下时建议每 250ms 续租。按键编号为 0–9、10=MENU、11=UP、12=DOWN、13=EXIT、14=STAR、15=F、17=SIDE2、18=SIDE1。编号 16 保留给物理 PTT 标识,但 V3 二进制按键命令不得用它控制 PTT。

RELEASE_ALL 只释放当前端口的普通按键,不释放 PTT;PTT 必须使用 PT0;。

9. 典型交互

仅 CAT 设备:

主机 → ;
主机 → RHI3;
设备 → RHI3,0,0,0,0,0,NONE,00000008,OTHER_RADIO,V1.0;
主机 → TRA;
设备 → TRAMAIN,439450000,FM,0000,439450000,FM,0000;

带 PTT 的完整设备:

主机 → RHI3;
设备 → RHI3,128,64,8,8,128,MVLSB,0000001F,UVK5V1,RRCAT3;
主机 → SQ;
设备 → SQ3;
主机 → SQ5;
设备 → SQ5;
主机 → TRACROSS,439450000,FM,0000,431800000,FM,0770;
设备 → TRACROSS,439450000,FM,0000,431800000,FM,0770;
主机 → AB;
设备 → TRACROSS,431800000,FM,0770,439450000,FM,0000;
主机 → PT1;
设备 → PT1;
主机 → PT1;    (每 250ms 续租)
主机 → PT0;
设备 → PT0;

10. 兼容性测试要求

第三方实现至少应验证:

  • 首次命令、半包、500ms 超时、单独分号、噪声、错误长度、CRC、尾标志和断线重连;
  • 00000008 仅基础 CAT、0000000F 早期完整能力、0000001F 含静噪的完整能力、缺少 CAT、非法能力字段和未知未来能力位;
  • TR/RF/TF/RM/TM/RC/TC/TRA/AB 查询、设置、回显、错误码及 TRA 原子失败;
  • 本机操作后的 TRA 主动推送不依赖显示订阅;
  • 若声明静噪:SQ 查询、0/9 边界、格式错误、发射冲突、持久化和主动推送;未声明时主机不得发送 SQ;
  • 若声明 PTT:查询、按下、续租、释放、超时、物理冲突、多端口冲突和主动推送;
  • 若声明显示:不同几何尺寸、页面 CRC、订阅与取消订阅;
  • 若声明按键:按下、抬起、续租、超时和端口隔离;
  • 未声明显示、按键或 PTT 时,主机仍能仅凭 CAT 正常连接和控制。