X2UWaterWmbusEEI/app/sys_processor_ble.c

663 lines
19 KiB
C
Raw Permalink Normal View History

2024-06-03 15:49:39 +08:00
#include "sys_config.h"
#if UPLOAD_MODE_2
#include "UWater_frame_app.h"
#include "UWater_eeprom_driver.h"
#include "UWater_Timer1us_driver.h"
#include "UWater_lptimer_driver.h"
#include "UWater_rtcc_driver.h"
#include "UWater_valve_driver.h"
#include "UWater_Lcd_driver.h"
#include "eeprom_app.h"
#include "UWater_rtcc_app.h"
#include "UWater_power_app.h"
#include "UWater_gp22_app.h"
#include "UWater_DataTools_App.h"
#include "UWater_key_app.h"
#include "UWater_pt_app.h"
#include "UWater_DebugPrint.h"
#include "UWater_Valve_app.h"
#include <string.h>
#include "UWater_sys.h"
#include "soe.h"
#include "sys_processor_ble.h"
static u8 s_upload_eep_complete=0;
static u8 save_freeze_sate = SAVE_FREEZE_S0; //<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
static u8 data_save_judge_flag = FALSE; //<2F><><EFBFBD><EFBFBD><E6B6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static u8 sys_deal_judge_flag = FALSE; //ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
static DateTime sys_rtcc_time; //<2F><><EFBFBD>ڻ<EFBFBD>ȡϵͳ<CFB5><CDB3>ǰʱ<C7B0><CAB1>
static u16 sys_temp_min_hex;//<2F><><EFBFBD><EFBFBD>ת16<31><36><EFBFBD>Ƹ<EFBFBD>ʽ
//RTC<54><43><EFBFBD>ϳ<EFBFBD>ʱʱ<CAB1><CAB1>
static u32 rtcc_err_check_time=0;
static u8 rtcc_err_check_count=0;
static u8 sys_rtcc_clk_source=0;
static u8 sys_rtcc_check_flag=FALSE;
TYP_STATE_SS ble_monitor_state=SS_STATE_S0;
//<2F><EFBFBD><E3B2A5><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
u8 ble_adv_buf[13];
//״̬<D7B4><CCAC>
UNION_4U8TOU32 met_state_old;
UNION_4U8TOU32 met_state_new;
u8 sys_reverse_flow_state=0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
RTCC_To_Float sys_total_flow_new;
RTCC_To_Float sys_total_flow_old;
RTCC_To_Float sys_total_re_flow_new;
RTCC_To_Float sys_total_re_flow_old;
//<2F><>ɢ<EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
//#define __no_init __attribute__((zero_init))
//__no_init volatile u8 upload_again_cnt_copy __attribute__((section(".ARM.__at_0x20007F34")));
/****************************************ʱ<><CAB1>ɨ<EFBFBD><EFBFBD><E8A1A2>Ϣ<EFBFBD>ַ<EFBFBD>**********************/
void MinuteEventScan(void)
{
if (0x02 == (RtccCheckMsg() & 0x02))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
RtccClearMsg(1);
RtccSetMsgApp(RtccMsg_UploadInTime); //RTCC<43><43>ʱ<EFBFBD>ϱ<EFBFBD>
RtccSetMsgApp(RtccMsg_OtherProtl); //<2F>׸<EFBFBD><D7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
FrameSetMsgApp(Msg_FrozenStore); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data_save_judge_flag = TRUE; //<2F><><EFBFBD><EFBFBD><E6B6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sys_deal_judge_flag = TRUE; //ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
RtccSetMsgApp(RtccMsg_ValveActive);
}
}
//ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
void SysDealAppMachine(void)
{
if(sys_deal_judge_flag)
{
sys_deal_judge_flag = FALSE;
rtcc_err_check_count=0;
RtccGetDateTime(&sys_rtcc_time);
if(0 == sys_rtcc_time.s.minute) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
FrameSetMsgApp(MsgTouchKeyReset);//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if (sys_rtcc_time.s.hour == 0x00)//0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
FrameSetMsgApp(MsgTchKey_ClearKeyLimit);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
sys_rtcc_check_flag = TRUE;//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1>
BleClearResetCount();//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD>ո<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
if((BCD2HEX(sys_rtcc_time.s.day)%Sys_data_object.P1.func_cfg_bytes[22])==0)
{
BleStartInitTask();//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
if(sys_rtcc_time.s.hour == 0x02) //ÿ<><C3BF>2<EFBFBD><32><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
{
RtccSetMsgApp(RtccMsg_Transducer_Check);
if(TRUE == CheckDiftofCalibrationFlag())
{
RtccSetMsgApp(RtccMsg_DiftofCalibration);//ÿ<><C3BF>2<EFBFBD><32><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
}
}
}
//<2F>Ǽ춨<C7BC><ECB6A8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>
if (10 == LcdCheckStateApp()) //<2F>Ǽ춨״̬
{
PowerUnSleepSumAddSys();
}
}
/**
<EFBFBD>ⲿ32768<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧЧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
1<EFBFBD><EFBFBD>main<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>ղ<EFBFBD><EFBFBD><EFBFBD>RTC<EFBFBD><EFBFBD><EFBFBD>жϻ<EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>RTCʱ<EFBFBD>ӡ<EFBFBD>
2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>ͨ<EFBFBD><EFBFBD>1us<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD>ղ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>RTCʱ<EFBFBD>ӡ<EFBFBD>
3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ⲿʱ<EFBFBD><EFBFBD><EFBFBD>ָֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
if(Timer1usGetTick() - rtcc_err_check_time > 1000000)//1<><31>,<2C><>ֹ<EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
{
rtcc_err_check_time = Timer1usGetTick();
rtcc_err_check_count++;
if(rtcc_err_check_count > 120)
{
rtcc_err_check_count = 0;
Meter_ResetCountAdd(0x08);
NVIC_SystemReset();
}
}
if((sys_rtcc_check_flag==TRUE)&&(LcdCheckStateApp() == 10))//<2F>Ǽ춨״̬
{
sys_rtcc_check_flag = FALSE;
if(RTC_ClkSource() == 1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>RC
{
sys_rtcc_clk_source = RtccInit();
if(sys_rtcc_clk_source == 0)//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿRC
{
LPTimer1Init(sys_rtcc_clk_source);
}
}
}
}
void SysDealAppPreSleep(void)
{
rtcc_err_check_count = 0;
if(BleGetPowerState()==BlePowerOk)
{
if(Sys_data_object.P1.func_cfg_bytes[0] > 0)//<2F><><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(RtccCheckTimer(RTCC_BLE_ACTIVE_TIME)==0)//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BleForcePowerOff(BlePowerFactory);
}
}
}
}
//<2F><>ѯ<EFBFBD>¼<EFBFBD><C2BC>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
u8 GetEventUploadType(void)
{
return 0;
}
//<2F>п<EFBFBD><D0BF><EFBFBD>
u8 FixedTimeNbIoTUploadIfIdle(void)
{
return TASK_IDLE;
}
/*******************************<2A><><EFBFBD>ݴ洢******************************/
IES_PULSE_DAY_MAX_FLOW ies_pulse_day_max_flow;
static void SysCheckFlowMinMax(DateTime alarm_time)
{
static u16 pulse_day_max_flow_time_temp;
static u32 old_total_speed = 0;
static u32 new_total_speed = 0;
static u8 date_flag = 0;
RTCC_To_Float temp_to_gloat;//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ר<EFBFBD><D7A8>
if((0 == alarm_time.s.hour) && (0 == alarm_time.s.minute)) //ÿ<><C3BF>0<EFBFBD><30>ˢ<EFBFBD><CBA2><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
{
old_total_speed = 0;
pulse_day_max_flow_time_temp =0;
date_flag = 0;
RtccGetDateTime(&alarm_time);
ies_pulse_day_max_flow.pulse_flow_time[0] = alarm_time.s.second;
ies_pulse_day_max_flow.pulse_flow_time[1] = alarm_time.s.minute;
ies_pulse_day_max_flow.pulse_flow_time[2] = alarm_time.s.hour;
ies_pulse_day_max_flow.pulse_flow_time[3] = alarm_time.s.weekday;
ies_pulse_day_max_flow.pulse_flow_time[4] = alarm_time.s.day;
ies_pulse_day_max_flow.pulse_flow_time[5] = alarm_time.s.month;
ies_pulse_day_max_flow.pulse_flow_time[6] = alarm_time.s.year;
ies_pulse_day_max_flow.pulse_flow_time[7] = 0x20;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
new_total_speed = Gp30CheckDataApp(GP30_APP_INS_FLOW);
if((0.9*old_total_speed) < new_total_speed < (1.1*old_total_speed))
{
pulse_day_max_flow_time_temp++;//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ies_pulse_day_max_flow.pulse_continue_time.to_uint16 = pulse_day_max_flow_time_temp*60;
temp_to_gloat.gp22_float = new_total_speed; //˲ʱ<CBB2><CAB1><EFBFBD><EFBFBD> ˲ʱ<CBB2><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ0.01L/H<><48>4<EFBFBD>ֽ<EFBFBD><D6BD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ies_pulse_day_max_flow.pulse_max_flow.to_uint32 = (u32)(temp_to_gloat.gp22_float / (float)65536.00)/60; //ƽ̨ת<CCA8><D7AA><EFBFBD><EFBFBD>ÿСʱ<D0A1><CAB1>ˮ<EFBFBD><CBAE>
//<2F>жϿ<D0B6>ʼʱ<CABC><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if(date_flag==1)
{
date_flag = 0;
RtccGetDateTime(&alarm_time);
ies_pulse_day_max_flow.pulse_flow_time[0] = alarm_time.s.second;
ies_pulse_day_max_flow.pulse_flow_time[1] = alarm_time.s.minute;
ies_pulse_day_max_flow.pulse_flow_time[2] = alarm_time.s.hour;
ies_pulse_day_max_flow.pulse_flow_time[3] = alarm_time.s.weekday;
ies_pulse_day_max_flow.pulse_flow_time[4] = alarm_time.s.day;
ies_pulse_day_max_flow.pulse_flow_time[5] = alarm_time.s.month;
ies_pulse_day_max_flow.pulse_flow_time[6] = alarm_time.s.year;
ies_pulse_day_max_flow.pulse_flow_time[7] = 0x20;
}
}
else if(new_total_speed <= (0.9*old_total_speed))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
{
pulse_day_max_flow_time_temp = 0;
date_flag = 1;
}
else if(new_total_speed >= (1.1*old_total_speed))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
old_total_speed = new_total_speed;
pulse_day_max_flow_time_temp =0;
date_flag = 0;
ies_pulse_day_max_flow.pulse_flow_time[0] = alarm_time.s.second;
ies_pulse_day_max_flow.pulse_flow_time[1] = alarm_time.s.minute;
ies_pulse_day_max_flow.pulse_flow_time[2] = alarm_time.s.hour;
ies_pulse_day_max_flow.pulse_flow_time[3] = alarm_time.s.weekday;
ies_pulse_day_max_flow.pulse_flow_time[4] = alarm_time.s.day;
ies_pulse_day_max_flow.pulse_flow_time[5] = alarm_time.s.month;
ies_pulse_day_max_flow.pulse_flow_time[6] = alarm_time.s.year;
ies_pulse_day_max_flow.pulse_flow_time[7] = 0x20;
}
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void RtccCheck_Hight_Flow(u8 **addr)
{
*addr = ies_pulse_day_max_flow.byte;
}
void SaveFreezeData(void)
{
switch(save_freeze_sate)
{
case SAVE_FREEZE_S0:
{
if(data_save_judge_flag)
{
data_save_judge_flag = FALSE;
RtccGetDateTime(&sys_rtcc_time);
sys_temp_min_hex = (sys_rtcc_time.s.minute >> 4)*10 + (sys_rtcc_time.s.minute & 0x0F);
if(0 ==(sys_temp_min_hex % 5))//5<><35><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>
{
RtccAppCheckMiJi(sys_rtcc_time);
}
if(0 == sys_rtcc_time.s.minute) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
save_freeze_sate = SAVE_FREEZE_S1;
}
SysCheckFlowMinMax(sys_rtcc_time);
}
}
break;
case SAVE_FREEZE_S1:
{
if (EepIfIdle())
{
Sys_data_object.ee_data.data.work_hour++;//<2F>ۼƹ<DBBC><C6B9><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EepWrite(Sys_data_object.ee_data.byte, EE_FIRST_USE_ADDR, sizeof (RTCC_EE_DATA), &s_upload_eep_complete);
save_freeze_sate = SAVE_FREEZE_S2;
}
}
break;
case SAVE_FREEZE_S2://<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>
{
if (EepIfIdle())
{
if(0 == sys_rtcc_time.s.hour) //ÿ<><C3BF>0<EFBFBD><30>
{
if(Sys_data_object.P1.func_cfg_bytes[0] > 0)
{
Sys_data_object.P1.func_cfg_bytes[0]--;
EepWrite(&Sys_data_object.P1.func_cfg_bytes[0],ee_addr_compute((u8*)(&Sys_data_object.P1.func_cfg_bytes[0])),1,&s_upload_eep_complete);
}
}
save_freeze_sate = SAVE_FREEZE_S3;
}
}
break;
case SAVE_FREEZE_S3://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
if(TASK_IDLE == EepIfIdle())
{
EepWrite(&(Sys_data_object.P1.run_information_object.total_use_sum_times_sec.to_uint8[0]), EEP_FRMAE_BATTERY_ENERGY, sizeof(Sys_data_object.P1.run_information_object), &s_upload_eep_complete);
save_freeze_sate = SAVE_FREEZE_S7;
}
}
break;
case SAVE_FREEZE_S7:
{
if (EepIfIdle())
{
save_freeze_sate = SAVE_FREEZE_S0;
}
}
break;
default:
{
save_freeze_sate = SAVE_FREEZE_S0;
}
break;
}
}
void SysBleStateMonitor(void)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>仯1<E4BBAF><31>
sys_total_flow_new.gp22_u32 = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW);
if(((sys_total_flow_new.gp22_float - sys_total_flow_old.gp22_float)>100)||
((sys_total_flow_old.gp22_float - sys_total_flow_new.gp22_float)>100))//1<><31><EFBFBD><EFBFBD>
{
sys_total_flow_old.gp22_u32 = sys_total_flow_new.gp22_u32;
FrameSetMsgApp(MsgBLE_AdvChange);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ת
sys_total_re_flow_new.gp22_u32 = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW_REVERSE);
if((sys_total_re_flow_new.gp22_float - sys_total_re_flow_old.gp22_float)>1)//10L
{
sys_total_re_flow_old.gp22_u32 = sys_total_re_flow_new.gp22_u32;
sys_reverse_flow_state=1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
}
if((sys_total_flow_new.gp22_float - sys_total_flow_old.gp22_float)>1)//10L
{
sys_total_re_flow_old.gp22_u32 = sys_total_re_flow_new.gp22_u32;//<2F><><EFBFBD>򳬹<EFBFBD>10L,<2C><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ
sys_reverse_flow_state=0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
}
//<2F><><EFBFBD><EFBFBD>״̬<D7B4>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
met_state_new = getBleWetState();
if(met_state_old.datas != met_state_new.datas)
{
met_state_old.datas = met_state_new.datas;
FrameSetMsgApp(MsgBLE_AdvChange);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><ECB3A3>λ
if(BleCheckIfResetFlag())//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
{
BleClrIfResetFlag();
if(BleIfIdle()==TASK_IDLE)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
{
ble_monitor_state = SS_STATE_S0;
BleStartInitTask();//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
//<2F>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
if(BleIfIdle()==TASK_IDLE)
{
if(FrameCheckMsgApp(MsgBLE_ConfigChange))
{
FrameClearMsgApp(MsgBLE_ConfigChange);
BleChangeAdvParaTask();
}
}
}
void SysBleMonitorMachine()
{
switch(ble_monitor_state)
{
case SS_STATE_S0:
{
if(Sys_data_object.P1.func_cfg_bytes[0] == 0)//<2F><><EFBFBD>dz<EFBFBD><C7B3><EFBFBD>ģʽ
{
if(BleGetCurConState() == CON_ING)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Set100msTimer(TIMER_100MS_BLE_CON_REV30S,50);//<2F><><EFBFBD><EFBFBD>5s<35>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
setBleReadAccessFlag(0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>־
ble_monitor_state = SS_STATE_S20;
}
else if(FrameCheckMsgApp(MsgBLE_AdvChange))//<2F><><EFBFBD>¹㲥<C2B9><E3B2A5><EFBFBD><EFBFBD>(<28><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>\<5C>³<EFBFBD>ֵ\<5C>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>\<5C><><EFBFBD><EFBFBD><EFBFBD>仯1<E4BBAF><31>)
{
if(BleIfIdle()==TASK_IDLE)
{
FrameClearMsgApp(MsgBLE_AdvChange);
ble_monitor_state = SS_STATE_S3;
}
}
else if(FrameCheckMsgApp(MsgAddr_Change))//<2F>޸ı<DEB8><C4B1><EFBFBD>ַ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
FrameClearMsgApp(MsgAddr_Change);
BleStartInitTask();//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else
{
if(FrameCheckMsgApp(Msg_FactoryBleActive))
{
FrameClearMsgApp(Msg_FactoryBleActive);
if(RtccCheckTimer(RTCC_BLE_ACTIVE_TIME)==0)//ֻ<>л<EFBFBD><D0BB><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʡÿ<CAA1>ճ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
BleClearResetCount();//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD>ո<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
BleStartInitTask();//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
RtccSetTimer(RTCC_BLE_ACTIVE_TIME,600);//<2F><><EFBFBD><EFBFBD>ģʽ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>
}
if(RtccCheckTimer(RTCC_BLE_ACTIVE_TIME)!=0)
{
if(BleGetCurConState() == CON_ING)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Set100msTimer(TIMER_100MS_BLE_CON_REV30S,50);//<2F><><EFBFBD><EFBFBD>5s<35>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
setBleReadAccessFlag(0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>־
ble_monitor_state = SS_STATE_S20;
}
else if(FrameCheckMsgApp(MsgBLE_AdvChange))//<2F><><EFBFBD>¹㲥<C2B9><E3B2A5><EFBFBD><EFBFBD>(<28><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>\<5C>³<EFBFBD>ֵ\<5C>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>\<5C><><EFBFBD><EFBFBD><EFBFBD>仯1<E4BBAF><31>)
{
if(BleIfIdle()==TASK_IDLE)
{
FrameClearMsgApp(MsgBLE_AdvChange);
ble_monitor_state = SS_STATE_S3;
}
}
else if(FrameCheckMsgApp(MsgAddr_Change))//<2F>޸ı<DEB8><C4B1><EFBFBD>ַ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
FrameClearMsgApp(MsgAddr_Change);
BleStartInitTask();//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
}
break;
case SS_STATE_S20://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(FrameCheckMsgApp(MsgBLE_ReadData))//<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>(<28><><EFBFBD><EFBFBD>֡)
{
FrameClearMsgApp(MsgBLE_ReadData);
Set100msTimer(TIMER_100MS_BLE_CON_REV30S,300);//30s
Set100msTimer(TIMER_100MS_BLE_CON_ALL90S,900);//90s
ble_monitor_state = SS_STATE_S21;
}
else if(FrameCheckMsgApp(MsgBLE_RevData))//<2F>յ<EFBFBD><D5B5>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡,<2C>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
{
FrameClearMsgApp(MsgBLE_RevData);
BleConMacTask(CON_STOP_ORDER, NULL);
Set100msTimer(TIMER_100MS_BLE_CON_REV30S,50);
ble_monitor_state = SS_STATE_S22;
}
else if(BleGetCurConState() == CON_END)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
{
ble_monitor_state = SS_STATE_S22;
}
else if(Check100msTimer(TIMER_100MS_BLE_CON_REV30S)==0)//5s<35><73>ʱû<CAB1>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
{
BleConMacTask(CON_STOP_ORDER, NULL);
Set100msTimer(TIMER_100MS_BLE_CON_REV30S,50);
ble_monitor_state = SS_STATE_S22;
}
}
break;
case SS_STATE_S21://<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
{
if(FrameCheckMsgApp(MsgBLE_RevData))//<2F>յ<EFBFBD><D5B5><EFBFBD>ָ<EFBFBD><D6B8>,<2C><>ʱ30<33><30>
{
FrameClearMsgApp(MsgBLE_RevData);
Set100msTimer(TIMER_100MS_BLE_CON_REV30S,300);//30
}
else if(BleGetCurConState() == CON_END)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
{
ble_monitor_state = SS_STATE_S22;
}
else if(FrameCheckMsgApp(MsgBLE_OtaEnter))//<2F><><EFBFBD><EFBFBD>OTA
{
FrameClearMsgApp(MsgBLE_OtaEnter);
ble_monitor_state = SS_STATE_S5;
}
else if((Check100msTimer(TIMER_100MS_BLE_CON_REV30S)==0)||(Check100msTimer(TIMER_100MS_BLE_CON_ALL90S)==0))//<2F><>ʱ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
{
BleConMacTask(CON_STOP_ORDER, NULL);
Set100msTimer(TIMER_100MS_BLE_CON_REV30S,50);
ble_monitor_state = SS_STATE_S22;
}
}
break;
case SS_STATE_S22://<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ӶϿ<D3B6>
{
if(BleGetCurConState() == CON_END)
{
LcdDisplayActiveGPRS(0);//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>
ble_monitor_state = SS_STATE_S0;
}
else if(Check100msTimer(TIMER_100MS_BLE_CON_REV30S)==0)//<2F><>ʱû<CAB1>жϿ<D0B6><CFBF><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
LcdDisplayActiveGPRS(0);//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>
BleStartInitTask();//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ble_monitor_state = SS_STATE_S0;
}
}
break;
case SS_STATE_S3://<2F><><EFBFBD>¹㲥<C2B9><E3B2A5>Ϣ
{
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
QZ_U32_To_Float temp_float_data;
UNION_4U8TOU32 temp_data1;
UNION_2U8TOU16 temp_data2;
temp_float_data.gp22_u32 = Gp30CheckDataApp(2);
temp_data1.datas = (u32)temp_float_data.gp22_float*10;
ble_adv_buf[0] = 12;
ble_adv_buf[12]=0;
//<2F>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD>
ble_adv_buf[1] = temp_data1.data_buf[0];
ble_adv_buf[2] = temp_data1.data_buf[1];
ble_adv_buf[3] = temp_data1.data_buf[2];
ble_adv_buf[4] = temp_data1.data_buf[3];
//<2F><EFBFBD>
temp_float_data.gp22_float = TempCheckValueApp();
if(temp_float_data.gp22_float<0)//<2F><><EFBFBD><EFBFBD>С<EFBFBD><D0A1>0
{
temp_data1.datas = -(temp_float_data.gp22_float*100);
temp_data2.datas = 0x8000|temp_data1.datas;
}
else//<2F><><EFBFBD>´<EFBFBD><C2B4><EFBFBD>0
{
temp_data2.datas = (u16)(temp_float_data.gp22_float*100);
}
ble_adv_buf[5] = temp_data2.data_buf[0];
ble_adv_buf[6] = temp_data2.data_buf[1];
//״̬<D7B4><CCAC>
UNION_4U8TOU32 temp_MetState;
temp_MetState = getBleWetState();
ble_adv_buf[7] = temp_MetState.datas_map.data0;
ble_adv_buf[8] = temp_MetState.datas_map.data1;
ble_adv_buf[9] = temp_MetState.datas_map.data2;
ble_adv_buf[10]= temp_MetState.datas_map.data3;
//<2F><><EFBFBD><EFBFBD>֡У<D6A1><D0A3><EFBFBD><EFBFBD>
ble_adv_buf[11] = 0;
for(int i=1;i<11;i++)
{
ble_adv_buf[11] += ble_adv_buf[i];
}
//ATָ<54><D6B8>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
for(int i=1;i<12;i++)
{
ble_adv_buf[12] += ble_adv_buf[i];
}
Set100msTimer(TIMER_100MS_BLE_CON_REV30S,50);
ble_monitor_state = SS_STATE_S4;
}
break;
case SS_STATE_S4://<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>¹㲥<C2B9><E3B2A5><EFBFBD><EFBFBD>,//
{
if(BleIfIdle()==TASK_IDLE)
{
if(BleUpdataAdvDataTask(ble_adv_buf)==TRUE)
{
ble_monitor_state = SS_STATE_S0;
}
}
else if(BleGetCurConState() == CON_END)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
{
ble_monitor_state = SS_STATE_S0;
}
else if(Check100msTimer(TIMER_100MS_BLE_CON_REV30S)==0)//<2F><>ʱû<CAB1>и<EFBFBD><D0B8>³ɹ<C2B3>,<2C><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
{
BleStartInitTask();//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ble_monitor_state = SS_STATE_S0;
}
}
break;
case SS_STATE_S5://OTA<54><41><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>,<2C><>ʱ<EFBFBD><CAB1><EFBFBD>Ƹ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
{
if(FrameCheckMsgApp(MsgBLE_OtaExit))//<2F>˳<EFBFBD>OTA
{
FrameClearMsgApp(MsgBLE_OtaExit);
ble_monitor_state = SS_STATE_S0;
}
}
break;
default:
{
ble_monitor_state = SS_STATE_S0;
}
break;
}
}
//<2F>п<EFBFBD><D0BF><EFBFBD>
u8 BleConnectIfIdle(void)
{
if(ble_monitor_state == SS_STATE_S0)
{
return TASK_IDLE;
}
else
{
return TASK_BUSY;
}
}
u8 GetMcuResetSouce(void)
{
u8 reset_souce;
reset_souce = Reset_GetFlag(ResetFlagMskRstb);//RESET<45>Ÿ<EFBFBD>λ
reset_souce <<= 1;
reset_souce |= Reset_GetFlag(ResetFlagMskSysreq);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
reset_souce <<= 1;
reset_souce |= Reset_GetFlag(ResetFlagMskLockup);//ϵͳ<CFB5><EFBFBD><ECB3A3>λ
reset_souce <<= 1;
reset_souce |= Reset_GetFlag(ResetFlagMskPca);//PCA<43><41>λ
reset_souce <<= 1;
reset_souce |= Reset_GetFlag(ResetFlagMskWdt);//<2F><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>λ
reset_souce <<= 1;
reset_souce |= Reset_GetFlag(ResetFlagMskLvd);//<2F>͵<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>⸴λ
reset_souce <<= 1;
reset_souce |= Reset_GetFlag(ResetFlagMskPor1_5V);//1.5V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
reset_souce <<= 1;
reset_souce |= Reset_GetFlag(ResetFlagMskPor5V);//5V<35><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
reset_souce <<= 1;
return reset_souce;
}
/*******************************************************************************
* @fun_name: SystemProcessor
* @brief : <EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ
* @param[in] : None
* @param[out]: None
* @retval : None
* @other :
******************************************************************************/
void SystemProcessor(void)
{
MinuteEventScan();
SysDealAppMachine();
SaveFreezeData();
DataStoreMachine();
SysBleMonitorMachine();
SysBleStateMonitor();
}
void SystemProcessorInit(void)
{
SaveNewSoe(SOE_SY_SYS_RESET, GetMcuResetSouce());//ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
if(Reset_GetFlag(ResetFlagMskWdt))//<2F><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>λ
{
FrameSetMsgApp(Msg_WdtReset); //<2F><><EFBFBD>ڸ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
}
if(Reset_GetFlag(ResetFlagMskPor5V))//Ƿѹ<C7B7><D1B9>Ӳ<EFBFBD><D3B2>λ
{
FrameSetMsgApp(Msg_Por5VReset); //GP30<33><30>λ
}
Reset_ClearFlagAll();//<2F>帴λ<E5B8B4><CEBB>ʶ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
DataStoreInit();
BleStartInitTask();//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RtccSetTimer(RTCC_BLE_ACTIVE_TIME,60);//<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>1<EFBFBD><31><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
met_state_new = getBleWetState();
met_state_old.datas = met_state_new.datas;
sys_total_flow_new.gp22_u32 = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW);
sys_total_flow_old.gp22_u32 = sys_total_flow_new.gp22_u32;
sys_total_re_flow_old.gp22_u32 = sys_total_re_flow_new.gp22_u32;
}
u8 SystemProcessorIfSleep(void)
{
if((DataStoreIfIdle() == TRUE)&&(BleConnectIfIdle() == TASK_IDLE))
{
return TRUE;
}
return FALSE;
}
#endif