#include "para_storage_cfg_api.h"
|
#include "e2p.h"
|
#include "system_parameter.h"
|
#include "billing.h"
|
#include "sundry.h"
|
#include "gpio.h"
|
#include "gprs.h"
|
#include "system_log.h"
|
#include "master_slave_inter.h"
|
|
// ²ÎÊý´¢´æµÄ¿éÊýÁ¿
|
#define PARA_STORAGE_BLOCK_CNT (2)
|
// ²ÎÊý´¢´æµÄ´óС
|
#define PARA_STORAGE_SIZE (PARA_STORAGE_BLOCK_CNT * EEPROM_CFG_BLOCK_SIZE) // 8KB
|
// ²ÎÊý´¢´æÆðʼµØÖ·£¨Ä¬ÈÏÖµ£©£¨·Ç»·Ð´£©
|
#define PARA_STORAGE_START_ADDR CYCLIC_PARA_STORAGE_END_ADDR
|
|
SYSLOG_PARA_DATA_T sys_log_para_data_g;
|
|
#define FIRST_POWER_DEFAULT_VALUE 0x8765
|
TYPE_CHECK_SIZE(FIRST_POWER_PARA_T,4);//ºË²é½á¹¹Ìå´óС
|
FIRST_POWER_PARA_T __attribute__ ((aligned (2))) sys_log_para_first_power_flag_g = {
|
.first_power_flag = 0};
|
|
/*²ÎÊý¼Ç¼ÈÕÖ¾±í£¨·Ç»·Ð´£©
|
*×¢Ò⣺ÿһÀà²ÎÊý¶¼ÐèÒªÔ¤Áô¿Õ¼ä£¬·ÀÖ¹ÒÔºóÔö¼ÓвÎÊý
|
*ĬÈϵÄÈ«¾Ö±äÁ¿²ÎÊý±ØÐë½o³õʼ»¯Ä¬ÈÏÖµ£¬ÕâÑù·½±ãºóÐø³õʼ»¯¸³Öµ
|
*/
|
const SYSLOG_PARA_TABLE_T sys_store_para_table[20] = {
|
{&sys_log_para_data_g.first_power_flag_store, &sys_log_para_first_power_flag_g, FIRST_POWER_PARA_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 3},
|
{&sys_log_para_data_g.save_realtime_data_log, &save_realtime_data_g,REALTIME_DATA_LOG_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 12},
|
{&sys_log_para_data_g.master_soft_hard_para_store, &master_soft_hard_para_g, MASTER_SOFT_HARD_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.sys_flow_alarm_cfg_store, &sys_flow_alarm_cfg_g, SYS_FLOW_ALARM_CFG_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.sys_press_alarm_cfg_store, &sys_press_alarm_cfg_g, SYS_PRESS_ALARM_CFG_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.sys_temp_alarm_cfg_store, &sys_temp_alarm_cfg_g, SYS_TEMP_ALARM_CFG_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.sys_billing_alarm_cfg_store, &billing_alarm_cfg_g, SYS_BILLING_ALARM_CFG_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.cal_pulse_para_cfg_store, &cal_pulse_para_g, SYS_CAL_PULSE_PARA_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.ladder_price_cfg_true_store, &ladder_price_cfg_para_true_g, SYS_LADDER_PRICE_CFG_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.ladder_price_cfg_new_store, &ladder_price_cfg_para_new_g, SYS_LADDER_PRICE_CFG_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.gprs_network_cfg_store, &gprs_network_cfg_para_g, SYS_GPRS_NETWORK_CFG_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.save_data_start_time_store, &save_day_month_timing_g, SAVE_DATA_START_PARA_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.sys_func_cfg_bytes_store, &sys_func_cfg_bytes_g, SYS_FUNC_CTL_BYTES_TYPE_LENGTH + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.sys_alarm_ctl_bytes_store, &sys_alarm_ctl_bytes_g, SYS_ALARM_CTL_BYTES_TYPE_LENGTH + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.sys_alarm_send_bytes_store, &sys_alarm_send_bytes_g, SYS_ALARM_SEND_BYTES_TYPE_LENGTH + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.valve_ctl_bytes_store, &valve_ctl_bytes_g, VALVE_CTL_LEN + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.master_basic_para_store, &master_basic_papa_g, MASTER_BASIC_FORMAT_SIZE + LOG_CHECKSUM_OFFSET, 1},
|
{&sys_log_para_data_g.micro_constant_flow_para_store,µ_constant_flow_para_g,MICRO_CONSTANT_FLOW_FORMAT_SIZE + LOG_CHECKSUM_OFFSET,1},
|
{&sys_log_para_data_g.sec_order_corr_set_para_store,&sec_order_corr_set_g,SEC_ORDER_CORR_PARA_FORMAT_SIZE + LOG_CHECKSUM_OFFSET,1},
|
{&sys_log_para_data_g.zero_drift_corr_cfg_store,&zero_drift_cfg_g,ZERO_DRIFT_CFG_SIZE + LOG_CHECKSUM_OFFSET,1},
|
};
|
|
/*Åжϴ˿̻·Ð´ÊÇ·ñµ½´ïµØÖ·Î²£¨×î´ónum£© µ½´ï·µ»Ø1 δµ½´ï·µ»Ø0*/
|
uint8_t Sys_Log_E2pParaFull(const SYSLOG_PARA_TABLE_T *para_data_p)
|
{
|
if ((para_data_p->table_id->store_index - 1) >= para_data_p->data_num) // Åжϴ˿ÌÊÇ·ñµ½´ïµØÖ·Î²£¨×î´ónum£©
|
{
|
para_data_p->table_id->store_index = 1; // ·¶Î§ 1 ~ (data_num + 1)
|
FM25V02_data_write(para_data_p->table_id->store_index,para_data_p->table_id->store_index_addr);
|
return 1;
|
}
|
return 0;
|
}
|
/*ÈÕÖ¾²ÎÊýдµ¥´Î
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
*/
|
ErrorStatus_STM32 Sys_Log_E2pParaWrite_1_Data(const SYSLOG_PARA_TABLE_T *para_data_p)
|
{
|
uint16_t data_len = para_data_p->data_size - LOG_CHECKSUM_OFFSET;
|
uint8_t calc_sum = CalcCheckSum(para_data_p->data_buffer, data_len);
|
uint8_t read_sum = 0;
|
uint32_t check_addr_now = 0,data_addr_now = 0;
|
ErrorStatus_STM32 result = ERROR_1;
|
/*¼ÆËãµØÖ·*/
|
if(para_data_p->data_num == 1)
|
{
|
check_addr_now = para_data_p->table_id->store_checksum_addr;
|
data_addr_now = para_data_p->table_id->store_start_addr;
|
}
|
else
|
{
|
check_addr_now = para_data_p->table_id->store_checksum_addr +
|
(para_data_p->data_size * (para_data_p->table_id->store_index - 1));
|
data_addr_now = check_addr_now + LOG_CHECKSUM_OFFSET;
|
}
|
read_sum = FM25V02_data_read(check_addr_now);
|
// if (read_sum != calc_sum) // ÉÏÒ»´Î²ÎÊýµÄУÑéºÍ²»µÈÓÚ±¾´ÎµÄУÑéºÍʱ²ÅдÈë
|
// {
|
if(para_data_p->data_num != 1) //¸Ä±äË÷Òý
|
{
|
para_data_p->table_id->store_index++;
|
if(Sys_Log_E2pParaFull(para_data_p) == 0)
|
FM25V02_data_write(para_data_p->table_id->store_index,para_data_p->table_id->store_index_addr);
|
}
|
/*¶à´ÎÑéÖ¤±£Ö¤Êý¾ÝµÄÕýÈ·ÐÔºÍÍêÕûÐÔ*/
|
for(uint8_t i = 0;i < 3;i++)
|
{
|
/*´¢´æÐ£ÑéºÍ*/
|
FM25V02_data_write(calc_sum,check_addr_now);
|
/*´¢´æÊý¾Ý*/
|
EEPROM_MultipleWrite(para_data_p->data_buffer, data_addr_now, data_len);
|
uint8_t temp_calc_sum,temp_read_sum,temp_buffer[data_len];
|
/*¶ÁȡУÑéºÍ*/
|
temp_read_sum = FM25V02_data_read(check_addr_now);
|
/*¶ÁÈ¡Êý¾Ý*/
|
EEPROM_MultipleRead(temp_buffer, data_addr_now, data_len);
|
temp_calc_sum = CalcCheckSum(temp_buffer,data_len);
|
if((temp_calc_sum == calc_sum) && (temp_read_sum == calc_sum)) //дÈëÕýÈ·
|
{
|
result = SUCCESS_0;
|
break;
|
}
|
}
|
// }
|
return result;
|
}
|
/*ÈÕÖ¾²ÎÊýÊý¾Ýд¶à´Î
|
write_cnt£ºÐ´´ÎÊý
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
*/
|
ErrorStatus_STM32 Sys_Log_E2pParaMultipleWrite(const SYSLOG_PARA_TABLE_T *para_data_p,uint8_t write_cnt)
|
{
|
ErrorStatus_STM32 res = ERROR_1;
|
E2P_PWR_ON; // ¿ªÆôE2pµçÔ´
|
for(uint8_t i = 0; i < write_cnt;i++)
|
res = Sys_Log_E2pParaWrite_1_Data(para_data_p);
|
E2P_PWR_OFF; // ¹Ø±ÕE2pµçÔ´
|
return res;
|
}
|
/*ÈÕÖ¾²ÎÊýÊý¾Ý¶Áµ¥´Î£¨Ö»ÐèÔÚÉϵçʱ¶Á£©
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
*/
|
ErrorStatus_STM32 Sys_Log_E2pParaRead_1_Data(const SYSLOG_PARA_TABLE_T *para_data_p)
|
{
|
uint8_t temp_index = 0;
|
uint8_t read_sum, calc_sum,err_cnt = 0;
|
uint16_t data_len = para_data_p->data_size - LOG_CHECKSUM_OFFSET;
|
uint32_t check_addr_now, data_addr_now;
|
/*¼ÆËãµØÖ·*/
|
if(para_data_p->data_num == 1)
|
{
|
check_addr_now = para_data_p->table_id->store_checksum_addr;
|
data_addr_now = para_data_p->table_id->store_start_addr;
|
}
|
else
|
{
|
if(para_data_p->table_id->store_index == 1) //Âú
|
temp_index = para_data_p->data_num;
|
else
|
temp_index = para_data_p->table_id->store_index - 1;
|
check_addr_now = para_data_p->table_id->store_checksum_addr +
|
(para_data_p->data_size * (temp_index - 1));
|
data_addr_now = check_addr_now + LOG_CHECKSUM_OFFSET;
|
}
|
|
/*¶à´ÎÑéÖ¤±£Ö¤Êý¾ÝµÄÕýÈ·ÐÔºÍÍêÕûÐÔ*/
|
for(uint8_t i = 0;i < 3;i++)
|
{
|
/*¼ÆËãºÍ*/
|
EEPROM_MultipleRead(para_data_p->data_buffer, data_addr_now, data_len);
|
calc_sum = CalcCheckSum(para_data_p->data_buffer, data_len);
|
/*´¢´æºÍ*/
|
read_sum = FM25V02_data_read(check_addr_now);
|
//Ö»ÓÐÔÚ¸ÕÉϵçʱ²Å»áµ÷Óô˺¯Êý£¬ËùÒÔ´¢´æÖеÄУÑéºÍÓëÌáÈ¡Êý¾ÝºóµÄ¼ÆËãºÍ²»Ò»ÖÂʱ
|
//1.¿ÉÄÜ´ú±íE2PË𻵠2.Öжϴò¶Ï¶ÁÈ¡º¯Êý 3.Ϊ×îвÎÊý£¬ÉÏÒ»¸ö°æ±¾Ã»ÓÐ
|
if (read_sum == calc_sum)
|
return SUCCESS_0;
|
else
|
err_cnt++;
|
}
|
if (err_cnt >= 3)
|
{
|
// ÖÃλE2p¶ÁÒ쳣״̬/±¨¾¯×Ö
|
// ÖØÐ¸³ÓèĬÈÏÖµ
|
}
|
return ERROR_1;
|
}
|
|
|
/*E2p²ÎÊýÊý¾ÝÊ״γõʼ»¯£¬ÏµÍ³È«ÐÂÉϵ磬ȫ²¿¹¦ÄܲÎÊýÉèΪĬÈÏÖµ
|
SET:Ê×´ÎÉϵç RESET:·ÇÊ×´ÎÉϵç
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
*/
|
FlagStatus Sys_Log_E2pParaDataFirstInit(void)
|
{
|
uint8_t cnt = 0;
|
FlagStatus first_flag = RESET;
|
uint16_t temp_data = FIRST_POWER_DEFAULT_VALUE;
|
const SYSLOG_PARA_TABLE_T *ptr = &sys_store_para_table[PARA_FIRST_POWER_FLAG];
|
E2P_PWR_ON;
|
for (uint8_t i = 0; i < ptr->data_num; i++)
|
{
|
uint16_t data_len = ptr->data_size - LOG_CHECKSUM_OFFSET;
|
EEPROM_MultipleRead(ptr->data_buffer, ptr->table_id->store_start_addr + ptr->data_size * i, data_len);
|
|
// uint8_t read_sum = FM25V02_data_read(ptr->table_id->store_checksum_addr + ptr->data_size * i),
|
// calc_sum = CalcCheckSum(ptr->data_buffer, FIRST_POWER_PARA_FORMAT_SIZE);
|
// if (*((uint16_t *)ptr->data_buffer) != temp_data) // ϵͳȫÐÂÉϵç
|
// cnt++;
|
if (sys_log_para_first_power_flag_g.first_power_flag != temp_data) // ϵͳȫÐÂÉϵç
|
cnt++;
|
}
|
if (cnt >= 2)
|
{
|
/*Ê×´ÎÉϵçʱ£¬ÉèÖÃĬÈÏʱ¼ä£¬Á÷Á¿ºÍ¼Û¸ñµÈÐÅÏ¢*/
|
save_realtime_data_g.record_time_bcd[0] = HEX_2_BCD_U8((OS_YEAR - 2000));
|
save_realtime_data_g.record_time_bcd[1] = HEX_2_BCD_U8(OS_MONTH);
|
save_realtime_data_g.record_time_bcd[2] = HEX_2_BCD_U8(OS_DAY);
|
save_realtime_data_g.record_time_bcd[3] = HEX_2_BCD_U8(OS_HOUR);
|
save_realtime_data_g.record_time_bcd[4] = HEX_2_BCD_U8(OS_MINUTE);
|
save_realtime_data_g.record_time_bcd[5] = HEX_2_BCD_U8(OS_SENCOND);
|
memcpy(&save_realtime_data_g.realtime_billing_data_s,&billing_real_para_g,sizeof(save_realtime_data_g.realtime_billing_data_s));
|
|
/*Ë÷Òý±ê־λ³õʼ»¯*//*ÓÉÓÚ²ÎÊýд£¬ÐèÒªÓõ½Ë÷Òý£¬ËùÒÔË÷ÒýµÄ³õʼ»¯±ØÐëÔÚдÈë֮ǰ*/
|
Sys_Log_E2pPara_FirstPower_FlagInit();
|
/*Ë÷ÒýºÍÂúд±ê־λ³õʼ»¯*/
|
Sys_Log_E2pCyclic_FirstPower_FlagInit();
|
/*²¿·Ö²ÎÊýÉèΪĬÈÏÖµ*/
|
Sys_Log_E2pParaMultipleWrite(&sys_store_para_table[PARA_SAVE_REALTIME_DATA],1);
|
Sys_Log_E2pCyclicMultipleWrite(&sys_log_cyclic_table[CYCL_VALVE],(uint8_t *)&valve_log_g,1);
|
Sys_Log_E2pCyclicMultipleWrite(&sys_log_cyclic_table[CYCL_PAY], (uint8_t *)&pay_para_g,1);
|
|
/*дÈëÊ×´ÎÉϵçĬÈÏÖµ*/
|
for (uint8_t j = 1; j < SYS_LOG_PARA_TABLE_NUM; j++)
|
{
|
ptr = &sys_store_para_table[j];
|
Sys_Log_E2pParaMultipleWrite(ptr,1); // ËùÓвÎÊý¸øÄ¬ÈÏÖµ
|
}
|
/*¸Ã±ê־λҪ·ÅÔÚ×îºóдÈë*/
|
ptr = &sys_store_para_table[PARA_FIRST_POWER_FLAG];
|
*(uint16_t *)ptr->data_buffer = FIRST_POWER_DEFAULT_VALUE;
|
Sys_Log_E2pParaMultipleWrite(ptr,ptr->data_num);
|
first_flag = SET;
|
}
|
return first_flag;
|
}
|
|
/*E2p²ÎÊýÊý¾ÝÈÕÖ¾µØÖ·³õʼ»¯
|
* | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª²ÎÊýA¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª>| <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª²ÎÊýB¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª> |
|
* | | | | | | |
|
* | <¡ªÊý¾ÝË÷Òý¡ª> | <¡ªÐ£ÑéºÍ¡ª> | <¡ªÊý¾ÝÄÚÈÝ¡ª> | <¡ªÊý¾ÝË÷Òý¡ª> | <¡ªÐ£ÑéºÍ¡ª> | <¡ªÊý¾ÝÄÚÈÝ¡ª> |
|
* | | | | | | |
|
* | |<¡ª¡ª¡ª¡ª¡ªÊý¾ÝÑ»·¡ª¡ª¡ª¡ª¡ª> | |<¡ª¡ª¡ª¡ª¡ªÊý¾ÝÑ»·¡ª¡ª¡ª¡ª¡ª> |
|
* | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª²ÎÊý´æ´¢ÏßÐÔ¸ñʽ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª> |
|
*/
|
void Sys_Log_E2pParaAddrInit(void)
|
{
|
// /*µØÖ·³õʼ»¯*/
|
sys_store_para_table[0].table_id->store_index_addr = PARA_STORAGE_START_ADDR;
|
sys_store_para_table[0].table_id->store_checksum_addr = sys_store_para_table[0].table_id->store_index_addr + PARA_INDEX_OFFSET;
|
sys_store_para_table[0].table_id->store_start_addr = sys_store_para_table[0].table_id->store_checksum_addr + LOG_CHECKSUM_OFFSET;
|
sys_store_para_table[0].table_id->store_end_addr = sys_store_para_table[0].table_id->store_checksum_addr + sys_store_para_table[0].data_size * sys_store_para_table[0].data_num;
|
|
for (uint8_t i = 1; i < SYS_LOG_PARA_TABLE_NUM; i++)
|
{
|
sys_store_para_table[i].table_id->store_index_addr = sys_store_para_table[i - 1].table_id->store_end_addr;
|
sys_store_para_table[i].table_id->store_checksum_addr = sys_store_para_table[i].table_id->store_index_addr + PARA_INDEX_OFFSET;
|
sys_store_para_table[i].table_id->store_start_addr = sys_store_para_table[i].table_id->store_checksum_addr + LOG_CHECKSUM_OFFSET;
|
//½áÊøµØÖ·¾ÍÊÇÏÂÒ»¸ö²ÎÊýµÄ¿ªÊ¼µØÖ·
|
sys_store_para_table[i].table_id->store_end_addr = sys_store_para_table[i].table_id->store_checksum_addr + sys_store_para_table[i].data_size * sys_store_para_table[i].data_num;
|
}
|
}
|
|
|
void Sys_Log_E2pPara_FirstPower_FlagInit(void)
|
{
|
E2P_PWR_ON;
|
for (uint8_t i = 0; i < SYS_LOG_PARA_TABLE_NUM; i++)
|
{
|
sys_store_para_table[i].table_id->store_index = 1; // »Ö¸´Ä¬ÈÏÖµ
|
FM25V02_data_write(sys_store_para_table[i].table_id->store_index,sys_store_para_table[i].table_id->store_index_addr);
|
}
|
}
|
void Sys_Log_E2pPara_NoFirstPower_FlagInit(void)
|
{
|
E2P_PWR_ON;
|
for (uint8_t i = 0; i < SYS_LOG_PARA_TABLE_NUM; i++)
|
sys_store_para_table[i].table_id->store_index = FM25V02_data_read(sys_store_para_table[i].table_id->store_index_addr);
|
}
|