teste de publish
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
Diff: modem.cpp
- Revision:
- 15:0f78bf9c13ec
- Parent:
- 14:c0162ab2a951
- Child:
- 16:9a19ac33957e
--- a/modem.cpp Thu Nov 09 12:53:41 2017 +0000 +++ b/modem.cpp Wed Dec 27 13:10:09 2017 +0000 @@ -15,6 +15,12 @@ void modemCom::atendeSRING(uint8_t conId){ //pc.printf("Atendendo a conexao entrante.\n"); + + if(modemCom::status.emComunicacao){ + modemCom::cipSend(conId,"ocupado",7); + modemCom::closeConnection(conId); + } + modemCom::status.socketEntranteAtivo=true; modemCom::status.timeOut = 30; modemCom::timeOutModem = 10; @@ -154,7 +160,7 @@ case 2: pc.printf("modemCom::enviaDados[10].\r\n"); modemCom::status.emComunicacao = false; - return false; + result = false; break; } return result; @@ -447,6 +453,8 @@ bool modemCom::closeConnection(uint8_t id){ char command[20]; + pc.printf("Lido %u como sendo o id em closeConnection.\r\n",id); + sprintf(command,"AT+CIPCLOSE=%u\r\n",id); return modemCom::sendToModem(command,1,NULL,",CLOSED",500,3,1); } @@ -474,7 +482,7 @@ return 2; } -void modemCom::webServer(void){ +void modemCom::webServer(uint8_t id){ //char auxMsg[50]; bool encontrado=0; char buf[512]; @@ -483,7 +491,7 @@ if(strstr(webServerBuff,"favicon.ico")){ //sprintf(buf,"<!DOCTYPE html><html><body><h1>DROME-Seu processo na palma da sua mao!</h1><img src='http://criandoriquezaimagens.s3.amazonaws.com/wp-content/uploads/2014/12/casaPropria.png' width='200' height='210'><br><p><a href='/lecomandocontrole.htm'>Ler comando do controle.</a></p><br></body></html>"); sprintf(buf,"<!DOCTYPE html><html><link rel=\"icon\" href=\"http://%s/drome/assets/local/images/favicon/favicon.ico\" type=\"image/x-icon\"></html>",modemCom::status.host); - if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ + if(cipSend(id,buf,0)==1){ printf("Requisicao enviada!\n"); }else{ printf("Requisicao nao enviada 1!!\n"); @@ -495,7 +503,7 @@ //sprintf(buf,"<!DOCTYPE html><html><body><h1>DROME-Seu processo na palma da sua mao!</h1><img src='http://criandoriquezaimagens.s3.amazonaws.com/wp-content/uploads/2014/12/casaPropria.png' width='200' height='210'><br><p><a href='/lecomandocontrole.htm'>Ler comando do controle.</a></p><br></body></html>"); sprintf(buf,"<!DOCTYPE html><html><body><h1>DROME-Dispositivo Remoto de Operacao e Monitoramento de Equipamentos</h1><br><p><a href='/lecomandocontrole.htm'>Ler comando do controle.</a><a href='/configRede.htm'><br>Configurar rede.</a></p><br></body></html>"); - if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ + if(cipSend(id,buf,0)==1){ printf("Requisicao enviada!\n"); }else{ printf("Requisicao nao enviada 1!!\n"); @@ -508,7 +516,7 @@ modemCom::leIP(); //sprintf(buf,"<!DOCTYPE html><form action='cwjap.htm' method='GET'><fieldset><legend>Parametros de Configuracao da rede:</legend>SSID WiFi:<br><input type='text' name='ssid' value=''><br>Senha WiFi:<br><input type='text' name='password' value=''><br>IP:(0 para DHCP)<br><input type='text' name='ip' value='0'><br>Porta:<br><input type='text' name='port' value=''><br><input type='submit' value='Configurar'></fieldset></form>"); sprintf(buf,"<!DOCTYPE html>IP Atual = %s.<br><form action='cwjap.htm' method='GET'><fieldset><legend>Parametros de Configuracao da rede:</legend>SSID WiFi:<br><input type='text' name='ssid' value='%s'><br>Senha WiFi:<br><input type='text' name='password' value='%s'><br>PORTA:<br><input type='text' name='porta' value='%s'><br>Host:<br><input type='text' name='host' value='%s'><br>Periodo<br><input type='text' name='periodo' value='%lu'><br><input type='submit' value='Configurar'></fieldset></form>",modemCom::status.STAIP,modemCom::status.ssid,modemCom::status.password,modemCom::status.port,modemCom::status.host,modemCom::status.periodo); - cipSend(modemCom::status.connIDWebServer,buf,0); + cipSend(id,buf,0); encontrado = 1; } @@ -525,7 +533,7 @@ serializaPacoteIR(modemCom::status.connIDWebServer); }else{ sprintf(buf,"erro"); - if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ + if(cipSend(id,buf,0)==1){ printf("Requisicao enviada!\n"); } } @@ -567,20 +575,20 @@ }else{ sprintf(buf,"HTTP/1.1 200 OK\n\nNACK"); } - cipSend(modemCom::status.connIDWebServer,buf,0); + cipSend(id,buf,0); encontrado = 1; } if(!encontrado){ sprintf(buf,"Pagina Nao Encontrada."); - if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ + if(cipSend(id,buf,0)==1){ printf("Requisicao enviada!\n"); }else{ printf("Requisicao nao enviada 3!!\n"); } } - modemCom::closeConnection(modemCom::status.connIDWebServer); + modemCom::closeConnection(id); if(mudaRede){ mudaRede = false; modemCom::sendToModem("AT+CIPSERVER=0\r\n",1,&modemCom::status.OK,NULL,2000,1,1); @@ -589,128 +597,12 @@ pc.printf("Guardando config.\r\n"); fprintf(sdCard::config.fp,"SSID:%s\r\nPASSWORD:%s\r\nPORT:%s\r\nHOST:%s\r\nPERIODO:%lu",modemCom::status.ssid,modemCom::status.password,modemCom::status.port,modemCom::status.host,modemCom::status.periodo); sdCard::fechaArquivo(&sdCard::config); + modemCom::inicializaModem(); modemCom::conectaWiFi(); } } } -/*void modemCom::webServer(void){ - char buf[512]; - //char auxMsg[50]; - bool encontrado=0; - //uint32_t aux_int; - - if(strstr(bufInPtr,"favicon.ico")){ - //sprintf(buf,"<!DOCTYPE html><html><body><h1>DROME-Seu processo na palma da sua mao!</h1><img src='http://criandoriquezaimagens.s3.amazonaws.com/wp-content/uploads/2014/12/casaPropria.png' width='200' height='210'><br><p><a href='/lecomandocontrole.htm'>Ler comando do controle.</a></p><br></body></html>"); - sprintf(buf,"<!DOCTYPE html><html><link rel=\"icon\" href=\"http://vitaesolucoes.com.br/drome/assets/local/images/favicon/favicon.ico\" type=\"image/x-icon\"></html>"); - if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ - printf("Requisicao enviada!\n"); - }else{ - printf("Requisicao nao enviada 1!!\n"); - } - encontrado = 1; - } - - if(strstr(bufInPtr,"comandos.htm")){ - - //sprintf(buf,"<!DOCTYPE html><html><body><h1>DROME-Seu processo na palma da sua mao!</h1><img src='http://criandoriquezaimagens.s3.amazonaws.com/wp-content/uploads/2014/12/casaPropria.png' width='200' height='210'><br><p><a href='/lecomandocontrole.htm'>Ler comando do controle.</a></p><br></body></html>"); - sprintf(buf,"<!DOCTYPE html><html><body><h1>DROME-Dispositivo Remoto de Operacao e Monitoramento de Equipamentos</h1><br><p><a href='/lecomandocontrole.htm'>Ler comando do controle.</a><a href='/configRede.htm'><br>Configurar rede.</a></p><br></body></html>"); - if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ - printf("Requisicao enviada!\n"); - }else{ - printf("Requisicao nao enviada 1!!\n"); - } - encontrado = 1; - } - - if(strstr(bufInPtr,"configRede.htm")){ - //Pegando o IP - modemCom::leIP(); - //sprintf(buf,"<script>window.location.href = 'http://www.vitaesolucoes.com.br/controladorawifi/config.php?ip=%s'</script>",modemStatus.STAIP); - - //sprintf(buf,"<!DOCTYPE html><form action='cwjap.htm' method='GET'><fieldset><legend>Parametros de Configuracao da rede:</legend>SSID WiFi:<br><input type='text' name='ssid' value=''><br>Senha WiFi:<br><input type='text' name='password' value=''><br>IP:(0 para DHCP)<br><input type='text' name='ip' value='0'><br>Porta:<br><input type='text' name='port' value=''><br><input type='submit' value='Configurar'></fieldset></form>"); - sprintf(buf,"<!DOCTYPE html>IP Atual = %s.<br><form action='cwjap.htm' method='GET'><fieldset><legend>Parametros de Configuracao da rede:</legend>SSID WiFi:<br><input type='text' name='ssid' value='%s'><br>Senha WiFi:<br><input type='text' name='password' value='%s'><br>PORTA:<br><input type='text' name='porta' value='%s'><br><input type='submit' value='Configurar'></fieldset></form>",modemCom::status.STAIP,modemCom::status.ssid,modemCom::status.password,modemCom::status.port); - - cipSend(modemCom::status.connIDWebServer,buf,0); - encontrado = 1; - } - - if(strstr(bufInPtr,"cwjap.htm")){ - //cwjap.htm?ssid=VSA&password=vitaeBBYP&ip=0&port=80 - - strtok(bufInPtr,"="); - strcpy(modemCom::status.ssid,strtok(NULL,"&")); //pegando ssid - - strtok(NULL,"="); - strcpy(modemCom::status.password,strtok(NULL,"&")); //pegando password - - //strtok(NULL,"="); - //strcpy(modemStatus.STAIP,strtok(NULL,"&")); //pegando ip - - strtok(NULL,"="); - strcpy(modemCom::status.port,strtok(NULL," ")); //pegando port - - pc.printf("Antes <%s>.\r\n",modemCom::status.ssid); - diversos::strReplace(modemCom::status.ssid,"%20"," "); - pc.printf("Tirado %%20 <%s>.\r\n",modemCom::status.ssid); - diversos::strReplace(modemCom::status.ssid,"+"," "); - pc.printf("Tirado + <%s>.\r\n",modemCom::status.ssid); - - if((modemCom::status.ssid[0]!=0) && (modemCom::status.password[0]!=0)){ - sprintf(buf,"HTTP/1.1 200 OK\n\nACK"); - mudaRede = true; - }else{ - sprintf(buf,"HTTP/1.1 200 OK\n\nNACK"); - } - cipSend(modemCom::status.connIDWebServer,buf,0); - encontrado = 1; - } - - - - - if(strstr(webServerBuff,"lecomandocontrole.htm")){ - - uint16_t timeout = 5000; - IrDetect.reset(); - IrDetect.start(); - - while((IrDetect.read_ms()<timeout) && (!detectaIRIn())); - if(IrDetect.read_ms()<timeout){ - serializaPacoteIR(modemCom::status.connIDWebServer); - }else{ - sprintf(buf,"erro"); - if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ - printf("Requisicao enviada!\n"); - } - } - IrDetect.stop(); - encontrado = 1; - } - - if(!encontrado){ - sprintf(buf,"Pagina Nao Encontrada."); - if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ - printf("Requisicao enviada!\n"); - }else{ - printf("Requisicao nao enviada 3!!\n"); - } - } - - modemCom::closeConnection(modemCom::status.connIDWebServer); - if(mudaRede){ - mudaRede = false; - modemCom::sendToModem("AT+CIPSERVER=0\r\n",1,&modemCom::status.OK,NULL,2000,1,1); - pc.printf("Mudando para rede:\r\nSSID:%s\r\nPASSWORD:%S\r\nPORTA:%s\r\n\r\n",modemCom::status.ssid,modemCom::status.password,modemCom::status.port); - if(sdCard::abreArquivo(&sdCard::config,"w")){ - pc.printf("Guardando config.\r\n"); - fprintf(sdCard::config.fp,"SSID:%s\r\nPASSWORD:%s\r\nPORT:%s",modemCom::status.ssid,modemCom::status.password,modemCom::status.port); - sdCard::fechaArquivo(&sdCard::config); - modemCom::conectaWiFi(); - } - } -}*/ - bool modemCom::leIP(void){ char *ptr; sendToModem("AT+CIFSR\r\n",1,NULL,"+CIFSR:STAIP,",200,1,1); @@ -726,14 +618,15 @@ int16_t modemCom::getRSSI(void){ char *ptr; - int16_t RSSI = 0; - - //if(modemCom::sendToModem("AT+CWLAP\r\n",1,&modemCom::status.OK,1000,1)){ - if(modemCom::sendToModem("AT+CWLAP\r\n",1,&modemCom::status.OK,NULL,10000,2,1000)){ + int16_t RSSI = 255; + + if(modemCom::sendToModem("AT+CWJAP?\r\n",1,&modemCom::status.OK,NULL,10000,2,1000)){ ptr = strstr(modemCom::bufIn,(const char*)modemCom::status.ssid); if(ptr){ - ptr = strtok(ptr,","); - ptr = strtok(NULL,","); + ptr = strtok(ptr,","); //Descarta SSID + ptr = strtok(NULL,","); //Descarta MAC + ptr = strtok(NULL,","); //Descarta Canal + ptr = strtok(NULL,","); //Captura RSSI RSSI = atoi(ptr); } } @@ -744,8 +637,10 @@ bool modemCom::verificaConexao(void){ uint8_t i = 1; while(i){ - if(!modemCom::sendToModem("AT+CWJAP?\r\n",1,NULL,"+CWJAP:",100,10,1000)){ - modemCom::conectaWiFi(); + if(modemCom::getRSSI()==255){ + if(modemCom::conectaWiFi()){ + return true; + } i--; }else{ return true; @@ -754,8 +649,186 @@ return false; } -void modemCom::conectaWiFi(void){ +bool modemCom::conectaWiFi(void){ //Função para mudança de rede + + char aux[128]; + modemCom::leParametrosConexaoSDCard(); + //AT+CWJAP=\"\",\"\"\r\n + sprintf(aux,"AT+CWJAP=\"%s\",\"%s\"\r\n",modemCom::status.ssid,modemCom::status.password); + if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,10000,1,1)) { + pc.printf("WiFi Conectado.\n"); + return true; + }else{ + return false; + } +} + +void modemCom::processaPacote(void const *args){ + char *ptr,*scanPtr; + uint16_t bufInLength = bufModem.getLength(); + uint16_t timeOut; + //bool getFound=false; + modemCom::bufIn = bufModem.get(); + + modemCom::status.modemResponse=true; + + pc.printf("Vem do modem <%s>.\r\n",modemCom::bufIn); + + //Reconhecimento dos status + modemCom::status.PROMPT_ENVIO_COMMAND_MODE=0; + ptr=strstr(modemCom::bufIn,"> "); + if(ptr) { + + modemCom::status.serverConnected=1; + modemCom::status.commandMode=1; + modemCom::status.NO_CARRIER=0; + modemCom::status.PROMPT_ENVIO_COMMAND_MODE=1; + } + modemCom::status.OK=0; + ptr=strstr(modemCom::bufIn,"OK\r"); + if(ptr) { + modemCom::status.OK=1; + } + + + + modemCom::status.busy=false; + ptr=strstr(modemCom::bufIn,"busy s..."); + if(ptr) { + + modemCom::status.busy=1; + } + + modemCom::status.SEND_OK=0; + ptr=strstr(modemCom::bufIn,"SEND OK"); + if(ptr) { + + modemCom::status.SEND_OK=1; + } + + modemCom::status.ERROR=0; + ptr=strstr(modemCom::bufIn,"ERROR"); + if(ptr) { + + modemCom::status.ERROR=1; + modemCom::status.OK=0; + } + + ptr=strstr(modemCom::bufIn,"FAIL"); + if(ptr) { + + modemCom::status.ERROR=1; + modemCom::status.OK=0; + } + + ptr=strstr(modemCom::bufIn,"DNS Fail"); + if(ptr) { + modemCom::status.dnsError=1; + modemCom::status.ERROR=1; + modemCom::status.OK=0; + } + + //modemCom::status.CLOSED=false; + ptr=strstr(modemCom::bufIn,"CLOSED"); + if(ptr) { + modemCom::status.CLOSED=1; + } + + /*if(strstr(modemCom::bufIn,"GET /")){ + getFound = true; + }*/ + + //Buscando connect + /*if(!modemCom::atendendoWebServer){ + ptr=strstr(modemCom::bufIn,"CONNECT\r\n"); + if(ptr) { + ptr = strstr(ptr,"+IPD"); + ptr = strtok(ptr,","); + ptr = strtok(NULL,","); + connID = atoi(ptr); + modemCom::status.connIDServerCommand = connID; + modemCom::status.serverConnected=1; + pc.printf("Recebido string CONNECT socket na conexao %u.\n",connID); + if(!modemCom::status.emComunicacao){ + if(!getFound){ + pc.printf("Atendendo socket entrante na conexao %u.\n",connID); + modemCom::status.SRINGsockEntrante = true; + } + } + modemCom::status.emComunicacao=true; + modemCom::bufIn = strtok(NULL,""); + } + }*/ + + IPDNumBytes = 0; + ptr = strstr(modemCom::bufIn,"+IPD"); + if(ptr!=NULL){ + //+IPD,0,480:GET + strtok(ptr,","); //Separando +IPD + + ptr = strtok(NULL,","); //Pegando o numero da conexão + connID = atoi(ptr); + + ptr = strtok(NULL,":"); //Pegando o numero de caracteres IPD + IPDNumBytes = atoi(ptr); + + modemCom::bufIn = strtok(NULL,""); + + //printf("Recebido pacote via conexao %u com %lu bytes.\n",connID,IPDNumBytes); + + } + + if(IPDNumBytes && modemCom::status.recebendoArquivoDoServer && (strstr(modemCom::bufIn,"CONNECT")==NULL) && (strstr(modemCom::bufIn,"*ServerCommand*")==NULL) ){ + + sdCard::insereDadosArquivoHex(&sdCard::tempFile,modemCom::bufIn,IPDNumBytes); + //sdCard::insereDadosArquivo(&sdCard::tempFile,modemCom::bufIn,IPDNumBytes); + sdCard::nBytesArquivoRecebidos+=IPDNumBytes; + bufModem.del(); + sprintf(modemCom::bufIn,"AT+CIPSEND=%u,%lu\r\n",connID,10); + modem.puts(modemCom::bufIn); + timeOut = 5000; + while(timeOut && (strstr(bufModem.getRowBuffer(),">")==NULL)){ + osDelay(1); + timeOut--; + } + modemCom::status.timeOut = 30; + modem.puts("sendData\r\n"); + pc.printf("sendData recebidos %lu bytes\n",sdCard::nBytesArquivoRecebidos/2); + diversos::wdt.kick(); + return; + } + + //Reconhecendo GET HTTP e atendendo com um servidor web + if(strstr(modemCom::bufIn,"HTTP/1.1")){ + ptr=strstr(modemCom::bufIn,"GET /"); + if(ptr) { + ptr = strtok(ptr,"/"); + ptr = strtok(NULL," "); + bufInPtr = ptr; + strcpy(webServerBuff,ptr); + modemCom::atendendoWebServer = true; + modemCom::status.connIDWebServer = connID; + } + } + + ptr=strstr(modemCom::bufIn,"*ServerAck*"); + if(ptr) { + modemCom::status.ServerAck=1; + } + + ptr=strstr(modemCom::bufIn,"*ServerCommand*"); + if(ptr) { + scanPtr = strtok (ptr,"\\"); + scanPtr = strtok (NULL,">"); + strcpy(commands::buffer,scanPtr); + pc.printf("Comandos <%s>.\n",commands::buffer); + modemCom::status.connIDServerCommand = connID; + executaComandoServer = true; + } +} + +bool modemCom::leParametrosConexaoSDCard(){ char *ptr; char aux[128]; if(sdCard::abreArquivo(&sdCard::config,"r")){ @@ -802,228 +875,66 @@ } sdCard::fechaArquivo(&sdCard::config); pc.printf("Lidos os parametros de configuracao de wifi como sendo:\r\nSSID:<%s>\r\nPASSWORD:<%s>\r\nPORT:<%s>\r\nHOST:<%s>\r\nPERIODO:%lu\r\n",modemCom::status.ssid,modemCom::status.password,modemCom::status.port,modemCom::status.host,modemCom::status.periodo); - pc.printf("Iniciando conexao wifi.\r\n"); + pc.printf("Iniciando conexao wifi.\r\n"); + return true; }else{ strcpy(modemCom::status.ssid,"VSE"); strcpy(modemCom::status.password,"vitaeBBYP"); strcpy(modemCom::status.port,"4000"); strcpy(modemCom::status.host,"www.vitaesolucoes.com.br"); modemCom::status.periodo = 900; + return false; } - - //Mudando mode para AP e Station - if(modemCom::sendToModem("AT+CWMODE=3\r\n",1,&modemCom::status.OK,NULL,10000,1,1)) { - pc.printf("Modo AP+STATION aceito.\n"); - } - - //AT+CWJAP=\"\",\"\"\r\n - sprintf(aux,"AT+CWJAP=\"%s\",\"%s\"\r\n",modemCom::status.ssid,modemCom::status.password); - if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,10000,1,1)) { - pc.printf("WiFi Conectado.\n"); - } - - //AT+CIPSERVER=1,80 - if(modemCom::sendToModem("AT+CIPMUX=1\r\n",1,&modemCom::status.OK,NULL,250,4,1)) { - pc.printf("Recebeu o comando AT+CIPMUX=1.\n"); - } - - //AT+CIPSERVER=1,80 - sprintf(aux,"AT+CIPSERVER=1,%s\r\n",modemCom::status.port); - if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,250,4,1)) { - pc.printf("Recebeu o comando <%s>.\n",aux); - } - - if(modemCom::sendToModem("AT+CIPSTO=60\r\n",1,&modemCom::status.OK,NULL,250,4,1)) { - pc.printf("Recebeu o comando AT+CIPSTO=60.\n"); - } - - sprintf(aux,"AT+CWSAP_CUR=\"DROME_WIFI_%s\",\"VsaDROME\",5,3\r\n",modemCom::status.MAC); - if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,250,4,1)) { - pc.printf("Recebeu o comando %s.\n",aux); - } - - - if(modemCom::sendToModem("AT+CIPAP_CUR=\"192.168.4.1\",\"192.168.4.1\",\"255.255.255.0\"\r\n",1,&modemCom::status.OK,NULL,250,4,1)) { - pc.printf("Recebeu o comando AT+CIPAP_CUR=\"192.168.4.1\",\"192.168.4.1\",\"255.255.255.0\".\n"); - } - - if(modemCom::sendToModem("AT+CWDHCP_CUR=2,1\r\n",1,&modemCom::status.OK,NULL,250,4,1)) { - pc.printf("Recebeu o comando AT+CWDHCP_CUR=2,1.\n"); - } - -} - -void modemCom::processaPacote(void const *args){ - char *ptr,*scanPtr; - uint16_t bufInLength = bufModem.getLength(); - uint16_t timeOut; - bool getFound; - modemCom::bufIn = bufModem.get(); - - modemCom::status.modemResponse=true; - - pc.printf("Vem do modem <%s>.\r\n",modemCom::bufIn); - - //Reconhecimento dos status - modemCom::status.PROMPT_ENVIO_COMMAND_MODE=0; - ptr=strstr(modemCom::bufIn,"> "); - if(ptr) { - - modemCom::status.serverConnected=1; - modemCom::status.commandMode=1; - modemCom::status.NO_CARRIER=0; - modemCom::status.PROMPT_ENVIO_COMMAND_MODE=1; - } - modemCom::status.OK=0; - ptr=strstr(modemCom::bufIn,"OK\r"); - if(ptr) { - modemCom::status.OK=1; - } - - - - modemCom::status.busy=false; - ptr=strstr(modemCom::bufIn,"busy s..."); - if(ptr) { - - modemCom::status.busy=1; - } - - modemCom::status.SEND_OK=0; - ptr=strstr(modemCom::bufIn,"SEND OK"); - if(ptr) { - - modemCom::status.SEND_OK=1; - } - - modemCom::status.ERROR=0; - ptr=strstr(modemCom::bufIn,"ERROR"); - if(ptr) { - - modemCom::status.ERROR=1; - modemCom::status.OK=0; - } - ptr=strstr(modemCom::bufIn,"DNS Fail"); - if(ptr) { - modemCom::status.dnsError=1; - modemCom::status.ERROR=1; - modemCom::status.OK=0; - } - - //modemCom::status.CLOSED=false; - ptr=strstr(modemCom::bufIn,"CLOSED"); - if(ptr) { - modemCom::status.CLOSED=1; - } - - if(strstr(modemCom::bufIn,"GET /")){ - getFound = true; - } - - //Buscando connect - if(!modemCom::atendendoWebServer){ - ptr=strstr(modemCom::bufIn,"CONNECT\r\n"); - //if(strstr(modemCom::bufIn,"WIFI")){ptr=NULL;} - if(ptr) { - ptr = strtok(modemCom::bufIn,","); - connID = atoi(ptr); - modemCom::status.serverConnected=1; - pc.printf("Recebido string CONNECT socket na conexao %u.\n",connID); - if(!modemCom::status.emComunicacao){ - if(!getFound){ - pc.printf("Atendendo socket entrante na conexao %u.\n",connID); - modemCom::status.SRINGsockEntrante = true; - modemCom::status.connIDServerCommand = connID; - } - } - modemCom::status.emComunicacao=true; - modemCom::bufIn = strtok(NULL,""); - } - } - - IPDNumBytes = 0; - ptr = strstr(modemCom::bufIn,"+IPD"); - if(ptr!=NULL){ - //+IPD,0,480:GET - strtok(ptr,","); //Separando +IPD - - ptr = strtok(NULL,","); //Pegando o numero da conexão - connID = atoi(ptr); - - ptr = strtok(NULL,":"); //Pegando o numero de caracteres IPD - IPDNumBytes = atoi(ptr); - - modemCom::bufIn = strtok(NULL,""); - - //printf("Recebido pacote via conexao %u com %lu bytes.\n",connID,IPDNumBytes); - - } - - if(IPDNumBytes && modemCom::status.recebendoArquivoDoServer && (strstr(modemCom::bufIn,"CONNECT")==NULL) && (strstr(modemCom::bufIn,"*ServerCommand*")==NULL) ){ - - sdCard::insereDadosArquivoHex(&sdCard::tempFile,modemCom::bufIn,IPDNumBytes); - //sdCard::insereDadosArquivo(&sdCard::tempFile,modemCom::bufIn,IPDNumBytes); - sdCard::nBytesArquivoRecebidos+=IPDNumBytes; - bufModem.del(); - sprintf(modemCom::bufIn,"AT+CIPSEND=%u,%lu\r\n",connID,10); - modem.puts(modemCom::bufIn); - timeOut = 5000; - while(timeOut && (strstr(bufModem.getRowBuffer(),">")==NULL)){ - osDelay(1); - timeOut--; - } - modemCom::status.timeOut = 30; - modem.puts("sendData\r\n"); - pc.printf("sendData recebidos %lu bytes\n",sdCard::nBytesArquivoRecebidos/2); - diversos::wdt.kick(); - return; - } - - //Reconhecendo GET HTTP e atendendo com um servidor web - if(getFound && strstr(modemCom::bufIn,"HTTP/1.1")){ - ptr=strstr(modemCom::bufIn,"GET /"); - if(ptr) { - ptr = strtok(ptr,"/"); - ptr = strtok(NULL," "); - bufInPtr = ptr; - strcpy(webServerBuff,ptr); - modemCom::atendendoWebServer = true; - modemCom::status.connIDWebServer = connID; - } - } - - ptr=strstr(modemCom::bufIn,"*ServerAck*"); - if(ptr) { - modemCom::status.ServerAck=1; - } - - ptr=strstr(modemCom::bufIn,"*ServerCommand*"); - if(ptr) { - scanPtr = strtok (ptr,"\\"); - scanPtr = strtok (NULL,">"); - strcpy(commands::buffer,scanPtr); - pc.printf("Comandos <%s>.\n",commands::buffer); - executaComandoServer = true; - } } uint8_t modemCom::inicializaModem(void) -{ - //uint8_t maxTentativas=0; - - //char config[255]; - //char *ptr; - //char *buf; - //buf = bufModem.getRowBuffer(); - +{ + char aux[255]; modemCom::timeOutModem = 10; modemCom::status.emComunicacao = true; - if(modemCom::sendToModem("ATE0\r\n",1,&modemCom::status.OK,NULL,1000,10,1)) { pc.printf("Recebeu o comando ATE0.\n"); } - modemCom::leMAC(); + modemCom::leMAC(); + + modemCom::leParametrosConexaoSDCard(); + + //Colocando aqui o conteudo de conectaWiFi + //Mudando mode para AP e Station + if(modemCom::sendToModem("AT+CWMODE=3\r\n",1,&modemCom::status.OK,NULL,10000,1,1)) { + pc.printf("Modo AP+STATION aceito.\n"); + } + + + if(modemCom::sendToModem("AT+CIPMUX=1\r\n",1,&modemCom::status.OK,NULL,250,4,1)) { + pc.printf("Recebeu o comando AT+CIPMUX=1.\n"); + } + + + //AT+CIPSERVER=1,portaLidaDoSDCard + sprintf(aux,"AT+CIPSERVER=1,%s\r\n",modemCom::status.port); + if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,250,4,1)) { + pc.printf("Recebeu o comando <%s>.\n",aux); + } + + if(modemCom::sendToModem("AT+CIPSTO=60\r\n",1,&modemCom::status.OK,NULL,250,4,1)) { + pc.printf("Recebeu o comando AT+CIPSTO=60.\n"); + } + + sprintf(aux,"AT+CWSAP_CUR=\"DROME_WIFI_%s\",\"VsaDROME\",5,3\r\n",modemCom::status.MAC); + if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,250,4,1)) { + pc.printf("Recebeu o comando %s.\n",aux); + } + + + if(modemCom::sendToModem("AT+CIPAP_CUR=\"192.168.4.1\",\"192.168.4.1\",\"255.255.255.0\"\r\n",1,&modemCom::status.OK,NULL,250,4,1)) { + pc.printf("Recebeu o comando AT+CIPAP_CUR=\"192.168.4.1\",\"192.168.4.1\",\"255.255.255.0\".\n"); + } + + if(modemCom::sendToModem("AT+CWDHCP_CUR=2,1\r\n",1,&modemCom::status.OK,NULL,250,4,1)) { + pc.printf("Recebeu o comando AT+CWDHCP_CUR=2,1.\n"); + } modemCom::status.emComunicacao = false; return 1;