通讯类说明
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
核心通信层
|
||||||
|
Endpoint.hpp
|
||||||
|
定义了一个抽象基类 Endpoint,表示任何数据端点(比如串口、UDP)。
|
||||||
|
统一接口:open() / close() / writeBytes()。
|
||||||
|
支持设置回调 setRxHandler(),用于接收原始字节。
|
||||||
|
所有具体端点(串口/UDP)都继承它。
|
||||||
|
|
||||||
|
SerialEndpoint.hpp/.cpp
|
||||||
|
封装了一个 串口 端点,基于 QSerialPort。
|
||||||
|
用于和无人机(飞控)进行物理连接。
|
||||||
|
读串口字节 → 转发给代理;代理写入时 → 原样发给无人机。
|
||||||
|
|
||||||
|
UdpHubEndpoint.hpp/.cpp
|
||||||
|
封装了一个 UDP Hub 端点,允许多个 GCS(地面站)同时连接。
|
||||||
|
监听一个端口(比如 14550),记录所有发过数据的 (IP,Port)。
|
||||||
|
上行(GCS→无人机):转发给串口。
|
||||||
|
下行(无人机→GCS):广播给所有已知 GCS。
|
||||||
|
自动剔除 30 秒无流量的 GCS。
|
||||||
|
|
||||||
|
数据转发和解析
|
||||||
|
ProxyConnection.hpp/.cpp
|
||||||
|
实现 双向透明转发:
|
||||||
|
把无人机来的数据 → UDP Hub。
|
||||||
|
把地面站来的数据 → 串口。
|
||||||
|
同时把字节复制给 MavlinkTap(做解析/监控)。
|
||||||
|
保证 GCS 与无人机的原始通信 不被破坏。
|
||||||
|
|
||||||
|
MavlinkTap.hpp/.cpp
|
||||||
|
被动解析模块。
|
||||||
|
使用 mavlink_parse_char 对字节流做解析。
|
||||||
|
收到完整消息就发出 messageParsed 信号。
|
||||||
|
仅用于监控显示,不修改原始通信。
|
||||||
|
|
||||||
|
Injector.hpp/.cpp
|
||||||
|
提供 注入功能,允许代理自己构造 MAVLink 消息并发送(比如 Heartbeat)。
|
||||||
|
用于测试或向 GCS/无人机发额外指令。
|
||||||
|
要注意 sysid/compid 不要和飞控/GCS 冲突。
|
||||||
|
如果链路启用 MAVLink2 签名,没有密钥的注入会被拒绝。
|
||||||
|
|
||||||
|
ProxyService.hpp/.cpp
|
||||||
|
ProxyService 内部自带 QThread:创建它就准备好了线程,start() 时自动在 IO 线程执行 open()/bind()、开始转发和解析;stop() 会安全关闭。
|
||||||
|
跨线程安全:对外 API(如 sendHeartbeat()、addStaticPeer())使用 QMetaObject::invokeMethod 以 Queued 方式排队到 IO 线程执行;messageParsed、peerAdded/Removed 等信号已用 Qt::QueuedConnection 跨到主线程。
|
||||||
Reference in New Issue
Block a user