teste de publish
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
Diff: modem.cpp
- Revision:
- 9:cf406384efd9
- Parent:
- 8:9f8ad3dbeb87
- Child:
- 10:263c093f8977
--- a/modem.cpp Tue Jul 18 20:00:43 2017 +0000 +++ b/modem.cpp Wed Aug 09 20:38:10 2017 +0000 @@ -11,19 +11,23 @@ bool enviaSendData; char *bufInPtr; bool mudaRede = false; +char webServerBuff[256]; void modemCom::atendeSRING(uint8_t conId){ //pc.printf("Atendendo a conexao entrante.\n"); modemCom::status.socketEntranteAtivo=true; modemCom::status.timeOut = 30; - modemCom::timeOutModem = 50; + modemCom::timeOutModem = 10; + + //pc.printf("Entrei em modemCom::atendeSRING.\r\n"); + while(modemCom::status.timeOut||modemCom::status.NO_CARRIER){ - modemCom::status.timeOut--; + if(modemCom::status.timeOut){modemCom::status.timeOut--;} /*//Aqui devo perguntar e pedir os dados em buffer */ - osDelay(100); + osDelay(100); } - + //Para parar de colocar dentro do arquivo modemCom::status.recebendoArquivoDoServer = false; @@ -65,7 +69,7 @@ ptr = strtok(NULL,"\""); if(ptr) { strcpy(modemCom::status.MAC,ptr); - pc.printf("Lido MAC <%s>.\n",modemCom::status.MAC); + //pc.printf("Lido MAC <%s>.\n",modemCom::status.MAC); } } } @@ -110,11 +114,11 @@ switch(tipoDado) { case dadosArmazenados: if(!sdCard::preparaEnvio()){ - pc.printf("Nao foi possivel preparar o envio.\n"); + //pc.printf("Nao foi possivel preparar o envio.\n"); return false; } sdCard::getFileTam(&sdCard::envio); - pc.printf("Preparado o envio do arquivo com %lu bytes.\n",sdCard::envio.bytes); + //pc.printf("Preparado o envio do arquivo com %lu bytes.\n",sdCard::envio.bytes); break; case dadosStatus: modemCom::montaStatus(); @@ -123,10 +127,10 @@ switch(tipoDado) { case dadosArmazenados: - result = modemCom::postFileCommandMode(serverAddress,"/drome/Parser/",&sdCard::envio); + result = modemCom::postFileCommandMode(modemCom::status.host,"/drome/Parser/",&sdCard::envio); break; case dadosStatus: - result = modemCom::postFileCommandMode(serverAddress,"/drome/Parser/",&sdCard::status); + result = modemCom::postFileCommandMode(modemCom::status.host,"/drome/Parser/",&sdCard::status); break; } @@ -136,10 +140,10 @@ //Envia uma string nula e faz o processador esperar a resposta do server! if(modemCom::status.ServerAck) { - pc.printf("Enviado e recebido resposta do server (*ServerAck*).\n"); + //pc.printf("Enviado e recebido resposta do server (*ServerAck*).\n"); } else { - pc.printf("Enviado mas nao recebido resposta do server (*ServerAck*).\n"); - pc.printf("Conteudo de getRowBuffer <%s>.\n",bufModem.getRowBuffer()); + //pc.printf("Enviado mas nao recebido resposta do server (*ServerAck*).\n"); + //pc.printf("Conteudo de getRowBuffer <%s>.\n",bufModem.getRowBuffer()); } return result; } @@ -334,6 +338,8 @@ return 0; } + sdCard::fechaArquivo(arquivo); + //Logica de timeout esperando confirmação modemCom::status.ServerAck 20 segundos parteSendoEnviada = 200; while((parteSendoEnviada)&&(!modemCom::status.ServerAck)&&(!modemCom::status.NO_CARRIER)) { @@ -341,9 +347,7 @@ parteSendoEnviada--; } - modemCom::status.serverConnected=0; - sdCard::fechaArquivo(arquivo); - + modemCom::status.serverConnected=0; //modemCom::sendToModem("AT+CIPCLOSE=1\r\n",1,&modemCom::status.OK,500,3); modemCom::closeConnection(1); modemCom::status.emComunicacao = false; @@ -408,7 +412,7 @@ bool modemCom::closeConnection(uint8_t id){ char command[20]; sprintf(command,"AT+CIPCLOSE=%u\r\n",id); - return modemCom::sendToModem(command,1,&modemCom::status.OK,NULL,500,3,1); + return modemCom::sendToModem(command,1,NULL,",CLOSED",500,3,1); } char modemCom::cipSend(uint8_t connID,char *buffer,uint16_t len){ @@ -434,18 +438,136 @@ return 2; } -void modemCom::webServer(void){ +void modemCom::webServer(void){ + //char auxMsg[50]; + bool encontrado=0; + char buf[512]; + //uint32_t aux_int; + + 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){ + printf("Requisicao enviada!\n"); + }else{ + printf("Requisicao nao enviada 1!!\n"); + } + encontrado = 1; + } + + if(strstr(webServerBuff,"comandos.htm")&&(!encontrado)){ + + //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(webServerBuff,"configRede.htm")&&(!encontrado)){ + //Pegando o IP + 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); + encontrado = 1; + } + + + + if(strstr(webServerBuff,"lecomandocontrole.htm")&&(!encontrado)){ + + 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(strstr(webServerBuff,"cwjap.htm")&&(!encontrado)){ + //cwjap.htm?ssid=VSA&password=vitaeBBYP&porta=4000&host=www.vitaesolucoes.com.br&periodo=60 + + strtok(webServerBuff,"="); + 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 + + strtok(NULL,"="); + strcpy(modemCom::status.host,strtok(NULL,"&")); //pegando host + + strtok(NULL,"="); + strcpy(buf,strtok(NULL," ")); //pegando periodo + modemCom::status.periodo = atoi(buf); + + 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(!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\nHOST:%s\r\nPERIODO:%lu\r\n\r\n",modemCom::status.ssid,modemCom::status.password,modemCom::status.port,modemCom::status.host,modemCom::status.periodo); + if(sdCard::abreArquivo(&sdCard::config,"w")){ + 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::conectaWiFi(); + } + } +} + +/*void modemCom::webServer(void){ char buf[512]; //char auxMsg[50]; bool encontrado=0; - //uint32_t aux_int; - - + //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(connID,buf,0)==1){ + if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ printf("Requisicao enviada!\n"); }else{ printf("Requisicao nao enviada 1!!\n"); @@ -457,7 +579,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(connID,buf,0)==1){ + if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ printf("Requisicao enviada!\n"); }else{ printf("Requisicao nao enviada 1!!\n"); @@ -473,7 +595,7 @@ //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(connID,buf,0); + cipSend(modemCom::status.connIDWebServer,buf,0); encontrado = 1; } @@ -504,46 +626,14 @@ }else{ sprintf(buf,"HTTP/1.1 200 OK\n\nNACK"); } - cipSend(connID,buf,0); + cipSend(modemCom::status.connIDWebServer,buf,0); encontrado = 1; } - /*if(strstr(bufInPtr,"leTemperaturas.htm")){ - - - - strtok(bufInPtr,"="); - bufInPtr = strtok(NULL,NULL); - //sprintf(buf,"%s",bufInPtr); - aux_int = atoi(bufInPtr); - aux_int--; - */ - - /*if(num_temperatureSensors){ - //Zerano conteudo de buff - sprintf(buf,"callback({\"response\":\""); - probe[0]->convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready - for (int i = 0; i<num_temperatureSensors; i++){ - sprintf(auxMsg,"%3.1f;",probe[i]->temperature()); - strcat(buf,auxMsg); - } - buf[strlen(buf)-1]=0; - sprintf(auxMsg,"\"})"); - strcat(buf,auxMsg); - }else{ - sprintf(buf,"callback({\"response\":\"Sensor_ERROR\"})"); - } - if(cipSend(connID,buf,0)==1){ - printf("Requisicao enviada!\n"); - }else{ - printf("Requisicao nao enviada 1!!\n"); - } - encontrado = 1; - }*/ - if(strstr(bufInPtr,"lecomandocontrole.htm")){ + if(strstr(webServerBuff,"lecomandocontrole.htm")){ uint16_t timeout = 5000; IrDetect.reset(); @@ -551,10 +641,10 @@ while((IrDetect.read_ms()<timeout) && (!detectaIRIn())); if(IrDetect.read_ms()<timeout){ - serializaPacoteIR(connID); + serializaPacoteIR(modemCom::status.connIDWebServer); }else{ sprintf(buf,"erro"); - if(cipSend(connID,buf,0)==1){ + if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ printf("Requisicao enviada!\n"); } } @@ -564,17 +654,14 @@ if(!encontrado){ sprintf(buf,"Pagina Nao Encontrada."); - if(cipSend(connID,buf,0)==1){ + if(cipSend(modemCom::status.connIDWebServer,buf,0)==1){ printf("Requisicao enviada!\n"); }else{ printf("Requisicao nao enviada 3!!\n"); } - } + } - modemCom::closeConnection(connID); - /*sprintf(buf,"AT+CIPCLOSE=%u\r\n",connID); - sendToModem(buf,1,&modemCom::status.OK,300,1);*/ - + modemCom::closeConnection(modemCom::status.connIDWebServer); if(mudaRede){ mudaRede = false; modemCom::sendToModem("AT+CIPSERVER=0\r\n",1,&modemCom::status.OK,NULL,2000,1,1); @@ -586,7 +673,7 @@ modemCom::conectaWiFi(); } } -} +}*/ bool modemCom::leIP(void){ char *ptr; @@ -602,9 +689,11 @@ } int16_t modemCom::getRSSI(void){ - /*char *ptr; + 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,1000,1)){ + if(modemCom::sendToModem("AT+CWLAP\r\n",1,&modemCom::status.OK,NULL,10000,2,1000)){ ptr = strstr(modemCom::bufIn,(const char*)modemCom::status.ssid); if(ptr){ ptr = strtok(ptr,","); @@ -612,8 +701,8 @@ RSSI = atoi(ptr); } } - return RSSI;*/ - return -50; + return RSSI; + //return -50; } bool modemCom::verificaConexao(void){ @@ -655,19 +744,35 @@ fgets(modemCom::status.port,20,sdCard::config.fp); ptr = strtok(modemCom::status.port,":"); ptr = strtok(NULL,"\r\n"); - strcpy(modemCom::status.port,ptr); + strcpy(modemCom::status.port,ptr); + + //Pegando host + fgets(modemCom::status.host,50,sdCard::config.fp); + ptr = strtok(modemCom::status.host,":"); + ptr = strtok(NULL,"\r\n"); + strcpy(modemCom::status.host,ptr); + + //Pegando periodo + fgets(aux,20,sdCard::config.fp); + ptr = strtok(aux,":"); + ptr = strtok(NULL,"\r\n"); + modemCom::status.periodo = atoi(ptr); }else{ - strcpy(modemCom::status.ssid,"VSA"); + strcpy(modemCom::status.ssid,"VSE"); strcpy(modemCom::status.password,"vitaeBBYP"); strcpy(modemCom::status.port,"80"); + strcpy(modemCom::status.host,"www.vitaesolucoes.com.br"); + modemCom::status.periodo = 900; } 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\n\r\n",modemCom::status.ssid,modemCom::status.password,modemCom::status.port); + 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"); }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; } //Mudando mode para AP e Station @@ -716,30 +821,36 @@ 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); + pc.printf("Vem do modem <%s>.\r\n",modemCom::bufIn); + + if(strstr(modemCom::bufIn,"GET /")){ + getFound = true; + } - if(strstr(modemCom::bufIn,"WIFI")==NULL){ - //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){ + //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,""); - } - } + } + modemCom::status.emComunicacao=true; + modemCom::bufIn = strtok(NULL,""); + } } IPDNumBytes = 0; @@ -761,13 +872,15 @@ } //Reconhecendo GET HTTP e atendendo com um servidor web - if(strstr(modemCom::bufIn,"GET /") && strstr(modemCom::bufIn,"HTTP/1.1")){ + if(getFound && strstr(modemCom::bufIn,"HTTP/1.1")){ ptr=strstr(modemCom::bufIn,"GET /"); if(ptr) { ptr = strtok(ptr,"/"); ptr = strtok(NULL," "); - bufInPtr = ptr; - modemCom::atendendoWebServer = true; + bufInPtr = ptr; + strcpy(webServerBuff,ptr); + modemCom::atendendoWebServer = true; + modemCom::status.connIDWebServer = connID; } } @@ -787,11 +900,9 @@ //if(modemCom::status.recebendoArquivoDoServer){ if(IPDNumBytes && modemCom::status.recebendoArquivoDoServer && (strstr(modemCom::bufIn,"CONNECT")==NULL) && (strstr(modemCom::bufIn,"*ServerCommand*")==NULL) ){ + sdCard::insereDadosArquivo(&sdCard::tempFile,modemCom::bufIn,IPDNumBytes); - //modemCom::status.timeOut=100; - bufModem.del(); - sprintf(modemCom::bufIn,"AT+CIPSEND=%u,%lu\r\n",connID,10); modem.puts(modemCom::bufIn); timeOut = 5000; @@ -799,8 +910,9 @@ osDelay(1); timeOut--; } + modemCom::status.timeOut = 30; modem.puts("sendData\r\n"); - pc.printf("sendData\n"); + pc.printf("sendData\n"); return; }