From 2860218520e8ca6baaa8d00a73cc71605aa0b87e Mon Sep 17 00:00:00 2001 From: zhangxusong <328180668@qq.com> Date: Tue, 16 Sep 2025 19:33:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=AE=AF=E7=B1=BB=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/readme.md b/readme.md index e69de29..26d5859 100644 --- a/readme.md +++ b/readme.md @@ -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 跨到主线程。 \ No newline at end of file