/******************************************************************************
版权所有：	
文件名称：	app.c
文件版本：	01.01
创建作者:	sunxi
创建日期：	2012-03-28
功能说明：	应用系统初始化
其它说明：
修改记录：
*/
/*------------------------------- 头文件 --------------------------------------
*/
#include "head.h"
 
/*------------------------------- 宏定义 --------------------------------------
*/


/*------------------------------ 类型结构 -------------------------------------
*/


/*------------------------------ 全局变量 -------------------------------------
*/
struct init_t_1 g_app_init_func[]=
{
#ifdef CPU_COLDFIRE	 // xxxxxx 20220530 add 暂时屏蔽，am335x还没做授权的处理
	{auth_init,"auth_init",ERR_CODE_AUTH},		
#endif
	{Get_Code_CRC,"Get_Code_CRC",ERR_CODE_CRC_FLASH},
	{tbl_create_rsc,"tbl_create_rsc",ERR_CODE_RESOURCE_TABLE},
	{equ_init,"equ_init",ERR_CODE_EQU},
	{equ_init_later,"equ_init_later",ERR_CODE_EQU},
#ifdef CPU_FUXI	
	// {adc_init,"adc_init",ERR_CODE_INIT_SOFTWARE},
	{pit_init,"pit_init",ERR_CODE_UNKOWN},			//初始化PIT(可编程中断定时器)
#endif
	{factor_init,"factor_init",ERR_CODE_FACTOR},
	{dcfactor_init,"dcfactor_init",ERR_CODE_DCFACTOR},
	{sw_init,"sw_init",ERR_CODE_INIT_SWITCH},
#ifndef CPU_FUXI	
	{dido_init,"dido_init",ERR_CODE_INIT_SOFTWARE},
#endif
	{hf_init,"hf_init", ERR_CODE_INIT_SOFTWARE},
	{rcd_init,"rcd_init",ERR_CODE_INIT_RECORD},
	{set_create_desc_file,"set_create_desc_file",ERR_CODE_SET_DESC},
//	{set_create_data_file,ERR_CODE_SET_DATA},
	{tbl_init,"tbl_init",ERR_CODE_IEC_TABLE},
	{plc_init,"plc_init",ERR_CODE_PLC},
	{bat_init,"bat_init",ERR_CODE_BATHH},
#ifdef CPU_AM335X	
	{CheckSysProgramVer,"CheckSysProgramVer",ERR_CODE_SYSTEM},
#endif
//	{esam_init,ERR_CODE_ESAM}, 此初始化函数需使用定值参数，推后到SystemInit中初始化
};
#define APP_INIT_NUM	(sizeof(g_app_init_func)/sizeof(g_app_init_func[0]))

INIT_FUNC g_app_exit_func[]=
{
#ifndef CPU_FUXI
	esam_exit,
#endif	
	bat_exit,
	plc_exit,
	tbl_exit,
	rcd_exit,
	hf_exit,
	sw_exit,
	factor_exit,
	dcfactor_exit,
	pit_exit,
	adc_exit,
	equ_exit,
	FA_exit,
	led_exit,
	mainimage_exit,
	auth_exit, // sunxi 20191204 added
	//pw_quality_exit,
};
#define APP_EXIT_NUM	(sizeof(g_app_exit_func)/sizeof(INIT_FUNC))


/*------------------------------ 函数声明 -------------------------------------
*/


/*------------------------------ 外部函数 -------------------------------------
外部函数供其它实体文件引用，必须仔细检查传入参数的合法性.
*/

int app_init(void)
{
	int i,ret;

	for(i=0;i<APP_INIT_NUM;i++)
	{
		ret = g_app_init_func[i].func();
		if(ret != 0)
		{
			rt_err_set(g_app_init_func[i].err_code,0);
			dp_err_n_c_pk("%s err(i=%d,ret=%d)\r\n",g_app_init_func[i].init_name,i,ret);
		}
	}
	
	return 0;
}


int app_exit(void)
{
	int i,ret;

	for(i=0;i<APP_EXIT_NUM;i++)
	{
		ret = g_app_exit_func[i]();
		if(ret != 0)
		{
			dp_err_n_c_pk("app_exit err(i=%d,ret=%d)\r\n",i,ret);
		}
	}

	return 0;
}


/*------------------------------ 内部函数 -------------------------------------
内部函数以下划线‘_’开头，不需要检查参数的合法性.
*/


/*------------------------------ 测试函数 -------------------------------------
一个实体文件必须带一个本模块的测试函数来进行单元测试，如果的确不方便在本模块中
进行单元测试，必须在此注明实际的测试位置（例如在哪个实体文件中使用哪个测试函数）.
*/


/*------------------------------ 文件结束 -------------------------------------
*/
