- 新增 pCCU 复合管控器程序(src/pCCU):FC/PM 双链路(UDP)、协议编解码器 (FcProtocol/PmProtocol/Frame/Message/MessageRegistry)、快照与落库(DbStore)、 内置 WebServer;挂入 src/CMakeLists.txt 与板卡 mission(h100.moos) - 惯导/深度数据:新增 uDevice_insData 消息解析,接入 UpperCommManager, pPowerMangerHost 注册监视,UpmsgTest 覆盖 - pPowerMangerHost 设备控制页增强(web/index.html) - 部署/运维脚本改为 4 个 systemd 服务(moosdb/pPowerManger/pPowerMangerHost/pCCU): deploy/clean-data/fetch-data 同步适配 - 协议文档:归档 0824 控制主机与复合管控器通信协议 xlsx 及关联 docx,移除旧 md - 测试:新增 pccu 单元/集成测试与 disSysTest Python 配电仿真 - 清理:移除未使用的 CCU 状态调试打印 coutMsg;.gitignore 补充编译产物/临时文件忽略
60 lines
2.0 KiB
C++
60 lines
2.0 KiB
C++
#ifndef PCCU_MESSAGE_H
|
||
#define PCCU_MESSAGE_H
|
||
|
||
#include <cstdint>
|
||
#include <cstddef>
|
||
#include <string>
|
||
#include <vector>
|
||
#include "ChecksumPolicy.h"
|
||
#include "Frame.h"
|
||
|
||
namespace ccu {
|
||
|
||
//============================================================================
|
||
// Message:协议消息抽象接口。
|
||
//
|
||
// 每条协议消息实现该接口。协议变更时只需:
|
||
// 1. 修改实现类的字段偏移/长度定义
|
||
// 2. 修改 encode()/decode() 中字段取值逻辑
|
||
// 无需改动上层(Comm / Web / DB / 主流程)。
|
||
//
|
||
// 提供统一的:
|
||
// - id()/name() :消息标识与显示名
|
||
// - checksum() :该校验策略
|
||
// - payloadLength() :数据域长度(不含 6 字节帧头与校验和)
|
||
// - encode()/decode() :业务值 <-> 完整帧
|
||
//============================================================================
|
||
|
||
class Message {
|
||
public:
|
||
virtual ~Message() = default;
|
||
|
||
virtual uint16_t id() const = 0;
|
||
virtual const char* name() const = 0;
|
||
virtual const ChecksumPolicy& checksum() const = 0;
|
||
|
||
// 数据域长度(不含 6 字节帧头与校验和)
|
||
virtual size_t payloadLength() const = 0;
|
||
// 整个协议包长度 = 6 + payloadLength + checksum.size()
|
||
size_t totalLength() const {
|
||
return FRAME_HEADER_LEN + payloadLength() + checksum().size();
|
||
}
|
||
|
||
// 业务值编码为完整帧(含帧头+数据域+校验和)
|
||
// obj 为具体业务对象指针(如 FcStatusValue*)
|
||
virtual std::vector<uint8_t> encode(const void* obj) const = 0;
|
||
|
||
// 从完整帧解析业务值;成功返回 true 并填充 obj
|
||
virtual bool decode(const std::vector<uint8_t>& frame, void* obj) const = 0;
|
||
|
||
// 供实现类解码前做通用校验:起始符 / id / 总长度 / 校验和
|
||
static bool validateFrame(const std::vector<uint8_t>& frame,
|
||
uint16_t expectId,
|
||
const ChecksumPolicy& policy,
|
||
size_t expectTotalLen);
|
||
};
|
||
|
||
} // namespace ccu
|
||
|
||
#endif // PCCU_MESSAGE_H
|