#include "includes.h" SUT_MODEM_AT_MSG sutAtm,sutAtmPro; /********************************************************************************** ModemStrCmp ***********************************************************************************/ int ModemStrCmp(char *msg,char *str) { char *p1=str; char *p2=msg; while(*p1!=0){ if(*p1!=*p2)return 1; p1++; p2++; } return 0; } char WaitModemStart(void) { int t,i; SUT_MODEM_AT_MSG *pMsg=&sutAtmPro; SlwTrace(INF, "WaitModemRun:\r\n"); for(i=0;i<100;i++) { t=50; ModemSendAT("ATE0\r\n"); while(t--) { if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))) { if(0==ModemStrCmp((char *)pMsg->MsgData,"OK")) { SlwTrace(DEBUG, "Runing\r\n"); return 0; } }else os_dly_wait(20); } } SlwTrace(DEBUG, "TimeOut\r\n"); return 1; } /********************************************************************************** ModemInit 返回:1 初始化成功 0-失败 ***********************************************************************************/ int ModemInit(void) { char DataBuf[5]; int i; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = MODEM_RESET_PIN; GPIO_Init(MODEM_RESET_PORT, &GPIO_InitStructure); MODEM_RESET_LOW; os_dly_wait(150); //RunMake(THIS_FILE_ID); MODEM_RESET_HIGH; SlwTrace(DEBUG,"Modem Init...\r\n"); os_dly_wait(500); Uart2Init(); //return 0; ////GT测试 //等待模块开机并能接受AT命令 if(WaitModemStart())return 0; return 1; } //MODEM_TYPE MODEM_TYPE; /************************************************************************************ * *************************************************************************************/ void ModemSendAT(char *p) { unsigned short len; len=strlen(p); //RunMake(THIS_FILE_ID); #if UART2_TX_USE_DMA==0 Uart2Send(p,len); #else USART2_Send(p,len); #endif } void ModemSendAtData(char *p,short len) { Uart2Send(p,len); } /*************************************************************************************/ void ModemSendData(char *p,short len) { char buf[20]; short cnt=0; snprintf(buf,sizeof(buf),"AT+CIPSEND=%d\r\n",len); ModemSendAT(buf); os_dly_wait(100); cnt=len+3; ModemSendAtData(p,cnt); } void ModemSetModel(void) { char i,t; int model; char buf[50]; SUT_MODEM_AT_MSG *pMsg=&sutAtmPro; for(i=0;i<15;i++) { t=10; REGO: ModemSendAT("AT+CWMODE?\r\n"); //ModemSendAT("AT+CIFSR\r\n"); while(t--) { if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))) { if(0==ModemStrCmp((char *)pMsg->MsgData,"+CWMODE")) { model=atoi(&pMsg->MsgData[8]); if(1 != model) { ModemSendAT("AT+CWMODE=1\r\n"); os_dly_wait(100); goto REGO; } else { SlwTrace(DEBUG, "[02]Working mode set Ok\r\n"); return; } } //ModemSendAT("AT+CIFSR\r\n"); }else os_dly_wait(10); } } SlwTrace(DEBUG, "[02]Working mode set failed\r\n"); } void ModemSetSingleLink(void) { char i,t; char model; char buf[30]; SUT_MODEM_AT_MSG *pMsg=&sutAtmPro; model=3; for(i=0;i<15;i++) { t=50; REGO: ModemSendAT("AT+CIPMUX?\r\n"); while(t--) { if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))) { if(0==ModemStrCmp((char *)pMsg->MsgData,"+CIPMUX")) { model=atoi(&pMsg->MsgData[8]); if(0 != model) { ModemSendAT("AT+CIPMUX=0\r\n"); os_dly_wait(100); goto REGO; } else { SlwTrace(DEBUG, "[03]Link mode set Ok\r\n"); return; } } }else os_dly_wait(10); } } SlwTrace(DEBUG, "[03]Link mode set failed\r\n"); } void Wifi_Pwd_Input(void) { int i,t; SUT_MODEM_AT_MSG *pMsg=&sutAtmPro; char temp[50]; for(i=0;i<10;i++) { t=500; REGO: snprintf(temp,sizeof(temp),"AT+CWJAP=\"%s\",\"%s\"\r\n",sutProductPara.Wifi_ID,sutProductPara.Wifi_Pwd); SlwTrace(DEBUG,temp); ModemSendAT(temp); //ModemSendAT("AT+CWJAP=\"HGS2\",\"1892643560828\"\r\n"); while(t--) { if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))) { if((0==ModemStrCmp((char *)pMsg->MsgData,"WIFI GOT IP"))||(0==ModemStrCmp((char *)pMsg->MsgData,"WIFI CONNECTED"))) { SlwTrace(DEBUG, "[04] WIFI_INPUT_PWD Ok\r\n"); WifiStatue=PWDOK; return; }else{ } }else os_dly_wait(1); } } SlwTrace(DEBUG, "[04] WIFI_INPUT_PWD faile\r\n"); } int Server_Connect(void) { int i,t; SUT_MODEM_AT_MSG *pMsg=&sutAtmPro; char temp[50]; for(i=0;i<10;i++) { t=500;//500 REGO: snprintf(temp,sizeof(temp),"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",sutProductPara.SIP,sutProductPara.Port); //ModemSendAT("AT+CIPSTART=\"TCP\",\"192.168.1.100\",8080\r\n"); SlwTrace(DEBUG,temp); ModemSendAT(temp); while(t--) { if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))) { if(0==ModemStrCmp((char *)pMsg->MsgData,"CONNECT")||0==ModemStrCmp((char *)pMsg->MsgData,"ALREADY CONNECTED")) { SlwTrace(DEBUG, "[05] Server Connect Ok\r\n"); WifiStatue=CONNECTOK; return 1; }else{ } }else os_dly_wait(1); } } SlwTrace(DEBUG, "[5]Server Connect failed\r\n"); WifiStatue=WIFIINVALID; return 0; } void ModemSetDHCP() { char buf[20]; snprintf(buf,sizeof(buf),"AT+CWDHCP=1,1\r\n"); for(char i=0;i<3;i++) { ModemSendAT(buf); os_dly_wait(30); } }