teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Committer:
brunofgc
Date:
Tue Feb 06 22:07:10 2018 +0000
Revision:
22:cb832a9bc704
Parent:
21:b9315cdd9275
Child:
23:f3c87afb6548
Dando Pau em reprogramar (devices.cfg)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brunofgc 0:1c0a769988ee 1 #include "modem.h"
brunofgc 0:1c0a769988ee 2
brunofgc 0:1c0a769988ee 3 modemStatus modemCom::status;
brunofgc 0:1c0a769988ee 4 char* modemCom::bufIn; //Ponteiro para buffer de entrada do modem;
brunofgc 0:1c0a769988ee 5 uint32_t modemCom::timeOutModem;
brunofgc 0:1c0a769988ee 6 bool modemCom::atendendoWebServer;
brunofgc 0:1c0a769988ee 7 bool modemCom::exibeEntradaPacote;
brunofgc 0:1c0a769988ee 8 int16_t numeroDeBytesPorEnvio;
brunofgc 0:1c0a769988ee 9 uint8_t connID;
brunofgc 0:1c0a769988ee 10 uint16_t IPDNumBytes;
brunofgc 0:1c0a769988ee 11 bool enviaSendData;
brunofgc 0:1c0a769988ee 12 char *bufInPtr;
brunofgc 0:1c0a769988ee 13 bool mudaRede = false;
brunofgc 9:cf406384efd9 14 char webServerBuff[256];
brunofgc 0:1c0a769988ee 15
brunofgc 0:1c0a769988ee 16 void modemCom::atendeSRING(uint8_t conId){
brunofgc 6:d4ebbaaba295 17 //pc.printf("Atendendo a conexao entrante.\n");
brunofgc 15:0f78bf9c13ec 18
brunofgc 15:0f78bf9c13ec 19 if(modemCom::status.emComunicacao){
brunofgc 15:0f78bf9c13ec 20 modemCom::cipSend(conId,"ocupado",7);
brunofgc 22:cb832a9bc704 21 pc.printf("Fechando socket chave 1.\r\n");
brunofgc 15:0f78bf9c13ec 22 modemCom::closeConnection(conId);
brunofgc 15:0f78bf9c13ec 23 }
brunofgc 15:0f78bf9c13ec 24
brunofgc 0:1c0a769988ee 25 modemCom::status.socketEntranteAtivo=true;
brunofgc 0:1c0a769988ee 26 modemCom::status.timeOut = 30;
brunofgc 9:cf406384efd9 27 modemCom::timeOutModem = 10;
brunofgc 9:cf406384efd9 28
brunofgc 9:cf406384efd9 29 //pc.printf("Entrei em modemCom::atendeSRING.\r\n");
brunofgc 9:cf406384efd9 30
brunofgc 0:1c0a769988ee 31 while(modemCom::status.timeOut||modemCom::status.NO_CARRIER){
brunofgc 9:cf406384efd9 32 if(modemCom::status.timeOut){modemCom::status.timeOut--;}
brunofgc 0:1c0a769988ee 33 /*//Aqui devo perguntar e pedir os dados em buffer
brunofgc 0:1c0a769988ee 34 */
brunofgc 9:cf406384efd9 35 osDelay(100);
brunofgc 0:1c0a769988ee 36 }
brunofgc 9:cf406384efd9 37
brunofgc 0:1c0a769988ee 38 //Para parar de colocar dentro do arquivo
brunofgc 0:1c0a769988ee 39 modemCom::status.recebendoArquivoDoServer = false;
brunofgc 0:1c0a769988ee 40
brunofgc 0:1c0a769988ee 41 modemCom::status.serverConnected=0;
brunofgc 0:1c0a769988ee 42 modemCom::timeOutModem = 10;
brunofgc 0:1c0a769988ee 43
brunofgc 22:cb832a9bc704 44 //Fechando o socket
brunofgc 22:cb832a9bc704 45 pc.printf("Fechando socket chave 2.\r\n");
brunofgc 0:1c0a769988ee 46 modemCom::closeConnection(conId);
brunofgc 0:1c0a769988ee 47 modemCom::status.socketEntranteAtivo=false;
brunofgc 0:1c0a769988ee 48 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 49 modemCom::timeOutModem = 10;
brunofgc 0:1c0a769988ee 50 }
brunofgc 0:1c0a769988ee 51
brunofgc 0:1c0a769988ee 52 bool modemCom::sendBufferCommandMode(uint8_t sId, char *buffer, uint16_t bufferLength){
brunofgc 0:1c0a769988ee 53 char aux[25];
brunofgc 0:1c0a769988ee 54 uint16_t numeroByteSendoEnviado;
brunofgc 0:1c0a769988ee 55
brunofgc 0:1c0a769988ee 56 sprintf(aux,"AT+CIPSEND=%u,%lu\r\n",sId,bufferLength);
brunofgc 7:ae9c47f62946 57 if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,NULL,300,10,1)) {
brunofgc 0:1c0a769988ee 58 for(numeroByteSendoEnviado = 0; numeroByteSendoEnviado<bufferLength; numeroByteSendoEnviado++) {
brunofgc 0:1c0a769988ee 59 modem.printf("%c",buffer[numeroByteSendoEnviado]);
brunofgc 0:1c0a769988ee 60 #ifdef xereta_modem
brunofgc 0:1c0a769988ee 61 pc.printf("%c",buffer[numeroByteSendoEnviado]);
brunofgc 0:1c0a769988ee 62 #endif
brunofgc 0:1c0a769988ee 63 }
brunofgc 7:ae9c47f62946 64 numeroByteSendoEnviado = modemCom::sendToModem(NULL,1,&modemCom::status.SEND_OK,NULL,500,1,1);
brunofgc 0:1c0a769988ee 65 }else{
brunofgc 0:1c0a769988ee 66 numeroByteSendoEnviado = false; //Reaproveitando numeroByteSendoEnviado para resultado de retorno
brunofgc 0:1c0a769988ee 67 }
brunofgc 0:1c0a769988ee 68 return numeroByteSendoEnviado; //Reaproveitando numeroByteSendoEnviado para resultado de retorno
brunofgc 0:1c0a769988ee 69 }
brunofgc 0:1c0a769988ee 70
brunofgc 0:1c0a769988ee 71 void modemCom::leMAC(void)
brunofgc 0:1c0a769988ee 72 {
brunofgc 0:1c0a769988ee 73 char *ptr;
brunofgc 7:ae9c47f62946 74 if(modemCom::sendToModem("AT+CIPSTAMAC?\r\n",1,&modemCom::status.modemResponse,NULL,250,20,1)){
brunofgc 0:1c0a769988ee 75 //resposta: +CIPSTAMAC:"18:fe:34:f4:5f:c4"
brunofgc 0:1c0a769988ee 76 ptr = strtok(bufModem.getRowBuffer(),"\"");
brunofgc 0:1c0a769988ee 77 ptr = strtok(NULL,"\"");
brunofgc 0:1c0a769988ee 78 if(ptr) {
brunofgc 0:1c0a769988ee 79 strcpy(modemCom::status.MAC,ptr);
brunofgc 9:cf406384efd9 80 //pc.printf("Lido MAC <%s>.\n",modemCom::status.MAC);
brunofgc 0:1c0a769988ee 81 }
brunofgc 0:1c0a769988ee 82 }
brunofgc 0:1c0a769988ee 83 }
brunofgc 0:1c0a769988ee 84
brunofgc 7:ae9c47f62946 85
brunofgc 0:1c0a769988ee 86
brunofgc 1:0e0967c88590 87 bool modemCom::writeStatusToSD(void){
brunofgc 1:0e0967c88590 88 char aux[30];
brunofgc 1:0e0967c88590 89 int16_t RSSI;
brunofgc 1:0e0967c88590 90 RSSI = modemCom::getRSSI();
brunofgc 1:0e0967c88590 91 sdCardBuf.del();
brunofgc 1:0e0967c88590 92 sdCardBuf.fill("log{status:ip=255.255.255.255;csq=",34);
brunofgc 1:0e0967c88590 93
brunofgc 1:0e0967c88590 94 sprintf(aux,"%d",RSSI);
brunofgc 1:0e0967c88590 95 sdCardBuf.fill(aux,strlen(aux));
brunofgc 1:0e0967c88590 96
brunofgc 1:0e0967c88590 97 sprintf(aux,";imsi=%s}log",modemCom::status.MAC);
brunofgc 10:263c093f8977 98 sdCardBuf.fill(aux,strlen(aux));
brunofgc 10:263c093f8977 99 return sdCard::insereDadosBank(sdCardBuf.get(),sdCardBuf.getLength());
brunofgc 1:0e0967c88590 100 }
brunofgc 1:0e0967c88590 101
brunofgc 0:1c0a769988ee 102 bool modemCom::montaStatus(void)
brunofgc 0:1c0a769988ee 103 {
brunofgc 0:1c0a769988ee 104 if(sdCard::abreArquivo(&sdCard::status,"w")) {
brunofgc 0:1c0a769988ee 105 fprintf(sdCard::status.fp,"log{status:ip:255.255.255.255;csq:30;imsi:%s}log",modemCom::status.MAC);
brunofgc 0:1c0a769988ee 106 sdCard::fechaArquivo(&sdCard::status);
brunofgc 0:1c0a769988ee 107 sdCard::exibeArquivo(&sdCard::status);
brunofgc 0:1c0a769988ee 108 } else {
brunofgc 0:1c0a769988ee 109 return 0;
brunofgc 0:1c0a769988ee 110 }
brunofgc 0:1c0a769988ee 111 return true;
brunofgc 0:1c0a769988ee 112 }
brunofgc 0:1c0a769988ee 113
brunofgc 0:1c0a769988ee 114
brunofgc 0:1c0a769988ee 115
brunofgc 10:263c093f8977 116 uint8_t modemCom::enviaDados()
brunofgc 0:1c0a769988ee 117 {
brunofgc 16:9a19ac33957e 118 uint8_t result=false;
brunofgc 0:1c0a769988ee 119 modemCom::status.emComunicacao = true;
brunofgc 10:263c093f8977 120 pc.printf("modemCom::enviaDados[1].\r\n");
brunofgc 10:263c093f8977 121 if(!sdCard::preparaEnvio()){
brunofgc 10:263c093f8977 122 pc.printf("modemCom::enviaDados[2].\r\n");
brunofgc 10:263c093f8977 123 //pc.printf("Nao foi possivel preparar o envio.\n");
brunofgc 10:263c093f8977 124 return false;
brunofgc 0:1c0a769988ee 125 }
brunofgc 13:b9183b4bc049 126 sdCard::verificaCurrentBank();
brunofgc 11:631bea162800 127 pc.printf("modemCom::enviaDados[3], currentBank = %lu currentBankSending = %lu.\r\n",sdCard::currentBank,sdCard::currentBankSending);
brunofgc 13:b9183b4bc049 128 sdCard::getFileTam(&sdCard::bank0);
brunofgc 13:b9183b4bc049 129 sdCard::getFileTam(&sdCard::bank1);
brunofgc 13:b9183b4bc049 130 if((sdCard::bank0.bytes > 230400) || (sdCard::bank1.bytes > 230400)){
brunofgc 13:b9183b4bc049 131 pc.printf("Arquivo muito grande. Deletado.");
brunofgc 13:b9183b4bc049 132 sdCard::excluiArquivo(&sdCard::currentBankFile);
brunofgc 13:b9183b4bc049 133 sdCard::excluiArquivo(&sdCard::bank0);
brunofgc 13:b9183b4bc049 134 sdCard::excluiArquivo(&sdCard::bank1);
brunofgc 13:b9183b4bc049 135 return false;
brunofgc 13:b9183b4bc049 136 }
brunofgc 11:631bea162800 137 switch(sdCard::currentBankSending){
brunofgc 10:263c093f8977 138 case 0:
brunofgc 16:9a19ac33957e 139 if(sdCard::currentBank==0){
brunofgc 11:631bea162800 140 sdCard::modificaCurrentBank(1,0);
brunofgc 11:631bea162800 141 }
brunofgc 10:263c093f8977 142 pc.printf("modemCom::enviaDados[4].\r\n");
brunofgc 16:9a19ac33957e 143
brunofgc 16:9a19ac33957e 144 if(!sdCard::getFileTam(&sdCard::bank0)){
brunofgc 16:9a19ac33957e 145 sdCard::modificaCurrentBank(0,1);
brunofgc 16:9a19ac33957e 146 }else{
brunofgc 11:631bea162800 147 pc.printf("modemCom::enviaDados[11].\r\n");
brunofgc 18:1eefda1f7736 148 if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/drome/Parser/",&sdCard::bank0)){
brunofgc 16:9a19ac33957e 149 pc.printf("Enviado o bank0.\r\n");
brunofgc 16:9a19ac33957e 150 result = true;
brunofgc 10:263c093f8977 151 }
brunofgc 11:631bea162800 152 }
brunofgc 16:9a19ac33957e 153
brunofgc 0:1c0a769988ee 154 break;
brunofgc 10:263c093f8977 155 case 1:
brunofgc 13:b9183b4bc049 156 if(sdCard::currentBank==1){
brunofgc 11:631bea162800 157 sdCard::modificaCurrentBank(0,1);
brunofgc 11:631bea162800 158 }
brunofgc 11:631bea162800 159 pc.printf("modemCom::enviaDados[5].\r\n");
brunofgc 16:9a19ac33957e 160 if(!sdCard::getFileTam(&sdCard::bank1)){
brunofgc 16:9a19ac33957e 161 sdCard::modificaCurrentBank(1,0);
brunofgc 16:9a19ac33957e 162 }else{
brunofgc 16:9a19ac33957e 163 pc.printf("modemCom::enviaDados[12].\r\n");
brunofgc 18:1eefda1f7736 164 if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/drome/Parser/",&sdCard::bank1)){
brunofgc 16:9a19ac33957e 165 pc.printf("Enviado o bank1.\r\n");
brunofgc 16:9a19ac33957e 166 result = true;
brunofgc 10:263c093f8977 167 }
brunofgc 16:9a19ac33957e 168 }
brunofgc 11:631bea162800 169 break;
brunofgc 10:263c093f8977 170 case 2:
brunofgc 10:263c093f8977 171 pc.printf("modemCom::enviaDados[10].\r\n");
brunofgc 10:263c093f8977 172 modemCom::status.emComunicacao = false;
brunofgc 15:0f78bf9c13ec 173 result = false;
brunofgc 10:263c093f8977 174 break;
brunofgc 10:263c093f8977 175 }
brunofgc 0:1c0a769988ee 176 return result;
brunofgc 0:1c0a769988ee 177 }
brunofgc 0:1c0a769988ee 178
brunofgc 0:1c0a769988ee 179
brunofgc 0:1c0a769988ee 180
brunofgc 18:1eefda1f7736 181 uint8_t modemCom::postFileCommandMode(char *serverIP, char *host, char *uri, arquivoSD *arquivo)
brunofgc 0:1c0a769988ee 182 {
brunofgc 0:1c0a769988ee 183 #define maxRetentativasEnvioParteArquivo 20
brunofgc 0:1c0a769988ee 184 uint32_t numeroDePartes;
brunofgc 0:1c0a769988ee 185 uint16_t restoDoEnvio;
brunofgc 0:1c0a769988ee 186 int32_t parteSendoEnviada;
brunofgc 0:1c0a769988ee 187 uint16_t numeroByteSendoEnviado;
brunofgc 0:1c0a769988ee 188 uint16_t maxTentativas=0;
brunofgc 0:1c0a769988ee 189 //unsigned int result;
brunofgc 0:1c0a769988ee 190 char header[512];
brunofgc 0:1c0a769988ee 191 char aux[40];
brunofgc 0:1c0a769988ee 192 uint16_t headerTam;
brunofgc 0:1c0a769988ee 193 uint32_t dataTam=0;
brunofgc 0:1c0a769988ee 194 char c;
brunofgc 0:1c0a769988ee 195 bool passaParaProximaParte = false;
brunofgc 10:263c093f8977 196 char nomeArquivo[50];
brunofgc 12:95eb36d5e82d 197 uint32_t parteEnviadaAntes = 0;
brunofgc 10:263c093f8977 198 sdCard::deleteSentFiles = false;
brunofgc 10:263c093f8977 199
brunofgc 10:263c093f8977 200 if(strstr(arquivo->nome,"bank0.txt")||strstr(arquivo->nome,"bank1.txt")){
brunofgc 10:263c093f8977 201 strcpy(nomeArquivo,"/sd/RAD/envio.txt");
brunofgc 10:263c093f8977 202 }else{
brunofgc 10:263c093f8977 203 strcpy(nomeArquivo,arquivo->nome);
brunofgc 10:263c093f8977 204 }
brunofgc 0:1c0a769988ee 205
brunofgc 0:1c0a769988ee 206 //Para garantir que não seja duvidoso proveniente de outra conexão.
brunofgc 0:1c0a769988ee 207 modemCom::status.ServerAck=0;
brunofgc 0:1c0a769988ee 208 modemCom::status.NO_CARRIER=0;
brunofgc 11:631bea162800 209 modemCom::status.dnsError=0;
brunofgc 0:1c0a769988ee 210
brunofgc 11:631bea162800 211 pc.printf("Verificando tamanho de arquivo.\r\n");
brunofgc 8:9f8ad3dbeb87 212 if(arquivo->bytes==0){
brunofgc 0:1c0a769988ee 213 if((!sdCard::getFileTam(arquivo))||(arquivo->bytes == 0)){
brunofgc 7:ae9c47f62946 214 if(arquivo->bytes == 0){
brunofgc 7:ae9c47f62946 215 sdCard::excluiArquivo(arquivo);
brunofgc 7:ae9c47f62946 216 }
brunofgc 0:1c0a769988ee 217 return false;
brunofgc 0:1c0a769988ee 218 }
brunofgc 0:1c0a769988ee 219 }
brunofgc 0:1c0a769988ee 220
brunofgc 18:1eefda1f7736 221 pc.printf("Abrindo o socket em <%s>.\n",serverIP);
brunofgc 18:1eefda1f7736 222 sprintf(header,"AT+CIPSTART=1,\"TCP\",\"%s\",80\r\n",serverIP);
brunofgc 11:631bea162800 223 if(modemCom::sendToModem(header,1,&modemCom::status.OK,NULL,20000,3,1000)){
brunofgc 0:1c0a769988ee 224 modemCom::status.NO_CARRIER=0; //Socket Aberto!
brunofgc 0:1c0a769988ee 225 pc.printf("Aberto o socket em command mode.\n");
brunofgc 10:263c093f8977 226 pc.printf("Enviando arquivo com nome %s.\n",nomeArquivo);
brunofgc 0:1c0a769988ee 227 modemCom::status.serverConnected=1;
brunofgc 0:1c0a769988ee 228 modemCom::timeOutModem = 100;
brunofgc 0:1c0a769988ee 229 modemCom::status.emComunicacao = true;
brunofgc 0:1c0a769988ee 230 } else {
brunofgc 0:1c0a769988ee 231 pc.printf("Nao foi possivel Abrir o socket. Abortando tentativa.\n");
brunofgc 0:1c0a769988ee 232 modemCom::timeOutModem = 10;
brunofgc 0:1c0a769988ee 233 return 0;
brunofgc 0:1c0a769988ee 234 }
brunofgc 0:1c0a769988ee 235
brunofgc 0:1c0a769988ee 236 numeroDePartes = arquivo->bytes / numeroDeBytesPorEnvio;
brunofgc 0:1c0a769988ee 237 restoDoEnvio = arquivo->bytes % numeroDeBytesPorEnvio;
brunofgc 0:1c0a769988ee 238
brunofgc 3:9598af355293 239
brunofgc 3:9598af355293 240 pc.printf("Iniciando o envio do arquivo de %lu bytes\nnumeroDePartes = %lu\nrestoDoEnvio = %lu\n",arquivo->bytes,numeroDePartes,restoDoEnvio);
brunofgc 0:1c0a769988ee 241
brunofgc 0:1c0a769988ee 242 if(!sdCard::abreArquivo(arquivo,"r")){
brunofgc 7:ae9c47f62946 243 pc.printf("Nao foi posssivel abrir o arquivo de dentro da funcao postFileCommandMode().\n");
brunofgc 0:1c0a769988ee 244 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 245 return 0;
brunofgc 0:1c0a769988ee 246 }
brunofgc 0:1c0a769988ee 247
brunofgc 4:13ff9c81dc10 248
brunofgc 0:1c0a769988ee 249 //Monta Header aqui!
brunofgc 4:13ff9c81dc10 250 //application/octet-stream
brunofgc 10:263c093f8977 251 sprintf(header,"--xxBOUNDARYxx\r\nContent-Type: text/plain\r\nContent-Disposition: form-data; name=\"IMEI\"\r\n\r\n%s\r\n--xxBOUNDARYxx\r\nContent-Type: application/octet-stream\r\nContent-Disposition: form-data; name=\"file\"; filename=\"%s\"\r\n\r\n",modemCom::status.MAC,nomeArquivo);
brunofgc 0:1c0a769988ee 252
brunofgc 0:1c0a769988ee 253 dataTam = strlen(header);
brunofgc 0:1c0a769988ee 254 dataTam+=arquivo->bytes;
brunofgc 4:13ff9c81dc10 255 dataTam+= strlen("\r\n--xxBOUNDARYxx--");
brunofgc 0:1c0a769988ee 256 //"/drome/parser/index.php" uri drome
brunofgc 4:13ff9c81dc10 257 sprintf(header,"POST %s HTTP/1.1\r\nHost: %s\r\nContent-Type: multipart/form-data; boundary=xxBOUNDARYxx\r\nContent-Length: %lu\r\n\r\n",uri,host,dataTam);
brunofgc 0:1c0a769988ee 258 headerTam = strlen(header); //Pego o tamanho parcial para fazer a concatenaçao a fim de predizer o tamanho do post total
brunofgc 0:1c0a769988ee 259
brunofgc 10:263c093f8977 260 sprintf(&header[headerTam],"--xxBOUNDARYxx\r\nContent-Type: text/plain\r\nContent-Disposition: form-data; name=\"IMEI\"\r\n\r\n%s\r\n--xxBOUNDARYxx\r\nContent-Type: application/octet-stream\r\nContent-Disposition: form-data; name=\"file\"; filename=\"%s\"\r\n\r\n",modemCom::status.MAC,nomeArquivo);
brunofgc 0:1c0a769988ee 261 headerTam = strlen(header);
brunofgc 0:1c0a769988ee 262
brunofgc 0:1c0a769988ee 263 sprintf(aux,"AT+CIPSEND=1,%u\r\n",headerTam);
brunofgc 7:ae9c47f62946 264 if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,NULL,100,10,1)) {
brunofgc 7:ae9c47f62946 265 if(!modemCom::sendToModem(header,1,&modemCom::status.SEND_OK,NULL,1000,1,1)) {
brunofgc 0:1c0a769988ee 266 sdCard::fechaArquivo(arquivo);
brunofgc 0:1c0a769988ee 267 modemCom::status.emComunicacao = false;
brunofgc 3:9598af355293 268 pc.printf("Cabecalho http nao enviado.\n");
brunofgc 0:1c0a769988ee 269 return 0;
brunofgc 0:1c0a769988ee 270 } else {
brunofgc 3:9598af355293 271 pc.printf("Cabecalho http enviado.\n");
brunofgc 0:1c0a769988ee 272 }
brunofgc 0:1c0a769988ee 273 } else {
brunofgc 0:1c0a769988ee 274 pc.printf("Erro enviando arquivo.\n");
brunofgc 0:1c0a769988ee 275 sdCard::fechaArquivo(arquivo);
brunofgc 0:1c0a769988ee 276 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 277 return 0;
brunofgc 0:1c0a769988ee 278 }
brunofgc 0:1c0a769988ee 279
brunofgc 0:1c0a769988ee 280 //Enviando as partes inteiras
brunofgc 0:1c0a769988ee 281 maxTentativas = maxRetentativasEnvioParteArquivo;
brunofgc 0:1c0a769988ee 282 for(parteSendoEnviada=0; parteSendoEnviada<numeroDePartes; parteSendoEnviada++) {
brunofgc 0:1c0a769988ee 283 //Aqui realizo o envio de cada parte.
brunofgc 0:1c0a769988ee 284 passaParaProximaParte = false;
brunofgc 12:95eb36d5e82d 285 if((parteSendoEnviada%50)==0){
brunofgc 12:95eb36d5e82d 286 //Kick no watchdog
brunofgc 12:95eb36d5e82d 287 if(parteEnviadaAntes!=parteSendoEnviada){
brunofgc 12:95eb36d5e82d 288 diversos::wdt.kick(90.0);
brunofgc 12:95eb36d5e82d 289 parteEnviadaAntes=parteSendoEnviada;
brunofgc 12:95eb36d5e82d 290 pc.printf("Watchdog KICK!.");
brunofgc 12:95eb36d5e82d 291 }
brunofgc 12:95eb36d5e82d 292 }
brunofgc 0:1c0a769988ee 293 while((maxTentativas)&&(!passaParaProximaParte)) {
brunofgc 0:1c0a769988ee 294 sprintf(aux,"AT+CIPSEND=1,%u\r\n",numeroDeBytesPorEnvio);
brunofgc 7:ae9c47f62946 295 if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,NULL,100,20,1)) {
brunofgc 0:1c0a769988ee 296 if(maxTentativas!=maxRetentativasEnvioParteArquivo) {
brunofgc 0:1c0a769988ee 297 //Estou realizando reenvio desta parte logo preciso fazer fseek para a quantidade de bytes do envio anterior
brunofgc 0:1c0a769988ee 298 fseek(arquivo->fp,-numeroDeBytesPorEnvio,SEEK_CUR);
brunofgc 0:1c0a769988ee 299 }
brunofgc 3:9598af355293 300 pc.printf("Numero de bytes por envio = %lu.\r\n",numeroDeBytesPorEnvio);
brunofgc 0:1c0a769988ee 301 for(numeroByteSendoEnviado=0; numeroByteSendoEnviado<(numeroDeBytesPorEnvio); numeroByteSendoEnviado++) {
brunofgc 0:1c0a769988ee 302 c = fgetc(arquivo->fp);
brunofgc 0:1c0a769988ee 303 modem.printf("%c",c);
brunofgc 0:1c0a769988ee 304 #ifdef xereta_modem
brunofgc 4:13ff9c81dc10 305 pc.printf("%c",c);
brunofgc 0:1c0a769988ee 306 #endif
brunofgc 0:1c0a769988ee 307 }
brunofgc 0:1c0a769988ee 308
brunofgc 7:ae9c47f62946 309 if(modemCom::sendToModem(NULL,1,&modemCom::status.SEND_OK,NULL,5000,1,1)) {
brunofgc 0:1c0a769988ee 310 diversos::progressBar(parteSendoEnviada,numeroDePartes);
brunofgc 0:1c0a769988ee 311 //Preciso verificar se o buffer esvaziou. Se deu "flush"
brunofgc 0:1c0a769988ee 312 //if(modemCom::aguardaFlush(0)==1) {
brunofgc 0:1c0a769988ee 313 //passa pra proxima parte
brunofgc 0:1c0a769988ee 314 passaParaProximaParte = true;
brunofgc 0:1c0a769988ee 315 maxTentativas = maxRetentativasEnvioParteArquivo;
brunofgc 0:1c0a769988ee 316 } else {
brunofgc 0:1c0a769988ee 317 maxTentativas--;
brunofgc 0:1c0a769988ee 318 if(maxTentativas == 1) {
brunofgc 0:1c0a769988ee 319 pc.printf("MaxTentativas dentro de envio das partes == 1, vou aguardar o flush.\n");
brunofgc 0:1c0a769988ee 320 }
brunofgc 0:1c0a769988ee 321 if(maxTentativas == 0) {
brunofgc 0:1c0a769988ee 322 sdCard::fechaArquivo(arquivo);
brunofgc 0:1c0a769988ee 323 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 324 return 0;
brunofgc 0:1c0a769988ee 325 }
brunofgc 0:1c0a769988ee 326 }
brunofgc 0:1c0a769988ee 327 } else {
brunofgc 0:1c0a769988ee 328 pc.printf("Erro enviando o arquivo nao recebeu a tentativa de envio de parte inteira.\n");
brunofgc 0:1c0a769988ee 329 sdCard::fechaArquivo(arquivo);
brunofgc 0:1c0a769988ee 330 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 331 return 0;
brunofgc 0:1c0a769988ee 332 }
brunofgc 0:1c0a769988ee 333 }
brunofgc 0:1c0a769988ee 334 if(!passaParaProximaParte) {
brunofgc 0:1c0a769988ee 335 pc.printf("Erro enviando o arquivo nao recebeu a tentativa de envio de parte inteira.\n");
brunofgc 0:1c0a769988ee 336 sdCard::fechaArquivo(arquivo);
brunofgc 0:1c0a769988ee 337 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 338 return 0;
brunofgc 0:1c0a769988ee 339 }
brunofgc 0:1c0a769988ee 340 }
brunofgc 0:1c0a769988ee 341
brunofgc 0:1c0a769988ee 342 //Enviando o resto
brunofgc 0:1c0a769988ee 343 passaParaProximaParte = false;
brunofgc 0:1c0a769988ee 344 maxTentativas = maxRetentativasEnvioParteArquivo;
brunofgc 0:1c0a769988ee 345 while((maxTentativas)&&(!passaParaProximaParte)) {
brunofgc 4:13ff9c81dc10 346 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
brunofgc 7:ae9c47f62946 347 if(modemCom::sendToModem(aux,1,&modemCom::status.PROMPT_ENVIO_COMMAND_MODE,NULL,100,3,1)) {
brunofgc 0:1c0a769988ee 348 for(numeroByteSendoEnviado=0; numeroByteSendoEnviado<restoDoEnvio; numeroByteSendoEnviado++) {
brunofgc 0:1c0a769988ee 349 //Envio os bytes aqui! Menos o ultimo para ter o check;
brunofgc 0:1c0a769988ee 350 c = fgetc(arquivo->fp);
brunofgc 0:1c0a769988ee 351 modem.printf("%c",c);
brunofgc 0:1c0a769988ee 352 #ifdef xereta_modem
brunofgc 0:1c0a769988ee 353 pc.printf("%c",c);
brunofgc 0:1c0a769988ee 354 #endif
brunofgc 0:1c0a769988ee 355 }
brunofgc 7:ae9c47f62946 356 if(modemCom::sendToModem("\r\n--xxBOUNDARYxx--\r\n\r\n",1,&modemCom::status.SEND_OK,NULL,5000,1,1)) {
brunofgc 0:1c0a769988ee 357 if(numeroDePartes) {
brunofgc 0:1c0a769988ee 358 diversos::progressBar(parteSendoEnviada,numeroDePartes);
brunofgc 0:1c0a769988ee 359 }
brunofgc 0:1c0a769988ee 360 passaParaProximaParte = true;
brunofgc 0:1c0a769988ee 361 pc.printf("\nEnviado o resto do envio com fim de cabecalho!\n",parteSendoEnviada);
brunofgc 0:1c0a769988ee 362 modemCom::timeOutModem = 250;
brunofgc 0:1c0a769988ee 363 //}
brunofgc 0:1c0a769988ee 364 /*else {
brunofgc 0:1c0a769988ee 365 pc.printf("Erro enviando arquivo.\n");
brunofgc 0:1c0a769988ee 366 fclose(fp);
brunofgc 0:1c0a769988ee 367 *aberto = false;
brunofgc 0:1c0a769988ee 368 return 0;
brunofgc 0:1c0a769988ee 369 }*/
brunofgc 0:1c0a769988ee 370 } else {
brunofgc 0:1c0a769988ee 371 sdCard::fechaArquivo(arquivo);
brunofgc 0:1c0a769988ee 372 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 373 return 0;
brunofgc 0:1c0a769988ee 374 }
brunofgc 0:1c0a769988ee 375 } else {
brunofgc 0:1c0a769988ee 376 maxTentativas--;
brunofgc 7:ae9c47f62946 377 modemCom::sendToModem("AT\r\n",1,&modemCom::status.OK,NULL,1000,100,1);
brunofgc 0:1c0a769988ee 378 }
brunofgc 0:1c0a769988ee 379 }
brunofgc 0:1c0a769988ee 380
brunofgc 0:1c0a769988ee 381 if(!passaParaProximaParte) {
brunofgc 0:1c0a769988ee 382 pc.printf("Erro enviando o arquivo nao recebeu a tentativa de envio de parte inteira.\n");
brunofgc 0:1c0a769988ee 383 sdCard::fechaArquivo(arquivo);
brunofgc 0:1c0a769988ee 384 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 385 return 0;
brunofgc 0:1c0a769988ee 386 }
brunofgc 0:1c0a769988ee 387
brunofgc 9:cf406384efd9 388 sdCard::fechaArquivo(arquivo);
brunofgc 9:cf406384efd9 389
brunofgc 0:1c0a769988ee 390 //Logica de timeout esperando confirmação modemCom::status.ServerAck 20 segundos
brunofgc 10:263c093f8977 391 parteSendoEnviada = 50;
brunofgc 0:1c0a769988ee 392 while((parteSendoEnviada)&&(!modemCom::status.ServerAck)&&(!modemCom::status.NO_CARRIER)) {
brunofgc 0:1c0a769988ee 393 osDelay(100);
brunofgc 0:1c0a769988ee 394 parteSendoEnviada--;
brunofgc 0:1c0a769988ee 395 }
brunofgc 0:1c0a769988ee 396
brunofgc 9:cf406384efd9 397 modemCom::status.serverConnected=0;
brunofgc 0:1c0a769988ee 398 //modemCom::sendToModem("AT+CIPCLOSE=1\r\n",1,&modemCom::status.OK,500,3);
brunofgc 0:1c0a769988ee 399 modemCom::closeConnection(1);
brunofgc 0:1c0a769988ee 400 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 401 return modemCom::status.ServerAck;
brunofgc 0:1c0a769988ee 402 }
brunofgc 0:1c0a769988ee 403
brunofgc 7:ae9c47f62946 404 uint8_t modemCom::sendToModem(char *string,uint8_t confirmado,char *codigoConfirmacao,char *stringConfirmacao,uint16_t timeOut,uint8_t maxTentativas,uint16_t delayEntreTentativas)
brunofgc 0:1c0a769988ee 405 {
brunofgc 0:1c0a769988ee 406 uint16_t timeOutProcesso;
brunofgc 21:b9315cdd9275 407 uint16_t indexString,strLen; //Para exibir retentativas!
brunofgc 7:ae9c47f62946 408
brunofgc 0:1c0a769988ee 409 while(maxTentativas){
brunofgc 0:1c0a769988ee 410 timeOutProcesso=timeOut;
brunofgc 7:ae9c47f62946 411
brunofgc 7:ae9c47f62946 412
brunofgc 7:ae9c47f62946 413 bufModem.del(); //Deletando o buffer antes de iniciar envio
brunofgc 7:ae9c47f62946 414
brunofgc 0:1c0a769988ee 415 if(string!=NULL) {
brunofgc 7:ae9c47f62946 416 modem.puts(string);
brunofgc 7:ae9c47f62946 417 #ifdef xereta_modem
brunofgc 7:ae9c47f62946 418 pc.printf("Sai pro modem <%s>\n",string); //Enviando na serial PC para debug
brunofgc 7:ae9c47f62946 419 #endif
brunofgc 0:1c0a769988ee 420 }
brunofgc 7:ae9c47f62946 421 if(confirmado==1){
brunofgc 0:1c0a769988ee 422 modemCom::status.ERROR=0;
brunofgc 7:ae9c47f62946 423 modemCom::status.busy=0;
brunofgc 7:ae9c47f62946 424
brunofgc 7:ae9c47f62946 425 if(codigoConfirmacao!=NULL){
brunofgc 7:ae9c47f62946 426 *codigoConfirmacao=0;
brunofgc 7:ae9c47f62946 427 while((timeOutProcesso)&&(!(*codigoConfirmacao))&&(!modemCom::status.ERROR)&&(!modemCom::status.busy)){
brunofgc 7:ae9c47f62946 428 osDelay(5); //timeOut em mS
brunofgc 7:ae9c47f62946 429 timeOutProcesso--;
brunofgc 7:ae9c47f62946 430 }
brunofgc 7:ae9c47f62946 431 }else{
brunofgc 7:ae9c47f62946 432 while((timeOutProcesso)&&(!modemCom::status.ERROR)&&(!modemCom::status.busy)&&(!strstr(bufModem.getRowBuffer(),stringConfirmacao))) {
brunofgc 7:ae9c47f62946 433 osDelay(1); //timeOut em mS
brunofgc 7:ae9c47f62946 434 timeOutProcesso--;
brunofgc 7:ae9c47f62946 435 }
brunofgc 7:ae9c47f62946 436 }
brunofgc 7:ae9c47f62946 437 if(modemCom::status.ERROR||modemCom::status.busy) {
brunofgc 7:ae9c47f62946 438 osDelay(1000);//espera 1S
brunofgc 0:1c0a769988ee 439 }
brunofgc 7:ae9c47f62946 440
brunofgc 11:631bea162800 441 if(modemCom::status.dnsError){
brunofgc 11:631bea162800 442 modemCom::status.dnsError=false;
brunofgc 11:631bea162800 443 return 0;
brunofgc 11:631bea162800 444 }
brunofgc 11:631bea162800 445
brunofgc 21:b9315cdd9275 446 if(timeOutProcesso) {
brunofgc 21:b9315cdd9275 447 if(confirmado==1){
brunofgc 21:b9315cdd9275 448 if(!(*codigoConfirmacao)){return 0;}
brunofgc 21:b9315cdd9275 449 }else{
brunofgc 21:b9315cdd9275 450 if(!strstr(bufModem.getRowBuffer(),stringConfirmacao)){return 0;}
brunofgc 21:b9315cdd9275 451 }
brunofgc 0:1c0a769988ee 452 return maxTentativas;
brunofgc 7:ae9c47f62946 453 }
brunofgc 7:ae9c47f62946 454
brunofgc 0:1c0a769988ee 455 strLen = strlen(string);
brunofgc 0:1c0a769988ee 456 for(indexString=0; indexString<(strLen-1); indexString++) {
brunofgc 0:1c0a769988ee 457 pc.putc(string[indexString]);
brunofgc 0:1c0a769988ee 458 }
brunofgc 7:ae9c47f62946 459 #ifdef xereta_modem
brunofgc 7:ae9c47f62946 460 pc.printf("> maxTentativas = %lu.\n",maxTentativas);
brunofgc 7:ae9c47f62946 461 #endif
brunofgc 22:cb832a9bc704 462 }else{return 1;}
brunofgc 7:ae9c47f62946 463 maxTentativas--;
brunofgc 7:ae9c47f62946 464 osDelay(delayEntreTentativas);
brunofgc 7:ae9c47f62946 465 }
brunofgc 0:1c0a769988ee 466 return 0;
brunofgc 0:1c0a769988ee 467 }
brunofgc 0:1c0a769988ee 468
brunofgc 0:1c0a769988ee 469 bool modemCom::closeConnection(uint8_t id){
brunofgc 0:1c0a769988ee 470 char command[20];
brunofgc 15:0f78bf9c13ec 471 pc.printf("Lido %u como sendo o id em closeConnection.\r\n",id);
brunofgc 15:0f78bf9c13ec 472
brunofgc 0:1c0a769988ee 473 sprintf(command,"AT+CIPCLOSE=%u\r\n",id);
brunofgc 9:cf406384efd9 474 return modemCom::sendToModem(command,1,NULL,",CLOSED",500,3,1);
brunofgc 0:1c0a769988ee 475 }
brunofgc 0:1c0a769988ee 476
brunofgc 0:1c0a769988ee 477 char modemCom::cipSend(uint8_t connID,char *buffer,uint16_t len){
brunofgc 0:1c0a769988ee 478 char aux[20];
brunofgc 0:1c0a769988ee 479 uint16_t i;
brunofgc 0:1c0a769988ee 480 if(!len){
brunofgc 0:1c0a769988ee 481 len = strlen(buffer);
brunofgc 0:1c0a769988ee 482 }
brunofgc 0:1c0a769988ee 483 printf("conteudo de cipsend.<");
brunofgc 0:1c0a769988ee 484 sprintf(aux,"AT+CIPSENDEX=%u,%lu\r\n",connID,len);
brunofgc 7:ae9c47f62946 485 if(sendToModem(aux,1,&modemCom::status.OK,NULL,500,1,1)){
brunofgc 0:1c0a769988ee 486 for(i=0;i<len;i++){
brunofgc 0:1c0a769988ee 487 modem.putc(buffer[i]);
brunofgc 0:1c0a769988ee 488 pc.putc(buffer[i]);
brunofgc 0:1c0a769988ee 489 }
brunofgc 0:1c0a769988ee 490 }else{
brunofgc 0:1c0a769988ee 491 return 0;
brunofgc 0:1c0a769988ee 492 }
brunofgc 0:1c0a769988ee 493 printf(">\r\n");
brunofgc 7:ae9c47f62946 494 if(sendToModem("",1,&modemCom::status.SEND_OK,NULL,2000,1,1)){
brunofgc 0:1c0a769988ee 495 return 1;
brunofgc 0:1c0a769988ee 496 }
brunofgc 0:1c0a769988ee 497 return 2;
brunofgc 0:1c0a769988ee 498 }
brunofgc 0:1c0a769988ee 499
brunofgc 15:0f78bf9c13ec 500 void modemCom::webServer(uint8_t id){
brunofgc 9:cf406384efd9 501 //char auxMsg[50];
brunofgc 9:cf406384efd9 502 bool encontrado=0;
brunofgc 18:1eefda1f7736 503 char buf[1024];
brunofgc 9:cf406384efd9 504 //uint32_t aux_int;
brunofgc 9:cf406384efd9 505
brunofgc 9:cf406384efd9 506 if(strstr(webServerBuff,"favicon.ico")){
brunofgc 9:cf406384efd9 507 //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>");
brunofgc 18:1eefda1f7736 508 sprintf(buf,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE html><html><body><link rel=\"icon\" href=\"http://%s/drome/assets/local/images/favicon/favicon.ico\" type=\"image/x-icon\"></body></html>",modemCom::status.host);
brunofgc 15:0f78bf9c13ec 509 if(cipSend(id,buf,0)==1){
brunofgc 9:cf406384efd9 510 printf("Requisicao enviada!\n");
brunofgc 9:cf406384efd9 511 }else{
brunofgc 9:cf406384efd9 512 printf("Requisicao nao enviada 1!!\n");
brunofgc 9:cf406384efd9 513 }
brunofgc 9:cf406384efd9 514 encontrado = 1;
brunofgc 9:cf406384efd9 515 }
brunofgc 9:cf406384efd9 516
brunofgc 9:cf406384efd9 517 if(strstr(webServerBuff,"comandos.htm")&&(!encontrado)){
brunofgc 9:cf406384efd9 518
brunofgc 9:cf406384efd9 519 //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>");
brunofgc 18:1eefda1f7736 520 sprintf(buf,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE html><html><head><title>ConfigRede DROME</title></head><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>");
brunofgc 15:0f78bf9c13ec 521 if(cipSend(id,buf,0)==1){
brunofgc 9:cf406384efd9 522 printf("Requisicao enviada!\n");
brunofgc 9:cf406384efd9 523 }else{
brunofgc 9:cf406384efd9 524 printf("Requisicao nao enviada 1!!\n");
brunofgc 9:cf406384efd9 525 }
brunofgc 9:cf406384efd9 526 encontrado = 1;
brunofgc 9:cf406384efd9 527 }
brunofgc 9:cf406384efd9 528
brunofgc 9:cf406384efd9 529 if(strstr(webServerBuff,"configRede.htm")&&(!encontrado)){
brunofgc 9:cf406384efd9 530 //Pegando o IP
brunofgc 21:b9315cdd9275 531 modemCom::leIP();
brunofgc 21:b9315cdd9275 532 sprintf(buf,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE html><html><head><title>ConfigRede DROME</title></head><body><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>ServerIP:<br><input type='text' name='serverIP' value='%s'><br>Host:<br><input type='text' name='host' value='%s'><br>Periodo<br><input type='text' name='periodo' value='%lu'><br>IP<br><input type='text' name='STAIP' value='%s'><br>Mascara de Sub Rede<br><input type='text' name='subnetmask' value='%s'><br>Gateway/dhcp<br><input type='text' name='gateway' value='%s'><br><input type='submit' value='Configurar'></fieldset></form></body>",modemCom::status.ssid,modemCom::status.password,modemCom::status.port,modemCom::status.serverIP,modemCom::status.host,modemCom::status.periodo,modemCom::status.STAIP,modemCom::status.subnetmask,modemCom::status.gateway);
brunofgc 15:0f78bf9c13ec 533 cipSend(id,buf,0);
brunofgc 9:cf406384efd9 534 encontrado = 1;
brunofgc 9:cf406384efd9 535 }
brunofgc 9:cf406384efd9 536
brunofgc 20:da1b8d80ba00 537 if(strstr(webServerBuff,"lecomandocontrole.htm")&&(!encontrado)){
brunofgc 20:da1b8d80ba00 538 uint16_t timeout = 5000;
brunofgc 20:da1b8d80ba00 539
brunofgc 9:cf406384efd9 540 IrDetect.reset();
brunofgc 9:cf406384efd9 541 IrDetect.start();
brunofgc 20:da1b8d80ba00 542
brunofgc 20:da1b8d80ba00 543 diversos::wdt.kick(360.0);
brunofgc 21:b9315cdd9275 544 ledUsoGeral = true;
brunofgc 9:cf406384efd9 545 while((IrDetect.read_ms()<timeout) && (!detectaIRIn()));
brunofgc 9:cf406384efd9 546 if(IrDetect.read_ms()<timeout){
brunofgc 9:cf406384efd9 547 serializaPacoteIR(modemCom::status.connIDWebServer);
brunofgc 9:cf406384efd9 548 }else{
brunofgc 18:1eefda1f7736 549 sprintf(buf,"HTTP/1.1 200 OK\r\nContent-Type: text\r\n\r\nerro");
brunofgc 15:0f78bf9c13ec 550 if(cipSend(id,buf,0)==1){
brunofgc 9:cf406384efd9 551 printf("Requisicao enviada!\n");
brunofgc 9:cf406384efd9 552 }
brunofgc 9:cf406384efd9 553 }
brunofgc 21:b9315cdd9275 554 IrDetect.stop();
brunofgc 21:b9315cdd9275 555 ledUsoGeral = false;
brunofgc 9:cf406384efd9 556 encontrado = 1;
brunofgc 9:cf406384efd9 557 }
brunofgc 9:cf406384efd9 558
brunofgc 9:cf406384efd9 559 if(strstr(webServerBuff,"cwjap.htm")&&(!encontrado)){
brunofgc 18:1eefda1f7736 560 pc.printf("Lido de cwjap <%s>.\r\n\r\n",webServerBuff);
brunofgc 9:cf406384efd9 561
brunofgc 9:cf406384efd9 562 strtok(webServerBuff,"=");
brunofgc 9:cf406384efd9 563 strcpy(modemCom::status.ssid,strtok(NULL,"&")); //pegando ssid
brunofgc 9:cf406384efd9 564
brunofgc 9:cf406384efd9 565 strtok(NULL,"=");
brunofgc 9:cf406384efd9 566 strcpy(modemCom::status.password,strtok(NULL,"&")); //pegando password
brunofgc 18:1eefda1f7736 567
brunofgc 18:1eefda1f7736 568 strtok(NULL,"=");
brunofgc 18:1eefda1f7736 569 strcpy(modemCom::status.port,strtok(NULL,"&")); //pegando port
brunofgc 9:cf406384efd9 570
brunofgc 9:cf406384efd9 571 strtok(NULL,"=");
brunofgc 18:1eefda1f7736 572 strcpy(modemCom::status.serverIP,strtok(NULL,"&")); //pegando serverIP
brunofgc 9:cf406384efd9 573
brunofgc 9:cf406384efd9 574 strtok(NULL,"=");
brunofgc 9:cf406384efd9 575 strcpy(modemCom::status.host,strtok(NULL,"&")); //pegando host
brunofgc 9:cf406384efd9 576
brunofgc 9:cf406384efd9 577 strtok(NULL,"=");
brunofgc 21:b9315cdd9275 578 strcpy(buf,strtok(NULL,"&")); //pegando periodo
brunofgc 9:cf406384efd9 579 modemCom::status.periodo = atoi(buf);
brunofgc 18:1eefda1f7736 580 modemCom::status.periodoConfiguracao = modemCom::status.periodo;
brunofgc 9:cf406384efd9 581
brunofgc 21:b9315cdd9275 582 //*************************IP ou DHCP****************************
brunofgc 21:b9315cdd9275 583
brunofgc 21:b9315cdd9275 584 strtok(NULL,"=");
brunofgc 21:b9315cdd9275 585 strcpy(modemCom::status.STAIP,strtok(NULL,"&")); //pegando IP/DHCP
brunofgc 21:b9315cdd9275 586
brunofgc 21:b9315cdd9275 587 strtok(NULL,"=");
brunofgc 21:b9315cdd9275 588 strcpy(modemCom::status.subnetmask,strtok(NULL,"&")); //pegando subnetmask
brunofgc 21:b9315cdd9275 589
brunofgc 21:b9315cdd9275 590 strtok(NULL,"=");
brunofgc 21:b9315cdd9275 591 strcpy(modemCom::status.gateway,strtok(NULL," ")); //pegando gateway
brunofgc 21:b9315cdd9275 592
brunofgc 21:b9315cdd9275 593
brunofgc 21:b9315cdd9275 594
brunofgc 9:cf406384efd9 595 pc.printf("Antes <%s>.\r\n",modemCom::status.ssid);
brunofgc 21:b9315cdd9275 596 diversos::strReplace(modemCom::status.ssid,"%%20"," ");
brunofgc 9:cf406384efd9 597 pc.printf("Tirado %%20 <%s>.\r\n",modemCom::status.ssid);
brunofgc 21:b9315cdd9275 598 pc.printf("Antes <%s>.\r\n",modemCom::status.ssid);
brunofgc 21:b9315cdd9275 599 diversos::strReplace(modemCom::status.ssid,"%%40","@");
brunofgc 21:b9315cdd9275 600 pc.printf("Tirado %%40 <%s>.\r\n",modemCom::status.ssid);
brunofgc 9:cf406384efd9 601 diversos::strReplace(modemCom::status.ssid,"+"," ");
brunofgc 21:b9315cdd9275 602 pc.printf("Tirado + <%s>.\r\n",modemCom::status.ssid);
brunofgc 21:b9315cdd9275 603
brunofgc 21:b9315cdd9275 604 pc.printf("Antes <%s>.\r\n",modemCom::status.password);
brunofgc 21:b9315cdd9275 605 diversos::strReplace(modemCom::status.password,"%%20"," ");
brunofgc 21:b9315cdd9275 606 pc.printf("Tirado %%20 <%s>.\r\n",modemCom::status.password);
brunofgc 21:b9315cdd9275 607 pc.printf("Antes <%s>.\r\n",modemCom::status.password);
brunofgc 21:b9315cdd9275 608 diversos::strReplace(modemCom::status.password,"%%40","@");
brunofgc 21:b9315cdd9275 609 pc.printf("Tirado %%40 <%s>.\r\n",modemCom::status.password);
brunofgc 21:b9315cdd9275 610 diversos::strReplace(modemCom::status.password,"+"," ");
brunofgc 21:b9315cdd9275 611 pc.printf("Tirado + <%s>.\r\n",modemCom::status.password);
brunofgc 9:cf406384efd9 612
brunofgc 9:cf406384efd9 613 if((modemCom::status.ssid[0]!=0) && (modemCom::status.password[0]!=0)){
brunofgc 9:cf406384efd9 614 sprintf(buf,"HTTP/1.1 200 OK\n\nACK");
brunofgc 9:cf406384efd9 615 mudaRede = true;
brunofgc 9:cf406384efd9 616 }else{
brunofgc 9:cf406384efd9 617 sprintf(buf,"HTTP/1.1 200 OK\n\nNACK");
brunofgc 9:cf406384efd9 618 }
brunofgc 15:0f78bf9c13ec 619 cipSend(id,buf,0);
brunofgc 9:cf406384efd9 620 encontrado = 1;
brunofgc 9:cf406384efd9 621 }
brunofgc 9:cf406384efd9 622
brunofgc 9:cf406384efd9 623 if(!encontrado){
brunofgc 9:cf406384efd9 624 sprintf(buf,"Pagina Nao Encontrada.");
brunofgc 15:0f78bf9c13ec 625 if(cipSend(id,buf,0)==1){
brunofgc 9:cf406384efd9 626 printf("Requisicao enviada!\n");
brunofgc 9:cf406384efd9 627 }else{
brunofgc 9:cf406384efd9 628 printf("Requisicao nao enviada 3!!\n");
brunofgc 9:cf406384efd9 629 }
brunofgc 9:cf406384efd9 630 }
brunofgc 22:cb832a9bc704 631 pc.printf("Fechando socket chave 3.\r\n");
brunofgc 15:0f78bf9c13ec 632 modemCom::closeConnection(id);
brunofgc 9:cf406384efd9 633 if(mudaRede){
brunofgc 9:cf406384efd9 634 mudaRede = false;
brunofgc 9:cf406384efd9 635 modemCom::sendToModem("AT+CIPSERVER=0\r\n",1,&modemCom::status.OK,NULL,2000,1,1);
brunofgc 21:b9315cdd9275 636 pc.printf("Mudando para rede:\r\nSSID:%s\r\nPASSWORD:%S\r\nPORTA:%s\r\nserverIP:%s\r\nHOST:%s\r\nPERIODO:%lu\r\nIP/DHCP:%s\r\nsubnetmask:%s\r\ngateway:%s\r\n\r\n",modemCom::status.ssid,modemCom::status.password,modemCom::status.port,modemCom::status.serverIP,modemCom::status.host,modemCom::status.periodo,modemCom::status.STAIP,modemCom::status.subnetmask,modemCom::status.gateway);
brunofgc 21:b9315cdd9275 637
brunofgc 21:b9315cdd9275 638 if(strstr(modemCom::status.gateway,"dhcp")){
brunofgc 21:b9315cdd9275 639 strcpy(modemCom::status.STAIP,"dhcp");
brunofgc 21:b9315cdd9275 640 strcpy(modemCom::status.subnetmask,"dhcp");
brunofgc 21:b9315cdd9275 641 }
brunofgc 21:b9315cdd9275 642
brunofgc 9:cf406384efd9 643 if(sdCard::abreArquivo(&sdCard::config,"w")){
brunofgc 9:cf406384efd9 644 pc.printf("Guardando config.\r\n");
brunofgc 21:b9315cdd9275 645 fprintf(sdCard::config.fp,"SSID:%s\r\nPASSWORD:%s\r\nPORT:%s\r\nserverIP:%s\r\nHOST:%s\r\nPERIODO:%lu\r\nSTAIP:%s\r\nsubnetmask:%s\r\ngateway:%s\r\n",modemCom::status.ssid,modemCom::status.password,modemCom::status.port,modemCom::status.serverIP,modemCom::status.host,modemCom::status.periodo,modemCom::status.STAIP,modemCom::status.subnetmask,modemCom::status.gateway);
brunofgc 9:cf406384efd9 646 sdCard::fechaArquivo(&sdCard::config);
brunofgc 15:0f78bf9c13ec 647 modemCom::inicializaModem();
brunofgc 9:cf406384efd9 648 modemCom::conectaWiFi();
brunofgc 9:cf406384efd9 649 }
brunofgc 9:cf406384efd9 650 }
brunofgc 9:cf406384efd9 651 }
brunofgc 9:cf406384efd9 652
brunofgc 7:ae9c47f62946 653 bool modemCom::leIP(void){
brunofgc 7:ae9c47f62946 654 char *ptr;
brunofgc 7:ae9c47f62946 655 sendToModem("AT+CIFSR\r\n",1,NULL,"+CIFSR:STAIP,",200,1,1);
brunofgc 18:1eefda1f7736 656 pc.printf("Lido de leIP <%s>.\r\n",modemCom::bufIn);
brunofgc 7:ae9c47f62946 657 ptr=strstr(modemCom::bufIn,"+CIFSR:STAIP,");
brunofgc 7:ae9c47f62946 658 if(ptr) {
brunofgc 7:ae9c47f62946 659 ptr = strtok(ptr,"\"");
brunofgc 7:ae9c47f62946 660 ptr = strtok(NULL,"\"");
brunofgc 7:ae9c47f62946 661 strcpy(modemCom::status.STAIP,ptr);
brunofgc 7:ae9c47f62946 662 }
brunofgc 7:ae9c47f62946 663 if(strstr(modemCom::status.STAIP,"0.0.0.0")){return false;}
brunofgc 7:ae9c47f62946 664 return true;
brunofgc 7:ae9c47f62946 665 }
brunofgc 7:ae9c47f62946 666
brunofgc 1:0e0967c88590 667 int16_t modemCom::getRSSI(void){
brunofgc 9:cf406384efd9 668 char *ptr;
brunofgc 15:0f78bf9c13ec 669 int16_t RSSI = 255;
brunofgc 15:0f78bf9c13ec 670
brunofgc 15:0f78bf9c13ec 671 if(modemCom::sendToModem("AT+CWJAP?\r\n",1,&modemCom::status.OK,NULL,10000,2,1000)){
brunofgc 1:0e0967c88590 672 ptr = strstr(modemCom::bufIn,(const char*)modemCom::status.ssid);
brunofgc 1:0e0967c88590 673 if(ptr){
brunofgc 15:0f78bf9c13ec 674 ptr = strtok(ptr,","); //Descarta SSID
brunofgc 15:0f78bf9c13ec 675 ptr = strtok(NULL,","); //Descarta MAC
brunofgc 15:0f78bf9c13ec 676 ptr = strtok(NULL,","); //Descarta Canal
brunofgc 15:0f78bf9c13ec 677 ptr = strtok(NULL,","); //Captura RSSI
brunofgc 1:0e0967c88590 678 RSSI = atoi(ptr);
brunofgc 1:0e0967c88590 679 }
brunofgc 1:0e0967c88590 680 }
brunofgc 9:cf406384efd9 681 return RSSI;
brunofgc 9:cf406384efd9 682 //return -50;
brunofgc 1:0e0967c88590 683 }
brunofgc 7:ae9c47f62946 684
brunofgc 7:ae9c47f62946 685 bool modemCom::verificaConexao(void){
brunofgc 7:ae9c47f62946 686 uint8_t i = 1;
brunofgc 7:ae9c47f62946 687 while(i){
brunofgc 15:0f78bf9c13ec 688 if(modemCom::getRSSI()==255){
brunofgc 15:0f78bf9c13ec 689 if(modemCom::conectaWiFi()){
brunofgc 15:0f78bf9c13ec 690 return true;
brunofgc 15:0f78bf9c13ec 691 }
brunofgc 7:ae9c47f62946 692 i--;
brunofgc 7:ae9c47f62946 693 }else{
brunofgc 7:ae9c47f62946 694 return true;
brunofgc 7:ae9c47f62946 695 }
brunofgc 7:ae9c47f62946 696 }
brunofgc 7:ae9c47f62946 697 return false;
brunofgc 7:ae9c47f62946 698 }
brunofgc 0:1c0a769988ee 699
brunofgc 15:0f78bf9c13ec 700 bool modemCom::conectaWiFi(void){
brunofgc 0:1c0a769988ee 701 //Função para mudança de rede
brunofgc 15:0f78bf9c13ec 702
brunofgc 15:0f78bf9c13ec 703 char aux[128];
brunofgc 21:b9315cdd9275 704 //modemCom::leParametrosConexaoSDCard();
brunofgc 15:0f78bf9c13ec 705 //AT+CWJAP=\"\",\"\"\r\n
brunofgc 15:0f78bf9c13ec 706 sprintf(aux,"AT+CWJAP=\"%s\",\"%s\"\r\n",modemCom::status.ssid,modemCom::status.password);
brunofgc 15:0f78bf9c13ec 707 if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,10000,1,1)) {
brunofgc 15:0f78bf9c13ec 708 pc.printf("WiFi Conectado.\n");
brunofgc 15:0f78bf9c13ec 709 return true;
brunofgc 15:0f78bf9c13ec 710 }else{
brunofgc 15:0f78bf9c13ec 711 return false;
brunofgc 15:0f78bf9c13ec 712 }
brunofgc 15:0f78bf9c13ec 713 }
brunofgc 15:0f78bf9c13ec 714
brunofgc 15:0f78bf9c13ec 715 void modemCom::processaPacote(void const *args){
brunofgc 15:0f78bf9c13ec 716 char *ptr,*scanPtr;
brunofgc 15:0f78bf9c13ec 717 uint16_t bufInLength = bufModem.getLength();
brunofgc 15:0f78bf9c13ec 718 uint16_t timeOut;
brunofgc 15:0f78bf9c13ec 719 //bool getFound=false;
brunofgc 15:0f78bf9c13ec 720 modemCom::bufIn = bufModem.get();
brunofgc 15:0f78bf9c13ec 721
brunofgc 15:0f78bf9c13ec 722 modemCom::status.modemResponse=true;
brunofgc 15:0f78bf9c13ec 723
brunofgc 15:0f78bf9c13ec 724 pc.printf("Vem do modem <%s>.\r\n",modemCom::bufIn);
brunofgc 15:0f78bf9c13ec 725
brunofgc 15:0f78bf9c13ec 726 //Reconhecimento dos status
brunofgc 15:0f78bf9c13ec 727 modemCom::status.PROMPT_ENVIO_COMMAND_MODE=0;
brunofgc 15:0f78bf9c13ec 728 ptr=strstr(modemCom::bufIn,"> ");
brunofgc 15:0f78bf9c13ec 729 if(ptr) {
brunofgc 15:0f78bf9c13ec 730
brunofgc 15:0f78bf9c13ec 731 modemCom::status.serverConnected=1;
brunofgc 15:0f78bf9c13ec 732 modemCom::status.commandMode=1;
brunofgc 15:0f78bf9c13ec 733 modemCom::status.NO_CARRIER=0;
brunofgc 15:0f78bf9c13ec 734 modemCom::status.PROMPT_ENVIO_COMMAND_MODE=1;
brunofgc 15:0f78bf9c13ec 735 }
brunofgc 15:0f78bf9c13ec 736 modemCom::status.OK=0;
brunofgc 15:0f78bf9c13ec 737 ptr=strstr(modemCom::bufIn,"OK\r");
brunofgc 15:0f78bf9c13ec 738 if(ptr) {
brunofgc 15:0f78bf9c13ec 739 modemCom::status.OK=1;
brunofgc 15:0f78bf9c13ec 740 }
brunofgc 15:0f78bf9c13ec 741
brunofgc 15:0f78bf9c13ec 742
brunofgc 15:0f78bf9c13ec 743
brunofgc 15:0f78bf9c13ec 744 modemCom::status.busy=false;
brunofgc 15:0f78bf9c13ec 745 ptr=strstr(modemCom::bufIn,"busy s...");
brunofgc 15:0f78bf9c13ec 746 if(ptr) {
brunofgc 15:0f78bf9c13ec 747
brunofgc 15:0f78bf9c13ec 748 modemCom::status.busy=1;
brunofgc 15:0f78bf9c13ec 749 }
brunofgc 15:0f78bf9c13ec 750
brunofgc 15:0f78bf9c13ec 751 modemCom::status.SEND_OK=0;
brunofgc 15:0f78bf9c13ec 752 ptr=strstr(modemCom::bufIn,"SEND OK");
brunofgc 15:0f78bf9c13ec 753 if(ptr) {
brunofgc 15:0f78bf9c13ec 754
brunofgc 15:0f78bf9c13ec 755 modemCom::status.SEND_OK=1;
brunofgc 15:0f78bf9c13ec 756 }
brunofgc 15:0f78bf9c13ec 757
brunofgc 15:0f78bf9c13ec 758 modemCom::status.ERROR=0;
brunofgc 15:0f78bf9c13ec 759 ptr=strstr(modemCom::bufIn,"ERROR");
brunofgc 15:0f78bf9c13ec 760 if(ptr) {
brunofgc 15:0f78bf9c13ec 761
brunofgc 15:0f78bf9c13ec 762 modemCom::status.ERROR=1;
brunofgc 15:0f78bf9c13ec 763 modemCom::status.OK=0;
brunofgc 15:0f78bf9c13ec 764 }
brunofgc 15:0f78bf9c13ec 765
brunofgc 15:0f78bf9c13ec 766 ptr=strstr(modemCom::bufIn,"FAIL");
brunofgc 15:0f78bf9c13ec 767 if(ptr) {
brunofgc 15:0f78bf9c13ec 768
brunofgc 15:0f78bf9c13ec 769 modemCom::status.ERROR=1;
brunofgc 15:0f78bf9c13ec 770 modemCom::status.OK=0;
brunofgc 15:0f78bf9c13ec 771 }
brunofgc 15:0f78bf9c13ec 772
brunofgc 15:0f78bf9c13ec 773 ptr=strstr(modemCom::bufIn,"DNS Fail");
brunofgc 15:0f78bf9c13ec 774 if(ptr) {
brunofgc 15:0f78bf9c13ec 775 modemCom::status.dnsError=1;
brunofgc 15:0f78bf9c13ec 776 modemCom::status.ERROR=1;
brunofgc 15:0f78bf9c13ec 777 modemCom::status.OK=0;
brunofgc 15:0f78bf9c13ec 778 }
brunofgc 15:0f78bf9c13ec 779
brunofgc 15:0f78bf9c13ec 780 //modemCom::status.CLOSED=false;
brunofgc 15:0f78bf9c13ec 781 ptr=strstr(modemCom::bufIn,"CLOSED");
brunofgc 15:0f78bf9c13ec 782 if(ptr) {
brunofgc 15:0f78bf9c13ec 783 modemCom::status.CLOSED=1;
brunofgc 15:0f78bf9c13ec 784 }
brunofgc 15:0f78bf9c13ec 785
brunofgc 15:0f78bf9c13ec 786 /*if(strstr(modemCom::bufIn,"GET /")){
brunofgc 15:0f78bf9c13ec 787 getFound = true;
brunofgc 15:0f78bf9c13ec 788 }*/
brunofgc 15:0f78bf9c13ec 789
brunofgc 15:0f78bf9c13ec 790 //Buscando connect
brunofgc 15:0f78bf9c13ec 791 /*if(!modemCom::atendendoWebServer){
brunofgc 15:0f78bf9c13ec 792 ptr=strstr(modemCom::bufIn,"CONNECT\r\n");
brunofgc 15:0f78bf9c13ec 793 if(ptr) {
brunofgc 15:0f78bf9c13ec 794 ptr = strstr(ptr,"+IPD");
brunofgc 15:0f78bf9c13ec 795 ptr = strtok(ptr,",");
brunofgc 15:0f78bf9c13ec 796 ptr = strtok(NULL,",");
brunofgc 15:0f78bf9c13ec 797 connID = atoi(ptr);
brunofgc 15:0f78bf9c13ec 798 modemCom::status.connIDServerCommand = connID;
brunofgc 15:0f78bf9c13ec 799 modemCom::status.serverConnected=1;
brunofgc 15:0f78bf9c13ec 800 pc.printf("Recebido string CONNECT socket na conexao %u.\n",connID);
brunofgc 15:0f78bf9c13ec 801 if(!modemCom::status.emComunicacao){
brunofgc 15:0f78bf9c13ec 802 if(!getFound){
brunofgc 15:0f78bf9c13ec 803 pc.printf("Atendendo socket entrante na conexao %u.\n",connID);
brunofgc 15:0f78bf9c13ec 804 modemCom::status.SRINGsockEntrante = true;
brunofgc 15:0f78bf9c13ec 805 }
brunofgc 15:0f78bf9c13ec 806 }
brunofgc 15:0f78bf9c13ec 807 modemCom::status.emComunicacao=true;
brunofgc 15:0f78bf9c13ec 808 modemCom::bufIn = strtok(NULL,"");
brunofgc 15:0f78bf9c13ec 809 }
brunofgc 15:0f78bf9c13ec 810 }*/
brunofgc 15:0f78bf9c13ec 811
brunofgc 15:0f78bf9c13ec 812 IPDNumBytes = 0;
brunofgc 15:0f78bf9c13ec 813 ptr = strstr(modemCom::bufIn,"+IPD");
brunofgc 15:0f78bf9c13ec 814 if(ptr!=NULL){
brunofgc 15:0f78bf9c13ec 815 //+IPD,0,480:GET
brunofgc 15:0f78bf9c13ec 816 strtok(ptr,","); //Separando +IPD
brunofgc 15:0f78bf9c13ec 817
brunofgc 15:0f78bf9c13ec 818 ptr = strtok(NULL,","); //Pegando o numero da conexão
brunofgc 15:0f78bf9c13ec 819 connID = atoi(ptr);
brunofgc 15:0f78bf9c13ec 820
brunofgc 15:0f78bf9c13ec 821 ptr = strtok(NULL,":"); //Pegando o numero de caracteres IPD
brunofgc 15:0f78bf9c13ec 822 IPDNumBytes = atoi(ptr);
brunofgc 15:0f78bf9c13ec 823
brunofgc 15:0f78bf9c13ec 824 modemCom::bufIn = strtok(NULL,"");
brunofgc 15:0f78bf9c13ec 825
brunofgc 15:0f78bf9c13ec 826 //printf("Recebido pacote via conexao %u com %lu bytes.\n",connID,IPDNumBytes);
brunofgc 15:0f78bf9c13ec 827
brunofgc 15:0f78bf9c13ec 828 }
brunofgc 15:0f78bf9c13ec 829
brunofgc 15:0f78bf9c13ec 830 if(IPDNumBytes && modemCom::status.recebendoArquivoDoServer && (strstr(modemCom::bufIn,"CONNECT")==NULL) && (strstr(modemCom::bufIn,"*ServerCommand*")==NULL) ){
brunofgc 22:cb832a9bc704 831 pc.printf("sendData recebidos %lu bytes\n",sdCard::nBytesArquivoRecebidos/2);
brunofgc 15:0f78bf9c13ec 832 sdCard::insereDadosArquivoHex(&sdCard::tempFile,modemCom::bufIn,IPDNumBytes);
brunofgc 15:0f78bf9c13ec 833 //sdCard::insereDadosArquivo(&sdCard::tempFile,modemCom::bufIn,IPDNumBytes);
brunofgc 15:0f78bf9c13ec 834 sdCard::nBytesArquivoRecebidos+=IPDNumBytes;
brunofgc 15:0f78bf9c13ec 835 bufModem.del();
brunofgc 15:0f78bf9c13ec 836 sprintf(modemCom::bufIn,"AT+CIPSEND=%u,%lu\r\n",connID,10);
brunofgc 15:0f78bf9c13ec 837 modem.puts(modemCom::bufIn);
brunofgc 15:0f78bf9c13ec 838 timeOut = 5000;
brunofgc 15:0f78bf9c13ec 839 while(timeOut && (strstr(bufModem.getRowBuffer(),">")==NULL)){
brunofgc 15:0f78bf9c13ec 840 osDelay(1);
brunofgc 15:0f78bf9c13ec 841 timeOut--;
brunofgc 15:0f78bf9c13ec 842 }
brunofgc 15:0f78bf9c13ec 843 modemCom::status.timeOut = 30;
brunofgc 22:cb832a9bc704 844
brunofgc 22:cb832a9bc704 845 modem.puts("sendData\r\n");
brunofgc 15:0f78bf9c13ec 846 diversos::wdt.kick();
brunofgc 15:0f78bf9c13ec 847 return;
brunofgc 15:0f78bf9c13ec 848 }
brunofgc 15:0f78bf9c13ec 849
brunofgc 15:0f78bf9c13ec 850 //Reconhecendo GET HTTP e atendendo com um servidor web
brunofgc 15:0f78bf9c13ec 851 if(strstr(modemCom::bufIn,"HTTP/1.1")){
brunofgc 15:0f78bf9c13ec 852 ptr=strstr(modemCom::bufIn,"GET /");
brunofgc 15:0f78bf9c13ec 853 if(ptr) {
brunofgc 15:0f78bf9c13ec 854 ptr = strtok(ptr,"/");
brunofgc 15:0f78bf9c13ec 855 ptr = strtok(NULL," ");
brunofgc 15:0f78bf9c13ec 856 bufInPtr = ptr;
brunofgc 15:0f78bf9c13ec 857 strcpy(webServerBuff,ptr);
brunofgc 15:0f78bf9c13ec 858 modemCom::atendendoWebServer = true;
brunofgc 15:0f78bf9c13ec 859 modemCom::status.connIDWebServer = connID;
brunofgc 15:0f78bf9c13ec 860 }
brunofgc 15:0f78bf9c13ec 861 }
brunofgc 15:0f78bf9c13ec 862
brunofgc 15:0f78bf9c13ec 863 ptr=strstr(modemCom::bufIn,"*ServerAck*");
brunofgc 15:0f78bf9c13ec 864 if(ptr) {
brunofgc 15:0f78bf9c13ec 865 modemCom::status.ServerAck=1;
brunofgc 15:0f78bf9c13ec 866 }
brunofgc 15:0f78bf9c13ec 867
brunofgc 15:0f78bf9c13ec 868 ptr=strstr(modemCom::bufIn,"*ServerCommand*");
brunofgc 15:0f78bf9c13ec 869 if(ptr) {
brunofgc 15:0f78bf9c13ec 870 scanPtr = strtok (ptr,"\\");
brunofgc 15:0f78bf9c13ec 871 scanPtr = strtok (NULL,">");
brunofgc 15:0f78bf9c13ec 872 strcpy(commands::buffer,scanPtr);
brunofgc 15:0f78bf9c13ec 873 pc.printf("Comandos <%s>.\n",commands::buffer);
brunofgc 15:0f78bf9c13ec 874 modemCom::status.connIDServerCommand = connID;
brunofgc 15:0f78bf9c13ec 875 executaComandoServer = true;
brunofgc 15:0f78bf9c13ec 876 }
brunofgc 15:0f78bf9c13ec 877 }
brunofgc 15:0f78bf9c13ec 878
brunofgc 15:0f78bf9c13ec 879 bool modemCom::leParametrosConexaoSDCard(){
brunofgc 0:1c0a769988ee 880 char *ptr;
brunofgc 0:1c0a769988ee 881 char aux[128];
brunofgc 0:1c0a769988ee 882 if(sdCard::abreArquivo(&sdCard::config,"r")){
brunofgc 0:1c0a769988ee 883 pc.printf("Abrindo arquivo de config para buscar dados de conexao.\r\n");
brunofgc 0:1c0a769988ee 884 //"SSID:DROME\r\nPASSWORD:VITAE\r\nPORT:80"
brunofgc 0:1c0a769988ee 885
brunofgc 0:1c0a769988ee 886 //Pegando SSID
brunofgc 0:1c0a769988ee 887 fgets(modemCom::status.ssid,40,sdCard::config.fp);
brunofgc 2:55b7b466e742 888 ptr = strstr(modemCom::status.ssid,"SSID");
brunofgc 2:55b7b466e742 889 if(ptr!=NULL){
brunofgc 2:55b7b466e742 890 ptr = strtok(modemCom::status.ssid,":");
brunofgc 2:55b7b466e742 891 ptr = strtok(NULL,"\r\n");
brunofgc 2:55b7b466e742 892 strcpy(modemCom::status.ssid,ptr);
brunofgc 2:55b7b466e742 893
brunofgc 2:55b7b466e742 894 //Pegando PASSWORD
brunofgc 2:55b7b466e742 895 fgets(modemCom::status.password,50,sdCard::config.fp);
brunofgc 2:55b7b466e742 896 ptr = strtok(modemCom::status.password,":");
brunofgc 2:55b7b466e742 897 ptr = strtok(NULL,"\r\n");
brunofgc 2:55b7b466e742 898 strcpy(modemCom::status.password,ptr);
brunofgc 2:55b7b466e742 899
brunofgc 2:55b7b466e742 900 //Pegando PORT
brunofgc 2:55b7b466e742 901 fgets(modemCom::status.port,20,sdCard::config.fp);
brunofgc 2:55b7b466e742 902 ptr = strtok(modemCom::status.port,":");
brunofgc 2:55b7b466e742 903 ptr = strtok(NULL,"\r\n");
brunofgc 9:cf406384efd9 904 strcpy(modemCom::status.port,ptr);
brunofgc 9:cf406384efd9 905
brunofgc 18:1eefda1f7736 906 //Pegando serverIP
brunofgc 21:b9315cdd9275 907 fgets(aux,50,sdCard::config.fp);
brunofgc 21:b9315cdd9275 908 ptr = strtok(aux,":");
brunofgc 18:1eefda1f7736 909 ptr = strtok(NULL,"\r\n");
brunofgc 18:1eefda1f7736 910 strcpy(modemCom::status.serverIP,ptr);
brunofgc 18:1eefda1f7736 911
brunofgc 9:cf406384efd9 912 //Pegando host
brunofgc 21:b9315cdd9275 913 fgets(aux,50,sdCard::config.fp);
brunofgc 21:b9315cdd9275 914 ptr = strtok(aux,":");
brunofgc 9:cf406384efd9 915 ptr = strtok(NULL,"\r\n");
brunofgc 9:cf406384efd9 916 strcpy(modemCom::status.host,ptr);
brunofgc 9:cf406384efd9 917
brunofgc 9:cf406384efd9 918 //Pegando periodo
brunofgc 9:cf406384efd9 919 fgets(aux,20,sdCard::config.fp);
brunofgc 9:cf406384efd9 920 ptr = strtok(aux,":");
brunofgc 9:cf406384efd9 921 ptr = strtok(NULL,"\r\n");
brunofgc 9:cf406384efd9 922 modemCom::status.periodo = atoi(ptr);
brunofgc 19:5559f7570e6f 923 modemCom::status.periodoConfiguracao = modemCom::status.periodo;
brunofgc 21:b9315cdd9275 924
brunofgc 21:b9315cdd9275 925 //*************IP ou DHCP*****************
brunofgc 21:b9315cdd9275 926
brunofgc 21:b9315cdd9275 927 //Pegando STAIP
brunofgc 21:b9315cdd9275 928 fgets(aux,50,sdCard::config.fp);
brunofgc 21:b9315cdd9275 929 ptr = strtok(aux,":");
brunofgc 21:b9315cdd9275 930 ptr = strtok(NULL,"\r\n");
brunofgc 21:b9315cdd9275 931 strcpy(modemCom::status.STAIP,ptr);
brunofgc 21:b9315cdd9275 932
brunofgc 21:b9315cdd9275 933 //Pegando subnetmask
brunofgc 21:b9315cdd9275 934 fgets(aux,50,sdCard::config.fp);
brunofgc 21:b9315cdd9275 935 ptr = strtok(aux,":");
brunofgc 21:b9315cdd9275 936 ptr = strtok(NULL,"\r\n");
brunofgc 21:b9315cdd9275 937 strcpy(modemCom::status.subnetmask,ptr);
brunofgc 21:b9315cdd9275 938
brunofgc 21:b9315cdd9275 939 //Pegando gateway
brunofgc 21:b9315cdd9275 940 fgets(aux,50,sdCard::config.fp);
brunofgc 21:b9315cdd9275 941 ptr = strtok(aux,":");
brunofgc 21:b9315cdd9275 942 ptr = strtok(NULL,"\r\n");
brunofgc 21:b9315cdd9275 943 strcpy(modemCom::status.gateway,ptr);
brunofgc 21:b9315cdd9275 944
brunofgc 21:b9315cdd9275 945
brunofgc 2:55b7b466e742 946 }else{
brunofgc 9:cf406384efd9 947 strcpy(modemCom::status.ssid,"VSE");
brunofgc 2:55b7b466e742 948 strcpy(modemCom::status.password,"vitaeBBYP");
brunofgc 2:55b7b466e742 949 strcpy(modemCom::status.port,"80");
brunofgc 18:1eefda1f7736 950 strcpy(modemCom::status.serverIP,"191.252.142.51");
brunofgc 9:cf406384efd9 951 strcpy(modemCom::status.host,"www.vitaesolucoes.com.br");
brunofgc 21:b9315cdd9275 952 strcpy(modemCom::status.gateway,"dhcp");
brunofgc 9:cf406384efd9 953 modemCom::status.periodo = 900;
brunofgc 21:b9315cdd9275 954 modemCom::status.periodoConfiguracao = modemCom::status.periodo;
brunofgc 2:55b7b466e742 955 }
brunofgc 0:1c0a769988ee 956 sdCard::fechaArquivo(&sdCard::config);
brunofgc 21:b9315cdd9275 957 pc.printf("Lidos os parametros de configuracao de wifi como sendo:\r\nSSID:<%s>\r\nPASSWORD:<%s>\r\nPORT:<%s>\r\nserverIP:<%s>\r\nHOST:<%s>\r\nPERIODO:<%lu>\r\nSTAIP:<%s>\r\nsubnetmask:<%s>\r\ngateway:<%s>\r\n",modemCom::status.ssid,modemCom::status.password,modemCom::status.port,modemCom::status.serverIP,modemCom::status.host,modemCom::status.periodo,modemCom::status.STAIP,modemCom::status.subnetmask,modemCom::status.gateway);
brunofgc 15:0f78bf9c13ec 958 pc.printf("Iniciando conexao wifi.\r\n");
brunofgc 15:0f78bf9c13ec 959 return true;
brunofgc 2:55b7b466e742 960 }else{
brunofgc 7:ae9c47f62946 961 strcpy(modemCom::status.ssid,"VSE");
brunofgc 2:55b7b466e742 962 strcpy(modemCom::status.password,"vitaeBBYP");
brunofgc 18:1eefda1f7736 963 strcpy(modemCom::status.port,"80");
brunofgc 18:1eefda1f7736 964 strcpy(modemCom::status.serverIP,"191.252.142.51");
brunofgc 9:cf406384efd9 965 strcpy(modemCom::status.host,"www.vitaesolucoes.com.br");
brunofgc 21:b9315cdd9275 966 strcpy(modemCom::status.gateway,"dhcp");
brunofgc 9:cf406384efd9 967 modemCom::status.periodo = 900;
brunofgc 19:5559f7570e6f 968 modemCom::status.periodoConfiguracao = modemCom::status.periodo;
brunofgc 15:0f78bf9c13ec 969 return false;
brunofgc 2:55b7b466e742 970 }
brunofgc 0:1c0a769988ee 971 }
brunofgc 0:1c0a769988ee 972
brunofgc 0:1c0a769988ee 973 uint8_t modemCom::inicializaModem(void)
brunofgc 15:0f78bf9c13ec 974 {
brunofgc 15:0f78bf9c13ec 975 char aux[255];
brunofgc 0:1c0a769988ee 976 modemCom::timeOutModem = 10;
brunofgc 0:1c0a769988ee 977 modemCom::status.emComunicacao = true;
brunofgc 7:ae9c47f62946 978 if(modemCom::sendToModem("ATE0\r\n",1,&modemCom::status.OK,NULL,1000,10,1)) {
brunofgc 0:1c0a769988ee 979 pc.printf("Recebeu o comando ATE0.\n");
brunofgc 0:1c0a769988ee 980 }
brunofgc 0:1c0a769988ee 981
brunofgc 15:0f78bf9c13ec 982 modemCom::leMAC();
brunofgc 15:0f78bf9c13ec 983
brunofgc 15:0f78bf9c13ec 984 modemCom::leParametrosConexaoSDCard();
brunofgc 15:0f78bf9c13ec 985
brunofgc 15:0f78bf9c13ec 986 //Colocando aqui o conteudo de conectaWiFi
brunofgc 15:0f78bf9c13ec 987 //Mudando mode para AP e Station
brunofgc 15:0f78bf9c13ec 988 if(modemCom::sendToModem("AT+CWMODE=3\r\n",1,&modemCom::status.OK,NULL,10000,1,1)) {
brunofgc 15:0f78bf9c13ec 989 pc.printf("Modo AP+STATION aceito.\n");
brunofgc 15:0f78bf9c13ec 990 }
brunofgc 15:0f78bf9c13ec 991
brunofgc 15:0f78bf9c13ec 992
brunofgc 15:0f78bf9c13ec 993 if(modemCom::sendToModem("AT+CIPMUX=1\r\n",1,&modemCom::status.OK,NULL,250,4,1)) {
brunofgc 15:0f78bf9c13ec 994 pc.printf("Recebeu o comando AT+CIPMUX=1.\n");
brunofgc 15:0f78bf9c13ec 995 }
brunofgc 15:0f78bf9c13ec 996
brunofgc 15:0f78bf9c13ec 997
brunofgc 15:0f78bf9c13ec 998 //AT+CIPSERVER=1,portaLidaDoSDCard
brunofgc 15:0f78bf9c13ec 999 sprintf(aux,"AT+CIPSERVER=1,%s\r\n",modemCom::status.port);
brunofgc 15:0f78bf9c13ec 1000 if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,250,4,1)) {
brunofgc 15:0f78bf9c13ec 1001 pc.printf("Recebeu o comando <%s>.\n",aux);
brunofgc 15:0f78bf9c13ec 1002 }
brunofgc 15:0f78bf9c13ec 1003
brunofgc 15:0f78bf9c13ec 1004 if(modemCom::sendToModem("AT+CIPSTO=60\r\n",1,&modemCom::status.OK,NULL,250,4,1)) {
brunofgc 15:0f78bf9c13ec 1005 pc.printf("Recebeu o comando AT+CIPSTO=60.\n");
brunofgc 15:0f78bf9c13ec 1006 }
brunofgc 15:0f78bf9c13ec 1007
brunofgc 21:b9315cdd9275 1008 sprintf(aux,"AT+CWSAP_CUR=\"DROME_WIFI_%s\",\"VseDROME\",5,3\r\n",modemCom::status.MAC);
brunofgc 15:0f78bf9c13ec 1009 if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,250,4,1)) {
brunofgc 15:0f78bf9c13ec 1010 pc.printf("Recebeu o comando %s.\n",aux);
brunofgc 15:0f78bf9c13ec 1011 }
brunofgc 15:0f78bf9c13ec 1012
brunofgc 15:0f78bf9c13ec 1013
brunofgc 15:0f78bf9c13ec 1014 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)) {
brunofgc 15:0f78bf9c13ec 1015 pc.printf("Recebeu o comando AT+CIPAP_CUR=\"192.168.4.1\",\"192.168.4.1\",\"255.255.255.0\".\n");
brunofgc 15:0f78bf9c13ec 1016 }
brunofgc 15:0f78bf9c13ec 1017
brunofgc 21:b9315cdd9275 1018 //Aqui decido se uso DHCP ou não.
brunofgc 21:b9315cdd9275 1019 if(strstr(modemCom::status.gateway,"dhcp")){
brunofgc 21:b9315cdd9275 1020 //usando dhcp
brunofgc 21:b9315cdd9275 1021 if(modemCom::sendToModem("AT+CWDHCP_CUR=2,1\r\n",1,&modemCom::status.OK,NULL,250,4,1)) {
brunofgc 21:b9315cdd9275 1022 pc.printf("Recebeu o comando AT+CWDHCP_CUR=2,1.\n");
brunofgc 21:b9315cdd9275 1023 }
brunofgc 21:b9315cdd9275 1024 }else{
brunofgc 21:b9315cdd9275 1025 if(modemCom::sendToModem("AT+CWDHCP_CUR=2,0\r\n",1,&modemCom::status.OK,NULL,250,4,1)) {
brunofgc 21:b9315cdd9275 1026 pc.printf("Recebeu o comando AT+CWDHCP_CUR=2,0.\n");
brunofgc 21:b9315cdd9275 1027 }
brunofgc 21:b9315cdd9275 1028 //AT+CIPSTA_DEF="192.168.6.100","192.168.6.1","255.255.255.0"
brunofgc 21:b9315cdd9275 1029 sprintf(aux,"AT+CIPSTA_CUR=\"%s\",\"%s\",\"%s\"\r\n",modemCom::status.STAIP,modemCom::status.gateway,modemCom::status.subnetmask);
brunofgc 21:b9315cdd9275 1030 if(modemCom::sendToModem(aux,1,&modemCom::status.OK,NULL,250,4,1)) {
brunofgc 21:b9315cdd9275 1031 pc.printf("Recebeu o comando <%s>.\n",aux);
brunofgc 21:b9315cdd9275 1032 }
brunofgc 0:1c0a769988ee 1033
brunofgc 21:b9315cdd9275 1034 }
brunofgc 0:1c0a769988ee 1035 modemCom::status.emComunicacao = false;
brunofgc 0:1c0a769988ee 1036 return 1;
brunofgc 0:1c0a769988ee 1037 }
brunofgc 0:1c0a769988ee 1038
brunofgc 0:1c0a769988ee 1039