teste de publish
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
Diff: modem.cpp
- Revision:
- 7:ae9c47f62946
- Parent:
- 6:d4ebbaaba295
- Child:
- 8:9f8ad3dbeb87
--- a/modem.cpp Thu Jun 15 12:50:58 2017 +0000 +++ b/modem.cpp Tue Jul 11 11:55:56 2017 +0000 @@ -42,14 +42,14 @@ uint16_t numeroByteSendoEnviado; sprintf(aux,"AT+CIPSEND=%u,%lu\r\n",sId,bufferLength); - if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,2000,10)) { + if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,NULL,300,10,1)) { for(numeroByteSendoEnviado = 0; numeroByteSendoEnviado<bufferLength; numeroByteSendoEnviado++) { modem.printf("%c",buffer[numeroByteSendoEnviado]); #ifdef xereta_modem pc.printf("%c",buffer[numeroByteSendoEnviado]); #endif } - numeroByteSendoEnviado = modemCom::sendToModem(NULL,1,&modemCom::status.SEND_OK,5000,1); + numeroByteSendoEnviado = modemCom::sendToModem(NULL,1,&modemCom::status.SEND_OK,NULL,500,1,1); }else{ numeroByteSendoEnviado = false; //Reaproveitando numeroByteSendoEnviado para resultado de retorno } @@ -59,7 +59,7 @@ void modemCom::leMAC(void) { char *ptr; - if(modemCom::sendToModem("AT+CIPSTAMAC?\r\n",1,&modemCom::status.OK,250,20)){ + if(modemCom::sendToModem("AT+CIPSTAMAC?\r\n",1,&modemCom::status.modemResponse,NULL,250,20,1)){ //resposta: +CIPSTAMAC:"18:fe:34:f4:5f:c4" ptr = strtok(bufModem.getRowBuffer(),"\""); ptr = strtok(NULL,"\""); @@ -70,19 +70,7 @@ } } -bool modemCom::getSocketInfo(uint8_t sId){ - bool retorno=false; - sId++; //Para transformar de indice C para o índice usado no modem; - switch(sId){ - case 1: - retorno=modemCom::sendToModem("AT#SI=1\r",1,&modemCom::status.OK,300,1); - break; - case 2: - retorno=modemCom::sendToModem("AT#SI=2\r",1,&modemCom::status.OK,300,1); - break; - } - return retorno; -} + bool modemCom::writeStatusToSD(void){ char aux[30]; @@ -97,9 +85,7 @@ sprintf(aux,";imsi=%s}log",modemCom::status.MAC); sdCardBuf.fill(aux,strlen(aux)); - if(!sdCard::arquivoAberto()){ - sdCard::insereDadosArquivo(&sdCard::armazenamento,sdCardBuf.get(),sdCardBuf.getLength()); - } + return sdCard::insereDadosArquivo(&sdCard::armazenamento,sdCardBuf.get(),sdCardBuf.getLength()); } bool modemCom::montaStatus(void) @@ -127,9 +113,7 @@ pc.printf("Nao foi possivel preparar o envio.\n"); return false; } - if(sdCard::envio.bytes==0) { - sdCard::getFileTam(&sdCard::envio); - } + sdCard::getFileTam(&sdCard::envio); pc.printf("Preparado o envio do arquivo com %lu bytes.\n",sdCard::envio.bytes); break; case dadosStatus: @@ -185,13 +169,16 @@ if(arquivo->bytes==0){ if((!sdCard::getFileTam(arquivo))||(arquivo->bytes == 0)){ + if(arquivo->bytes == 0){ + sdCard::excluiArquivo(arquivo); + } return false; } } pc.printf("Abrindo o socket em <%s>.\n",host); sprintf(header,"AT+CIPSTART=1,\"TCP\",\"%s\",80\r\n",host); - if(modemCom::sendToModem(header,1,&modemCom::status.OK,20000,2)) { + if(modemCom::sendToModem(header,1,&modemCom::status.OK,NULL,20000,1,1)) { modemCom::status.NO_CARRIER=0; //Socket Aberto! pc.printf("Aberto o socket em command mode.\n"); pc.printf("Enviando arquivo com nome %s.\n",arquivo->nome); @@ -211,7 +198,7 @@ pc.printf("Iniciando o envio do arquivo de %lu bytes\nnumeroDePartes = %lu\nrestoDoEnvio = %lu\n",arquivo->bytes,numeroDePartes,restoDoEnvio); if(!sdCard::abreArquivo(arquivo,"r")){ - pc.printf("Nao foi posssivel abrir o arquivo de dentro da funcao sendFileCommandMode().\n"); + pc.printf("Nao foi posssivel abrir o arquivo de dentro da funcao postFileCommandMode().\n"); modemCom::status.emComunicacao = false; return 0; } @@ -232,8 +219,8 @@ headerTam = strlen(header); sprintf(aux,"AT+CIPSEND=1,%u\r\n",headerTam); - if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,100,10)) { - if(!modemCom::sendToModem(header,1,&modemCom::status.SEND_OK,1000,1)) { + if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,NULL,100,10,1)) { + if(!modemCom::sendToModem(header,1,&modemCom::status.SEND_OK,NULL,1000,1,1)) { sdCard::fechaArquivo(arquivo); modemCom::status.emComunicacao = false; pc.printf("Cabecalho http nao enviado.\n"); @@ -255,7 +242,7 @@ passaParaProximaParte = false; while((maxTentativas)&&(!passaParaProximaParte)) { sprintf(aux,"AT+CIPSEND=1,%u\r\n",numeroDeBytesPorEnvio); - if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,100,20)) { + if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,NULL,100,20,1)) { if(maxTentativas!=maxRetentativasEnvioParteArquivo) { //Estou realizando reenvio desta parte logo preciso fazer fseek para a quantidade de bytes do envio anterior fseek(arquivo->fp,-numeroDeBytesPorEnvio,SEEK_CUR); @@ -269,7 +256,7 @@ #endif } - if(modemCom::sendToModem(NULL,1,&modemCom::status.SEND_OK,5000,1)) { + if(modemCom::sendToModem(NULL,1,&modemCom::status.SEND_OK,NULL,5000,1,1)) { diversos::progressBar(parteSendoEnviada,numeroDePartes); //Preciso verificar se o buffer esvaziou. Se deu "flush" //if(modemCom::aguardaFlush(0)==1) { @@ -307,7 +294,7 @@ maxTentativas = maxRetentativasEnvioParteArquivo; while((maxTentativas)&&(!passaParaProximaParte)) { sprintf(aux,"AT+CIPSEND=1,%u\r\n",restoDoEnvio+strlen("\r\n--xxBOUNDARYxx--\r\n\r\n")); //Para incluir "\n--xxBOUNDARYxx--\n\n" no fim da msg http - if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,100,3)) { + if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,NULL,100,3,1)) { for(numeroByteSendoEnviado=0; numeroByteSendoEnviado<restoDoEnvio; numeroByteSendoEnviado++) { //Envio os bytes aqui! Menos o ultimo para ter o check; c = fgetc(arquivo->fp); @@ -316,7 +303,7 @@ pc.printf("%c",c); #endif } - if(modemCom::sendToModem("\r\n--xxBOUNDARYxx--\r\n\r\n",1,&modemCom::status.SEND_OK,5000,1)) { + if(modemCom::sendToModem("\r\n--xxBOUNDARYxx--\r\n\r\n",1,&modemCom::status.SEND_OK,NULL,5000,1,1)) { if(numeroDePartes) { diversos::progressBar(parteSendoEnviada,numeroDePartes); } @@ -337,7 +324,7 @@ } } else { maxTentativas--; - modemCom::sendToModem("AT\r\n",1,&modemCom::status.OK,1000,100); + modemCom::sendToModem("AT\r\n",1,&modemCom::status.OK,NULL,1000,100,1); } } @@ -349,7 +336,7 @@ } //Logica de timeout esperando confirmação modemCom::status.ServerAck 20 segundos - parteSendoEnviada = 600; + parteSendoEnviada = 200; while((parteSendoEnviada)&&(!modemCom::status.ServerAck)&&(!modemCom::status.NO_CARRIER)) { osDelay(100); parteSendoEnviada--; @@ -364,57 +351,65 @@ return modemCom::status.ServerAck; } -uint8_t modemCom::sendToModem(char *string,uint8_t confirmado,char *codigoConfirmacao,uint16_t timeOut,uint8_t maxTentativas) +uint8_t modemCom::sendToModem(char *string,uint8_t confirmado,char *codigoConfirmacao,char *stringConfirmacao,uint16_t timeOut,uint8_t maxTentativas,uint16_t delayEntreTentativas) { uint16_t timeOutProcesso; uint16_t indexString,strLen; //Para exibir retentativas! - led3=1; + while(maxTentativas){ timeOutProcesso=timeOut; - //UARTSend(2,string,strlen(string)); + + + bufModem.del(); //Deletando o buffer antes de iniciar envio + if(string!=NULL) { - modem.puts(string); -#ifdef xereta_modem - //DebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebug - pc.printf("Sai pro modem <%s>\n",string); //Enviando na serial PC para debug -#endif + modem.puts(string); + #ifdef xereta_modem + pc.printf("Sai pro modem <%s>\n",string); //Enviando na serial PC para debug + #endif } - if(confirmado==1){ - *codigoConfirmacao=0; + if(confirmado==1){ modemCom::status.ERROR=0; - while((timeOutProcesso)&&(!(*codigoConfirmacao))&&(!modemCom::status.ERROR)) { - osDelay(5); //timeOut em mS - timeOutProcesso--; + modemCom::status.busy=0; + + if(codigoConfirmacao!=NULL){ + *codigoConfirmacao=0; + while((timeOutProcesso)&&(!(*codigoConfirmacao))&&(!modemCom::status.ERROR)&&(!modemCom::status.busy)){ + osDelay(5); //timeOut em mS + timeOutProcesso--; + } + }else{ + while((timeOutProcesso)&&(!modemCom::status.ERROR)&&(!modemCom::status.busy)&&(!strstr(bufModem.getRowBuffer(),stringConfirmacao))) { + osDelay(1); //timeOut em mS + timeOutProcesso--; + } + } + if(modemCom::status.ERROR||modemCom::status.busy) { + osDelay(1000);//espera 1S } - if(modemCom::status.ERROR||modemCom::status.busy) { - osDelay(1000);//espera 0.1S - } - -#ifdef xereta_modem - //DebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebug - pc.printf("Vem do modem <%s>\n",bufModem.getRowBuffer()); -#endif - if(*codigoConfirmacao==1) { - led3=0; + + if(timeOutProcesso) { return maxTentativas; - } + } + strLen = strlen(string); - pc.printf("Erro em sendToModem codigo <%s> Retentativa de envio da string <",bufModem.getRowBuffer()); for(indexString=0; indexString<(strLen-1); indexString++) { pc.putc(string[indexString]); } - pc.printf("> maxTentativas = %lu.\n",maxTentativas); + #ifdef xereta_modem + pc.printf("> maxTentativas = %lu.\n",maxTentativas); + #endif } - maxTentativas--; - } - led3=0; + maxTentativas--; + osDelay(delayEntreTentativas); + } return 0; } bool modemCom::closeConnection(uint8_t id){ char command[20]; sprintf(command,"AT+CIPCLOSE=%u\r\n",id); - return modemCom::sendToModem(command,1,&modemCom::status.CLOSED,500,5); + return modemCom::sendToModem(command,1,&modemCom::status.OK,NULL,500,3,1); } char modemCom::cipSend(uint8_t connID,char *buffer,uint16_t len){ @@ -425,7 +420,7 @@ } printf("conteudo de cipsend.<"); sprintf(aux,"AT+CIPSENDEX=%u,%lu\r\n",connID,len); - if(sendToModem(aux,1,&modemCom::status.OK,500,1)){ + if(sendToModem(aux,1,&modemCom::status.OK,NULL,500,1,1)){ for(i=0;i<len;i++){ modem.putc(buffer[i]); pc.putc(buffer[i]); @@ -434,7 +429,7 @@ return 0; } printf(">\r\n"); - if(sendToModem("",1,&modemCom::status.SEND_OK,2000,1)){ + if(sendToModem("",1,&modemCom::status.SEND_OK,NULL,2000,1,1)){ return 1; } return 2; @@ -442,9 +437,9 @@ void modemCom::webServer(void){ char buf[512]; - char auxMsg[50]; + //char auxMsg[50]; bool encontrado=0; - uint32_t aux_int; + //uint32_t aux_int; @@ -471,11 +466,9 @@ encontrado = 1; } - if(strstr(bufInPtr,"configRede.htm")){ - - + if(strstr(bufInPtr,"configRede.htm")){ //Pegando o IP - sendToModem("AT+CIFSR\r\n",1,&modemCom::status.OK,200,1); + 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>"); @@ -552,7 +545,7 @@ if(strstr(bufInPtr,"lecomandocontrole.htm")){ - led2=1; + uint16_t timeout = 5000; IrDetect.reset(); IrDetect.start(); @@ -567,9 +560,7 @@ } } IrDetect.stop(); - - encontrado = 1; - led2=0; + encontrado = 1; } if(!encontrado){ @@ -587,7 +578,7 @@ if(mudaRede){ mudaRede = false; - modemCom::sendToModem("AT+CIPSERVER=0\r\n",1,&modemCom::status.OK,2000,1); + 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"); @@ -598,6 +589,19 @@ } } +bool modemCom::leIP(void){ + char *ptr; + sendToModem("AT+CIFSR\r\n",1,NULL,"+CIFSR:STAIP,",200,1,1); + ptr=strstr(modemCom::bufIn,"+CIFSR:STAIP,"); + if(ptr) { + ptr = strtok(ptr,"\""); + ptr = strtok(NULL,"\""); + strcpy(modemCom::status.STAIP,ptr); + } + if(strstr(modemCom::status.STAIP,"0.0.0.0")){return false;} + return true; +} + int16_t modemCom::getRSSI(void){ /*char *ptr; int16_t RSSI = 0; @@ -612,6 +616,19 @@ return RSSI;*/ return -50; } + +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(); + i--; + }else{ + return true; + } + } + return false; +} void modemCom::conectaWiFi(void){ //Função para mudança de rede @@ -649,101 +666,83 @@ 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("Iniciando conexao wifi.\r\n"); }else{ - strcpy(modemCom::status.ssid,"VSA"); + strcpy(modemCom::status.ssid,"VSE"); strcpy(modemCom::status.password,"vitaeBBYP"); - strcpy(modemCom::status.port,"80"); + strcpy(modemCom::status.port,"4000"); } //Mudando mode para AP e Station - if(modemCom::sendToModem("AT+CWMODE=3\r\n",1,&modemCom::status.OK,10000,1)) { + 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,10000,1)) { + 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,250,4)) { + 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,250,4)) { + 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,250,4)) { + 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,250,4)) { + 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,250,4)) { + 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,250,4)) { + 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; - bool naoCompreendido=true; + char *ptr,*scanPtr; uint16_t bufInLength = bufModem.getLength(); - modemCom::bufIn = bufModem.get(); - - //pc.printf("Entrada do modem<\n\n%s\n\n>\n",modemCom::bufIn); + uint16_t timeOut; + modemCom::bufIn = bufModem.get(); - /* - if(modemCom::exibeEntradaPacote){ - modemCom::exibeEntradaPacote=false; - pc.printf("Lido entrada Pacote modem<%s>.\n",modemCom::bufIn); - } - */ + modemCom::status.modemResponse=true; + + //pc.printf("Vem do modem <%s>.\r\n",modemCom::bufIn); - //Reconhecendo GET HTTP e atendendo com um servidor web - if(strstr(modemCom::bufIn,"GET /") && strstr(modemCom::bufIn,"HTTP/1.1")){ - ptr=strstr(modemCom::bufIn,"GET /"); - if(ptr) { - naoCompreendido=false; - ptr = strtok(ptr,"/"); - ptr = strtok(NULL," "); - bufInPtr = ptr; - modemCom::atendendoWebServer = true; - //osSignalSet(idThreadComunicacoes, 0x1); - + 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){ + pc.printf("Atendendo socket entrante na conexao %u.\n",connID); + modemCom::status.SRINGsockEntrante = true; + } + modemCom::status.emComunicacao=true; + modemCom::bufIn = strtok(NULL,""); + } } } - //Buscando connect - if(!modemCom::atendendoWebServer){ - ptr=strstr(modemCom::bufIn,"CONNECT\r\n"); - if(ptr) { - ptr = strtok(modemCom::bufIn,","); - connID = atoi(ptr); - naoCompreendido=false; - modemCom::status.serverConnected=1; - pc.printf("Recebido string CONNECT socket na conexao %u.\n",connID); - if(!modemCom::status.emComunicacao){ - //Preciso saber se é decorrente de uma chamada minha ou se é uma entrada de socket. - pc.printf("Atendendo socket entrante na conexao %u.\n",connID); - modemCom::status.SRINGsockEntrante = true; - } - modemCom::status.emComunicacao=true; - modemCom::bufIn = strtok(NULL,NULL); - } - } - IPDNumBytes = 0; ptr = strstr(modemCom::bufIn,"+IPD"); if(ptr!=NULL){ @@ -756,54 +755,51 @@ ptr = strtok(NULL,":"); //Pegando o numero de caracteres IPD IPDNumBytes = atoi(ptr); - modemCom::bufIn = strtok(NULL,NULL); + modemCom::bufIn = strtok(NULL,""); - printf("Recebido pacote via conexao %u com %lu bytes.\n",connID,IPDNumBytes); + //printf("Recebido pacote via conexao %u com %lu bytes.\n",connID,IPDNumBytes); } - if(modemCom::atendendoWebServer){ - return; + //Reconhecendo GET HTTP e atendendo com um servidor web + if(strstr(modemCom::bufIn,"GET /") && strstr(modemCom::bufIn,"HTTP/1.1")){ + ptr=strstr(modemCom::bufIn,"GET /"); + if(ptr) { + ptr = strtok(ptr,"/"); + ptr = strtok(NULL," "); + bufInPtr = ptr; + modemCom::atendendoWebServer = true; + } } - //printf("Sobrou pacote <%s>.\n\n",modemCom::bufIn); - //uint8_t i; - - - ptr=strstr(modemCom::bufIn,"*ServerAck*"); - if(ptr) { - naoCompreendido=false; - modemCom::status.ServerAck=1; - pc.printf("SERVER RESPONSE\n%s\n\n",modemCom::bufIn); + if(ptr) { + modemCom::status.ServerAck=1; } ptr=strstr(modemCom::bufIn,"*ServerCommand*"); - if(ptr) { - naoCompreendido=false; + if(ptr) { scanPtr = strtok (ptr,"\\"); - scanPtr = strtok (NULL,">"); - //modemCom::status.ServerCommand=1; + scanPtr = strtok (NULL,">"); strcpy(commands::buffer,scanPtr); pc.printf("Comandos <%s>.\n",commands::buffer); executaComandoServer = true; - //Se devo executar comando tenho que sair imediatamente. - return; } //if(modemCom::status.recebendoArquivoDoServer){ - if(IPDNumBytes && modemCom::status.recebendoArquivoDoServer && (strstr(modemCom::bufIn,"CONNECT")==NULL) && (strstr(modemCom::bufIn,"*ServerCommand*")==NULL) ){ - //Appenda bufIn no devicescfg - //sdCard::insereDadosArquivo(&sdCard::devices,modemCom::bufIn,bufInLength); + if(IPDNumBytes && modemCom::status.recebendoArquivoDoServer && (strstr(modemCom::bufIn,"CONNECT")==NULL) && (strstr(modemCom::bufIn,"*ServerCommand*")==NULL) ){ sdCard::insereDadosArquivo(&sdCard::tempFile,modemCom::bufIn,IPDNumBytes); - osDelay(250); + //modemCom::status.timeOut=100; - - modemCom::status.timeOut=100; + bufModem.del(); sprintf(modemCom::bufIn,"AT+CIPSEND=%u,%lu\r\n",connID,10); modem.puts(modemCom::bufIn); - osDelay(100); + timeOut = 5000; + while(timeOut && (strstr(bufModem.getRowBuffer(),">")==NULL)){ + osDelay(1); + timeOut--; + } modem.puts("sendData\r\n"); pc.printf("sendData\n"); return; @@ -811,10 +807,9 @@ //Reconhecimento dos status modemCom::status.PROMPT_ENVIO_COMMAND_MODE=0; - ptr=strstr(modemCom::bufIn,"> "); if(ptr) { - naoCompreendido=false; + modemCom::status.serverConnected=1; modemCom::status.commandMode=1; modemCom::status.NO_CARRIER=0; @@ -822,176 +817,47 @@ } modemCom::status.OK=0; - ptr=strstr(modemCom::bufIn,"OK\r"); - if(ptr) { - naoCompreendido=false; + if(ptr) { modemCom::status.OK=1; - } - - - ptr=strstr(modemCom::bufIn,"+CIFSR:STAIP,"); - if(ptr) { - naoCompreendido=false; - ptr = strtok(ptr,"\""); - ptr = strtok(NULL,"\""); - strcpy(modemCom::status.STAIP,ptr); - } + } modemCom::status.busy=false; ptr=strstr(modemCom::bufIn,"busy s..."); if(ptr) { - naoCompreendido=false; + modemCom::status.busy=1; } modemCom::status.SEND_OK=0; ptr=strstr(modemCom::bufIn,"SEND OK"); if(ptr) { - naoCompreendido=false; + modemCom::status.SEND_OK=1; } - ptr=strstr(modemCom::bufIn,"#SGACT: 1,"); - if(ptr) { - naoCompreendido=false; - if(ptr[10]=='1') { - modemCom::status.associated=1; - } - if(ptr[10]=='0') { - modemCom::status.associated=0; - } - } else { - - ptr=strstr(modemCom::bufIn,"#SGACT: "); - if(ptr) { - naoCompreendido=false; - modemCom::status.associated=1; - scanPtr = strtok (ptr," "); - scanPtr = strtok (NULL,"\r"); - if(scanPtr) { - strcpy(modemCom::status.modemIP,scanPtr); - } - } - } - - - ptr=strstr(modemCom::bufIn,"+CGPADDR: 1,"); - if(ptr) { - naoCompreendido=false; - scanPtr = strtok (ptr,"\""); - scanPtr = strtok (NULL,"\""); - if(scanPtr) { - strcpy(modemCom::status.modemIP,scanPtr); - } - } - - - //#PING: 01,"187.45.195.188",5,54 - ptr=strstr(modemCom::bufIn,"#PING: "); - if(ptr) { - naoCompreendido=false; - scanPtr = strtok (ptr,"\""); - scanPtr = strtok (NULL,"\""); - if(scanPtr) { - strcpy(modemCom::status.serverIP,scanPtr); - modemCom::status.serverIP[16]=1; - modemCom::status.ping=1; - } - } - - - //SocketBufferPendent? - //#SI: 1,123,400,10,50 - - ptr=strstr(modemCom::bufIn,"#SI: "); - if(ptr) { - //uint8_t connId; - naoCompreendido=false; - - //Descartando "#SI: " - scanPtr = strtok (ptr," "); - - //Capturando connId - scanPtr = strtok (NULL,","); - connID = atoi(scanPtr); - connID--; //Para transformar em indice de linguagem C que começa em zero; - - //capturando sent - scanPtr = strtok (NULL,","); - modemCom::status.socketInfo[connID].sent = atoi(scanPtr); - - //capturando received - scanPtr = strtok (NULL,","); - modemCom::status.socketInfo[connID].received = atoi(scanPtr); - - //capturando buff_in - scanPtr = strtok (NULL,","); - modemCom::status.socketInfo[connID].buff_in = atoi(scanPtr); - - //capturando ack_waiting - scanPtr = strtok (NULL,","); - modemCom::status.socketInfo[connID].ack_waiting = atoi(scanPtr); - } - - modemCom::status.ERROR=0; ptr=strstr(modemCom::bufIn,"ERROR"); if(ptr) { - naoCompreendido=false; + modemCom::status.ERROR=1; modemCom::status.OK=0; + } + ptr=strstr(modemCom::bufIn,"FAIL"); + if(ptr) { + + modemCom::status.ERROR=1; + modemCom::status.OK=0; + } + + //modemCom::status.CLOSED=false; + ptr=strstr(modemCom::bufIn,"CLOSED"); + if(ptr) { + + modemCom::status.CLOSED=1; } - ptr=strstr(modemCom::bufIn,"HTTP/1.1"); - if(ptr) { - naoCompreendido=false; - pc.printf("HTTP RESPONSE\n%s\n\n",modemCom::bufIn); - } - ptr=strstr(modemCom::bufIn,"SRING: 1"); - if(ptr) { - naoCompreendido=false; - modem.printf("AT#SRECV=1,1500\r"); - } - - ptr=strstr(modemCom::bufIn,"SRING: 2"); - if(ptr){ - naoCompreendido=false; - if(!modemCom::status.socketEntranteAtivo){ - modemCom::status.SRINGsockEntrante=1; - osSignalSet(idThreadComunicacoes, 0x1); - }else{ - //modem.printf("AT#SRECV=2,1500\r"); - } - } - - - ptr=strstr(modemCom::bufIn,"NO CARRIER"); - if(ptr) { - naoCompreendido=false; - modemCom::status.serverConnected=0; - modemCom::status.commandMode=1; - modemCom::status.NO_CARRIER=1; - pc.printf("NO CARRIER!!\n"); - } - - modemCom::status.CLOSED=false; - - ptr=strstr(modemCom::bufIn,"CLOSED"); - if(ptr) { - naoCompreendido=false; - modemCom::status.CLOSED=1; - } - - if(naoCompreendido) { - pc.printf("Mensagem nao compreendida vinda do modem \n ->{\n\n%s\n\n}<-\n",modemCom::bufIn); - } - - //if(modemCom::status.exibeBufModem){ - // modemCom::status.exibeBufModem=false; - //pc.printf("Entrada do modem<\n\n%s\n\n>\n",modemCom::bufIn); - //} } uint8_t modemCom::inicializaModem(void) @@ -1000,25 +866,17 @@ //char config[255]; //char *ptr; - char *buf; - buf = bufModem.getRowBuffer(); + //char *buf; + //buf = bufModem.getRowBuffer(); modemCom::timeOutModem = 10; modemCom::status.emComunicacao = true; - if(modemCom::sendToModem("ATE0\r\n",1,&modemCom::status.OK,1000,10)) { + if(modemCom::sendToModem("ATE0\r\n",1,&modemCom::status.OK,NULL,1000,10,1)) { pc.printf("Recebeu o comando ATE0.\n"); } - modemCom::leMAC(); - - - - /* - if(modemCom::sendToModem("\r",1,&modemCom::status.OK,250,4)) { - pc.printf("Recebeu o comando .\n"); - } - */ + modemCom::leMAC(); modemCom::status.emComunicacao = false; return 1;