#pragma once #include "myBase.h" #include "myTask.h" #include #include #include #define MSG_SIZE 2048 // 消息队列消息大小 #define TIMER_NUM 3 // 定时器个数 // 通用定时器事件 #define EV_TIMER1 (0x01 << 0) // 定时器1 10ms #define EV_TIMER2 (0x01 << 1) // 定时器2 100ms #define EV_TIMER3 (0x01 << 2) // 定时器3 1000ms // 通讯线程事件 #define EV_COM_RX_IEC (0x01 << 3) // 收到IEC消息事件 #define EV_COM_RX_SELF_PTL (0x01 << 4) // 收到ICP67消息事件 // iec线程事件 #define EV_IEC_RX_COM (0x01 << 3) // 收到i端口消息事件 // icp67线程事件 #define EV_SELF_PTL_RX_COM (0x01 << 3) // 收到端口消息事件 // #define EV_SELF_PTL_RX_IEC (0x01 << 4) // 收到iec消息事件 // webserver线程事件 // iec61850m线程事件 // datacenter线程事件 // 消息队列枚举 — 由 app_msg_queue.h X-macro 自动生成 #define APP_MQ(name, cfg_name, msg_size, msg_num) ENUM_MQ_##name, typedef enum { #include "app_msg_queue.h" ENUM_MQ_MAX }enun_msg_queue; #undef APP_MQ // 应用枚举 — 由 app_modules.h X-macro 自动生成 #define APP_MODULE(name, cfg_name, init1, init2, func) ENUM_APP_##name, typedef enum { #include "app_modules.h" ENUM_APP_MAX }enum_app; #undef APP_MODULE // 应用消息队列结构体 typedef struct { const char *name; // 消息队列名称 uint32_t msg_size; // 消息大小 uint32_t msg_num; // 消息个数 stru_task_msg_queue_t p_msg_queue; // 消息队列指针 }stru_app_msg_queue; // 通讯收发数据结构体 typedef struct { uint16_t rx_len; // 接收数据长度 uint16_t tx_len; // 发送数据长度 uint8_t rx[MSG_SIZE]; // 接收数据 uint8_t tx[MSG_SIZE]; // 发送数据 }stru_rtx_data; // 消息结构 #pragma pack(1) typedef struct { uint32_t interface; // 接口类型 uint16_t len; // 数据长度 uint8_t backup[2]; // 备用字节 uint8_t data[0]; // 数据 }stru_msg_head; #pragma pack() // icp67协议头 #pragma pack(1) typedef struct { uint8_t head1; // 0x67 uint16_t len; // 数据长度 uint8_t head2; // 0x67 uint8_t data[0]; // 数据 }stru_icp67_head; #pragma pack() // iec协议头 #pragma pack(1) typedef struct { uint8_t head; // 0x68 uint8_t data[0]; // 数据 }stru_iec_head; #pragma pack() // 协议头联合体 typedef union { stru_icp67_head icp67; stru_iec_head iec; }stru_protocol_head; // 应用初始化函数指针类型 typedef int (*app_init_cb)(void *arg); // 应用线程函数指针类型 typedef void * (*app_func_cb)(void *arg); // 应用结构体 typedef struct { const char *name; // 应用名称 uint32_t app_id; // 应用ID app_init_cb app_init1; // 应用初始化函数1 app_init_cb app_init2; // 应用初始化函数2 app_func_cb fun_cb; // 应用线程函数 void *arg; // 应用线程函数参数 pthread_t thread; // 应用线程句柄 stru_task_event_t p_event; // 应用事件 stru_rtx_data rtx; // 应用收发数据结构体 uint32_t timer_arg[TIMER_NUM]; // 应用定时器参数 stru_task_timer_t p_timer[TIMER_NUM]; // 应用定时器指针 uint32_t run_cnt; // 应用运行计数 }stru_app; // 消息队列指针获取函数,根据消息队列ID获取消息队列指针 stru_app_msg_queue *app_get_msg_queue_ptr(uint32_t mq_id); // 应用指针获取函数,根据应用ID获取应用指针 stru_app *app_get_ptr(uint32_t app_id); // MQ 目标映射 — MQ 发送完成后要通知的目标 app_id 和 event typedef struct { uint32_t app_id; // 目标应用 ID uint32_t event; // 通知事件 }stru_mq_target; // 获取 MQ 对应的通知目标(app_id + event),解耦发送方对接收方 app_id 的硬编码 stru_mq_target app_get_mq_target(uint32_t mq_id); // 应用初始化与线程函数声明 — 由 app_modules.h X-macro 自动生成 #define APP_MODULE(name, cfg_name, init1, init2, func) \ extern int init1(void *arg); \ extern int init2(void *arg); \ extern void *func(void *arg); #include "app_modules.h" #undef APP_MODULE // 通讯通道获取接口类型,通过通道ID获取 uint32_t com_channel_interface_get(uint32_t comm_id); // ======== 异步命令输出分发器(命令模块通用接口,不感知 WebSocket) ======== // 格式化输出到前端命令终端 void async_cmd_printf(const char *module, const char *fmt, ...); // 命令完成通知(成功/失败 + 消息) void async_cmd_complete(const char *module, bool success, const char *msg); // ftu配置解析相关结构体和函数声明 // 基础信息 typedef struct { std::string saddr; std::string desc; uint16_t inf; }stru_self_ptl_cfg_base; // 参数信息 typedef struct { stru_self_ptl_cfg_base base; uint8_t type; // uint8_t dc_type; uint8_t num; std::string unit; std::string min; std::string max; std::string step; std::vector val; std::vector default_value; }stru_self_ptl_cfg_param; // 所有配置信息 typedef struct { bool init; std::vector st_vec; std::vector mx_vec; std::vector co_vec; std::vector dd_vec; uint8_t ao_md5[16]; uint8_t param_md5[16]; std::vector ao_vec; std::vector param_vec; }stru_self_ptl_cfg; // 解析配置文件接口 int self_ptl_cfg_parse(const std::string &path); // 获取配置结构体指针接口 stru_self_ptl_cfg* self_ptl_cfg_get();