teste de publish
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
Diff: main.cpp
- Revision:
- 33:a60abda630f7
- Parent:
- 32:7cf1fb8a8bf3
- Child:
- 34:348991c54ff3
--- a/main.cpp Sat May 26 14:17:55 2018 +0000 +++ b/main.cpp Wed May 30 04:24:55 2018 +0000 @@ -57,7 +57,7 @@ char xeretaModem = false; bool hardwareReset = false; char firmVersion[20]; -char resetCause[5]; +char resetCauses[30]; MediaMovel FiltroAI4(5); @@ -224,21 +224,27 @@ if(hardwareReset){ //Resetando printf("hardwareReset = true.\r\n"); - NVIC_SystemReset(); - diversos::wdt.kick(0.1); + osDelay(50); //Para dar tempo de enviar todo o printf. + //diversos::wdt.kick(0.1); + NVIC_SystemReset(); while(true); } if(eventosRTC::rotinaEnvioDeDados){ //Faço aqui o que for devido. if((!modemCom::status.recebendoArquivoDoServer)&&(enviaDadosPorAlarme==255)){ + if(!modemCom::timeOutEnvioDados){ + modemCom::timeOutEnvioDados=maxTimeEnvioDados; + } if(debug){pc.printf("Enviando dados de hora completa ao server.\n");} modemCom::status.emComunicacao = true; eventosRTC::rotinaEnvioDeDados--; modemCom::status.periodo = 900; + diversos::wdt.kick(); if(modemCom::verificaConexao()){ - //Estou conectado + //Estou conectado if(modemCom::enviaDados()){ eventosRTC::rotinaEnvioDeDados=0; + modemCom::timeOutEnvioDados=0; modemCom::status.periodo = modemCom::status.periodoConfiguracao; //Restaurando o período configurado no sistema } } @@ -282,7 +288,7 @@ eventosRTC::minutos = true; } - if(((seconds-5)%modemCom::status.periodo)==0){ + if(((seconds-15)%modemCom::status.periodo)==0){ //if((seconds%300)==0){ eventosRTC::rotinaEnvioDeDados = maxTentativasEnvioDados; osSignalSet(idThreadComunicacoes, 0x1); @@ -302,12 +308,23 @@ } void inicializaMaquina(){ + + + //Resetei pq? + + sprintf(resetCauses,"POR"); + if((LPC_WDT->WDMOD >> 2) & 1){ + strcat(resetCauses,",WDT"); + } + + diversos::wdt.kick(90.0); + pwmPeriod = 100000; SD1.period_us(pwmPeriod); modemCom::atendendoWebServer = false; serialPC::serialPC_init(); printf("Versao: %s.\r\n",firmVersion); - printf("Reset Cause: %s.\r\n",resetCause); + printf("Reset Causes: %s.\r\n",resetCauses); modemCom::timeOutModem = 30; serialModem::serial_init(); numeroDeBytesPorEnvio = 768; @@ -335,63 +352,128 @@ //Thread processaPacote idThreadProcessaPacote = osThreadCreate(osThread(threadProcessaPacote), NULL); - /*Chamada de threads*/ - serialModem::configBaud(); + /*Chamada de threads*/ + modemCom::status.connIDServerCommand = 255; + modemCom::status.connIDWebServer = 255; + modemCom::status.connIDSendData = 255; } //Inicio do programa; int main() { - sprintf(firmVersion,"Ver23/05/18_1.0A"); - sprintf(resetCause,"POR"); + sprintf(firmVersion,"Ver29/05/18_1.0Bc"); - debug = false; + eInt1.rise(&diversos::processaPulsosEDs); eInt2.rise(&diversos::processaPulsosEDs); - eInt3.rise(&diversos::processaPulsosEDs); - - diversos::wdt.kick(90.0); + eInt3.rise(&diversos::processaPulsosEDs); modem.baud(76800); ESP_CH_PD = 1; ESP_ESPGPIO_2 = 1; ESP_RESET = 1; - wait(2); - inicializaMaquina(); + wait(10); + + inicializaMaquina(); modemCom::inicializaModem(); - if(!modemCom::verificaConexao()){ + /*if(!modemCom::verificaConexao()){ modemCom::conectaWiFi(); - } - eventosRTC::rotinaEnvioDeDados=maxTentativasEnvioDados; - osSignalSet(idThreadComunicacoes, 0x1); - sdCard::deleteSentFiles=false; + }*/ + + //Agendando primeiro envio de cara. + eventosRTC::rotinaEnvioDeDados=maxTentativasEnvioDados; + osSignalSet(idThreadComunicacoes, 0x1); + + pc.printf("E agora jose? Estou escrevendo um texo enorme so para falar que essa porra esta funcionando literalmente muito bem, finalmente.\r\n"); while(true){ osDelay(100); if(callBootLoader){ diversos::wdt.kick(90.0); SysTick->CTRL &= ~0x00000002; // disable SysTick interrupt - NVIC_DeInit(); + //NVIC_DeInit(); + + //Bloco novo + //SysTick->CTRL = 0; + //SysTick->LOAD = 0; + //SysTick->VAL = 0; + + /** + * Step: Disable all interrupts + */ + //__disable_irq(); + + /* ARM Cortex-M Programming Guide to Memory Barrier Instructions.*/ + //__DSB(); + //Bloco novo //__disable_irq(); bootloader_fillUpFlash(&sdCard::newFirmware); - while( ((LPC_UART0->LSR >> 6) &0x1) == 0 ); + //while( ((LPC_UART0->LSR >> 6) &0x1) == 0 ); //__enable_irq(); bootLoader(); } - //if(debug)pc.printf("Thread: MAIN.\r\n"); + /*---------------------Bloco de prevenção de bloqueio-------------------------------*/ if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){ - diversos::wdt.kick(); - }else{ + diversos::wdt.kick(90); + }else{ + /*-----------------Bloco temporizador de recepção de arquivo--------------*/ if(modemCom::status.recebendoArquivoDoServer){ - modemCom::status.recebendoArquivoDoServer--; - //Esta thread já roda a cada 100mS - if(modemCom::status.recebendoArquivoDoServer==0){ - modemCom::closeConnection(modemCom::status.connIDServerCommand); + if(modemCom::status.recebendoArquivoDoServer==1){ + modemCom::closeConnection(&modemCom::status.connIDServerCommand); + //Insere erro no arquivo. + } + modemCom::status.recebendoArquivoDoServer--; + if(xeretaModem){pc.printf("recebendoArquivoDoServer = %lu.\r\n",modemCom::status.recebendoArquivoDoServer);} + } + /*-----------------Bloco temporizador de recepção de arquivo--------------*/ + + /*-----------------Bloco temporizador de recepção de envio de dados-------*/ + if(modemCom::status.emComunicacao){ + if(modemCom::timeOutEnvioDados==1){ + modemCom::status.emComunicacao=0; + modemCom::closeConnection(&modemCom::status.connIDServerCommand); + modemCom::closeConnection(&modemCom::status.connIDWebServer); + modemCom::closeConnection(&modemCom::status.connIDSendData); + //Insere erro no arquivo. } + modemCom::timeOutEnvioDados--; + if(xeretaModem){pc.printf("timeOutEnvioDados = %lu.\r\n",modemCom::timeOutEnvioDados);} } + /*-----------------Bloco temporizador de recepção de envio de dados-------*/ } + /*---------------------Bloco de prevenção de bloqueio-------------------------------*/ + if(executaComandoServer){ + executaComandoServer = false; + + commands::exec(modemCom::status.connIDServerCommand); + if(!modemCom::status.recebendoArquivoDoServer){ + if(debug){pc.printf("Fechando socket chave 4.\r\n");} + modemCom::closeConnection(&modemCom::status.connIDServerCommand); + } + } + + if(sdCard::deleteSentFiles){ + printf("Recebido comando para deletar arquivos enviados.\n"); + sdCard::deleteBanks(sdCard::currentBankSending); + if(sdCard::modificaCurrentBank(sdCard::currentBank,!sdCard::currentBankSending)){ + sdCard::deleteSentFiles=false; + } + } + + if(modemCom::atendendoWebServer){ + modemCom::atendendoWebServer = false; + if(debug){pc.printf("Atendendo webServer na conexao %u.\r\n",modemCom::status.connIDWebServer);} + modemCom::status.emComunicacao=true; + modemCom::webServer(modemCom::status.connIDWebServer); + modemCom::status.emComunicacao=false; + } + + if(boolExecAct){ + execAct(act); + boolExecAct = false; + } if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){ if(eventosRTC::rotina1segundo){ @@ -415,11 +497,10 @@ for(debug=0;debug<9;debug++){ printf("EntradaDigital[%u]=%u.\r\n",debug,(entradasDigitais[debug]>1)); } - } - + } time_t seconds = time(NULL); printf("Drome %s, Hora-> %s\n",firmVersion,ctime(&seconds)); - } + } if(eventosRTC::rotina10Segundos){ //Executo abaixo a rotina de 10 segundos @@ -427,44 +508,13 @@ verifySchedules(); verifyAlarms(); } - - if(sdCard::deleteSentFiles){ - printf("Recebido comando para deletar arquivos enviados.\n"); - sdCard::deleteBanks(sdCard::currentBankSending); - if(sdCard::modificaCurrentBank(sdCard::currentBank,!sdCard::currentBankSending)){ - sdCard::deleteSentFiles=false; - } + + if((eventosRTC::minutos)&&(!modemCom::status.recebendoArquivoDoServer)){ + //Executo abaixo a rotina de 1 minuto + eventosRTC::minutos = false; + refreshSensoresTemperatura(); + writeReadingsToSD(); } } - - if((eventosRTC::minutos)&&(!modemCom::status.recebendoArquivoDoServer)){ - //Executo abaixo a rotina de 1 minuto - eventosRTC::minutos = false; - refreshSensoresTemperatura(); - writeReadingsToSD(); - } - - if(executaComandoServer){ - executaComandoServer = false; - - commands::exec(modemCom::status.connIDServerCommand); - if(!modemCom::status.recebendoArquivoDoServer){ - if(debug){pc.printf("Fechando socket chave 4.\r\n");} - modemCom::closeConnection(modemCom::status.connIDServerCommand); - } - } - - if(modemCom::atendendoWebServer){ - modemCom::atendendoWebServer = false; - if(debug){pc.printf("Atendendo webServer na conexao %u.\r\n",modemCom::status.connIDWebServer);} - modemCom::status.emComunicacao=true; - modemCom::webServer(modemCom::status.connIDWebServer); - modemCom::status.emComunicacao=false; - } - - if(boolExecAct){ - execAct(act); - boolExecAct = false; - } } }