|
|
/****************************************************************************/
|
|
|
/* Copyright (c) 2007,许继集团有限公司 */
|
|
|
/* All rights reserved. */
|
|
|
/* */
|
|
|
/* 模块描述: */
|
|
|
/** 数据转换模块实现MMS数据〈----〉primval数组之间的转换接口函数
|
|
|
* @file ai_objval.h */
|
|
|
/* */
|
|
|
/* 日期 作者 注释 */
|
|
|
/* 2007/07/16 YH 创建文件 */
|
|
|
/****************************************************************************/
|
|
|
#ifndef IEC61850_AI_OBJVAL_INCLUDED
|
|
|
#define IEC61850_AI_OBJVAL_INCLUDED
|
|
|
|
|
|
#include "ai_obj.h"
|
|
|
#include "sx_log.h"
|
|
|
#include "mvl_log.h"
|
|
|
#include "ai_objid.h"
|
|
|
#include "ai_objrw.h"
|
|
|
#include "mmsobj.h"
|
|
|
#include "ai_log.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
extern "C" {
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
|
*基本类型数据信息
|
|
|
*/
|
|
|
typedef struct ai_prim_info
|
|
|
{
|
|
|
ST_INT prim_total_num;
|
|
|
ST_INT prim_num;
|
|
|
ST_INT prim_offset;
|
|
|
}AI_PRIM_INFO;
|
|
|
|
|
|
/**
|
|
|
* 释放对象信息存储内存接口
|
|
|
* @param objVals 对象结构指针
|
|
|
* @return ST_VOID
|
|
|
*/
|
|
|
ST_VOID ai_cleanup_objVals(AI_OBJ_VAL *objVal);
|
|
|
|
|
|
/**
|
|
|
* 由简单类型的rt得到AI_VAL_TYPE类型及长度
|
|
|
*/
|
|
|
ST_RET ai_get_type_info_by_primRt(RUNTIME_TYPE *rt, AI_VAL_TYPE *type_out, ST_INT *len_out);
|
|
|
|
|
|
/**
|
|
|
* 由基本数据类型DA的AI_PRIM_VAL数组生成 MMS数据缓冲区数据Data
|
|
|
* @param valist 以数组形式申请内存空间
|
|
|
* @param num_var 数组大小
|
|
|
* @param data MMS数据缓冲区地址指针,输出
|
|
|
* @param type_id MMS数据类型ID
|
|
|
* @retval SD_SUCCESS 成功
|
|
|
* @retval SD_FAILURE 失败
|
|
|
*/
|
|
|
ST_RET ai_primVals_to_compVal(AI_PRIM_VAL *valist, ST_INT num_var, ST_VOID *data, ST_INT type_id);
|
|
|
|
|
|
/**
|
|
|
* MMS数据缓冲区数据Data的解析函数,生成基本数据类型DA的AI_PRIM_VAL数组。
|
|
|
* *valist的内存由函数内部申请,由本接口使用者释放,一般可调用ai_cleanup_objVals接口函数清理。
|
|
|
* @param data MMS数据缓冲区地址指针
|
|
|
* @param type_id MMS数据类型ID
|
|
|
* @param valist 传出的解析结果,以数组形式申请内存空间
|
|
|
* @param num_out 数组大小,传出参数
|
|
|
* @retval SD_SUCCESS 成功
|
|
|
* @retval SD_FAILURE 失败
|
|
|
*/
|
|
|
ST_RET ai_compVal_to_primVals(ST_VOID *data, ST_INT type_id, AI_PRIM_VAL **valist, ST_INT *num_out);
|
|
|
|
|
|
/**
|
|
|
* 获取对象的某个属性的值,这个属性必须是简单数据类型
|
|
|
* @param ied ied对象
|
|
|
* @param obj_id 对象id
|
|
|
* @param attr_name 属性的名字
|
|
|
* @param data_size 属性的值所占内存的大小,用户必须事先知道此值
|
|
|
* @param *data 属性值缓冲区,调用者分配内存
|
|
|
*/
|
|
|
ST_RET ai_get_obj_attr_val(AI_IED_CTRL *ied, AI_OBJ_ID obj_id,
|
|
|
ST_CHAR *attr_name, ST_INT data_size, ST_VOID *data);
|
|
|
|
|
|
/**
|
|
|
* 克隆对象数据,AI_OBJ_VAL类型的数据,用户需释放最终得到的dest,调用ai_cleanup_obj_val
|
|
|
* 释放dest数组中的每个obj_val,然后再释放dest指针
|
|
|
* @param dest 目标obj_vals,数组
|
|
|
* @param src 源obj_vals,数组
|
|
|
* @param num 对象值的个数
|
|
|
*/
|
|
|
ST_VOID ai_clone_obj_vals(AI_OBJ_VAL **dest, AI_OBJ_VAL *src, ST_INT num);
|
|
|
|
|
|
/**
|
|
|
*获取基本数据类型长度
|
|
|
*/
|
|
|
ST_INT ai_get_Data_Len(AI_VAL_TYPE type);
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
#endif /** !IEC61850_AI_OBJVAL_INCLUDED */
|