/****************************************************************************/
/* Copyright (c) 2007,许继集团有限公司                                      */
/* All rights reserved.                                                     */
/*                                                                          */
/*  模块描述：                                                              */
/** 客户端控制服务模块，提供控制服务相关操作接口
 *  @file  ac_ctrl.h                                                       */
/*                                                                          */
/* 日期         作者    注释                                                */
/* 2007/09/30   ZYZ     创建文件                                            */
/****************************************************************************/

#ifndef IEC61850_AC_CTRL_H
#define IEC61850_AC_CTRL_H

#include "ac_reqm.h"


#ifdef __cplusplus
extern "C" {
#endif

/**  控制服务服务请求所需信息结构定义,选择,操作,取消通用结构*/
typedef struct
{
	AI_OBJ_ID ctrl_obj;            //对象id
	AC_CTRL_VALUE ctrl_val;                   
	U_AC_REQ_DONE u_ctrl_done;     //用户回调函数指针
} AC_CTRL_REQ_INFO;
/**
 * 常规安全模式的选择服务.
 * 先找到SBO属性的id，下发读SBO的请求
 * @param srv_id        服务器id
 * @param sel_req_info  控制请求信息结构
 * @param time_out      超时时间,单位为秒
 * @param req           传出的选择请求结构
 * @return SD_SUCCESS or SD_FAILURE 
 */
ST_RET ac_select(ST_INT srv_id, AC_CTRL_REQ_INFO *sel_req_info, ST_INT time_out, AC_REQ_CTRL **req);


/**
 * 增强安全模式的选择服务.
 * 先找到SBOw属性的id，下发读SBOw的请求
 * @param srv_id        服务器id
 * @param selw_req_info 控制请求信息结构
 * @param time_out      超时时间,单位为秒
 * @param req           传出的选择请求结构
 * @return SD_SUCCESS or SD_FAILURE
 */
ST_RET ac_select_with_val(ST_INT  srv_id, AC_CTRL_REQ_INFO *selw_req_info, ST_INT time_out, AC_REQ_CTRL **req);


/**
 * 取消服务.
 * 先找到Cancel属性的id，下发写Cancel的请求
 * @param srv_id          服务器id
 * @param cancel_req_info 控制请求信息结构
 * @param time_out        超时时间,单位为秒
 * @param req             传出的取消请求结构
 * @return SD_SUCCESS or SD_FAILURE
 */
ST_RET ac_cancel(ST_INT srv_id, AC_CTRL_REQ_INFO *cancel_req_info, ST_INT time_out, AC_REQ_CTRL **req);

/**
 * 控制执行服务.
 * 先找到Oper属性的id，下发写Oper的请求
 * @param srv_id          服务器id
 * @param oper_req_info   控制请求信息结构
 * @param time_out        超时时间,单位为秒
 * @param req             传出的操作请求结构
 * @return SD_SUCCESS or SD_FAILURE
 */
ST_RET ac_operate(ST_INT srv_id, AC_CTRL_REQ_INFO *oper_req_info, ST_INT time_out, AC_REQ_CTRL **req);
	
#ifdef __cplusplus
}
#endif
#endif /** IEC61850_AC_CTRL_H */




