teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

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;    
-        }        
     }
 }