/** * @file myMms_s.h * @brief libmms_s 库对外的公共接口头文件 * * @details 本文件定义了: * - 自定义数据类型码(DATA_TYPE_*),用于标识 RTU 系统中各种数据类型的枚举值 * - 公共数据结构体:参数基类(stru_mms_s_param_base)、定值(stru_mms_s_setting)、 * 参数组(stru_mms_s_param)、控制(stru_mms_s_control) * - 回调函数类型定义 * - 库初始化与注册接口函数声明 */ #pragma once #include #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ // ===================== 自定义数据类型码 ===================== /* 布尔类型 */ #ifndef DATA_TYPE_B #define DATA_TYPE_B 1 #endif /* 有符号8位整数 */ #ifndef DATA_TYPE_S8 #define DATA_TYPE_S8 43 #endif /* 无符号8位整数 */ #ifndef DATA_TYPE_U8 #define DATA_TYPE_U8 32 #endif /* 有符号16位整数 */ #ifndef DATA_TYPE_S16 #define DATA_TYPE_S16 33 #endif /* 无符号16位整数 */ #ifndef DATA_TYPE_U16 #define DATA_TYPE_U16 45 #endif /* 有符号32位整数 */ #ifndef DATA_TYPE_S32 #define DATA_TYPE_S32 2 #endif /* 无符号32位整数 */ #ifndef DATA_TYPE_U32 #define DATA_TYPE_U32 35 #endif /* 有符号64位整数 */ #ifndef DATA_TYPE_L64 #define DATA_TYPE_L64 36 #endif /* 无符号64位整数 */ #ifndef DATA_TYPE_UL64 #define DATA_TYPE_UL64 37 #endif /* 单精度浮点数 */ #ifndef DATA_TYPE_F32 #define DATA_TYPE_F32 38 #endif /* 双精度浮点数 */ #ifndef DATA_TYPE_D64 #define DATA_TYPE_D64 39 #endif /* IP地址类型 */ #ifndef DATA_TYPE_IP #define DATA_TYPE_IP 100 #endif /* MAC地址类型 */ #ifndef DATA_TYPE_MAC #define DATA_TYPE_MAC 101 #endif /* 8字符定长字符串 */ #ifndef DATA_TYPE_C8 #define DATA_TYPE_C8 102 #endif /* 32字符定长字符串 */ #ifndef DATA_TYPE_C32 #define DATA_TYPE_C32 103 #endif /* 64字符定长字符串 */ #ifndef DATA_TYPE_C64 #define DATA_TYPE_C64 104 #endif /* 128字符定长字符串 */ #ifndef DATA_TYPE_C128 #define DATA_TYPE_C128 105 #endif /* 单字符 */ #ifndef DATA_TYPE_C1 #define DATA_TYPE_C1 106 #endif /* 可变长字符串 */ #ifndef DATA_TYPE_STR #define DATA_TYPE_STR 107 #endif /* 短地址字符串最大长度 */ #define MMS_S_STR_LEN 64 /* 参数组最大分组数(定值区最大数量) */ #define MMS_S_PARAM_MAX 16 /** * 参数/定值/控制的基础信息结构体 * @field saddr 短地址(映射到 IEC61850 模型中的 sAddr 属性) * @field desc 描述信息 * @field type 数据类型(对应 DATA_TYPE_* 枚举) * @field ctrl_model 控制模型类型 */ typedef struct { char saddr[MMS_S_STR_LEN]; char desc[MMS_S_STR_LEN]; uint8_t type; uint8_t ctrl_model; }stru_mms_s_param_base; /** * 定值数据结构体(一个定值点对应一个数据值) * @field base 基础信息(saddr / desc / type) * @field data 指向实际数据值的指针 */ typedef struct { stru_mms_s_param_base base; void *data; }stru_mms_s_setting; /** 定值回调函数类型:当定值被写入时调用 */ typedef void (*mms_s_setting_cb)(stru_mms_s_setting *p_setting, const char *p_data); /** * 参数数据结构体(一个参数点可对应多个定值区的值) * @field base 基础信息(saddr / desc / type) * @field param_num 有效参数组数量 * @field data 各组参数数据指针数组,最多 MMS_S_PARAM_MAX 个 */ typedef struct { stru_mms_s_param_base base; uint8_t param_num; void *data[MMS_S_PARAM_MAX]; }stru_mms_s_param; /** 参数回调函数类型:当参数区切换或被确认时调用 */ typedef void (*mms_s_param_cb)(stru_mms_s_param *p_param, const char *p_data, int setting_zone); /** * 控制对象数据结构体 * @field saddr 短地址 * @field desc 描述信息 * @field ctrl_model 控制模型类型 */ typedef struct { char saddr[MMS_S_STR_LEN]; char desc[MMS_S_STR_LEN]; uint8_t ctrl_model; }stru_mms_s_control; /** 控制操作回调函数类型:当控制命令被执行时调用 */ typedef void (*mms_s_control_cb)(stru_mms_s_control *p_control, uint8_t state); /** * 初始化 MMS 服务器 * @param icd_path ICD 模型文件路径 * @param port MMS 服务监听端口 * @return 0 成功,-1 失败 */ int mms_s_init(const char* icd_path, int port); /** * 开启/关闭调试输出开关 * @param on true 开启,false 关闭 */ void mms_s_dbg_switch(bool on); /** * 注册控制对象列表 * @param p_control 控制对象数组 * @param num 数组元素个数 * @param cb 控制操作回调函数(可选,传 NULL 则不注册) * @return 0 成功,-1 失败 */ int mms_s_control_register(stru_mms_s_control *p_control, uint16_t num, mms_s_control_cb cb); /** * 注册定值列表 * @param p_setting 定值对象数组 * @param num 数组元素个数 * @param cb 定值写入回调函数(可选,传 NULL 则不注册) * @return 0 成功,-1 失败 */ int mms_s_setting_register(stru_mms_s_setting *p_setting, uint16_t num, mms_s_setting_cb cb); /** * 注册参数列表(参数支持多定值区) * @param p_param 参数对象数组 * @param num 数组元素个数 * @param cb 参数回调函数(可选,传 NULL 则不注册) * @return 0 成功,-1 失败 */ int mms_s_param_register(stru_mms_s_param *p_param, uint16_t num, mms_s_param_cb cb); /** * 设置 MMS 文件服务的根路径 * @param file_path 文件存储路径,传 NULL 或空串则禁用文件服务 * @return 0 成功 */ int mms_s_file_path_set(const char* file_path); #ifdef __cplusplus } #endif /* __cplusplus */