/****************************************************************************/
/* Copyright (c) 2007,许继集团有限公司                                      */
/* All rights reserved.                                                     */
/*                                                                          */
/*  模块描述：                                                              */
/** 写服务模块对外接口声明及数据结构定义。
 *  @file  ac_write.h                                                      
 *  @author yh  huiy@xjgc.com												*/
/*                                                                          */
/* 日期         作者    注释                                                */
/* 2007/07/16   YH    创建文件                                              */
/****************************************************************************/

#ifndef IEC61850_WRITE_INCLUDED
#define IEC61850_WRITE_INCLUDED

#include "ac_reqm.h"
#include "ac_srvm.h"
#include "ai_objid.h"
#include "ai_sem.h"
#include "ai_obj.h"
#include "ai_objrw.h"
#include "ai_objval.h"

#ifdef __cplusplus
extern "C" {
#endif

/**  写服务请求所需信息结构定义*/
typedef struct 
{
	AI_OBJ_VAL *obj_vals;           /**< 命名变量的值信息结构指针*/
	ST_INT  num_obj;                /**< 命名变量总数*/
    U_AC_REQ_DONE u_write_done;     /**<  用户回调函数指针*/ 
}AC_WRITE_REQ_INFO;

/**
 * 写服务请求构造、并加入待发送请求队列，此接口通过指定通道下发请求
 * @param  srv_id		服务ID
 * @param  ac_reqInfo	请求信息
 * @param  time_out		请求超时时间
 * @param  chnl			通道号，请求通过此通道下发请求
 * @param  ac_reqCtrl_out  请求结构（输出）
 * @retval SD_FAILURE   失败
 * @retval SD_SUCCESS   成功
 */
ST_RET  ac_write_obj_value_chnl(ST_INT srv_id, AC_WRITE_REQ_INFO* ac_reqInfo, 
						  ST_INT time_out, AC_CHANNEL chnl, AC_REQ_CTRL **ac_reqCtrl_out);

/**
 * 读服务请求构造、并加入待发送请求队列，通过主通道下发请求
 * @param  srvId		   服务ID
 * @param  ac_reqInfo	   请求信息
 * @param  time_out		   请求超时时间
 * @param  ac_reqCtrl_out  请求结构（输出）
 * @retval SD_FAILURE	   失败
 * @retval SD_SUCCESS	   发送
 */
ST_RET  ac_write_obj_value(ST_INT srv_id, AC_WRITE_REQ_INFO* ac_reqInfo, 
						  ST_INT time_out, AC_REQ_CTRL **ac_reqCtrl_out);
/**
 * 释放AC_WRITE_REQ_CTRL结构成员所占资源
 * obj_vals、results成员资源
 * @param  reqCtrl   请求结构指针
 * @return ST_VOID
 */
ST_VOID ac_cleanup_writeReqCtrl(AC_WRITE_REQ_CTRL *reqCtrl);

/**
 * 发送一个写服务请求
 * @param  acReqCtrl   请求结构指针
 * @return SD_FAILURE  发送失败；  SD_SUCCESS 发送成功
 */
ST_RET  ac_send_write_req(AC_REQ_CTRL *acReqCtrl);


/**
 * 释放MVL_WRITE_REQ_INFO结构占用的全部内存
 * @param  writeInfo      结构内存头指针
 * @param  obj_num        变量总数
 * @param  ac_reqCtrl     请求结构指针
 * @return ST_VOID
 */
ST_VOID ac_destroy_mvlWriteReqInfo(MVL_WRITE_REQ_INFO *writeInfo, ST_INT obj_num, AC_REQ_CTRL *ac_reqCtrl);

#ifdef __cplusplus
}
#endif


#endif /** ACSI_READ_INCLUDE */









