/****************************************************************************/
/* Copyright (c) 2007,许继集团有限公司                                      */
/* All rights reserved.                                                     */
/*                                                                          */
/*  模块描述：                                                              */
/** 从scl_info中读取ln以下对象的类型及子类型存到对象空间中
 *  @file  ai_objtype.h                                                     */
/*                                                                          */
/* 日期         作者    注释                                                */
/* 2007/11/09   DJF     创建文件                                            */
/****************************************************************************/

#ifndef IEC61850_AI_OBJTYPE_H
#define IEC61850_AI_OBJTYPE_H

#include "ai_def.h"
#include "ai_obj.h"
#include "scl.h"

#ifdef __cplusplus
extern "C" {
#endif



/** 
 * 从scl_info里查找所有对象的类型信息，写到ied每个对象的idctrl结构里.
 * 先确定对象的类型（ld ln fcn fcd fcda）,然后确定对象子类型（ln类型、do类型、da类型）
 * 如果传入的scl_info为空，则从模型信息表里查询，模型表里查不到的都是扩展出来的对象
 * @param ied  ied对象
 * @param scl_info  解析scl文件得到的dataTypeTemplate信息
 * @return  SD_SUCCESS or SD_FAILURE
 */
ST_RET  ai_init_obj_type(AI_IED_CTRL *ied, SCL_INFO *scl_info);

/** 初始化cb控制块的类型信息                                */
ST_RET ai_init_cb_obj_type(AI_IED_CTRL *ied, AI_OBJ_ID cb_id);

/**
 * 由fc的名字判断其子对象的控制块类型，如果不是控制块类的fc，则返回AI_FCO_SUBTYPE_UNKNWON
 * 注意，不判断SGCB，因为SP下也有可能包含do
 */
AI_FCO_SUBTYPE  ai_get_cb_type_by_fcnName(ST_CHAR *fcn_name);

#ifdef __cplusplus
}
#endif


#endif /** IEC61850_AI_OBJTYPE_H */

