#include "ProgramRun.h" #include "FifoQueue.h" #include "Config.h" //常用功能 #include "Bat.h" //电池 #include "Beep.h" //蜂鸣器 #include "Keys.h" //按键 #include "3G_A8500.h" //3G #include "Uart.h" //串口 #include "Fas_Base.h" //fas处理 #include "ParaConfig.h" //falsh配置 #include "Fas_Test485.h" //测试485 #include "Fas_Test232.h" //测试232 #include "Mypara.h" #include "Exit.h" //外部中断 #include "Led.h" //led #include "Fas_Base.h" #include "Fas_YDH30P_Alone.h" #include "Fas_ZZSA_dianhutanceqi.h" #include "Fas_CJ_xianliuqi.h" #include "Fas_YDH10P.h" tPubAppEvents PubAppEvent; tFasAppStates FasAppState; tFasAppEvents FasAppEvent; /* 此函数仅用于超时计时 计时速度必须大于T10MS_EV_Handler, 不然T10MS_EV_Handler会重复执行 */ void T10MS_Count_Handler ( void ) //10ms { //3g计时 a8500_delay_cnt += 10; if ( a8500_delay_cnt >= 60000 ) //0~60000 { a8500_delay_cnt = 0; } Fas_T10MS_Even(); } /* 按测试按键切换正常模式和测试模式 测试模式: 1.发送485,原数据返回 2.发送232,生产配置IP 端口等 正常模式: 1.发送485,雅达-独立式 2.发送232,原数据返回 */ void T10MS_EV_Handler ( void ) { A8500_Handler(); //3g模块,不要太快,最好大于1ms。模块初始化 switch ( SysRunType ) //切换协议 { case SysRun_Norm: Fas_Handler(); break; case SysRun_Test: //按测试按键切换正常模式和测试模式 Fas_Handler(); //测试:MCU -> 雅达参数 ProduSet_Handler(); //测试:工具->MCU 参数 Test232_Handler(); Test485_Handler(); break; } } void T100MS_EV_Handler ( void ) { Hard_FeedDog(); //硬件看门狗 LedEven(); //LED处理 } void T1S_EV_Handler ( void ) { DC_BAT_Handler(); //adc任务,电量采集 if ( SysRunType == SysRun_Test ) { Gprs_Msg_3s_Even(); //测试模式,无效 } } void T1min_EV_Handler ( void ) { static u8 CTime_min = 0; if ( SysPara.CTime ) { if ( CTime_min++ >= SysPara.CTime * 30 ) //巡检一次,单位0.5小时 { CTime_min = 0; QueueIn ( &Pub_Tasks, CTIME_EV ); Set_All485_CTimeFlag(); //参数获取:巡检,之后返回成功或失败 } } } void T8min_EV_Handler ( void ) { DTU_Heart(); //心跳 } void Time_EV_Handler ( void ) { if ( System_Flag_10Ms ) { System_Flag_10Ms = 0; T10MS_EV_Handler(); //设备状态获取,参数配置,以及数据的发送 } if ( System_Flag_100Ms ) { System_Flag_100Ms = 0; T100MS_EV_Handler(); //LED处理,和喂硬件看门狗 } if ( System_Flag_1s ) { System_Flag_1s = 0; T1S_EV_Handler(); //网关电池电量的计算处理,以及网关数据发送 } if ( System_Flag_1min ) { System_Flag_1min = 0; T1min_EV_Handler(); //切换到巡检数据发送状态 } if ( System_Flag_8min ) { System_Flag_8min = 0; T8min_EV_Handler(); //心跳包的发送 } } /**********************信号处理函数**************************/ void UART1_RECV_EV_Handler ( void ) //485 { switch ( SysRunType ) //切换协议 { case SysRun_Norm: Fas_Recv_A_Frame_Msg(); break; case SysRun_Test: if ( Test485_Recv_A_Frame_Msg() ); else if ( Fas_Recv_A_Frame_Msg() ); break; } } void UART2_RECV_EV_Handler ( void ) //3g { A8500_Recv_A_Frame_Msg(); } void UART3_RECV_EV_Handler ( void ) //232口用+配置串口 { switch ( SysRunType ) //切换协议 { case SysRun_Norm: break; case SysRun_Test: if ( Test232_Recv_A_Frame_Msg() ); else if ( ProduSet_Recv_A_Frame_Msg() ); break; } } /************************* Application States & Events **************************/ void Ignore ( void ) {} void CTIME_EV_Handler ( void ) { DTU_Msg ( Command_DevPoll, Get_All485State() ); } const tAppStateFp PubAppTb[PUBAPP_MAX_EV] = { // ** STATE *** *** EVENT ** // &Ignore, //ACDC_EV, &KGL_IN_Hanlder, //KGL_IN_EV, &Key_XY_Hanlder, //KEY_XY_EV, //消音 &Key_CS_Hanlder, //KEY_CS_EV, //测试 &Ignore, //KGL_IN_LONG_EV, &Key_XY_Long_Hanlder, //KEY_XY_LONG_EV, //长按消音键 &Key_CS_Long_Hanlder, //KEY_CS_LONG_EV, //长按测试键 &UART1_RECV_EV_Handler, //UART1_RECV_EV, &UART2_RECV_EV_Handler, //UART2_RECV_EV, &UART3_RECV_EV_Handler, //UART3_RECV_EV, &CTIME_EV_Handler, //CTIME_EV, }; const tAppStateFp FasAppTb[FAS_MAX_ST][FASAPP_MAX_EV] = { // ** STATE *** *** EVENT ** // { &Ignore, &Ignore, }, }; //if(QueueIn(&SysMsg,i) == QueueFull) break; //if(QueueOut(&SysMsg,&sh) == QueueEmpty) break; void Init_Param ( void ) { QueueInit ( &Fas_Tasks ); //fas协议任务 QueueInit ( &Pub_Tasks ); //公共任务 WGpara.GPRS = 0x01; //网络制式 2G网络 WGpara.YYS = 0x01; //运营商 1:中国移动 EnableMsg.XX = 1; } /**********************************封包**********************************************/