update:main V0.005.0、hmi V1.4
main 1、MODBUS_TCP增加3个port口,总计4个port口供主机读取数据; 2、修复历史报警记录靠前条数不是最新的报警信息BUG; 3、修复MODBUS_TCP写寄存器时解析数据的异常BUG; hmi 1、MODBUS_TCP设置界面增加3个port口,总计4个port口进行设置;
This commit is contained in:
@@ -16,129 +16,124 @@ static void app_leakage_init(void);
|
||||
/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
uint8_t sector_buf[2][W25Q32_SECTOR_SIZE];
|
||||
|
||||
|
||||
app_leakage_t leakage =
|
||||
{
|
||||
.region_num = 0,
|
||||
.sub_device_num = 0,
|
||||
.init = app_leakage_init,
|
||||
.task = app_leakage_task,
|
||||
.class_update = app_leakage_region_classify,
|
||||
app_leakage_t leakage =
|
||||
{
|
||||
.region_num = 0,
|
||||
.sub_device_num = 0,
|
||||
.init = app_leakage_init,
|
||||
.task = app_leakage_task,
|
||||
.class_update = app_leakage_region_classify,
|
||||
};
|
||||
app_leakage_t *p_leakage = &leakage;
|
||||
|
||||
app_hitory_t history =
|
||||
{
|
||||
.read_history = history_read_record,
|
||||
.clean_history = history_clear_all,
|
||||
.init_history = history_init
|
||||
};
|
||||
|
||||
{
|
||||
.read_history = history_read_record,
|
||||
.clean_history = history_clear_all,
|
||||
.init_history = history_init};
|
||||
|
||||
static void app_leakage_init(void)
|
||||
{
|
||||
// for(int i = 0; i < APP_LEAKAGE_SUB_DEVICE_NUM; i++)
|
||||
// {
|
||||
// memset(leakage.sub_device_data[i].ch_data, 0,
|
||||
// sizeof(leakage.sub_device_data[i].ch_data));
|
||||
// }
|
||||
app_leakage_region_classify();
|
||||
// for(int i = 0; i < APP_LEAKAGE_SUB_DEVICE_NUM; i++)
|
||||
// {
|
||||
// memset(leakage.sub_device_data[i].ch_data, 0,
|
||||
// sizeof(leakage.sub_device_data[i].ch_data));
|
||||
// }
|
||||
app_leakage_region_classify();
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD><E0A3AC>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ֵ<EFBFBD>һ<EFBFBD><D2BB>*/
|
||||
void app_leakage_region_classify(void)
|
||||
{
|
||||
u16 i,j;
|
||||
u16 i, j;
|
||||
u8 add_region_flag;
|
||||
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
p_leakage->region_num = 0;
|
||||
p_leakage->sub_device_num = 0;
|
||||
memset(p_leakage->region_data,0,sizeof(p_leakage->region_data));
|
||||
|
||||
memset(p_leakage->region_data, 0, sizeof(p_leakage->region_data));
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ*/
|
||||
for(i=0;i<APP_LEAKAGE_SUB_DEVICE_NUM;i++)
|
||||
for (i = 0; i < APP_LEAKAGE_SUB_DEVICE_NUM; i++)
|
||||
{
|
||||
add_region_flag = 1; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
add_region_flag = 1; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
/*<2A>豸ʹ<E8B1B8><CAB9>*/
|
||||
if(ENABLE == p_leakage->sub_device_data[i].flash_data.state)
|
||||
if (ENABLE == p_leakage->sub_device_data[i].flash_data.state)
|
||||
{
|
||||
p_leakage->sub_device_num++;/*<2A><>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
|
||||
p_leakage->sub_device_num++; /*<2A><>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
|
||||
/********************************************<2A><><EFBFBD><EFBFBD>******************************************************/
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for(j=0;j<APP_LEAKAGE_SUB_DEVICE_NUM;j++)
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (j = 0; j < APP_LEAKAGE_SUB_DEVICE_NUM; j++)
|
||||
{
|
||||
if(0 == memcmp(p_leakage->region_data[j].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN))/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ*/
|
||||
if (0 == memcmp(p_leakage->region_data[j].name, p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN)) /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ*/
|
||||
{
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸*/
|
||||
p_leakage->region_data[j].sub_device_index[p_leakage->region_data[j].sub_device_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
|
||||
p_leakage->region_data[j].sub_device_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
|
||||
add_region_flag = 0;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
p_leakage->region_data[j].sub_device_index[p_leakage->region_data[j].sub_device_num] = i; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
|
||||
p_leakage->region_data[j].sub_device_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
|
||||
add_region_flag = 0; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*û<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>*/
|
||||
if(add_region_flag)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
if (add_region_flag) /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
{
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
memcpy(p_leakage->region_data[p_leakage->region_num].name,
|
||||
memcpy(p_leakage->region_data[p_leakage->region_num].name,
|
||||
p_leakage->sub_device_data[i].flash_data.region_name,
|
||||
APP_LEAKAGE_STRING_NANE_LEN);
|
||||
// <20><>һ<EFBFBD><D2BB><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>Ϊ0
|
||||
p_leakage->region_data[p_leakage->region_num].sub_device_index[0] = i;
|
||||
p_leakage->region_data[p_leakage->region_num].sub_device_num = 1;
|
||||
p_leakage->region_num++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD> <20><> <20><> <20>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD>*/
|
||||
static void app_leakage_alarm_contorl(void)
|
||||
{
|
||||
if(0 != p_leakage->alarm_state)
|
||||
if (0 != p_leakage->alarm_state)
|
||||
{
|
||||
buzzer.set.on();
|
||||
relay.set(BSP_RELAY_CH_ERROR_STATE,USR_ON);
|
||||
relay.set(BSP_RELAY_CH_ERROR_STATE, USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
buzzer.set.off();
|
||||
relay.set(BSP_RELAY_CH_ERROR_STATE,USR_OFF);
|
||||
relay.set(BSP_RELAY_CH_ERROR_STATE, USR_OFF);
|
||||
}
|
||||
|
||||
|
||||
/*©Һ״̬*/
|
||||
if(p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
if (p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_LEAKAGE,USR_ON);
|
||||
relay.set(BSP_RELAY_CH_LEAKAGE, USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_LEAKAGE,USR_OFF);
|
||||
relay.set(BSP_RELAY_CH_LEAKAGE, USR_OFF);
|
||||
}
|
||||
/*<2A>ϴ<EFBFBD>״̬*/
|
||||
if(p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
if (p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_OPEN,USR_ON);
|
||||
relay.set(BSP_RELAY_CH_OPEN, USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_OPEN,USR_OFF);
|
||||
relay.set(BSP_RELAY_CH_OPEN, USR_OFF);
|
||||
}
|
||||
/*ͨѶ<CDA8><D1B6>ʱ*/
|
||||
if(p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
|
||||
if (p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_COMMINCAION,USR_ON);
|
||||
}
|
||||
relay.set(BSP_RELAY_CH_COMMINCAION, USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_COMMINCAION,USR_OFF);
|
||||
relay.set(BSP_RELAY_CH_COMMINCAION, USR_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*<2A>쳣״̬<D7B4>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>*/
|
||||
void app_leakage_task(void)
|
||||
{
|
||||
@@ -146,7 +141,7 @@ void app_leakage_task(void)
|
||||
u16 i, j, k, sub_device_index;
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣ͳ<ECB3A3><CDB3> */
|
||||
for(i = 0; i < p_leakage->region_num; i++)
|
||||
for (i = 0; i < p_leakage->region_num; i++)
|
||||
{
|
||||
p_leakage->region_data[i].leakage_num = 0;
|
||||
p_leakage->region_data[i].open_num = 0;
|
||||
@@ -154,52 +149,50 @@ void app_leakage_task(void)
|
||||
}
|
||||
p_leakage->alarm_state = 0;
|
||||
/* <20><><EFBFBD><EFBFBD>״̬<D7B4>仯<EFBFBD><E4BBAF>ͳ<EFBFBD><CDB3><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD> */
|
||||
for(i = 0; i < p_leakage->region_num; i++)
|
||||
for (i = 0; i < p_leakage->region_num; i++)
|
||||
{
|
||||
for(j = 0; j < p_leakage->region_data[i].sub_device_num; j++)
|
||||
for (j = 0; j < p_leakage->region_data[i].sub_device_num; j++)
|
||||
{
|
||||
sub_device_index = p_leakage->region_data[i].sub_device_index[j];
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> */
|
||||
if(p_leakage->sub_device_data[sub_device_index].flash_data.state != ENABLE)
|
||||
if (p_leakage->sub_device_data[sub_device_index].flash_data.state != ENABLE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> */
|
||||
if(p_leakage->sub_device_data[sub_device_index].shield != UNBLOCKED)
|
||||
if (p_leakage->sub_device_data[sub_device_index].shield != UNBLOCKED)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>洢*/
|
||||
for(k = 0; k < APP_LEAKAGE_SUB_DEVICE_USE_CH_NUM; k++)
|
||||
for (k = 0; k < APP_LEAKAGE_SUB_DEVICE_USE_CH_NUM; k++)
|
||||
{
|
||||
u16 current_state = p_leakage->sub_device_data[sub_device_index].ch_data[k].state;
|
||||
u16 prev_state = prev_ch_state[sub_device_index][k];
|
||||
u16 leak_distance = p_leakage->sub_device_data[sub_device_index].ch_data[k].distance;
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>״̬<D7B4>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD> */
|
||||
if((current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE) &&
|
||||
!(prev_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE))
|
||||
if ((current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE) &&
|
||||
!(prev_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE))
|
||||
{
|
||||
/* ©Һ<C2A9><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ - <20><>¼<EFBFBD><C2BC>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD> */
|
||||
history_add_alarm_record(i, sub_device_index, k, APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE, leak_distance);
|
||||
}
|
||||
|
||||
if((current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN) &&
|
||||
!(prev_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN))
|
||||
|
||||
if ((current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN) &&
|
||||
!(prev_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN))
|
||||
{
|
||||
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ - <20><>¼<EFBFBD><C2BC>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD> */
|
||||
history_add_alarm_record(i, sub_device_index, k, APP_LEAKAGE_SUB_DEVICE_STATE_OPEN, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if((current_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT) &&
|
||||
!(prev_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT))
|
||||
|
||||
if ((current_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT) &&
|
||||
!(prev_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT))
|
||||
{
|
||||
if( k > 0 && (p_leakage->sub_device_data[sub_device_index].ch_data[0].state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT))
|
||||
if (k > 0 && (p_leakage->sub_device_data[sub_device_index].ch_data[0].state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT))
|
||||
{
|
||||
/*<2A><>һ<EFBFBD><D2BB>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʣ<EFBFBD><CAA3>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
|
||||
}
|
||||
@@ -209,34 +202,33 @@ void app_leakage_task(void)
|
||||
history_add_alarm_record(i, sub_device_index, k, APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ״̬ */
|
||||
prev_ch_state[sub_device_index][k] = current_state;
|
||||
}
|
||||
|
||||
|
||||
/* ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD> - <20><><EFBFBD>豸ͳ<E8B1B8><CDB3> */
|
||||
for(k = 0; k < APP_LEAKAGE_SUB_DEVICE_USE_CH_NUM; k++)
|
||||
for (k = 0; k < APP_LEAKAGE_SUB_DEVICE_USE_CH_NUM; k++)
|
||||
{
|
||||
u16 current_state = p_leakage->sub_device_data[sub_device_index].ch_data[k].state;
|
||||
|
||||
if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
|
||||
|
||||
if (current_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
|
||||
{
|
||||
p_leakage->region_data[i].time_out_num++;
|
||||
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT;
|
||||
break;
|
||||
}
|
||||
else if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
else if (current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
{
|
||||
p_leakage->region_data[i].open_num++;
|
||||
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_OPEN;
|
||||
p_leakage->region_data[i].open_num++;
|
||||
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_OPEN;
|
||||
}
|
||||
else if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
else if (current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
{
|
||||
p_leakage->region_data[i].leakage_num++;
|
||||
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ⱨ<EFBFBD><E2B1A8>*/
|
||||
@@ -246,29 +238,28 @@ void app_leakage_task(void)
|
||||
/* <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1> */
|
||||
static void get_current_time(u8 *time_buffer)
|
||||
{
|
||||
/* <20><>: 2<>ֽ<EFBFBD> (<28><><EFBFBD><EFBFBD>: 2024 -> 0x07 0xE8) */
|
||||
uint16_t year = 2000 + DS1302.Time.Year; /* RTC<54><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>2000<30><30>ʼ */
|
||||
time_buffer[0] = (year >> 8) & 0xFF; /* <20><><EFBFBD>ֽ<EFBFBD> */
|
||||
time_buffer[1] = year & 0xFF; /* <20><><EFBFBD>ֽ<EFBFBD> */
|
||||
time_buffer[2] = DS1302.Time.Month; /* <20><> */
|
||||
time_buffer[3] = DS1302.Time.Day; /* <20><> */
|
||||
time_buffer[4] = DS1302.Time.Hour; /* ʱ */
|
||||
time_buffer[5] = DS1302.Time.Minute; /* <20><> */
|
||||
time_buffer[6] = DS1302.Time.Second; /* <20><> */
|
||||
/* <20><>: 2<>ֽ<EFBFBD> (<28><><EFBFBD><EFBFBD>: 2024 -> 0x07 0xE8) */
|
||||
uint16_t year = 2000 + DS1302.Time.Year; /* RTC<54><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>2000<30><30>ʼ */
|
||||
time_buffer[0] = (year >> 8) & 0xFF; /* <20><><EFBFBD>ֽ<EFBFBD> */
|
||||
time_buffer[1] = year & 0xFF; /* <20><><EFBFBD>ֽ<EFBFBD> */
|
||||
time_buffer[2] = DS1302.Time.Month; /* <20><> */
|
||||
time_buffer[3] = DS1302.Time.Day; /* <20><> */
|
||||
time_buffer[4] = DS1302.Time.Hour; /* ʱ */
|
||||
time_buffer[5] = DS1302.Time.Minute; /* <20><> */
|
||||
time_buffer[6] = DS1302.Time.Second; /* <20><> */
|
||||
}
|
||||
|
||||
/* <20><>Flash<73><68>ȡ<EFBFBD><C8A1>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD> */
|
||||
static void history_read_metadata(void)
|
||||
{
|
||||
app_leakage_history_metadata_t temp_metadata;
|
||||
|
||||
w25q32.read(W25Q32_HISTORY_ALARM_METADATA_ADDR,
|
||||
(uint8_t*)&temp_metadata,
|
||||
|
||||
w25q32.read(W25Q32_HISTORY_ALARM_METADATA_ADDR,
|
||||
(uint8_t *)&temp_metadata,
|
||||
sizeof(app_leakage_history_metadata_t));
|
||||
|
||||
|
||||
if(temp_metadata.total_records <= temp_metadata.max_records &&
|
||||
temp_metadata.write_index < temp_metadata.max_records)
|
||||
|
||||
if (temp_metadata.total_records <= temp_metadata.max_records &&
|
||||
temp_metadata.write_index < temp_metadata.max_records)
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD> */
|
||||
memcpy(&leakage.history_metadata, &temp_metadata, sizeof(app_leakage_history_metadata_t));
|
||||
@@ -278,9 +269,9 @@ static void history_read_metadata(void)
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> */
|
||||
memset(&leakage.history_metadata, 0, sizeof(app_leakage_history_metadata_t));
|
||||
leakage.history_metadata.max_records = MAX_HISTORY_ALARM_RECORDS;
|
||||
|
||||
|
||||
/* <20><><EFBFBD>浽Flash */
|
||||
history_save_metadata();
|
||||
history_save_metadata();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -289,17 +280,17 @@ static void history_save_metadata(void)
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
w25q32_sector_erase(W25Q32_HISTORY_ALARM_METADATA_ADDR);
|
||||
|
||||
|
||||
/* д<><D0B4>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD> */
|
||||
w25q32.write(W25Q32_HISTORY_ALARM_METADATA_ADDR,
|
||||
(uint8_t*)&leakage.history_metadata,
|
||||
sizeof(app_leakage_history_metadata_t));
|
||||
w25q32.write(W25Q32_HISTORY_ALARM_METADATA_ADDR,
|
||||
(uint8_t *)&leakage.history_metadata,
|
||||
sizeof(app_leakage_history_metadata_t));
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>Flash<73>еĵ<D0B5>ַ */
|
||||
static uint32_t history_calc_record_addr(u32 record_index)
|
||||
{
|
||||
return W25Q32_HISTORY_ALARM_DATA_ADDR +
|
||||
return W25Q32_HISTORY_ALARM_DATA_ADDR +
|
||||
(record_index * HISTORY_ALARM_RECORD_SIZE);
|
||||
}
|
||||
|
||||
@@ -307,7 +298,7 @@ static uint32_t history_calc_record_addr(u32 record_index)
|
||||
static uint32_t history_calc_sector_addr(u32 record_index)
|
||||
{
|
||||
uint32_t record_addr = history_calc_record_addr(record_index);
|
||||
return record_addr & ~(W25Q32_SECTOR_SIZE - 1); /* 4K<34><4B><EFBFBD><EFBFBD> */
|
||||
return record_addr & ~(W25Q32_SECTOR_SIZE - 1); /* 4K<34><4B><EFBFBD><EFBFBD> */
|
||||
}
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ */
|
||||
@@ -315,76 +306,84 @@ void history_add_alarm_record(u8 region_idx, u8 device_idx, u8 channel, u16 alar
|
||||
{
|
||||
app_leakage_history_alarm_t new_alarm;
|
||||
uint32_t write_addr;
|
||||
|
||||
|
||||
/* <20><><EFBFBD>䱨<EFBFBD><E4B1A8><EFBFBD><EFBFBD>¼ */
|
||||
memset(&new_alarm, 0, sizeof(app_leakage_history_alarm_t));
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
if (region_idx < leakage.region_num) {
|
||||
memcpy(new_alarm.region_name, leakage.region_data[region_idx].name,
|
||||
if (region_idx < leakage.region_num)
|
||||
{
|
||||
memcpy(new_alarm.region_name, leakage.region_data[region_idx].name,
|
||||
APP_LEAKAGE_STRING_NANE_LEN);
|
||||
}
|
||||
|
||||
|
||||
/* <20>豸ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
if (device_idx < APP_LEAKAGE_SUB_DEVICE_NUM) {
|
||||
if (device_idx < APP_LEAKAGE_SUB_DEVICE_NUM)
|
||||
{
|
||||
new_alarm.device_id = leakage.sub_device_data[device_idx].flash_data.modbus_id;
|
||||
memcpy(new_alarm.device_name, leakage.sub_device_data[device_idx].flash_data.device_name,
|
||||
APP_LEAKAGE_STRING_NANE_LEN);
|
||||
}
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>©Һ<C2A9><D2BA><EFBFBD><EFBFBD> */
|
||||
new_alarm.alarm_type = alarm_type;
|
||||
new_alarm.channel = channel;
|
||||
new_alarm.leak_distance = leak_distance;
|
||||
|
||||
|
||||
/* <20><>ʼʱ<CABC><CAB1> */
|
||||
get_current_time(new_alarm.start_time);
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ַ */
|
||||
write_addr = history_calc_record_addr(leakage.history_metadata.write_index);
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ܿ<EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
uint32_t start_sector = write_addr & ~(W25Q32_SECTOR_SIZE - 1);
|
||||
uint32_t end_addr = write_addr + HISTORY_ALARM_RECORD_SIZE - 1;
|
||||
uint32_t end_sector = end_addr & ~(W25Q32_SECTOR_SIZE - 1);
|
||||
uint32_t num_sectors = (end_sector - start_sector) / W25Q32_SECTOR_SIZE + 1;
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4KB */
|
||||
uint32_t sectors[2] = {start_sector, (num_sectors > 1) ? end_sector : 0};
|
||||
|
||||
|
||||
/* 1. <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>漰<EFBFBD><E6BCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RAM */
|
||||
for (uint32_t i = 0; i < num_sectors; i++) {
|
||||
for (uint32_t i = 0; i < num_sectors; i++)
|
||||
{
|
||||
w25q32.read(sectors[i], sector_buf[i], W25Q32_SECTOR_SIZE);
|
||||
}
|
||||
|
||||
|
||||
/* 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD> */
|
||||
for (uint32_t i = 0; i < num_sectors; i++) {
|
||||
for (uint32_t i = 0; i < num_sectors; i++)
|
||||
{
|
||||
w25q32_sector_erase(sectors[i]);
|
||||
}
|
||||
|
||||
|
||||
/* 3. <20><>RAM<41>и<EFBFBD><D0B8><EFBFBD><EFBFBD>¼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
uint32_t offset_in_start = write_addr - start_sector;
|
||||
uint32_t first_part_len = (num_sectors == 1) ? HISTORY_ALARM_RECORD_SIZE : (W25Q32_SECTOR_SIZE - offset_in_start);
|
||||
memcpy(sector_buf[0] + offset_in_start, &new_alarm, first_part_len);
|
||||
if (num_sectors > 1) {
|
||||
if (num_sectors > 1)
|
||||
{
|
||||
uint32_t second_part_len = HISTORY_ALARM_RECORD_SIZE - first_part_len;
|
||||
memcpy(sector_buf[1], (uint8_t*)&new_alarm + first_part_len, second_part_len);
|
||||
memcpy(sector_buf[1], (uint8_t *)&new_alarm + first_part_len, second_part_len);
|
||||
}
|
||||
|
||||
|
||||
/* 4. <20><><EFBFBD>ĺ<DEB8><C4BA>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>Flash */
|
||||
for (uint32_t i = 0; i < num_sectors; i++) {
|
||||
for (uint32_t i = 0; i < num_sectors; i++)
|
||||
{
|
||||
w25q32.write(sectors[i], sector_buf[i], W25Q32_SECTOR_SIZE);
|
||||
}
|
||||
|
||||
|
||||
/* 5. <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>У<EFBFBD> */
|
||||
leakage.history_metadata.write_index++;
|
||||
if (leakage.history_metadata.write_index >= leakage.history_metadata.max_records) {
|
||||
if (leakage.history_metadata.write_index >= leakage.history_metadata.max_records)
|
||||
{
|
||||
leakage.history_metadata.write_index = 0;
|
||||
}
|
||||
if (leakage.history_metadata.total_records < leakage.history_metadata.max_records) {
|
||||
if (leakage.history_metadata.total_records < leakage.history_metadata.max_records)
|
||||
{
|
||||
leakage.history_metadata.total_records++;
|
||||
}
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD>ݵ<EFBFBD>Flash */
|
||||
history_save_metadata();
|
||||
}
|
||||
@@ -392,31 +391,28 @@ void history_add_alarm_record(u8 region_idx, u8 device_idx, u8 channel, u16 alar
|
||||
/* <20><>ȡ<EFBFBD><C8A1>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ */
|
||||
static u8 history_read_record(u32 record_index, app_leakage_history_alarm_t *record)
|
||||
{
|
||||
if(record_index >= leakage.history_metadata.total_records)
|
||||
if (record_index >= leakage.history_metadata.total_records)
|
||||
{
|
||||
return 0; /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч */
|
||||
return 0; /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч */
|
||||
}
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʴ洢<CAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD> */
|
||||
uint32_t actual_index;
|
||||
if(leakage.history_metadata.total_records == leakage.history_metadata.max_records) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>write_index ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>¼
|
||||
actual_index = (leakage.history_metadata.write_index - 1 - record_index
|
||||
+ leakage.history_metadata.max_records) % leakage.history_metadata.max_records;
|
||||
} else {
|
||||
// δ<><CEB4><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><><EFBFBD>磬<EFBFBD><E7A3AC><EFBFBD><EFBFBD> total_records-1 <20><><EFBFBD><EFBFBD>
|
||||
actual_index = leakage.history_metadata.total_records - 1 - record_index;
|
||||
}
|
||||
if(actual_index == 125)
|
||||
if (leakage.history_metadata.total_records == leakage.history_metadata.max_records)
|
||||
{
|
||||
actual_index =125;
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
actual_index = (leakage.history_metadata.write_index + record_index) %
|
||||
leakage.history_metadata.max_records;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӷ<EFBFBD>ȡ */
|
||||
actual_index = record_index;
|
||||
}
|
||||
|
||||
uint32_t read_addr = history_calc_record_addr(actual_index);
|
||||
w25q32.read(read_addr, (uint8_t*)record, HISTORY_ALARM_RECORD_SIZE);
|
||||
|
||||
|
||||
|
||||
uint32_t read_addr = history_calc_record_addr(actual_index);
|
||||
w25q32.read(read_addr, (uint8_t *)record, HISTORY_ALARM_RECORD_SIZE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -426,19 +422,18 @@ static void history_clear_all(void)
|
||||
/* <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD> */
|
||||
memset(&leakage.history_metadata, 0, sizeof(app_leakage_history_metadata_t));
|
||||
leakage.history_metadata.max_records = MAX_HISTORY_ALARM_RECORDS;
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD> */
|
||||
history_save_metadata();
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1> */
|
||||
for(uint32_t i = 0; i < HISTORY_ALARM_SECTORS_NEEDED; i++)
|
||||
for (uint32_t i = 0; i < HISTORY_ALARM_SECTORS_NEEDED; i++)
|
||||
{
|
||||
uint32_t sector_addr = W25Q32_HISTORY_ALARM_DATA_ADDR + i * W25Q32_SECTOR_SIZE;
|
||||
w25q32_sector_erase(sector_addr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> */
|
||||
static void history_init(void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user