通讯类说明
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