/****************************************************************************/
/* Copyright (c) 2007,许继集团有限公司                                      */
/* All rights reserved.                                                     */
/*                                                                          */
/*  模块描述：                                                              */
/** 客户端站点管理模块，提供站点初始化、站点状态处理及其他操作接口
 *  @file  ac_srvm.h                                                        */
/*                                                                          */
/* 日期         作者    注释                                                */
/* 2007/07/14   ZYZ     创建文件                                            */
/****************************************************************************/
#ifndef IEC61850_AC_SRVM_H
#define IEC61850_AC_SRVM_H

#include "ac_srvmgs.h"


#ifdef __cplusplus
extern "C" {
#endif

extern ST_CHAR scd_path_name[];

/**
 * 对象空间创建用户回调函数接口     
 */
extern ST_VOID (*u_ac_on_srv_created)(ST_INT srv_id, CREATE_STATE cre_state);

/**
 * 数据刷新完毕用户回调函数接口     
 */
extern ST_VOID (*u_ac_on_srv_refreshed)(ST_INT srv_id, AC_CHANNEL chnl, REFRESH_STATE refr_state);

extern ST_VOID (*u_ac_on_print_mms_pdu)(
		ST_INT  srv_id, /**< IEDID*/
		ST_UCHAR *pdu,
		ST_INT pdu_len,
		ST_BOOLEAN downFlag,AC_CHANNEL chnl); 
/**
 * 站点管理初始化接口.
 * 初始化所有站点管理数据结构，并通过文件进行Typeid、对象空间、对象ID的创建，
 * 数据结构的指针被保存在数组ac_srvms里
 * @retval  SD_SUCCESS      初始化成功
 * @retval  SD_FAILURE      初始化失败
 */
ST_RET ac_init_srvm();

/**
 * 站点管理终止接口.
 * 释放对象空间，清空请求链表，释放所有站点结构，程序退出前调用
 * @return  ST_VOID
 */
ST_VOID ac_uninit_srvm();


/**
 * 客户端状态处理函数接口.
 * 检查连接状态、对象空间创建状态、数据刷新状态并进行请求队列的处理
 * @return  ST_VOID
 */
ST_VOID ac_srv_state_handle();

/**
 * 刷新数据函数接口.
 * 该函数实现客户端刷新所有数据，在连接刚刚建立的时候需要调用此函数进行数据刷新
 * @param   srv_id          服务器ID
 * @retval  SD_SUCCESS      刷新成功
 * @retval  SD_FAILURE      刷新失败
 */
ST_RET ac_refresh_srv_data(ST_INT srv_id, AC_CHANNEL chnl);
/**
 * 刷新报告控制块数函数接口.
 * 该函数实现客户端刷新报告控制块，在连接刚刚建立的时候需要调用此函数刷新所有报告控制块数据
 * @param   srv_id          服务器ID
 * @retval  SD_SUCCESS      刷新成功
 * @retval  SD_FAILURE      刷新失败
 */
ST_RET ac_refresh_srv_rcb(ST_INT srv_id, AC_CHANNEL chnl);	

/**
 * 通道关联上用户回调接口     
 */
extern ST_VOID(*u_ac_chnl_connected)(ST_INT srv_id, AC_CHANNEL chnl);
/**
 * 通道断开关联用户回调接口     
 */
extern ST_VOID(*u_ac_chnl_disconnected)(ST_INT srv_id, AC_CHANNEL chnl);
/**
 * 主通道切换用户回调接口     
 */
extern ST_VOID(*u_ac_switch_chnl)(ST_INT srv_id, AC_CHANNEL active_chnl);

#ifdef __cplusplus
}
#endif
#endif
