/******************************************************************************** * File Name: NetTask.c * Function Describe:The NetTask for the system * Relate Module: * Explain: Hardware version is HS110C * Writer: ShiLiangWen * Date: 2015.4.12 *******************************************************************************/ #include "includes.h" typedef enum {INVALID=0,OPEN=1,CLOSE=2} STATUE; SUT_NET_PARA sutNetPara; OS_EVENT *ModemQ; void *ModemMsg[MODEM_Q_NUM]; char ModemMsgBuf[MODEM_Q_NUM][MODEM_MSG_BUF_LEN]; int ModemMsgBufIndex=0; OS_EVENT *GpsQ; void *GpsMsg[GPS_Q_NUM]; unsigned char GpsMsgBuf[GPS_Q_NUM][GPS_MSG_BUF_LEN]; int GpsMsgBufIndex=0; #define MODEM_SEND_BUF_LEN 100 char ModemSendBuf[MODEM_SEND_BUF_LEN]; //====================================== #define APP_TASK_NET_STK_SIZE 500 static OS_STK AppNetTaskStk[APP_TASK_NET_STK_SIZE]; int g_iCSQ=-1; unsigned char g_ucNetTaskDisable=0; int g_iModemVer=0; static STATUE GpsServerStatus=CLOSE; unsigned char g_ucSecFlag=0; //秒标志 为1标示1秒到,需要对其清零,以便下个1秒准确到达 /******************************************************************************* 校验 *******************************************************************************/ unsigned char GetCheck(unsigned char *data, unsigned short datalen) { unsigned char ck=0; int i; for(i=0;i100){ ct=0; ModemSendAT("AT+ZINVER\r\n"); OSQFlush(ModemQ); } msg = (char *)OSQPend(ModemQ, 1, &err); if(err==OS_ERR_NONE){ if(ModemCheckRecv(msg,"+ZINVER :")){ //+ZINVER : MC8332_MM8A1107_R01 1 [May 04 2015 22:30:38] ver=(msg[23]-0x30)*100+(msg[24]-0x30)*10+(msg[25]-0x30); } } } return ver; } /***************************************************************************** *发送数据封包 format: 0x29 0x29 CMD Len PSN[4] Data Check 0x0D Len=DataLen+6 ******************************************************************************/ void SendBufPack(unsigned char cmd,unsigned short DataLen,unsigned char *data) { SUTDS ds; SUTDL dl; int i,j; if(DataLen>MODEM_SEND_BUF_LEN)return; //包头 ModemSendBuf[0]=0x29;//Head ModemSendBuf[1]=0x29;//Head ModemSendBuf[2]=cmd;//CMD //DataLen ds.Data.usData=DataLen+6; TxBuffer3[3]=ds.Data.ucData.b2; TxBuffer3[4]=ds.Data.ucData.b1; //PSN dl.Data.ulData=sutNetPara.PSN; TxBuffer3[5]=dl.Data.ucData.b4; TxBuffer3[6]=dl.Data.ucData.b3; TxBuffer3[7]=dl.Data.ucData.b2; TxBuffer3[8]=dl.Data.ucData.b1; //Data j=9; for(i=0;i100){ ct=0; ModemSendAT("AT+ZMEID\r\n"); OSQFlush(ModemQ); } msg = (char *)OSQPend(ModemQ, 1, &err); if(err==OS_ERR_NONE){ if(ModemCheckRecv(msg,"+ZMEID")){ //+ZMEID: 0xA000004E15F1CE0 len=strlen(&msg[10]); if(16==len){ for(i=0;i<14;i++)sutNetPara.MEID[i]=msg[10+i]; sutNetPara.MEID[14]=0; return 1; }else if(17==len){ for(i=0;i<15;i++)sutNetPara.MEID[i]=msg[10+i]; sutNetPara.MEID[15]=0; return 1; } } } } return 0; } /******************************************************************* *GetIPStatus 返回:0--未获取 1--获取成功 ********************************************************************/ int GetCNUM(void) { int timerout=300; int i,len; char *msg; INT8U err; int ct=100; while(timerout){ timerout--; if(++ct>100){ ct=0; ModemSendAT("AT+CNUM?\r\n"); OSQFlush(ModemQ); } msg = (char *)OSQPend(ModemQ, 1, &err); if(err==OS_ERR_NONE){ if(ModemCheckRecv(msg,"+CNUM:")){ //+CNUM:1064910139657 len=strlen(&msg[6]); if(15==len){ for(i=0;i<13;i++)sutNetPara.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(ModemCheckRecv(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(unsigned char *msg) { int i; unsigned char *pData; unsigned short DataLen; unsigned char cmd; char tmp[5]; char buf[100]; if(!ModemCheckRecv(msg,"+ZIPRECV:"))return; SlwTrace(INF,"\r\nRECV"); DataLen=String2Number(&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<(MODEM_MSG_BUF_LEN-17)){ pData=msg+15; }else{//非法 return; } buf[0]=0; sprintf(buf,"[%d]",DataLen); for(i=0;isutGpsInfo.SendTime){ susGpsTimingSendCt=0; GpsTimingSendPos(); } }else{ susGpsTimingSendCt=0; } //-------------------- if(++sucNetStatusCt>4)sucNetStatusCt=0; switch(sucNetStatusCt) { case 0: ModemSendAT("AT+CSQ?\r"); break; case 1: ModemSendAT("AT+ZPPPSTATUS\r"); break; case 2: if(PPPStatus==OPEN){ SlwTrace(INF,"AT+ZIPSTATUS=0\r\n"); ModemSendAT("AT+ZIPSTATUS=0\r"); }else{ SlwTrace(INF,"AT+ZPPPOPEN\r\n"); ModemSendAT("AT+ZPPPOPEN\r"); } break; case 3: if(IPStatus!=OPEN && PPPStatus==OPEN){ sutGpsInfo.isServerLogin=0; SlwTrace(INF,"AT+ZIPSETUP=0,183.131.13.6,1391\r\n"); ModemSendAT("AT+ZIPSETUP=0,183.131.13.6,1391\r"); } break; case 4: if(IPStatus==OPEN && 0==sutGpsInfo.isServerLogin){ if(sutGpsInfo.isGpsWork)GpsServerConect(); } break; } } } /********************************************************************* *NetTaskCreate **********************************************************************/ void NetTaskCreate(void) { CPU_INT08U os_err; os_err = os_err; /* prevent warning... */ os_err = OSTaskCreate((void (*)(void *)) NetTask, (void * ) 0, (OS_STK * )&AppNetTaskStk[APP_TASK_NET_STK_SIZE - 1], (INT8U ) APP_TASK_NET_PRIO ); #if OS_TASK_NAME_EN > 0 OSTaskNameSet(APP_TASK_NET_PRIO, "NetTask", &os_err); #endif }