/******************************************************************************** * File Name: ModemTask.c * Function Describe: 完成串口与Modem的通讯 * Explain: * Writer: ShiLiangWen * Date: 2015-8-2 *******************************************************************************/ #define THIS_FILE_ID 17 /*******************************************************************************/ #include "includes.h" OS_TID idModemTask=0; U64 stkModemTask[MODEM_TASK_STK_SIZE]; OS_TID idModemUartTask=0; U64 stkModemUartTask[MODEM_UART_TASK_STK_SIZE]; OS_SEM ModemUartSem; unsigned char g_ucModemTaskEn=0; unsigned short g_usModemProtectEn=0; FEEDBACK_DEF sutFeed; YUNYINGSHANG_DEF thisYunYingShang=CHINA_NONE; int WaitModemReady(void); void WarnTTSReport(void); /******************************************************************* *ModemUartTask ********************************************************************/ __task void ModemUartTask(void) { os_sem_init (&ModemUartSem, 0); while(1){ os_sem_wait (&ModemUartSem, 0xffff); Uart2RecvProcess(); } } /******************************************************************* *ModemTask ********************************************************************/ __task void ModemTask(void) { #ifdef SLW_DEBUG unsigned short MsgBoxCheck; unsigned short MinMsgBoxCheck=20; #endif unsigned char i; unsigned short susCt=0; SUT_MODEM_AT_MSG *pMsg=&sutAtmPro; char buf[40]; g_ucModemTaskEn=1; SlwTrace(INF,"Poc Task start!",1); //GPS相关初始化 GpsTaskTick(1); g_ucModemSentTcpCt=0; TSGpsDataInit(); sutGpsStatus.PPPStatus=INVALID; sutGpsStatus.IPStatus=INVALID; sutGpsStatus.CheckCnt=0; SlwTrace(INF,"Modem Task start!",1); SetLedIndicator(IndNoNet); SlwTrace(INF,"ModemInit...",1); SetPowerEn(1); //1、模块初始化:通过能否检测到MEID if(ModemInit()) {//成功 sprintf(buf, "[01]MEID:%s", sutProductPara.MEID); SlwTrace(INF, buf,1); }else {//模块初始化失败,进入GT模式,为了升级模块 SetPowerEn(0); SlwTrace(INF,"[01]Failed\r\nEnter GT Mode!",1); EnterGTMode(); while(1) { sutPocStatus.ModemInactiveCt=0; os_dly_wait(100); } } //2、关闭回显示 ModemSendAT("ATE0\r\n"); SlwTrace(INF, "[02]ATE0 OK",1); //3、获取模块版本 ModemInfo(); //4、POC version check ModemPocVersionCheck(); //5、查询IMEI if(ModemGetIMEI()) { sprintf(buf, "[05]IMEI:%s", sutProductPara.IMEI); SlwTrace(INF, buf,1); }else SlwTrace(INF, "[05]IMEI:Failed",1); //6、配置TTS语音速度 ModemSetSpeed(); //7、配置音量 VolumeSet(); //8、检测卡是否存在 if(0==ModemCheckUIM()) {//卡不在位,循环播报请插卡 susCt=3500; SetPowerEn(0); GPSInit(); while(1) { if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))) { continue; } else os_dly_wait(1); sutPocStatus.ModemInactiveCt=0; if(0==g_ucModemTaskEn)continue; //GPS Uart消息处理 if(g_usUart3RecvLen){ process_nema((char *)RxBuffer3); g_usUart3RecvLen=0; } if(++susCt>=3500)susCt=0; else continue; MeSpeak(ENCODE_UNICODE,"F78BD2636153",0); os_dly_wait(200); SpeakerDisable(); SlwTrace(INF,"[08]No UIM Card!",1); } }else SlwTrace(INF, "[08]Card ready",1); //9、查询CCID ModemGetCCID(); //10、检查并重新设置POC参数 if(ModemCheckPocParam()) SlwTrace(INF,"[10]Rst_POCPara",1); else SlwTrace(INF, "[10]POC still",1); sutPocStatus.ModemPowerOn=1; SetPowerEn(0); //11、设置APN ModemApnConfig(); //12、集群功能初始化数据 SlwTrace(INF, "[12]HigosSerInit",1); HigosInit(); //13、GPS配置 GPSInit(); //14、设置成员获取简单模式 SetModemPocSimpleMode(); SlwTrace(INF, "ModemLoopStart",1); while(1) { if(0==g_ucModemTaskEn) { if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))) { #if(USE_CONFIG_FUN==1) SlwTrace(INF,(char *)pMsg->MsgData,0); AtHandle(pMsg->MsgData); continue; #endif }else os_dly_wait(1); #if(USE_CONFIG_FUN==1) ConfigCtrHandle(); #endif continue; } if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))) { if(pMsg->MsgData[0] == '\r' && pMsg->MsgData[1] == '\n') continue; #if ENABL_FOGA_BACK_DATA_PRINT if(Fota_Rcv_Pri_Flag) #endif SlwTrace(INF,(char *)pMsg->MsgData,0); FotaIap_Handle((char *)pMsg->MsgData); sutPocStatus.ModemInactiveCt=0; if(pMsg->MsgData[0]=='+' || pMsg->MsgData[0] == '^') { if(1 == PocHandle((char *)pMsg->MsgData)) continue; AtHandle((char *)pMsg->MsgData); } continue; }else os_dly_wait(1); //---指示灯设置--- if(0==sutPocStatus.Logined)SetLedIndicator(IndNoNet); else if(sutPocStatus.Speaker>0)SetLedIndicator(IndRX); else if(sutPocStatus.Mic>0 && sutPocStatus.PPTpress>0)SetLedIndicator(IndTX); else SetLedIndicator(IndStandby); //以下控制GPS上传 GpsTaskTick(0);//GPS功能打开。 if(sutGpsStatus.PPPStatus==OPEN) HigosTick(); ServerTimeGet(); SMSHandle(); WarnTTSReport(); } } void WarnTTSReport(void) { static unsigned char cnt=0; if(sutPocStatus.FirstLogined==0) return; if(sutPocStatus.Logined==1) { sutPocStatus.reportTimeCnt1=0; sutPocStatus.reportTimeCnt2=0; return; } if(++cnt< 99) return; cnt=0; if(sutPocStatus.reportTimeCnt1 < 250) sutPocStatus.reportTimeCnt1++; if(sutPocStatus.reportTimeCnt2 < 250) sutPocStatus.reportTimeCnt2++; } /*******************************************************************************/