/******************************************************************************** * File Name: NetTask.c * Function Describe:The NetTask for the system * Relate Module: * Explain: Hardware version is HS110C * Writer: ShiLiangWen * Date: 2015.4.12 *******************************************************************************/ #define THIS_FILE_ID 13 //-------------------------------------------------------------------------------- #include "includes.h" OS_TID idNetTask; int g_iCSQ=-1; int g_iModemVer=0; typedef enum {INVALID=0,OPEN=1,CLOSE=2} STATUE; //====================================== static STATUE GpsServerStatus=CLOSE; /******************************************************************************* 校验 *******************************************************************************/ unsigned char GetCheck(unsigned char *data, unsigned short datalen) { unsigned char ck=0; int i; for(i=0;iUART3_TX_BUFFER_SIZE)return 0; //包头 pBuf[0]=0x29;//Head pBuf[1]=0x29;//Head pBuf[2]=cmd;//CMD //DataLen ds.Data.usData=DataLen+6; pBuf[3]=ds.Data.ucData.b2; pBuf[4]=ds.Data.ucData.b1; //PSN dl.Data.ulData=sutProductPara.PSN; pBuf[5]=dl.Data.ucData.b4; pBuf[6]=dl.Data.ucData.b3; pBuf[7]=dl.Data.ucData.b2; pBuf[8]=dl.Data.ucData.b1; //Data j=9; for(i=0;i100){ ct=0; ModemSendAT("AT+CNUM?\r\n"); OSQFlush(ModemQ); } msg = (char *)OSQPend(ModemQ, 1, &err); if(err==OS_ERR_NONE){ if(ModemStrCmp(msg,"+CNUM:")){ //+CNUM:1064910139657 len=strlen(&msg[6]); if(15==len){ for(i=0;i<13;i++)sutProductPara.CNUM[i]=msg[6+i]; sutNetPara.CNUM[13]=0; return 1; } } } }*/ return 0; } /******************************************************************* *GetIPStatus 返回:0--未获取 1--获取成功 ********************************************************************/ int GetUIMID(void) { /* int timerout=300; int i,len; char *msg; INT8U err; int ct=100; while(timerout){ timerout--; if(++ct>100){ ct=0; ModemSendAT("AT+CIMI\r\n"); OSQFlush(ModemQ); } msg = (char *)OSQPend(ModemQ, 1, &err); if(err==OS_ERR_NONE){ if(ModemStrCmp(msg,"+CIMI:")){ //+CIMI: 460037590079119 len=strlen(&msg[7]); if(17==len){ for(i=0;i<15;i++)sutNetPara.UIMID[i]=msg[7+i]; sutNetPara.UIMID[15]=0; return 1; } } } } */ return 0; } /************************************************************* * *************************************************************/ void RecvModemData(char *msg) { int i; char *pData; unsigned short DataLen; unsigned char cmd; char tmp[5]; char buf[100]; //if(!ModemStrCmp(msg,"+ZIPRECV:"))return; SlwTrace(DEBUG,"\r\nRECV"); DataLen=atoi((char *)&msg[11]); //printf("\r\nl=%d\r\n",DataLen); if(DataLen<10){ //+ZIPRECV:1,8,xxx pData=msg+13; }else if(DataLen<100){ pData=msg+14; }else if(DataLen<(UART3_RX_BUFFER_SIZE-17)){ pData=msg+15; }else{//非法 return; } #ifdef SLW_DEBUG buf[0]=0; sprintf(buf,"[%d]",DataLen); for(i=0;iMsgData); if(0==ModemStrCmp((char *)pMsg->MsgData,"+POC:") || 0==ModemStrCmp((char *)pMsg->MsgData,"+ZTTS:0")){ PocHandle((char *)pMsg->MsgData); }else if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZIPRECV:")){ RecvModemData((char *)pMsg->MsgData); }else if(0==ModemStrCmp((char *)pMsg->MsgData,"+CSQ:")){ g_iCSQ=GetCSQ((char *)pMsg->MsgData); if(g_iCSQ==99 ){ sutPocStatus.Logined=0;//POC 离线 SetLedIndicator(IndNoNet); } }else if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZPPPSTATUS:")){ PPPStatus=GetPPPStatus((char *)pMsg->MsgData); }else if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZIPSTATUS:")){ IPStatus=GetIPStatus((char *)pMsg->MsgData); } _free_box(mpool,pMsg); } #ifdef GPS_ENABLE //GPS Uart消息处理 if(g_usUart2RecvLen){ process_nema((char *)RxBuffer2); g_usUart2RecvLen=0; } #endif //=======控制大概每1秒往下执行========= if(++SecFlag>=100)SecFlag=0; else continue; if(0==sutPocStatus.Logined)SetLedIndicator(IndNoNet); //---控制定时发送GPS数据 --- if(IPStatus==OPEN && sutGpsInfo.isServerLogin){ if(++susGpsTimingSendCt>sutGpsInfo.SendTime){ susGpsTimingSendCt=0; GpsTimingSendPos(); } }else{ susGpsTimingSendCt=0; } //-------------------- if(++sucNetStatusCt>4)sucNetStatusCt=0; switch(sucNetStatusCt) { case 0: ModemSendAT("AT+CSQ?\r"); break; #ifdef GPS_ENABLE case 1: ModemSendAT("AT+ZPPPSTATUS\r"); break; case 2: if(PPPStatus==OPEN){ //SlwTrace(DEBUG,"AT+ZIPSTATUS=0\r\n"); ModemSendAT("AT+ZIPSTATUS=0\r"); }else{ //SlwTrace(DEBUG,"AT+ZPPPOPEN\r\n"); ModemSendAT("AT+ZPPPOPEN\r"); } break; case 3: if(IPStatus!=OPEN && PPPStatus==OPEN){ sutGpsInfo.isServerLogin=0; sprintf(buf,"AT+ZIPSETUP=0,%s,%d\r\n",sutProductPara.GIP,sutProductPara.GpsPort); //SlwTrace(DEBUG,buf); ModemSendAT(buf); } break; case 4: if(IPStatus==OPEN && 0==sutGpsInfo.isServerLogin){ if(sutGpsInfo.isGpsWork)GpsServerConect(); } break; #endif } } }