/* DB_Init ________________________________________________________________
|
| Description:  If EEPROM is initialised, copy EEPROM data to RAM,
|               else copy default values to EEPROM and RAM.
|_____________________________________________________________________________*/

void DB_Init(void)
{

	//初始数据
	Uint32  initData = 0;

	//测试数据库初始化
#ifdef SOFTWARE_TEST
	memset(&testdb, 0, sizeof(testdb));
#endif

	//清除日志
	Log_ClearRuntimeLogs();

  // Read initialisation data from eeprom
  //EEPROM初始化数据--->读取至RAM

  
  //读取非静态数据初始化标识
  (void)I2C_Read_Setup((Uint16*)&initData, OffsetInEEPROM(initialised), sizeof(NVdata.initialised));

  //读取所有EEPROM数据
  (void)I2C_Read_All();


	//EEPROM存有数据
	//if ((initData == EEPROM_PROGRAMMED_ID_V1) || (initData == EEPROM_PROGRAMMED_ID_V2))//存储标识置位
	if (initData == EEPROM_PROGRAMMED_ID_V2)//存储标识置位 
	{
		//数据库结果校验
		DBaseResult_t check;

/****************************校正数据库--calFactors*****************************************/

		//检查校正数据库
		check = checkCalDB();

		//检查OK
		if (check == DBASE_OK)
		{
			//读取校正数据库--calFactors
			copyCalDBToRam();
		}
		else//检查错误
		{
			//修复校正数据库
			repairCalDB(check);
		}

/****************************配置数据库configDB_RAM*****************************************/

		//检查配置数据库
		check = checkConfigDB();
		
		//检查OK
		if (check == DBASE_OK)
		{
			//读取配置数据库configDB_RAM
			copyConfigDBToRam();
		}
		else//检查失败
		{
			//修复配置数据库
			repairConfigDB(check);
		}
		
	}
	else//EEPROM没有存储数据
	{
		//修复数据--calFactors
		repairCalDB(DBASE_AB_BAD);

		//修复数据--configDB_RAM
		repairConfigDB(DBASE_AB_BAD);
	}

	//存储标识为ID2
	if (initData == EEPROM_PROGRAMMED_ID_V2)
	{
		//读取模块时间和直方图数据
		loadTotalTimeAndHistogram();
		//读取控制器序列号
		loadControllerSerialNumbers();
	}
	else//读取标识为非ID2
	{
		//write total run-time value from RAM to eeprom here
		//刷入新的模块运行时间
		initRecTotalRunTime();

		//copy histogram value from RAM to eeprom here
		//刷入新的直方图数据
		initHistogram( );
		//刷入新的控制器序列号
		initControllerSerialNumbers();
		//刷入新的追溯日志
		initTracebackLog();
		//刷入事件日志
		initEventLog();
	}

	//刷入新的追溯数据
	initTracebackData();

	//EEPROM为非ID2数据
	if (initData != EEPROM_PROGRAMMED_ID_V2)
	{
		//ID2参数初始化
		programInitData(EEPROM_PROGRAMMED_ID_V2);
	}

	// Initialise some runtime database values here..
	//配置数据库,常量---->实时数据
	RTDB.voltageBase = VDC_ORDER_MIN;//输出电压给定值(基值)--40V--Q11
	RTDB.reqVoltageBase = configDB_RAM.presetVoltage;//要求的电压给定(基值)--Q11
	RTDB.sampledOutputCurrent = FLOAT_NAN;//RCP协议采样输出电流值
	RTDB.maxPowerLimit = (Uint32)(1.05f * configDB_RAM.powerLimitData.requestedPowerLimit);//功率最大限值--Q0
	RTDB.PowerSharePowerLimit = RTDB.maxPowerLimit;//均流功率限值
	RTDB.volatileMaxCurrentLimit = configDB_RAM.maxCurrentLimit;//静态最大电流限值
	RTDB.acquire = false;//获取标识

	//刷新数据库错误信息
	updateDBError1Info();

	Vout_DC_CAL_Gain = calFactors[VOUT_DC].gain;
	Vout_DC_CAL_Offset = calFactors[VOUT_DC].offset;

	VarInitFlag_Share = 0;
	vTarget_Share = VDC_ORDER_MIN;
	voltageOffset_Share = RTDB.voltageOffset;
	I_Limit_Ref_Share = (int32)RTDB.I_limit;
	VdcOrderMaxTarget_Share = VDC_ORDER_MIN;
	sineCancelTerm_Share=0;
	Sync_Status_Share=false;
	SoftStartFlag_Share = false;
	ACGain_Share = 14;
	PeriodDnlimited_Share = 187;

	AlarmFlag1=0;
	AlarmFlag2=0;
	AlarmFlag3=0;
	AlarmFlag4=0;
	AlarmFlag5=0;
	AlarmFlag6=0;
	AlarmFlag7=0;
	AlarmFlag8=0;
	AlarmFlag9=0;
	AlarmFlag10=0;

	ResIOCCnt=0;


  
} /* DB_Init */
