#ifndef _EEPROM_H_
#define _EEPROM_H_

#include "apt32f102.h"

/*地址范围：0x10000000~0x100007FF，DROM 每页64BYTE，按页分配*/
#define EEPROM_MCUDevInfo_Address			0x10000000				//MCU 设备信息地址固定为0x10000000，大小为0x40 此区域不可改动

/*APP*/
#define EEPROM_ParaInfo_Address		0x10000100

#define EEPROM_TOUCHPARA1_SaveAddr	0x10000200
#define EEPROM_TOUCHPARA2_SaveAddr	0x10000280
#define EEPROM_TOUCHPARA3_SaveAddr	0x10000300
/*	EEPROM 保存数据格式：
 * 		FLAG	- 1Byte		保存标志位
 * 		LEN		- 2Byte		保存数据长度
 * 		CHECK	- 1Byte		保存数据校验
 * 		DATA	- nByte		保存数据内容
 * 
 * */
 
 /*APP*/
#define EEPROM_APP_SVAE_FLAG			0xA6
#define EEPROM_APP_DATA_Size_Max		100				//目前保存数据内容最长为100Byte
//#define EEPROM_PARA_Size				50

#define EEPROM_Offset_SaveFlag			0x00
#define EEPROM_Offset_Datalen			0x01
#define EEPROM_Offset_Check				0x03
#define EEPROM_Offset_Data				0x04

#define EEPROM_TempDifference_Default   	0x09        //温差 - 默认为0x09
#define EEPROM_TempSelect_Default        	0x00        //温度显示 - 默认摄氏度
#define EEPROM_TouchLevel_Default			0x01		//触摸按键等级 - 默认为0x01 中灵敏度
#define EEPROM_LangueSelect_Default			0x00		//显示语言 - 默认0x00中英文混合

#define ACTIVE_PORT                 0x02      //主动端口
#define POLLING_PORT                0x01      //轮训端口

/*boot*/

#define EEPROM_SVAE_FLAG			0xAE
#define EEPROM_DATA_Size_Max		0x40				//目前保存数据内容最长为100Byte
#define EEPROM_PARA_Size			50
#define EEPROM_DEV_NAME_Size		32

typedef struct{
	
	U8_T dev_addr;				//设备地址
	U8_T pipe_flag;             //管制选择
	U8_T temp_diff;				//温差 0~18
	U8_T temp_select;			//温度显示单位选择	0x00:摄氏度 0x01:华氏度
	U8_T backlight_en;          //背光延时关闭标记	0x00:延时关 0x01:延时关闭开
	U8_T key_sens_level;        //按键灵敏度
	U8_T langue_select;			//设置显示语言
	
	U8_T dev_port;              //设备处于RCU的端口类型     1：轮训端口   2：主动端口       2024-12-16增加
}E_PARA_INFO;


typedef struct{
	
	U8_T dev_addr;									//设备地址
	U8_T dev_type;									//设备类型
	U8_T dev_boot_ver;								//设备Boot的软件版本号
	U8_T dev_app_ver;								//设备APP的软件版本号
	U8_T dev_name_len;								//设备名称的长度
	U8_T dev_name[EEPROM_DEV_NAME_Size];          	//设备名称

}E_MCU_DEV_INFO;

extern E_MCU_DEV_INFO g_mcu_dev;

extern E_PARA_INFO g_eeprom;

void EEPROM_Init(void);
U8_T EEPROM_CheckSum(U8_T *data,U16_T len);
U8_T EEPROM_ReadParaInfo(E_PARA_INFO *info);
U8_T EEPROM_WriteParaInfo(E_PARA_INFO *info);
U8_T EEPROM_ClearParaInfo(void);
U8_T EEPROM_Validate_ParaInfo(E_PARA_INFO *info);
void EEPROM_Default_ParaInfo(E_PARA_INFO *info);



/*boot*/
U8_T EEPROM_ReadMCUDevInfo(E_MCU_DEV_INFO *info);
U8_T EEPROM_WriteMCUDevInfo(E_MCU_DEV_INFO *info);
void EEPROM_Default_MCUDevInfo(E_MCU_DEV_INFO *info);
void EEPROM_Validate_MCUDevInfo(E_MCU_DEV_INFO *info);

#endif
