/****************************************************************************/
/* Copyright (c) 2007,许继集团有限公司                                      */
/* All rights reserved.                                                     */
/*                                                                          */
/*  模块描述：                                                              */
/** 对象空间对象值的操作接口
 *  @file  ai_objrw.h                                                       */
/*                                                                          */
/* 日期         作者    注释                                                */
/* 2007/07/16   YH     创建文件                                            */
/****************************************************************************/
#ifndef IEC61850_AI_OBJRW_INCLUDED
#define IEC61850_AI_OBJRW_INCLUDED

#include "glbtypes.h"
#include "scl.h"
#include "mvl_defs.h"
#include "mms_mp.h"
#include "ai_def.h"
#include "ai_obj.h"
#include "sx_log.h"
#include "mvl_log.h"
#include "ai_objid.h"
#include "ai_objval.h"
#include "ai_log.h"


#ifdef __cplusplus
extern "C" {
#endif

/** 
 * 通过对象ID，VMD指针获取对象的值信息数组。
 * 本函数内申请了objVal_out成员prim_vals及prim_ids指针的内存，必须由使用者释放，一般调用
 * @param  obj_id		对象的ID 
 * @param  vmd		    对象空间结构
 * @param  obj_val		对象值信息结构，输出
 * @retval SD_FAILURE   失败
 * @retval SD_SUCCESS   成功
 */
ST_RET ai_read_obj_primVals(AI_OBJ_ID obj_id, AI_IED_CTRL *ied, AI_OBJ_VAL *objVal_out);

/** 
 * 获取对象在对象空间中的值的指针
 * @param  obj_id		对象的ID 
 * @param  vmd		    对象空间结构
 * @param  dataSize_out	对象值大小，输出
 * @return  对象指针
 */
ST_VOID *ai_get_obj_data_ptr(AI_OBJ_ID obj_id, AI_IED_CTRL *ied, ST_INT *dataSize_out);

/** 
 * 通过对象ID，VMD指针写对象的值信息
 * @param  obj_id		对象的ID 
 * @param  vmd		    对象空间结构
 * @param  obj_val		对象值信息结构
 * @retval SD_FAILURE   失败
 * @retval SD_SUCCESS   成功
 */
ST_RET ai_write_obj_primVals(AI_OBJ_ID obj_id, AI_IED_CTRL *ied, AI_OBJ_VAL *obj_val);

/** 
 * 通过对象ID，VMD指针获取对象的值的存储区头指针，数据大小。
 * *data_out内存由本函数接口申请，使用者必须释放此内存。
 * @param  obj_id		对象的ID 
 * @param  vmd		    对象空间结构
 * @param  data  		对象值存储区头指针，输出
 * @param  data_size	对象值大小，输出
 * @retval SD_FAILURE   失败
 * @retval SD_SUCCESS   成功
 */
ST_RET ai_read_obj_compVal(AI_OBJ_ID obj_id, AI_IED_CTRL *ied, ST_VOID **data_out, ST_INT *dataSize_out);

/** 
 * 通过对象ID，VMD指针写对象的值
 * @param  obj_id		对象的ID 
 * @param  vmd		    对象空间结构
 * @param  data  		对象值存储区头指针
 * @param  data_size	对象值大小
 * @param  val_chg	    变化标志
 * @retval SD_FAILURE   失败
 * @retval SD_SUCCESS   成功
 */
ST_RET ai_write_obj_compVal(AI_OBJ_ID obj_id, AI_IED_CTRL *ied, ST_VOID *data, ST_INT data_size, ST_BOOLEAN *val_chg);

#ifdef __cplusplus
}
#endif

#endif	/** !IEC61850_AI_MSOBJ_INCLUDED	*/
