#ifndef AVIONICS_NETWORK_ENV_APP_HPP #define AVIONICS_NETWORK_ENV_APP_HPP #include #include #include #include // ═══════════════════════════════════════════════════════════════ // 公共类型定义 // ═══════════════════════════════════════════════════════════════ /// @brief 总线类型枚举 enum class BusType { Ethernet, RS422, CAN, CANFD, Analog, Discrete }; /// @brief 存储状态枚举 enum class StorageStatus { Healthy, Warning, Full, DiskFailure, PathSwitched }; /// @brief CAN 报文结构体(8–64 字节 Hex 编码) struct CanFrame { uint32_t id; ///< CAN ID(标准帧 11 位 / 扩展帧 29 位) bool isExtended; ///< true=扩展帧, false=标准帧 bool isCanFd; ///< true=CANFD, false=CAN2.0 uint8_t dataLen; ///< 数据长度(0-64) uint8_t data[64]; ///< 数据域 time_t timestamp; ///< 时间戳 }; /// @brief 原始数据帧(0–64 字节) struct RawDataFrame { BusType busType; uint8_t len; uint8_t data[64]; time_t timestamp; }; /// @brief 过滤后的有效数据(结构体形式输出) struct ValidData { uint32_t id; uint8_t dataLen; uint8_t data[64]; time_t timestamp; BusType sourceBus; }; /// @brief 兼容格式帧(PPU 转换后的输出) struct CompatibleFrame { uint32_t id; bool isExtended; uint8_t dataLen; uint8_t data[64]; time_t timestamp; }; /// @brief 查询条件结构体 struct QueryCondition { time_t startTime; time_t endTime; uint32_t channelId; uint32_t maxResults; }; // ═══════════════════════════════════════════════════════════════ // DAU — 数据采集单元(Data Acquisition Unit) // 职责:接收多总线原始数据,完成 ID 过滤、波特率适配、错误帧 // 处理、睡眠/唤醒管理及总线负载监控。 // ═══════════════════════════════════════════════════════════════ namespace dau { /** * @brief 接收原始数据帧,执行 ID 过滤、波特率适配和基础校验。 * * 根据 BusType 识别输入总线类型,对数据帧进行合法性检查与 ID 过滤, * 输出有效数据。遇到错误帧时记录错误日志。 * * @requirement(name="基础通用通讯功能", id="SRS-F-01-001") * 接收以太网、RS422、CAN、模拟量和离散量的基本通讯数据,进行 ID 过滤、 * 波特率适配、错误帧处理、睡眠/唤醒管理及总线负载监控。 * * @param input 原始输入数据帧 * @param output [out] 过滤后的有效数据 * @param errorLog [out] 错误日志信息 * @return true 处理成功且数据有效 * @return false 数据被过滤或发生错误 */ bool DAU_Process(const RawDataFrame& input, ValidData& output, std::string& errorLog); /** * @brief 设置睡眠/唤醒状态。 * * @param sleep true 进入睡眠模式,false 唤醒。 */ void DAU_SetSleep(bool sleep); /** * @brief 查询当前总线负载率(百分比 0-100)。 * * @return uint32_t 总线负载百分比。 */ uint32_t DAU_GetBusLoad(); } // namespace dau // ═══════════════════════════════════════════════════════════════ // PPU — 协议处理单元(Protocol Processing Unit) // 职责:实现 CAN2.0 ↔ CANFD 协议识别与转换,遵循 ARINC825 标准, // 兼容标准帧与扩展帧格式;不支持格式记录日志并丢弃。 // ═══════════════════════════════════════════════════════════════ namespace ppu { /** * @brief 将输入 CAN 帧转换为兼容格式(CAN2.0 ↔ CANFD)。 * * 根据 ARINC825 标准进行协议转换。若输入帧格式不被支持, * 函数返回 false 并在日志中记录详细原因。 * * @requirement(name="协议兼容与互通信功能", id="SRS-F-01-002") * 支持 CAN2.0 与 CANFD 设备间的互通信,依据 ARINC825 标准进行协议转换 * 或适配,兼容标准帧与扩展帧格式;若格式不支持,则记录日志并丢弃。 * * @param input 输入 CAN/CANFD 帧 * @param output [out] 转换后的兼容格式帧 * @param log [out] 转换日志或错误说明 * @return true 转换成功 * @return false 格式不支持,已丢弃 */ bool PPU_Convert(const CanFrame& input, CompatibleFrame& output, std::string& log); /** * @brief 检查 CAN 帧格式是否被当前协议栈支持。 * * 对输入帧的 ID、扩展标识、数据长度及协议类型进行综合检查。 * * @requirement(name="协议兼容与互通信功能", id="SRS-F-01-002") * 兼容标准帧与扩展帧格式;若格式不支持,则记录日志并丢弃。 * * @param frame 待检查的 CAN 帧 * @param reason [out] 若不支持,返回具体原因 * @return true 格式支持 * @return false 格式不支持 */ bool PPU_Check(const CanFrame& frame, std::string& reason); } // namespace ppu // ═══════════════════════════════════════════════════════════════ // DSU — 数据存储单元(Data Storage Unit) // 职责:实时总线数据流缓冲预处理、持久化写入、磁盘故障告警与 // 路径切换、数据查询检索按时序回放。 // ═══════════════════════════════════════════════════════════════ namespace dsu { /** * @brief 将数据流写入持久化存储。 * * 接收实时数据流进行缓冲预处理,按时间戳+通道ID分类, * 批量写入高速存储介质。 * * @requirement(name="数据存储功能", id="SRS-F-02-001") * 将总线数据持久化保存,接收实时数据流并进行缓冲预处理, * 按时间戳或事件索引写入存储介质。 * * @param dataStream 待存储的原始字节流 * @param channelId 通道标识 * @param timestamp 数据时间戳 * @return true 写入成功 * @return false 写入失败 */ bool DSU_Write(const std::vector& dataStream, uint32_t channelId, time_t timestamp); /** * @brief 检查磁盘健康状态,故障时告警并尝试切换存储路径。 * * 定期检查当前存储介质的可用空间与健康状态。 * 若检测到磁盘故障,发出告警日志并尝试切换至备用路径。 * * @requirement(name="数据存储功能", id="SRS-F-02-001") * 当发生磁盘故障时,应发出告警并尝试切换至备用存储路径。 * * @return StorageStatus 当前存储状态 */ StorageStatus DSU_CheckDisk(); /** * @brief 根据查询条件检索已存储的数据。 * * 支持按时间戳范围或事件索引进行数据检索。 * * @requirement(name="数据管理与回放功能", id="SRS-F-02-002") * 支持对已存储数据的查询、检索,并能够按照原始时序精确回放; * 若数据损坏,应跳过坏块并记录日志。 * * @param condition 查询条件 * @param results [out] 检索结果列表(每个元素为一个数据块) * @param log [out] 操作日志(含损坏数据跳过记录) * @return true 查询成功 * @return false 查询失败 */ bool DSU_Query(const QueryCondition& condition, std::vector>& results, std::string& log); /** * @brief 按原始时序精确回放数据流。 * * 从已存储的数据中按时间戳排序输出字节流,回放间隔保持原始时间戳间隔。 * * @requirement(name="数据管理与回放功能", id="SRS-F-02-002") * 能够按照原始时序精确回放;回放过程需保持原始时间戳间隔。 * * @param condition 查询条件(指定回放范围) * @param replayOutput [out] 回放字节流,按原始时间戳排序 * @param log [out] 操作日志 * @return true 回放成功 * @return false 回放失败或无数据 */ bool DSU_Replay(const QueryCondition& condition, std::vector& replayOutput, std::string& log); } // namespace dsu #endif // AVIONICS_NETWORK_ENV_APP_HPP