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

#ifndef IEC61850_AC_DIR_H
#define IEC61850_AC_DIR_H

#include "ac_reqm.h"



#ifdef __cplusplus
extern "C" {
#endif

/*#define MAX_TDL_LEN  20240  // 影射层使用的最大TDL长度 */

/**  ld目录服务请求所需信息结构定义*/
typedef struct 
{
	ST_CHAR *ld_name;            /**<  ld名称*/
    AI_OBJ_TYPE type;                 /**<  请求成员类型ln or ds*/
	U_AC_REQ_DONE u_getldd_done;      /**<  用户回调函数指针*/
}AC_GETLDD_REQ_INFO;

/**  获取对象属性服务请求所需信息结构定义*/
typedef struct 
{
	AI_OBJ_REF obj_ref;            /**<  对象参引*/
	U_AC_REQ_DONE u_getobjdef_done;      /**<  用户回调函数指针*/
}AC_GETOBJDEF_REQ_INFO;

/**  ds目录服务请求所需信息结构定义*/
typedef struct
{
	AI_OBJ_REF ds_ref;                   /**< 数据集参引*/ 
	U_AC_REQ_DONE u_getdsd_done;     /**<  用户回调函数指针*/
} AC_GETDSD_REQ_INFO;
/**
 * 读ied目录服务接口.
 * 该函数会创建请求结构,并把请求加入统一请求链表中,等待统一请求管理
 * @param   srv_id		      服务器ID
 * @param   u_req_done		  用户回调函数指针
 * @param   timeout		      请求超时时间,单位为秒
 * @param   req		          传出的请求结构指针地址,应用层要申请存放请求结构指针的内存
 * @retval  SD_SUCCESS        服务加入请求链表成功
 * @retval  SD_FAILURE        服务加入请求链表失败
 */
ST_RET ac_get_ied_dir(ST_INT srv_id, U_AC_REQ_DONE u_req_done, ST_INT timeout, AC_REQ_CTRL **req);

/**
 * 发送读ied目录服务接口，此时请求已从链表中取出,该接口被统一请求管理函数调用处理
 * @param   ac_req_ctrl		  请求结构
 * @retval  SD_SUCCESS        发送成功
 * @retval  SD_FAILURE        发送失败
 */
ST_RET ac_send_getIedDir_req(AC_REQ_CTRL *ac_req_ctrl);

/**
 * 释放giedd_req_ctrl,该接口被统一请求管理中函数调用处理
 * @param   gvmdd_req_ctrl	  目录服务结构
 * @retval  无
 */
ST_VOID ac_cleanup_gieddReqCtrl(AC_GIEDD_REQ_CTRL *giedd_req_ctrl);

/**
 * 读ld目录服务接口，请求加入请求链表中
 * @param   srv_id		      服务器ID
 * @param   getldd_req_info	  ld目录服务请求所需信息结构定义
 * @param   time_out		  请求超时时间,单位为秒
 * @param   req               传出的请求结构指针地址,应用层要申请存放请求结构指针的内存
 * @retval  SD_SUCCESS        服务加入请求链表成功
 * @retval  SD_FAILURE        服务加入请求链表失败
 */
ST_RET ac_get_ld_dir(ST_INT srv_id, AC_GETLDD_REQ_INFO *getldd_req_info, ST_INT time_out, AC_REQ_CTRL **req);

/**
 * 发送读ld目录服务接口，请求已从链表中取出,该接口被统一请求管理函数调用处理
 * @param   ac_req_ctrl		  请求结构
 * @retval  SD_SUCCESS        发送成功
 * @retval  SD_FAILURE        发送失败
 */
ST_RET ac_send_getLdDir_req(AC_REQ_CTRL *ac_req_ctrl);

/**
 * 释放gdomd_req_ctrl,该接口被统一请求管理中函数调用处理
 * @param   gdomd_req_ctrl	  目录服务结构
 * @retval  无
 */
ST_VOID ac_cleanup_glddReqCtrl(AC_GLDD_REQ_CTRL *gldd_req_ctrl);

/**
 * 读obj定义服务接口，请求加入请求链表中
 * @param   srv_id		       服务器ID
 * @param   getobjdef_req_info 获取对象属性服务请求所需信息结构定义
 * @param   time_out		   请求超时时间,单位为秒
 * @param   req                传出的请求结构指针地址,应用层要申请存放请求结构指针的内存
 * @retval  SD_SUCCESS         服务加入请求链表成功
 * @retval  SD_FAILURE         服务加入请求链表失败
 */
ST_RET ac_get_obj_definition(ST_INT srv_id, AC_GETOBJDEF_REQ_INFO *getobjdef_req_info, ST_INT time_out, AC_REQ_CTRL **req);

/**
 * 发送读obj定义服务接口，请求已从链表中取出,该接口被统一请求管理函数调用处理
 * @param   ac_req_ctrl		  请求结构
 * @retval  SD_SUCCESS        发送成功
 * @retval  SD_FAILURE        发送失败
 */
ST_RET ac_send_getObjDef_req(AC_REQ_CTRL *ac_req_ctrl);

/**
 * 释放gobjdef_req_ctrl,该接口被统一请求管理中函数调用处理
 * @param   gobjdef_req_ctrl	  目录服务结构
 * @retval  无
 */
ST_VOID ac_cleanup_gobjdefReqCtrl(AC_GOBJDEF_REQ_CTRL *gobjdef_req_ctrl);

/**
 * 读ds目录服务接口，请求加入请求链表中
 * @param   srv_id		      服务器ID
 * @param   getdsd_req_info	  ds目录服务请求所需信息结构定义
 * @param   time_out		  请求超时时间,单位为秒
 * @param   req               传出的请求结构指针地址,应用层要申请存放请求结构指针的内存
 * @retval  SD_SUCCESS        服务加入请求链表成功
 * @retval  SD_FAILURE        服务加入请求链表失败
 */
ST_RET ac_get_ds_dir(ST_INT srv_id, AC_GETDSD_REQ_INFO *getdsd_req_info, ST_INT time_out, AC_REQ_CTRL **req);

/**
 * 发送读ds目录服务接口，请求已从链表中取出,该接口被统一请求管理函数调用处理
 * @param   ac_req_ctrl		  请求结构
 * @retval  SD_SUCCESS        发送成功
 * @retval  SD_FAILURE        发送失败
 */
ST_RET ac_send_getDsDir_req(AC_REQ_CTRL *ac_req_ctrl);

/**
 * 释放gdsd_req_ctrl,该接口被统一请求管理函数调用处理
 * @param   gnvld_req_ctrl	  目录服务结构
 * @retval  无
 */
ST_VOID ac_cleanup_gdsdReqCtrl(AC_GDSD_REQ_CTRL *gdsd_req_ctrl);

/**
 * acsi类型到mms类型转换
 * @param   obj_type		要转换的acsi类型
 * @retval  ST_INT16        mms类型
 */
ST_INT16  ai_obj_type_to_mms_class(AI_OBJ_TYPE obj_type);
	
#ifdef __cplusplus
}
#endif
#endif /** IEC61850_AC_DIR_H */
