P2UWaterJiangXi/app/sys_processor.c

1379 lines
41 KiB
C
Raw Normal View History

2024-06-03 15:49:39 +08:00
#include "sys_config.h"
#if UPLOAD_MODE_1
#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 "eeprom_app.h"
#include "UWater_rtcc_app.h"
#include "UWater_power_app.h"
#include "UWater_gp22_app.h"
#include "sys_processor.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 "nb_upload_monitor.h"
//<2F><><EFBFBD>ݷ<EFBFBD><DDB7>ͻ<EFBFBD><CDBB><EFBFBD>
static u8 upload_send_buf[UPLOAD_BUF_SIZE];
static u16 upload_send_len;
static u8 upload_send_state;
static DateTime upload_skew;
static TYP_MAIN_STATE_UPLOAD main_upload_state = UPLOAD_S0;
static TYP_STATE_UPLOAD time_upload_state=TIME_UPLOAD_S0;
static EVENT_UPLOAD_ event_upload; //<2F>¼<EFBFBD><C2BC><EFBFBD>¼
static u32 g_delay_upload_time;
static u8 g_jingge_time_para;
static u8 upload_delay_flag = 0;
static u16 g_activity_times=0;
static u8 upload_frame_data_step = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
static u8 s_upload_ack_fail_times=0;//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static u16 valve_close_upload_time_cnt;
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;
//ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־
static u8 sys_inite_flag=FALSE;
//<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")));
static u8 up_delay_count_flag=0; //<2F><><EFBFBD><EFBFBD><><CBB3>20<32><30><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ִֻ<D6BB><D6B4>һ<EFBFBD><D2BB>
static u8 up_time_check_2hour=120;//<2F><><EFBFBD><EFBFBD>,<2C><>ֹNBУʱ<D0A3><CAB1><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>,2Сʱ<D0A1>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
/****************************************ʱ<><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(PSM_STATE_SLEEP == getPsmState())
{
FrameSetMsgApp(Msg_PsmPowerCheck);//PSMģʽ<C4A3><CABD>ѹ<EFBFBD><D1B9><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>
up_delay_count_flag=0;
}
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(sys_inite_flag==FALSE)
{
sys_inite_flag = TRUE;
if(Sys_data_object.P1.func_cfg_bytes[0] > 0)//<2F><><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>λ<EFBFBD><CEBB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>߻<EFBFBD><DFBB>Ѻ<EFBFBD>ִ<EFBFBD><D6B4>һ<EFBFBD>γ<EFBFBD><CEB3><EFBFBD><EFBFBD>ϱ<EFBFBD>
{
FrameSetMsgApp(Msg_FactoryUpload);//<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>Ϣ
}
}
}
/*******************************************************************************
* @fun_name: UploadSkewTimeCount
* @brief :<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>3λ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + 60<EFBFBD>
* @param[in] : None
* @param[out]: None
* @retval :
* @other :
******************************************************************************/
void UploadSkewTimeCount(void)
{
if((0 == sys_rtcc_time.s.hour) && (0 == sys_rtcc_time.s.minute))//0<><30><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>0
{
upload_again_cnt_copy = 0;
}
if(UPLOAD_MODE_HOUR == Sys_data_object.P1.Time_upload_2006.s.type) //Сʱģʽ
{
g_delay_upload_time = 0;
if(upload_again_cnt_copy > Sys_data_object.P1.report_retry_times)
{
upload_again_cnt_copy = 0;
}
g_delay_upload_time = (Sys_data_object.P1.met_addr[0] >> 4) * 10 + (Sys_data_object.P1.met_addr[0] & 0x0F);
g_delay_upload_time *= Sys_data_object.P1.report_step_len.datas;//<2F><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>λx<CEBB><78><EFBFBD><EFBFBD>ֵ
g_delay_upload_time += (u32)MINUTE_TO_SECOND * BCD2HEX(Sys_data_object.P1.Time_upload_2006.s.period); //<2F>ϴ<EFBFBD><CFB4><EFBFBD>ķ<EFBFBD>
g_delay_upload_time += (u32)MINUTE_TO_SECOND * 20 * upload_again_cnt_copy;//<2F>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
g_delay_upload_time %= HOUR_TO_SECOND; //<2F><>ɢ<EFBFBD><C9A2>1h<31><68>
upload_skew.s.minute = g_delay_upload_time / MINUTE_TO_SECOND;
upload_skew.s.minute = HEX2BCD(upload_skew.s.minute);
//Ƶ<><C6B5><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Сʱģʽ<C4A3><CABD><EFBFBD><EFBFBD>50<35><30><EFBFBD><EFBFBD>ʱ,<2C>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>Ϊ(5x-50)
if(Sys_data_object.P1.Time_upload_2006.s.period>0x52)
{
upload_skew.s.minute = (BCD2HEX(sys_rtcc_time.s.minute)/(Sys_data_object.P1.Time_upload_2006.s.period - 0x50))*(Sys_data_object.P1.Time_upload_2006.s.period - 0x50);
upload_skew.s.minute = HEX2BCD(upload_skew.s.minute);
}
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ܡ<EFBFBD><DCA1><EFBFBD>
{
// #if defined(VALVE)
// if(ValveGetUploadStateApp()==VALVE_CLOSE_UPLOAD_TIME)//<2F><><EFBFBD>ŹرյĴ<D5B5><C4B4><EFBFBD>
// {
// return;
// }
// #endif
if((BCD2HEX(sys_rtcc_time.s.day) % getUploadControlPara(UP_DAY_COUNT))!=0)
{
return;
}
g_delay_upload_time = (Sys_data_object.P1.met_addr[0]&0x0F)*100 + (Sys_data_object.P1.met_addr[0] >> 4)*10+(Sys_data_object.P1.met_addr[1]&0x0F);
if(Sys_data_object.P1.report_step_len.datas < 15) //<2F><>ɢϵ<C9A2><CFB5><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ж<EFBFBD>
{
Sys_data_object.P1.report_step_len.datas = 15;
}
else if(Sys_data_object.P1.report_step_len.datas > 43)
{
Sys_data_object.P1.report_step_len.datas = 43;
}
if(Sys_data_object.P1.report_retry_times > 3) //<2F>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ж<EFBFBD>
{
Sys_data_object.P1.report_retry_times = 2; //Ĭ<><C4AC>2<EFBFBD><32>
}
if(upload_again_cnt_copy > Sys_data_object.P1.report_retry_times)
{
upload_again_cnt_copy = 0;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B4A6>
/*if((Sys_data_object.P1.Upload_again_interval_time.datas < 600)||(Sys_data_object.P1.Upload_again_interval_time.datas > 43200))//С<><D0A1>3Сʱ=3*3600=10800,<2C><><EFBFBD><EFBFBD>12Сʱ=12*3600=43200
{
Sys_data_object.P1.Upload_again_interval_time.datas = 18000; //Ĭ<><C4AC>5Сʱ=5*3600=18000
}ת<EFBFBD><EFBFBD>Сʱ<EFBFBD>ж<EFBFBD>*/
g_jingge_time_para = Sys_data_object.P1.Upload_again_interval_time.datas/3600;
if(g_jingge_time_para < 1) // <20>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ж<EFBFBD>
{
g_jingge_time_para = 5; //Ĭ<><C4AC>5Сʱ,<2C><>ЧֵΪ1-9<><39><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>Ϊ1ʱ<31><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>20min<69>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ӧ<EFBFBD><D3A6><EFBFBD>ֵ<EFBFBD>Сʱ
}
else if(g_jingge_time_para >= 10)
{
g_jingge_time_para = 5;
}
g_delay_upload_time *= Sys_data_object.P1.report_step_len.datas; //<2F><><EFBFBD><EFBFBD>ɢϵ<C9A2><CFB5>
if(upload_again_cnt_copy==0)
{
if(0 == up_delay_count_flag)//ÿ<><C3BF><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϱ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ִֻ<D6BB><D6B4>һ<EFBFBD><D2BB>
{
g_delay_upload_time += MINUTE_TO_SECOND + getUploadControlPara(UP_DELAY_COUNT)*1200; //<2F><><EFBFBD><EFBFBD>1min<69><6E>ƫ<EFBFBD><C6AB>ʱ<EFBFBD><CAB1>
}
}
else//ƫ<>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
g_delay_upload_time += MINUTE_TO_SECOND;
}
g_delay_upload_time += (u32) HOUR_TO_SECOND * BCD2HEX(Sys_data_object.P1.Time_upload_2006.s.hour); //<2F>ϴ<EFBFBD><CFB4><EFBFBD><E8B6A8>ʱ
g_delay_upload_time += (u32) MINUTE_TO_SECOND * BCD2HEX(Sys_data_object.P1.Time_upload_2006.s.minute); //<2F>ϴ<EFBFBD><CFB4><EFBFBD>ķ<EFBFBD>
if(JIANGE_20_MIN == g_jingge_time_para) //<2F><>20min<69><6E><EFBFBD>ش<EFBFBD>
{
g_delay_upload_time += (u32)MINUTE_TO_SECOND * 20 * upload_again_cnt_copy;//<2F>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
}
else //<2F><>Сʱ<D0A1>ش<EFBFBD>
{
g_delay_upload_time += (u32)HOUR_TO_SECOND * (g_jingge_time_para) * upload_again_cnt_copy;//<2F>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
}
g_delay_upload_time %= DAY_TO_SECOND; //<2F><>ɢ<EFBFBD><C9A2>1<EFBFBD><31><EFBFBD><EFBFBD>
upload_skew.s.hour = g_delay_upload_time / HOUR_TO_SECOND;
upload_skew.s.minute = (g_delay_upload_time % HOUR_TO_SECOND) / MINUTE_TO_SECOND;
upload_skew.s.hour = HEX2BCD(upload_skew.s.hour);
upload_skew.s.minute = HEX2BCD(upload_skew.s.minute);
}
}
//<2F><>ѯ<EFBFBD><D1AF>ʵ<EFBFBD>ϱ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
void SystemGetUploadTime(DateTime *pDT)
{
pDT->s.second = (Sys_data_object.P1.ies_valve_up_times.valve_up_times_pre * 30) - valve_close_upload_time_cnt;//<2F>ط<EFBFBD><D8B7>ϱ<EFBFBD>
pDT->s.minute = upload_skew.s.minute;
pDT->s.hour = upload_skew.s.hour;
pDT->s.day = HEX2BCD(valve_close_upload_time_cnt%100);
pDT->s.month = HEX2BCD((valve_close_upload_time_cnt/100)%100);
pDT->s.year = HEX2BCD(Sys_data_object.P1.ies_valve_up_times.valve_up_times_realtime);
pDT->s.weekday = 0x00;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ϱ<EFBFBD>
static void SetEventUploadFlag(u8 type)
{
if(type == UPLOAD_TYPE_FRAME_ORDER||type == UPLOAD_TYPE_FACTORY)//<2F><>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
{
event_upload.event_cnt = 0;
event_upload.upload_cnt =0;
main_upload_state = UPLOAD_S1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
}
else
{
main_upload_state = UPLOAD_S2;//<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
}
event_upload.event_cnt++;
event_upload.event_cnt %= UPLOAD_EVENT_NUM;
event_upload.upload_type[event_upload.event_cnt] = type;
}
//<2F><>ѯ<EFBFBD>¼<EFBFBD><C2BC>ϱ<EFBFBD>
static u8 GetEventUploadFlag(void)
{
if(event_upload.event_cnt != event_upload.upload_cnt)
{
return TRUE;
}
else
{
return FALSE;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ϱ<EFBFBD>,(<28><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>,<2C><>ֹ<EFBFBD><D6B9>ʱ<EFBFBD><CAB1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>)
static void ClearEventUploadFlag(void)
{
event_upload.event_cnt = 0;
event_upload.upload_cnt =0;
}
//<2F><>ѯ<EFBFBD>¼<EFBFBD><C2BC>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
u8 GetEventUploadType(void)
{
return event_upload.upload_type[event_upload.upload_cnt];
}
//<2F>п<EFBFBD><D0BF><EFBFBD>
u8 FixedTimeNbIoTUploadIfIdle(void)
{
if(TIME_UPLOAD_S0 == time_upload_state)
{
return TASK_IDLE;
}
else
{
return TASK_BUSY;
}
}
//<2F>ϴ<EFBFBD><CFB4><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ж<EFBFBD>
static void UploadConditionJuge(void)
{
//<2F><>ʱ<EFBFBD>ϱ<EFBFBD>:
if(RtccCheckMsgApp(RtccMsg_UploadInTime))
{
if(up_time_check_2hour<200)
{
up_time_check_2hour++;
}
DateTime sys_rtcc_time;
RtccClearMsgApp(RtccMsg_UploadInTime);
RtccGetDateTime(&sys_rtcc_time);
UploadSkewTimeCount();//<2F><>ʱ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>\<5C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if defined(VALVE)
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬--<2D>ر<EFBFBD>,<2C>ط<EFBFBD>״̬<D7B4><CCAC>Ƶ<EFBFBD><C6B5><EFBFBD>ϱ<EFBFBD><CFB1>Լ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
if((VALVE_STATE_CLOSE_EMERGENCY == Sys_data_object.P1.ies_valve_paras.valve_state) ||
(VALVE_STATE_CLOSE_LOCK == Sys_data_object.P1.ies_valve_paras.valve_state) ||
(VALVE_STATE_CLOSE == Sys_data_object.P1.ies_valve_paras.valve_state))
{
if(0 == Sys_data_object.P1.ies_valve_up_times.valve_up_times_total) //Ϊ0ʱ<30><CAB1>Ĭ<EFBFBD>Ϲرոù<D5B8><C3B9><EFBFBD>
{
Sys_data_object.P1.func_cfg_bytes[12] &=~ 0x01;//<2F><><EFBFBD><EFBFBD>PSM<53>ϱ<EFBFBD>
}
else
{
valve_close_upload_time_cnt++;//<2F><><EFBFBD>Ӽ<EFBFBD>ʱ
if(0 == Sys_data_object.P1.ies_valve_up_times.valve_up_times_pre)
{
Sys_data_object.P1.ies_valve_up_times.valve_up_times_pre = 2; //Ĭ<>ϰ<EFBFBD>1h
}
if(valve_close_upload_time_cnt >= (Sys_data_object.P1.ies_valve_up_times.valve_up_times_pre * 30))//<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC>С30<33><30><EFBFBD><EFBFBD>
{
valve_close_upload_time_cnt = 0;
if(Sys_data_object.P1.ies_valve_up_times.valve_up_times_total > VALVE_CLOSE_UPLOAD_MAX)
{
Sys_data_object.P1.ies_valve_up_times.valve_up_times_total = VALVE_CLOSE_UPLOAD_MAX;
}
if(Sys_data_object.P1.ies_valve_up_times.valve_up_times_realtime < Sys_data_object.P1.ies_valve_up_times.valve_up_times_total)
{
Sys_data_object.P1.ies_valve_up_times.valve_up_times_realtime++;
FrameSetMsgApp(MsgChangcha_ValveUploadCnts);//<2F>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EE
SetEventUploadFlag(UPLOAD_TYPE_VALVE_CLOSE);//<2F><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7>ϱ<EFBFBD><CFB1><EFBFBD>Ϣ
SaveNewSoe(SOE_MANUAL_UPLOAD,0x20); //<2F><>SOE
Sys_data_object.P1.func_cfg_bytes[12] |= 0x01;//ʹ<><CAB9>PSM<53>ϱ<EFBFBD>
}
else
{
Sys_data_object.P1.func_cfg_bytes[12] &=~ 0x01;//<2F><><EFBFBD><EFBFBD>PSM<53>ϱ<EFBFBD>
}
}
}
}
else
{
valve_close_upload_time_cnt = 0;
Sys_data_object.P1.ies_valve_up_times.valve_up_times_realtime = 0;
Sys_data_object.P1.func_cfg_bytes[12] &=~ 0x01;//<2F><><EFBFBD><EFBFBD>PSM<53>ϱ<EFBFBD>
}
#endif
if(UPLOAD_MODE_HOUR == Sys_data_object.P1.Time_upload_2006.s.type) //Сʱģʽ
{
if(sys_rtcc_time.s.minute == upload_skew.s.minute) //<2F><>ɢʱ<C9A2><CAB1>
{
upload_delay_flag = 1;
}
}
else
{
if((sys_rtcc_time.s.hour == upload_skew.s.hour) && (sys_rtcc_time.s.minute == upload_skew.s.minute)) //<2F><>ɢʱ<C9A2><CAB1>
{
if(up_time_check_2hour < 120)//<2F><><EFBFBD>ϴζ<CFB4>ʱ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>2Сʱ
{
return;
}
if(UPLOAD_MODE_WEEK == Sys_data_object.P1.Time_upload_2006.s.type)//<2F><>ģʽ
{
if(Sys_data_object.P1.Time_upload_2006.s.period == sys_rtcc_time.s.weekday)
{
upload_delay_flag = 1;
up_time_check_2hour=0;//<2F><><EFBFBD>¼<EFBFBD>ʱ
}
}
else if(UPLOAD_MODE_MONTH == Sys_data_object.P1.Time_upload_2006.s.type)//<2F><>ģʽ
{
if(Sys_data_object.P1.Time_upload_2006.s.period == sys_rtcc_time.s.day)
{
upload_delay_flag = 1;
up_time_check_2hour=0;//<2F><><EFBFBD>¼<EFBFBD>ʱ
}
}
else//<2F><>ģʽ
{
if((BCD2HEX(sys_rtcc_time.s.day) % getUploadControlPara(UP_DAY_COUNT))!=0)
{
return;
}
up_delay_count_flag =1;
upload_delay_flag = 1;
up_time_check_2hour=0;//<2F><><EFBFBD>¼<EFBFBD>ʱ
}
}
}
}
if(upload_delay_flag==1)//<2F>ȴ<EFBFBD><C8B4><EFBFBD>ɢʱ<C9A2><EFBFBD><E4B5BD>
{
if(01 != LcdCheckStateApp())//<2F>Ǽ춨״̬
{
upload_delay_flag = 0;
if(0 == upload_again_cnt_copy)
{
SetEventUploadFlag(UPLOAD_TYPE_FIX_TIME); //RTCC<43><43>ʱ<EFBFBD>ϱ<EFBFBD>
SaveNewSoe(SOE_MANUAL_UPLOAD,0x10); //<2F><>SOE
}
else
{
SetEventUploadFlag(UPLOAD_TYPE_RETRY_AGAIN); //<2F>ش<EFBFBD><D8B4>ϱ<EFBFBD>
SaveNewSoe(SOE_MANUAL_UPLOAD,0x11); //<2F><>SOE
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>:
if(FrameCheckMsgApp(MsgNbUartSend))//<2F>жϴ<D0B6><CFB4>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>Ϣ
{
FrameClearMsgApp(MsgNbUartSend);
SetEventUploadFlag(UPLOAD_TYPE_FRAME_ORDER);
SaveNewSoe(SOE_MANUAL_UPLOAD,0x01); //<2F><>SOE
}
else if(KeyCheckLcdMsgApp(MENU_ACTIVE_RF))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>Ϣ
{
KeyClearLcdMsgApp(MENU_ACTIVE_RF);//<2F><EFBFBD><E5B0B4><EFBFBD><EFBFBD>Ϣ
SetEventUploadFlag(UPLOAD_TYPE_HAND_KEY);
SaveNewSoe(SOE_MANUAL_UPLOAD,0x02); //<2F><>SOE
}
else if(FrameCheckMsgApp(MsgNbUploadByValveStateChange))//<2F><><EFBFBD><EFBFBD>״̬<D7B4>ı<C4B1><E4B7A2><EFBFBD>ϱ<EFBFBD>
{
FrameClearMsgApp(MsgNbUploadByValveStateChange);
SetEventUploadFlag(UPLOAD_TYPE_VALVE_ACTIVE);
SaveNewSoe(SOE_MANUAL_UPLOAD,0x03); //<2F><>SOE
}
//<2F><><EFBFBD><EFBFBD>IP:<3A><>װ<EFBFBD><D7B0><EFBFBD>ڻ<EFBFBD>ȡIMEI
if(FrameCheckMsgApp(MsgNbIpPortChange))//ip<69><70><EFBFBD>˿ںŷ<DABA><C5B7><EFBFBD><EFBFBD>ı<EFBFBD>
{
FrameClearMsgApp(MsgNbIpPortChange);
SetEventUploadFlag(UPLOAD_TYPE_SET_IP);
SaveNewSoe(SOE_MANUAL_UPLOAD,0x04); //<2F><>SOE
}
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
if(FrameCheckMsgApp(MsgShenYang_NbUploadWarning))
{
FrameClearMsgApp(MsgShenYang_NbUploadWarning);
SetEventUploadFlag(UPLOAD_TYPE_WARNING);
SaveNewSoe(SOE_MANUAL_UPLOAD,0x05); //<2F><>SOE
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><><D6BB><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
if(FrameCheckMsgApp(Msg_FactoryUpload))
{
FrameClearMsgApp(Msg_FactoryUpload);
SetEventUploadFlag(UPLOAD_TYPE_FACTORY);
SaveNewSoe(SOE_MANUAL_UPLOAD,0x06); //<2F><>SOE
}
}
/*******************************************************************************
* @fun_name: FixedTimeNbIoTUpload
* @brief :
******************************************************************************/
static void FixedTimeNbIoTUpload_Ies(void)
{
switch(time_upload_state)
{
case(TIME_UPLOAD_S0):
{
if(TRUE == GetEventUploadFlag()) //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
{
event_upload.upload_cnt++;
event_upload.upload_cnt %= UPLOAD_EVENT_NUM;
Set100msTimer(TIMER_100MS_WAIT_SLEEP_GPRS, NB_TOTAL_WORK_TIME); //<2F><>ʱ<EFBFBD><CAB1>6min
g_activity_times++; //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>񣬻<EFBFBD>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
if(((FrameCheckParaApp(FramePara_FuncCfg0_3)>>16)&0xFF) == 0xAA)
{
OpenPrintNbDataSwitch();//<2F>򿪺<EFBFBD><F2BFAABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>
}
Sys_data_object.P3.ProductUploadFlag = 0x55;
FrameClearMsgApp(MsgNbUplaod_AckOk);//<2F><><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϣ
FrameClearMsgApp(MsgNb_FlagRcvNbFrame);
NbUploadParaSet();
time_upload_state = TIME_UPLOAD_S1;
}
}
break;
case(TIME_UPLOAD_S1):
{
if (NbiotIfOnline())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
time_upload_state = TIME_UPLOAD_S2;
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (NbiotIfIdle())
{
NbiotOnlineTask(&upload_send_state);
Set100msTimer(TIMER_100MS_ERROR_UPLOAD,NB_LAUNCH_TIME); //<2F>ʱ<EEB3A4><CAB1><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5min
time_upload_state = TIME_UPLOAD_S2;
}
}
}
break;
case(TIME_UPLOAD_S2):
{
if (NbiotIfOnline()) //<2F><><EFBFBD>߳ɹ<DFB3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>IMEI,ICCID<49><44>ECL<43><4C>SNR<4E><52>RSRP<52>Ȳ<EFBFBD><C8B2><EFBFBD>
{
if(UPLOAD_TYPE_FACTORY == GetEventUploadType()) //<2F>dz<EFBFBD><C7B3><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
{
upload_frame_data_step = UPLOAD_FRAME_UPLOAD_OK;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɹ<EFBFBD>
time_upload_state = TIME_UPLOAD_S3;//<2F>ϱ<EFBFBD><CFB1>ɹ<EFBFBD>,<2C><>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
}
else
{
NB_NetConnectStart(Sys_data_object.P1.server_ip, Sys_data_object.P1.server_port.datas, MAIN_CONNECT_TYPE);
time_upload_state = TIME_UPLOAD_S20;
}
}
else if((upload_send_state == NBIOT_ERROR)||(0 == Check100msTimer(TIMER_100MS_ERROR_UPLOAD)))//<2F><>¼<EFBFBD><C2BC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>ʧ<EFBFBD><CAA7>
{
upload_frame_data_step = UPLOAD_FRAME_ONLINE_FAIL;
time_upload_state = TIME_UPLOAD_S3;
}
}
break;
case(TIME_UPLOAD_S20)://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (ConncetIfOnline(MAIN_CONNECT_TYPE)) //<2F><><EFBFBD>߳ɹ<DFB3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>IMEI,ICCID<49><44>ECL<43><4C>SNR<4E><52>RSRP<52>Ȳ<EFBFBD><C8B2><EFBFBD>
{
upload_frame_data_step = UPLOAD_FRAME_REQUEST_NEW;
time_upload_state = TIME_UPLOAD_S3;
}
else if((upload_send_state == NBIOT_ERROR)||(0 == Check100msTimer(TIMER_100MS_ERROR_UPLOAD)))//<2F><>¼<EFBFBD><C2BC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>ʧ<EFBFBD><CAA7>
{
upload_frame_data_step = UPLOAD_FRAME_ONLINE_FAIL;
time_upload_state = TIME_UPLOAD_S3;
}
}
break;
case(TIME_UPLOAD_S3): //<2F>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡״̬<D7B4><CCAC>λ
{
GetUploadDataResetState();
time_upload_state = TIME_UPLOAD_S4;
}
break;
case(TIME_UPLOAD_S4): //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
{
GetUploadDataMachineProduction(upload_frame_data_step, upload_send_buf, &upload_send_len);
if(GetUploadDataCheckIdleProduction() == TASK_IDLE)
{
if(GetUploadDataCheckTaskProduction() == PTL_PACK_SUCCESS)
{
time_upload_state = TIME_UPLOAD_S5;
}
else
{
Set100msTimer(TIMER_100MS_NBIOT_20, NB_WAIT_5S);//5<><35><EFBFBD>ȴ<EFBFBD>
time_upload_state = TIME_UPLOAD_S7;
}
}
}
break;
case(TIME_UPLOAD_S5): //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
{
if (TASK_IDLE == NbiotIfIdle())
{
NbiotSendTask(upload_send_buf, upload_send_len, MAIN_SEND_TYPE, &upload_send_state);
Set100msTimer(TIMER_100MS_NBIOT_20, COAP_UPLOAD_WAIT_ACK_TIME);//<2F>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>
time_upload_state = TIME_UPLOAD_S6;
}
}
break;
case(TIME_UPLOAD_S6): //<2F>ȴ<EFBFBD><C8B4>ϱ<EFBFBD>Ӧ<EFBFBD><D3A6>
{
if((FrameCheckMsgApp(MsgNbUplaod_AckOk) == 1)||(Check100msTimer(TIMER_100MS_NBIOT_20) == 0))//<2F>յ<EFBFBD><D5B5>ϴ<EFBFBD>Ӧ<EFBFBD><D3A6>֡<EFBFBD><D6A1><EFBFBD>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>ʱ<EFBFBD>䵽,<2C><>Ϊ<EFBFBD>ϱ<EFBFBD><CFB1>ɹ<EFBFBD>
{
FrameClearMsgApp(MsgNbUplaod_AckOk);//<2F><><EFBFBD><EFBFBD>Ϣ
upload_frame_data_step = UPLOAD_FRAME_UPLOAD_OK;
Sys_data_object.P3.ProductUpoadFailFlag = 0;
NB_SS_Control_SetPara(NB_UploadFailTimes, 0);//<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1>ɹ<EFBFBD>,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
time_upload_state = TIME_UPLOAD_S4;
}
else if(upload_send_state == NBIOT_ERROR)//<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>ʧ<EFBFBD><CAA7>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>
{
Sys_data_object.P3.ProductUpoadFailFlag = 50;
upload_frame_data_step = UPLOAD_FRAME_UPLOAD_RETRY;
time_upload_state = TIME_UPLOAD_S4;
}
}
break;
case(TIME_UPLOAD_S7)://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
{
if(FrameCheckMsgApp(MsgNb_FlagRcvNbFrame))//<2F>Ƿ<EFBFBD><C7B7>յ<EFBFBD>nb<6E><62><EFBFBD><EFBFBD>
{
FrameClearMsgApp(MsgNb_FlagRcvNbFrame);
Set100msTimer(TIMER_100MS_NBIOT_20, NB_WAIT_5S);
}
if (Check100msTimer(TIMER_100MS_NBIOT_20) == 0)//5s<35><73>ʱʱ<CAB1>
{
if(TRUE == GetNbiotRevHandleOverFlag()) //<2F><>NB<4E><42><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
{
time_upload_state = TIME_UPLOAD_PowerDown;
}
}
}
break;
//ģ<><C4A3><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
case TIME_UPLOAD_PowerDown:
{
if(NbiotIfIdle())
{
StartPowerOffTask();
time_upload_state = TIME_UPLOAD_PowerDownWait;
}
}
break;
case TIME_UPLOAD_PowerDownWait:
{
if(NbiotIfIdle())
{
time_upload_state = TIME_UPLOAD_PowerDownEnd;
}
}
break;
case TIME_UPLOAD_PowerDownEnd:
{
if(TASK_IDLE == EepIfIdle())
{
if(((FrameCheckParaApp(FramePara_FuncCfg0_3)>>16)&0xFF) == 0xAA)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD>,<2C><><EFBFBD>رպ<D8B1><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Sys_data_object.P1.func_cfg_bytes[2] = 0;
s_upload_eep_complete = 0;
EepWrite(&Sys_data_object.P1.func_cfg_bytes[2], (EEP_FRAME_FUNCCFGBYTES_ADDR+2), 1, &s_upload_eep_complete);
Frame_Para_Init();
}
NbForcePowerOff();//NBǿ<42>ƹػ<C6B9>
UdpEndCheckData();
ClosePrintNbDataSwitch();
ClearEventUploadFlag();
Sys_data_object.P3.ProductUploadFlag = 0;
time_upload_state = TIME_UPLOAD_S0;
main_upload_state = UPLOAD_S0;
}
}
break;
default:
{
time_upload_state = TIME_UPLOAD_S0;
}
break;
}
//NB<4E><42>Ծʱ<D4BE>䳬ʱ<E4B3AC><CAB1><EFBFBD><EFBFBD>,<2C><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ǿ<EFBFBD>ƹػ<C6B9>
if(TASK_BUSY == FixedTimeNbIoTUploadIfIdle())
{
if(0 == Check100msTimer(TIMER_100MS_WAIT_SLEEP_GPRS))
{
time_upload_state = TIME_UPLOAD_PowerDownEnd;
}
}
}
static void FixedTimeNbIoTUpload_Other(void)
{
switch(time_upload_state)
{
case(TIME_UPLOAD_S0):
{
if(TRUE == GetEventUploadFlag()) //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
{
event_upload.upload_cnt++;
event_upload.upload_cnt %= UPLOAD_EVENT_NUM;
Set100msTimer(TIMER_100MS_WAIT_SLEEP_GPRS, NB_TOTAL_WORK_TIME); //<2F><>ʱ<EFBFBD><CAB1>6min
g_activity_times++; //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>񣬻<EFBFBD>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
if(((FrameCheckParaApp(FramePara_FuncCfg0_3)>>16)&0xFF) == 0xAA)
{
OpenPrintNbDataSwitch();//<2F>򿪺<EFBFBD><F2BFAABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>
}
FrameClearMsgApp(MsgNbUplaod_AckOk);//<2F><><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϣ
FrameClearMsgApp(MsgNb_FlagRcvNbFrame);
NbUploadParaSet();//<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
time_upload_state = TIME_UPLOAD_S1;
}
}
break;
case(TIME_UPLOAD_S1):
{
if(NbiotIfOnline())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(PSM_STATE_OUT != getPsmState())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PSM״̬,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PSM_STATE_SLEEP״̬<D7B4><CCAC>ʼ,<2C><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PSM_STATE_WAKE״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
{
NbiotPsmWakeupTask(); //psmģʽ<C4A3><CABD><EFBFBD><EFBFBD>
time_upload_state = TIME_UPLOAD_S10;
}
else
{
time_upload_state = TIME_UPLOAD_S2;
}
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (NbiotIfIdle())
{
NbiotOnlineTask(&upload_send_state);
Set100msTimer(TIMER_100MS_ERROR_UPLOAD,NB_LAUNCH_TIME); //<2F>ʱ<EEB3A4><CAB1><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5min
time_upload_state = TIME_UPLOAD_S2;
}
}
}
break;
case TIME_UPLOAD_S10://<2F>ȴ<EFBFBD>ģ<EFBFBD><C4A3>PSM<53><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(NbiotIfIdle()==TASK_IDLE)
{
if(PSM_STATE_WAKE == getPsmState())//<2F><><EFBFBD>ѳɹ<D1B3>
{
time_upload_state = TIME_UPLOAD_S20;
}
else//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
NbiotOnlineTask(&upload_send_state);
Set100msTimer(TIMER_100MS_ERROR_UPLOAD,NB_LAUNCH_TIME); //<2F>ʱ<EEB3A4><CAB1><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2min
time_upload_state = TIME_UPLOAD_S2;
}
}
}
break;
case(TIME_UPLOAD_S2):
{
if (NbiotIfOnline()) //<2F><><EFBFBD>߳ɹ<DFB3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>IMEI,ICCID<49><44>ECL<43><4C>SNR<4E><52>RSRP<52>Ȳ<EFBFBD><C8B2><EFBFBD>
{
setUploadControlPara(UP_CGATT_FAIL, FALSE);//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
NB_NetConnectStart(Sys_data_object.P1.server_ip, Sys_data_object.P1.server_port.datas, MAIN_CONNECT_TYPE);
time_upload_state = TIME_UPLOAD_S20;
}
else if((upload_send_state == NBIOT_ERROR)||(0 == Check100msTimer(TIMER_100MS_ERROR_UPLOAD)))//<2F><>¼<EFBFBD><C2BC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>ʧ<EFBFBD><CAA7>
{
setUploadControlPara(UP_CGATT_FAIL, TRUE);//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
upload_frame_data_step = UPLOAD_FRAME_ONLINE_FAIL;
time_upload_state = TIME_UPLOAD_S3;
}
}
break;
case(TIME_UPLOAD_S20)://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (ConncetIfOnline(MAIN_CONNECT_TYPE)) //<2F><><EFBFBD>߳ɹ<DFB3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>IMEI,ICCID<49><44>ECL<43><4C>SNR<4E><52>RSRP<52>Ȳ<EFBFBD><C8B2><EFBFBD>
{
if(PSM_STATE_WAKE == getPsmState())//<2F><><EFBFBD>ѳɹ<D1B3>
{
upload_frame_data_step = UPLOAD_FRAME_REQUEST_NEW;
time_upload_state = TIME_UPLOAD_S3;
}
else if(getUploadControlPara(UP_ONLY_REV)==TRUE)
{
setUploadControlPara(UP_ONLY_REV, FALSE);
Set100msTimer(TIMER_100MS_NBIOT_20, getUploadControlPara(UP_DELAY_TIME1));
time_upload_state = TIME_UPLOAD_S7;
}
else
{
upload_frame_data_step = UPLOAD_FRAME_REQUEST_NEW;
time_upload_state = TIME_UPLOAD_S3;
}
}
else if((upload_send_state == NBIOT_ERROR)||(0 == Check100msTimer(TIMER_100MS_ERROR_UPLOAD)))//<2F><>¼<EFBFBD><C2BC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>ʧ<EFBFBD><CAA7>
{
upload_frame_data_step = UPLOAD_FRAME_ONLINE_FAIL;
time_upload_state = TIME_UPLOAD_S3;
}
}
break;
case(TIME_UPLOAD_S3): //<2F>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡״̬<D7B4><CCAC>λ
{
GetUploadDataResetState();
time_upload_state = TIME_UPLOAD_S4;
}
break;
case(TIME_UPLOAD_S4): //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
{
GetUploadDataMachine(upload_frame_data_step, upload_send_buf, &upload_send_len);
if(GetUploadDataCheckIdle() == TASK_IDLE)
{
if(GetUploadDataCheckTask() == PTL_PACK_SUCCESS)
{
time_upload_state = TIME_UPLOAD_S5;
}
else
{
Set100msTimer(TIMER_100MS_NBIOT_20, getUploadControlPara(UP_DELAY_TIME1));
time_upload_state = TIME_UPLOAD_S7;
}
}
}
break;
case(TIME_UPLOAD_S5): //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
{
if (TASK_IDLE == NbiotIfIdle())
{
NbiotSendTask(upload_send_buf, upload_send_len, MAIN_SEND_TYPE, &upload_send_state);
Set100msTimer(TIMER_100MS_NBIOT_20, COAP_UPLOAD_WAIT_ACK_TIME);//<2F>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>
time_upload_state = TIME_UPLOAD_S6;
}
}
break;
case(TIME_UPLOAD_S6): //<2F>ȴ<EFBFBD><C8B4>ϱ<EFBFBD>Ӧ<EFBFBD><D3A6>
{
if((FrameCheckMsgApp(MsgNbUplaod_AckOk) == 1)||(Check100msTimer(TIMER_100MS_NBIOT_20) == 0))//<2F>յ<EFBFBD><D5B5>ϴ<EFBFBD>Ӧ<EFBFBD><D3A6>֡<EFBFBD><D6A1><EFBFBD>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>ʱ<EFBFBD>䵽,<2C><>Ϊ<EFBFBD>ϱ<EFBFBD><CFB1>ɹ<EFBFBD>
{
FrameClearMsgApp(MsgNbUplaod_AckOk);//<2F><><EFBFBD><EFBFBD>Ϣ
s_upload_ack_fail_times = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>0
upload_frame_data_step = UPLOAD_FRAME_UPLOAD_OK;
Sys_data_object.P3.ProductUpoadFailFlag = 0;
time_upload_state = TIME_UPLOAD_S4;
}
else if(upload_send_state == NBIOT_ERROR)//<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>ʧ<EFBFBD><CAA7>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>
{
upload_frame_data_step = UPLOAD_FRAME_UPLOAD_RETRY;
time_upload_state = TIME_UPLOAD_S4;
}
}
break;
case(TIME_UPLOAD_S7)://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
{
if(FrameCheckMsgApp(MsgNb_FlagRcvNbFrame))//<2F>Ƿ<EFBFBD><C7B7>յ<EFBFBD>nb<6E><62><EFBFBD><EFBFBD>
{
FrameClearMsgApp(MsgNb_FlagRcvNbFrame);
Set100msTimer(TIMER_100MS_NBIOT_20, getUploadControlPara(UP_DELAY_TIME1));
}
else if (Check100msTimer(TIMER_100MS_NBIOT_20) == 0)//10s<30><73>ʱʱ<CAB1>
{
if(TRUE == GetNbiotRevHandleOverFlag()) //<2F><>NB<4E><42><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
{
if(TRUE == GetEventUploadFlag()) //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
{
event_upload.upload_cnt++;
event_upload.upload_cnt %= UPLOAD_EVENT_NUM;
time_upload_state = TIME_UPLOAD_S20;
}
else
{
if(PSM_STATE_WAKE == getPsmState())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PSM<53><4D><EFBFBD><EFBFBD>״̬
{
if((Sys_data_object.P1.func_cfg_bytes[12]&0x80)&&(Sys_data_object.P1.func_cfg_bytes[12]&0x03)) //PSMģʽ<C4A3>ϱ<EFBFBD><CFB1>ж<EFBFBD>
{
time_upload_state = TIME_UPLOAD_PsmSleep;
}
else
{
time_upload_state = TIME_UPLOAD_UDP_S1;
}
}
else
{
if((getUploadControlPara(UP_WITH_UDP)==TRUE)&&(getUploadControlPara(UP_CGATT_FAIL)==FALSE))//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>UDP<44>ϱ<EFBFBD>
{
time_upload_state = TIME_UPLOAD_UDP_S1;
}
else
{
time_upload_state = TIME_UPLOAD_PowerDown;
}
}
}
}
}
}
break;
//UDP<44>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
case TIME_UPLOAD_UDP_S1:
{
if(TRUE == GetNbiotRevHandleOverFlag()) //<2F><>NB<4E><42><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
{
if(NbiotIfIdle())
{
upload_frame_data_step=0;
NB_NetConnectStart(Sys_data_object.P2.server_ip, Sys_data_object.P2.server_port.datas, SLAVE_CONNECT_TYPE);
Set100msTimer(TIMER_100MS_NBIOT_20, getUploadControlPara(UP_DELAY_TIME1));
time_upload_state = TIME_UPLOAD_UDP_S2;
}
}
}
break;
case TIME_UPLOAD_UDP_S2://<2F>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡״̬<D7B4><CCAC>λ
{
if(ConncetIfOnline(SLAVE_CONNECT_TYPE))
{
upload_frame_data_step = UPLOAD_FRAME_REQUEST_NEW;
time_upload_state = TIME_UPLOAD_UDP_S3;
}
else if (Check100msTimer(TIMER_100MS_NBIOT_20) == 0)//5s<35><73>ʱʱ<CAB1>
{
upload_frame_data_step = UPLOAD_FRAME_ONLINE_FAIL;
time_upload_state = TIME_UPLOAD_UDP_S3;
}
}
break;
case(TIME_UPLOAD_UDP_S3): //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
{
GetUploadDataResetState_UDP();
time_upload_state = TIME_UPLOAD_UDP_S4;
}
break;
case(TIME_UPLOAD_UDP_S4): //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
{
GetUploadDataMachine_UDP(upload_frame_data_step, upload_send_buf, &upload_send_len);
if(GetUploadDataCheckIdle_UDP() == TASK_IDLE)
{
if(GetUploadDataCheckTask_UDP() == PTL_PACK_SUCCESS)
{
time_upload_state = TIME_UPLOAD_UDP_S5;
}
else
{
Set100msTimer(TIMER_100MS_NBIOT_20, getUploadControlPara(UP_DELAY_TIME1));
time_upload_state = TIME_UPLOAD_UDP_S7;
}
}
}
break;
case TIME_UPLOAD_UDP_S5://<2F>ȴ<EFBFBD>UDP<44><50><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
{
if (TASK_IDLE == NbiotIfIdle())
{
NbiotSendTask(upload_send_buf, upload_send_len, SLAVE_SEND_TYPE, &upload_send_state);
Set100msTimer(TIMER_100MS_NBIOT_20, UDP_UPLOAD_WAIT_ACK_TIME);//<2F>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>ʱ<EFBFBD><CAB1>
time_upload_state = TIME_UPLOAD_UDP_S6;
}
}
break;
case(TIME_UPLOAD_UDP_S6): //<2F>ȴ<EFBFBD>UDPӦ<50><D3A6>
{
if(FrameCheckMsgApp(MsgNbUplaod_AckOk) == 1)//<2F>յ<EFBFBD><D5B5>ϴ<EFBFBD>Ӧ<EFBFBD><D3A6>֡
{
FrameClearMsgApp(MsgNbUplaod_AckOk);//<2F><><EFBFBD><EFBFBD>Ϣ
upload_frame_data_step = UPLOAD_FRAME_UPLOAD_OK;
time_upload_state = TIME_UPLOAD_UDP_S4;
}
else if (Check100msTimer(TIMER_100MS_NBIOT_20) == 0)//<2F><>ʱ<EFBFBD><CAB1>Ӧ<EFBFBD><D3A6>
{
upload_frame_data_step = UPLOAD_FRAME_UPLOAD_RETRY;
time_upload_state = TIME_UPLOAD_UDP_S4;
}
}
break;
case TIME_UPLOAD_UDP_S7:
{
if(FrameCheckMsgApp(MsgNb_FlagRcvNbFrame)||(TRUE == UdpIfNeedReadData()))//<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>5s<35><73><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
FrameClearMsgApp(MsgNb_FlagRcvNbFrame);
Set100msTimer(TIMER_100MS_NBIOT_20, getUploadControlPara(UP_DELAY_TIME1));
}
if(Check100msTimer(TIMER_100MS_NBIOT_20) == 0)
{
if(TRUE == GetNbiotRevHandleOverFlag()) //<2F><>NB<4E><42><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
{
time_upload_state = TIME_UPLOAD_PowerDown;
}
}
}
break;
case TIME_UPLOAD_PsmSleep:
{
if(NbiotIfIdle()==TASK_IDLE)
{
NbiotPsmSleepTask();
time_upload_state = TIME_UPLOAD_PsmSleepWait;
}
}
break;
case TIME_UPLOAD_PsmSleepWait:
{
if(NbiotIfIdle()==TASK_IDLE)
{
if(PSM_STATE_SLEEP == getPsmState())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PSM<53><4D><EFBFBD>߳ɹ<DFB3>
{
Sys_data_object.P3.NBSleepMode = 1;
UdpEndCheckData();
ClosePrintNbDataSwitch();
ClearEventUploadFlag();
time_upload_state = TIME_UPLOAD_S0;
main_upload_state = UPLOAD_S0;
}
else
{
time_upload_state= TIME_UPLOAD_PowerDown;
}
}
}
break;
//ģ<><C4A3><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
case TIME_UPLOAD_PowerDown:
{
if(NbiotIfIdle())
{
StartPowerOffTask();
time_upload_state = TIME_UPLOAD_PowerDownWait;
}
}
break;
case TIME_UPLOAD_PowerDownWait:
{
if(NbiotIfIdle())
{
time_upload_state = TIME_UPLOAD_PowerDownEnd;
}
}
break;
case TIME_UPLOAD_PowerDownEnd:
{
if(TASK_IDLE == EepIfIdle())
{
if(((FrameCheckParaApp(FramePara_FuncCfg0_3)>>16)&0xFF) == 0xAA)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD>,<2C><><EFBFBD>رպ<D8B1><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Sys_data_object.P1.func_cfg_bytes[2] = 0;
s_upload_eep_complete = 0;
EepWrite(&Sys_data_object.P1.func_cfg_bytes[2], (EEP_FRAME_FUNCCFGBYTES_ADDR+2), 1, &s_upload_eep_complete);
Frame_Para_Init();
}
NbForcePowerOff();//NBǿ<42>ƹػ<C6B9>
UdpEndCheckData();
ClosePrintNbDataSwitch();
ClearEventUploadFlag();
Sys_data_object.P3.NBSleepMode = 0; //NBģ<42><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>־
time_upload_state = TIME_UPLOAD_S0;
main_upload_state = UPLOAD_S0;
}
}
break;
default:
{
time_upload_state = TIME_UPLOAD_S0;
}
break;
}
//NB<4E><42>Ծʱ<D4BE>䳬ʱ<E4B3AC><CAB1><EFBFBD><EFBFBD>,<2C><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ǿ<EFBFBD>ƹػ<C6B9>
if(TASK_BUSY == FixedTimeNbIoTUploadIfIdle())
{
if(0 == Check100msTimer(TIMER_100MS_WAIT_SLEEP_GPRS))
{
time_upload_state = TIME_UPLOAD_PowerDownEnd;
}
}
}
void FixedTimeNbIoTUpload(void)
{
UploadConditionJuge();
switch(main_upload_state)
{
case UPLOAD_S0:
{
}
break;
case UPLOAD_S1://<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
{
FixedTimeNbIoTUpload_Ies();
}
break;
case UPLOAD_S2://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
{
FixedTimeNbIoTUpload_Other();
}
break;
default:
{
main_upload_state = UPLOAD_S0;
}
break;
}
}
void SystemClearUploadAgain(void)
{
upload_again_cnt_copy = 0;
}
void SystemAddUploadAgain(void)
{
if(UPLOAD_TYPE_FIX_TIME == GetEventUploadType())//<2F><>ʱ<EFBFBD>ϴ<EFBFBD>
{
s_upload_ack_fail_times++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
}
if(s_upload_ack_fail_times<10)
{
upload_again_cnt_copy++;
}
}
/*******************************<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(0 == sys_rtcc_time.s.hour) //ÿ<><C3BF>0<EFBFBD><30>
{
if (EepIfIdle())
{
if(Sys_data_object.P1.func_cfg_bytes[0] > 0)//<2F><><EFBFBD><EFBFBD>15<31><35>ʱ<EFBFBD>仹û<E4BBB9>е<EFBFBD>
{
Sys_data_object.P1.func_cfg_bytes[0]--;//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
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;
}
}
else
{
save_freeze_sate = SAVE_FREEZE_S0;
}
}
break;
case SAVE_FREEZE_S3://Сʱģʽ0<CABD><30><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ģʽ
{
if (EepIfIdle())
{
if(UPLOAD_MODE_HOUR == Sys_data_object.P1.Time_upload_2006.s.type) //Сʱģʽ
{
Sys_data_object.P1.Time_upload_2006.s.type = UPLOAD_MODE_DAY;
Sys_data_object.P1.Time_upload_2006.s.period = 0x00; //0x00,//report_freq_val[1]---<2D><>ģʽ<C4A3><CABD>Ч
Sys_data_object.P1.Time_upload_2006.s.hour = 0x06; //0x06,//report_freq_val[2]---6<><36>
Sys_data_object.P1.Time_upload_2006.s.minute = 0x00; //0x00,//report_freq_val[3]---0<><30>
Sys_data_object.P1.Time_upload_2006.s.second = 0x00; //0x00,//report_freq_val[4]---0<><30>
EepWrite(&Sys_data_object.P1.Time_upload_2006.buf[0], FRAME_NBIot_FREQVAL, 5, &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;
}
}
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: FrameGsmMsgManage
* @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();
FixedTimeNbIoTUpload();
DataStoreMachine();
}
void SystemProcessorInit(void)
{
upload_delay_flag = 0;
upload_send_state=0;
if(upload_again_cnt_copy >3)
{
upload_again_cnt_copy = 0;
}
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();
NbUploadParaSet();
//KeySetLcdMsgApp(MENU_ACTIVE_RF);//<2F><><EFBFBD>߲<EFBFBD><DFB2>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
}
u8 SystemProcessorIfSleep(void)
{
if((FixedTimeNbIoTUploadIfIdle() == TASK_IDLE) && (DataStoreIfIdle() == TRUE))
{
return TRUE;
}
return FALSE;
}
#endif