P8UWaterPlasticIES4G/app/eeprom_app.h

210 lines
5.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***********************************************************************************
* @Copyright (c) :(C)2013, Qindao ieslab Co., Ltd
* @FileName :new_gsm_EEPROM_processor.c
* @Author :Intelligent gas team
* @Version :V1.0
* @Date :2013-11-29
* @Description :the function of the entity of system processor
************************************************************************************/
#ifndef __EEPROM_APP_H
#define __EEPROM_APP_H
/*--------------------------------Including-------------------------------------------*/
#include "UWater_eeprom_driver.h"
#include "eeprom_app.h"
/*------------------------------ Variable Define -------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
//按照喀什规约分配EEPROM存储地址表 具体参见《NB气表EEPROM存储分配地址表》
//#define EEP_ADDR_SYS_BASE 0x0000
////#define EEP_ADDR_SOE_BASE 0x0800
//#define EEP_ADDR_MONTH_FROZEN_BASE 0x1000 //10年月冻结10*12*EACH_DATA_SIZE即12000x0480
//#define EEP_ADDR_DAY_FROZEN_BASE 0x1800 //365*EACH_DATA_SIZE即36500x0E42 0x1800+0x0E42=0x2642
//#define EEP_ADDR_HOUR_FROZEN_BASE 0x3000 //62天的小时冻结62*24* EACH_DATA_SIZE即148800x3A20 0x3000+0x3A20= 0x6A20
//#define EEP_ADDR_SYS_BACKUP_BASE 0x7000
//#define EEP_ADDR_ACCUMUL_BASE 0x7800
//#define EEP_ADDR_ACCUMUL_BACKUP_BASE 0x7900
//#define EE_S_FAIL 0
//#define EE_S_SUCCESS 1
//#define EE_S_OPERATING 2
//#define EE_S_ADD_ERR 4
#define EE_S_NO_ERR 0x00
#define EE_S_MAIN_BACKUP_BOTH_ERR 0x01 //主数据区备用数据区CRC错误
#define EE_S_MAIN_ERR 0x02 //主数据区备用数据区CRC错误
#define EE_S_TIMEOUT_ERR 0x04 //EEPROM超时
#define EE_WR_TIMEOUT 52 //单位为100ms超时时间为100ms乘以EE_WR_TIMEOUT。
#define EE_Write_Retry_Max_Time 3
#define WRITEOPERTAION 0x55
#define READOPERTAION 0xAA
#define Bit_2Bits 0x01 //2位小数用1个字节可以表示
#define Bit_3Bits 0x02 //3位小数用2个字节可以表示
#define Demical_Bit Bit_3Bits //小数位位数可设置为2或3
#define NODATA 0xFF
#define EEADDERR 0x00
#define EESYSDATAADDOK 0x01
#define EEOTHERDATAADDOK 0x02
typedef enum
{
cst_EE_S_S0=0,
cst_EE_S_S1,
cst_EE_S_S2,
cst_EE_S_S3,
cst_EE_S_S4,
cst_EE_S_S5,
cst_EE_S_S6,
cst_EE_S_S7,
cst_EE_S_S8,
cst_EE_S_S9,
cst_EE_S_S10,
cst_EE_S_S11,
cst_EE_S_S12,
cst_EE_S_S13,
cst_EE_S_S14,
cst_EE_S_S15,
cst_EE_S_S16,
cst_EE_S_S17,
cst_EE_S_S18,
cst_EE_S_S19,
cst_EE_S_S20,
cst_EE_S_S21
}cst_EE_S_STEP_NAME;
typedef enum
{
cst_EE_A_S0=0,
cst_EE_A_S1,
cst_EE_A_S2,
cst_EE_A_S3,
cst_EE_A_S4,
cst_EE_A_S5,
cst_EE_A_S6,
cst_EE_A_S7,
cst_EE_A_S8,
cst_EE_A_S9,
cst_EE_A_S10,
cst_EE_A_S11,
cst_EE_A_S12,
cst_EE_A_S13,
cst_EE_A_S14,
cst_EE_A_S15,
cst_EE_A_S16,
cst_EE_A_S17,
cst_EE_A_S18,
cst_EE_A_S19,
cst_EE_A_S20,
cst_EE_A_S21
}cst_EE_A_STEP_NAME;//EEPROM操作累积量小数位的状态机状态。
typedef enum
{
cst_EE_TOTAL_S0,
cst_EE_TOTAL_S1,
cst_EE_TOTAL_S2,
cst_EE_TOTAL_S3,
cst_EE_TOTAL_S4,
}cst_EE_TOTAL_STEP_NAME;//EEPROM初始化状态机状态。
typedef enum
{
IMPORTANT_DATA_OP_S0 = 0,
IMPORTANT_DATA_OP_S1,
IMPORTANT_DATA_OP_S2,
IMPORTANT_DATA_OP_S3,
IMPORTANT_DATA_OP_S4,
IMPORTANT_DATA_OP_S5,
IMPORTANT_DATA_OP_S6,
IMPORTANT_DATA_OP_S7,
IMPORTANT_DATA_OP_S8,
IMPORTANT_DATA_OP_S9,
IMPORTANT_DATA_OP_S20,
IMPORTANT_DATA_OP_S21
}IMPORTANT_DATA_OP;
enum
{
FIRST_POWER_ON_SAVE_S0 = 0,
FIRST_POWER_ON_SAVE_S1,
FIRST_POWER_ON_SAVE_S2,
FIRST_POWER_ON_SAVE_S3
};
typedef enum
{
EE_INIT_STATE_S0=0,
EE_INIT_STATE_S1,
EE_INIT_STATE_S2,
EE_INIT_STATE_S3,
EE_INIT_STATE_S4,
EE_INIT_STATE_S5,
EE_INIT_STATE_S20
}TYPE_EE_INIT_STATE;
typedef struct
{
u8 data[EEPageSize-2];
u16 CRCvalue;
}EE_DATA_STRUCT;
typedef union
{
EE_DATA_STRUCT EE_Sysdata_Struct;
u8 buf[EEPageSize];
}EE_DATA_UNION;
void ee_sys_data_init (void);
u8 ee_write_sys_data_all(void);
u8 ee_read_sys_data_all(void);
void ee_read_soe_data(void);
void ee_read_hour_frozen_data(void);
void ee_read_day_frozen_data(void);
void ee_read_month_frozen_data(void);
void ee_write_soe_data(void);
void ee_write_hour_frozen_data(void);
void ee_write_day_frozen_data(void);
void ee_write_month_frozen_data(void);
void ee_s_clear_err_msg(void);
u8 ee_s_get_err_msg(void);
void ee_wr_sysdata_machine(void);
u8 ee_sys_check_complete(void);
u8 ee_sys_if_idle(void);
u8 ee_sys_if_sleep(void);
void ee_write_accumul_Decimals(u16* accumul_Decimals_Pointer);
void ee_read_accumul_Decimals(u16* accumul_Decimals_Pointer);
void ee_wr_accumul_machine(void);
u8 ee_accumul_check_complete(void);
u8 ee_accumul_if_idle(void);
u8 ee_accumul_if_sleep(void);
void EeSysMachine(void);
u16 ee_addr_compute(u8 *data_addr);
u8 EeReadImportantDataIfIdle(void);
u8 EeWriteImportantDataIfIdle(void);
u8 EeEraseImportantDataIfIdle(void);//擦除状态机是否空闲
void StartEeEraseImportantData(void);
void StartEeReadImportantData(void);
void StartEeWriteImportantData(void);
void set_important_data_rd_state (void);
u8 get_important_data_rd_state (void);
void EeReadImportantDataMachine(void);
void LoadEepromImportantData(void);
void RAMBackupRefresh(void);
void set_reset_souce (u16 reset_souce);
u16 get_reset_souce (void);
#ifdef __cplusplus
}
#endif //#ifdef __cplusplus
#endif