/* * File: __GP22LoRa_RTCC_APP_C * Author: * * Created on:2017-7-24 */ #ifdef __cplusplus extern "C" { #endif #include "type.h" #include "UWater_rtcc_driver.h" #include "UWater_power_app.h" #include "UWater_eeprom_driver.h" #include "UWater_valve_driver.h" #include "UWater_timer1uS_driver.h" #include "UWater_rtcc_app.h" #include "UWater_frame_app.h" #include "UWater_lcd_app.h" #include "UWater_gp22_app.h" #include "UWater_valve_app.h" #include "UWater_DataTools_App.h" //#include "sys_processor.h" #include "UWater_pt_app.h" //static RTCC_EE_DATA ee_data; //RTCC永久性数据 RTCC_HISTORY_DATA ee_history_data; //历史数据单元 u8 miji_collect_buf[384];//密集采集流量暂存寄存器 static u8 miji_collect_send_buf[192];//密集采集流量对外接口 RTCC_To_Float old_total_flow;//5min累积量初值 RTCC_To_Float new_total_flow;//5min累计量终值 RTCC_UNION_2U8TOU16 miji_date; static u16 date_remember = 0; RTCC_To_Float temp_to_gloat;//数据转换专用 RTCC_UNION_2U8TOU16 jiange_date; //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; static u8 s_g_rtcc_is_error = 0; //2015-6-3 默认正常 static u8 s_g_rtcc_msg = 0; //2015-6-3 //static float s_daily_temprature[3]; //static u16 s_daily_temprature_min_max[2]; /*****************************/ u8 RtccIsError() { if((RTC_ClkSource()==1)||(s_g_rtcc_is_error == 1)) { return 1; } return 0; } void RtccClearError(void) { s_g_rtcc_is_error = 0; } /************************************************* Function:void RtccInitApp() Description:RTCC INIT Input:void Output:void Return:void Others: *************************************************/ /************************************************* Function:u8 RtccCheckMsgApp(void) Description:查询当前是否在活跃状态(每一小时判断一次的接口)、递传 Input: Output:bit0:无线活跃状态(每一小时判断一次的接口) bit1:递传活跃状态(每一小时判断一次的接口) bit2:连续定时时间到MSG查询接口 1:定时时间到,0:未到 bit3:自动递传时间到MSG bit4: 校时后不在递传活跃期msg bit5: 退出域信道MSG Return:void Others: *************************************************/ u8 RtccCheckMsgApp(Rtcc_MsgTypeDef msg_bit) { return (s_g_rtcc_msg & (1 << msg_bit)); } /************************************************* Function:u8 RtccClearMsgApp() Description:清MSG:当前是否在活跃状态(每一小时判断一次的接口)、递传 Input:clear_bit: * 0:状态,不能清,缺省 * 1:状态,不能清,缺省 * 2:清连续定时时间到MSG * 3:清自动递传时间到MSG * 4:清校时后不在递传活跃期msg * 5:清退出域信道MSG * 输入 :0,1,2,3,4,5 Output: Return:void Others: *************************************************/ void RtccClearMsgApp(Rtcc_MsgTypeDef clear_bit) { s_g_rtcc_msg &= ~(1 << clear_bit); } void RtccSetMsgApp(Rtcc_MsgTypeDef set_bit) { s_g_rtcc_msg |= (1 << set_bit); } /**************************************************************** Function: void RtccAppCheckMiJi(DateTime alarm_time) Description: 查询密集上报,每5min查一次 Input: Return: Others: *****************************************************************/ void RtccAppCheckMiJi(DateTime alarm_time) //每5min查一次 { To_u32_Rtcc miji_begin_date, miji_begin_time, miji_end_date; u8 miji_now_time , miji_begin_time_hex; u32 temp_value = 0; miji_begin_date.rtcc_u32 = FrameCheckParaApp(FramePara_ReportStartDMY); //密集上报开始时间日月年bcd miji_begin_time.rtcc_u32 = FrameCheckParaApp(FramePara_ReportStartSMH); //密集上报开始时间秒分时bcd miji_end_date.rtcc_u32 = FrameCheckParaApp(FramePara_ReportEndSMH); //密集上报结束时间日月年bcd temp_value = (alarm_time.s.year<<16) | (alarm_time.s.month<<8) | (alarm_time.s.day) ; if((miji_begin_date.rtcc_u32 <= temp_value) && (miji_end_date.rtcc_u32 >= temp_value)) //在开始日期和结束日期之内(年月日) { u16 tmpi =0; if(miji_begin_time.rtcc_u8[0] <= alarm_time.s.hour) //只判断到小时,固定是00分。 { if((miji_begin_time.rtcc_u8[0] == alarm_time.s.hour) && (0 == alarm_time.s.minute)) //刚开始存,清除buf { //清存储buf for (tmpi = 0;tmpi < 384;tmpi++) { miji_collect_buf[tmpi] = 0; date_remember = 0; } old_total_flow.gp22_u32 = Gp30CheckDataApp(2); //更新密集采集初始值 } else { miji_now_time = (alarm_time.s.hour >> 4)*10 + (alarm_time.s.hour & 0x0F);//转化为16进制比较 miji_begin_time_hex = (miji_begin_time.rtcc_u8[0] >> 4)*10 + (miji_begin_time.rtcc_u8[0] & 0x0F); if((miji_begin_time_hex + 4) >= miji_now_time) //密集上报时间内 { //密集上报存储 new_total_flow.gp22_u32 = Gp30CheckDataApp(2); miji_date.datas = (u16)((new_total_flow.gp22_float - old_total_flow.gp22_float)*10); miji_collect_buf[date_remember] = miji_date.datas_map.data0; miji_collect_buf[date_remember+1] = miji_date.datas_map.data1; miji_collect_buf[date_remember+2] = 0; miji_collect_buf[date_remember+3] = 0; old_total_flow.gp22_u32 = new_total_flow.gp22_u32; date_remember = date_remember +4; if(384 == date_remember ) { date_remember = 384; } } if(((miji_begin_time_hex + 4) == miji_now_time) && (0 == alarm_time.s.minute)) //密集上报结束时刻 { if(date_remember >192) { date_remember = date_remember -192; } else { date_remember =0; } for (tmpi = 0;tmpi < 192;tmpi++) { miji_collect_send_buf[tmpi] = miji_collect_buf[date_remember+tmpi]; } for (tmpi = 0;tmpi < 384;tmpi++) { miji_collect_buf[tmpi] = 0;//清接收数据BUF } date_remember = 0; } } } RtccSetMsgApp(RtccMsg_MiJiCaiJi);//s_g_rtcc_msg |= BIT1; //密集采集时间段内(开始年月日-结束年月日),4h采集完成MSG } else { RtccClearMsgApp(RtccMsg_MiJiCaiJi);//s_g_rtcc_msg &= ~BIT1; } } /************************************************* Function:u32 RtccGetWorkHourApp() Description:获取工作累计时间 Input:void Output:void Return:void Others: *************************************************/ u32 RtccGetWorkHourApp(void) { return Sys_data_object.ee_data.data.work_hour; } /************************************************* Functionp30CheckJianGeDataApp(u8 *addr) Description:获取最新的密集流量 Input:void Output:void Return:void Others: *************************************************/ void Gp30CheckMiJiDataApp(u8 **addr) { *addr = miji_collect_send_buf; } /************************************************* Functionp30CheckJianGeDataApp(u8 *addr) Description:获取最新的间隔流量 Input:void Output:void Return:void Others: *************************************************/ void Gp30CheckJianGeDataApp(u8 **addr) { *addr = 0;//jiange_collect_send_buf; } #ifdef __cplusplus } #endif