Bruno Cavalcanti / Mbed 2 deprecated brunoDrome

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Revision:
30:8a06a85d8807
Parent:
29:823a9da3696b
Child:
32:7cf1fb8a8bf3
--- a/main.cpp	Thu May 24 00:42:23 2018 +0000
+++ b/main.cpp	Fri May 25 23:46:10 2018 +0000
@@ -39,13 +39,12 @@
 //Função para reset do ARM
 extern "C" void mbed_reset();
 
-//Devices
-    device ** dispositivos = NULL;
+//Devices    
     uint8_t devices=0;
-    uint8_t alarmes=0;
-    uint8_t leituras=0;
-    uint8_t qtdSchedules=0;
-    uint8_t qtdScheduleExceptions=0;
+    uint16_t alarmes=0;
+    uint16_t leituras=0;
+    uint16_t qtdSchedules=0;
+    uint16_t qtdScheduleExceptions=0;
 //Devices
 
 //Variáveis para envio de arquivo em qualquer lugar do código
@@ -55,7 +54,10 @@
 bool boolExecAct;
 bool inicializaModemBool;
 char debug = false;
+char xeretaModem = false;
 bool hardwareReset = false;
+char firmVersion[20];
+char resetCause[5];
 
 
 MediaMovel FiltroAI4(5);
@@ -66,7 +68,7 @@
 uint16_t aiFiltrada[4];
 bool entradasDigitais[9];
 
-CircularBuffer bufModem(maxBufInModem) __attribute__ ((section("AHBSRAM0")));    
+CircularBuffer bufModem(maxBufInModem);// __attribute__ ((section("AHBSRAM0")));    
 CircularBuffer bufPC(128);
 CircularBuffer sdCardBuf(1024);
 
@@ -163,9 +165,9 @@
 void verificaSaidasDigitais(){
     SD_OE_R = 1;
     /*if(SD_FAULT){
-        pc.printf("Fault\r\n");
+        if(debug)pc.printf("Fault\r\n");
     }else{
-        pc.printf("No Fault\r\n");
+        if(debug)pc.printf("No Fault\r\n");
      }*/
 }
 
@@ -173,15 +175,17 @@
 osThreadId idThreadTimers;
 void threadTimers(void const *args){
     while(true){
-        osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
-        if(serialPC::startTimer_pacote){
-          serialPC::startTimer_pacote = false;
-          osTimerStart(serialPC::timer_pacote,2000);            
-        }
-        if(serialModem::startTimer_pacote){
-          serialModem::startTimer_pacote = false;
-          osTimerStart(serialModem::timer_pacote,modemCom::timeOutModem);            
-        }        
+        osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo        
+        //if(enviaDadosPorAlarme==255){//debug        
+            if(serialPC::startTimer_pacote){
+              serialPC::startTimer_pacote = false;
+              osTimerStart(serialPC::timer_pacote,100);            
+            }
+            if(serialModem::startTimer_pacote){
+              serialModem::startTimer_pacote = false;
+              osTimerStart(serialModem::timer_pacote,modemCom::timeOutModem);            
+            }
+        //}        
         if(modBusMaster1::startThreadModBusMaster){
           modBusMaster1::startThreadModBusMaster = false;
           osTimerStart(modBusMaster1::timer_pacote,4);            
@@ -223,12 +227,10 @@
             while(true);
         }        
         if(eventosRTC::rotinaEnvioDeDados){
-            //Faço aqui o que for devido.
-            pc.printf("Enviando dados de hora completa ao server.\n");            
-            modemCom::status.emComunicacao = true;            
-            //diversos::wdt.kick(90.0);
-            //Aproveitando ACT            
-            if(!modemCom::status.recebendoArquivoDoServer){
+            //Faço aqui o que for devido.            
+            if((!modemCom::status.recebendoArquivoDoServer)&&(enviaDadosPorAlarme==255)){
+                if(debug){pc.printf("Enviando dados de hora completa ao server.\n");}
+                modemCom::status.emComunicacao = true;
                 eventosRTC::rotinaEnvioDeDados--;
                 modemCom::status.periodo = 900;
                 if(modemCom::verificaConexao()){
@@ -238,19 +240,19 @@
                         modemCom::status.periodo = modemCom::status.periodoConfiguracao; //Restaurando o período configurado no sistema
                     }
                 }
-                //diversos::wdt.kick(90.0);
+                modemCom::status.emComunicacao = false;
             }
-            modemCom::status.emComunicacao = false;            
+            
         }        
         
         if(arquivoEnvioPointer!=NULL){            
-            pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome);
+            if(debug){pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome);}
             if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/drome/parser/index.php",arquivoEnvioPointer)){
             //if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/sistema/Parser/index.php",arquivoEnvioPointer)){
-                pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome);
+                if(debug){pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome);}
                 arquivoEnvioPointer = NULL;        
             }else{
-                pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome);
+                if(debug){pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome);}
              }
         }
         
@@ -285,11 +287,6 @@
     }    
 }
 
-//Timeout timeOutModem;
-void chamaProcessaPacotePeloTimeOut(){
-  modemCom::processaPacote(NULL);  
-}
-
 void loadDevices(){    
     if(sdCard::abreArquivo(&sdCard::devices,"r")){
         criaDevices(sdCard::devices.fp);
@@ -307,7 +304,8 @@
     SD1.period_us(pwmPeriod);
     modemCom::atendendoWebServer = false;
     serialPC::serialPC_init();
-    pc.printf("Versao 23/05/2018.\r\n");
+    printf("Versao: %s.\r\n",firmVersion);
+    printf("Reset Cause: %s.\r\n",resetCause);
     modemCom::timeOutModem = 30;
     serialModem::serial_init();
     numeroDeBytesPorEnvio = 768;
@@ -315,11 +313,11 @@
     inicializaSensoresTemperatura();
     
     if(sdCard::init()){
-     pc.printf("SD Card inicializado com sucesso.\n");
+     printf("SD Card inicializado com sucesso.\n");
      //Carregando a lista de dispositivos
      loadDevices();
     }else{
-        pc.printf("Nao foi possivel inicializar o SD Card.\n");   
+        printf("Nao foi possivel inicializar o SD Card.\n");   
      }   
 
           
@@ -341,6 +339,9 @@
 
 //Inicio do programa;
 int main() {
+    sprintf(firmVersion,"Ver23/05/18_1.0A");
+    sprintf(resetCause,"POR");
+    
     debug = false;
     eInt1.rise(&diversos::processaPulsosEDs);
     eInt2.rise(&diversos::processaPulsosEDs);
@@ -366,7 +367,7 @@
     while(true){
         osDelay(100);
         if(callBootLoader){
-            diversos::wdt.kick(15.0);
+            diversos::wdt.kick(90.0);
             SysTick->CTRL &= ~0x00000002;           // disable SysTick interrupt
             NVIC_DeInit();
             //__disable_irq();
@@ -376,51 +377,46 @@
             bootLoader();
         }
 
-        //pc.printf("Thread: MAIN.\r\n");
+        //if(debug)pc.printf("Thread: MAIN.\r\n");
         if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){
             diversos::wdt.kick();
         }else{
             if(modemCom::status.recebendoArquivoDoServer){
                 modemCom::status.recebendoArquivoDoServer--;
-                //Esta thread já roda a cada 100mS
-                //printf("modemCom::status.recebendoArquivoDoServer = %lu.\r\n",modemCom::status.recebendoArquivoDoServer);
+                //Esta thread já roda a cada 100mS                
                 if(modemCom::status.recebendoArquivoDoServer==0){
                     modemCom::closeConnection(modemCom::status.connIDServerCommand);
                 }
             }
          }
         
-        if(!modemCom::status.recebendoArquivoDoServer){
-            if(eventosRTC::minutos){
-                //Executo abaixo a rotina de 1 minuto
-                eventosRTC::minutos = false;
-                refreshSensoresTemperatura();
-                writeReadingsToSD();                
-            }
-
+        
+        if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){
             if(eventosRTC::rotina1segundo){
                 eventosRTC::rotina1segundo = false;
                 if(enviaDadosPorAlarme!=255){
                     enviaDadosPorAlarme--;
                     if(enviaDadosPorAlarme==0){
                         eventosRTC::rotinaEnvioDeDados=maxTentativasEnvioDados;
-                        enviaDadosPorAlarme=255;
+                        enviaDadosPorAlarme=255;                        
                     }
                 }
                 leiturasAnalogicas();                
                 verificaSaidasDigitais();
                 leiturasDigitais();                
+            
                 if(debug){
                     pc.printf("\nMemoria RAM disponivel = %lu\n",diversos::memAvailable());
                     pc.printf("\nEntrada 4 = %lu.\nEntrada 3 = %lu.\nEntrada 2 = %lu.\nEntrada 1 = %lu.\r\n",aiFiltrada[3],aiFiltrada[2],aiFiltrada[1],aiFiltrada[0]);            
                     pc.printf("Pulsos <%lu><%lu><%lu>.\r\n",pulsosEDs[0],pulsosEDs[1],pulsosEDs[2]);
+                
                     for(debug=0;debug<9;debug++){
-                        pc.printf("EntradaDigital[%u]=%u.\r\n",debug,(entradasDigitais[debug]>1));    
+                        printf("EntradaDigital[%u]=%u.\r\n",debug,(entradasDigitais[debug]>1));    
                     }
-                    
                 }
+                
                 time_t seconds = time(NULL);
-                printf("%s\n", ctime(&seconds));
+                printf("Drome %s, Hora-> %s\n",firmVersion,ctime(&seconds));
             }                
             
             if(eventosRTC::rotina10Segundos){                                    
@@ -431,7 +427,7 @@
             }
 
             if(sdCard::deleteSentFiles){
-                pc.printf("Recebido comando para deletar arquivos enviados.\n");
+                printf("Recebido comando para deletar arquivos enviados.\n");
                 sdCard::deleteBanks(sdCard::currentBankSending);
                 if(sdCard::modificaCurrentBank(sdCard::currentBank,!sdCard::currentBankSending)){
                     sdCard::deleteSentFiles=false;
@@ -439,26 +435,33 @@
             }
         }
 
+        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){
-                pc.printf("Fechando socket chave 4.\r\n");
+                if(debug){pc.printf("Fechando socket chave 4.\r\n");}
                 modemCom::closeConnection(modemCom::status.connIDServerCommand);
             }
         }        
     
         if(modemCom::atendendoWebServer){                
                 modemCom::atendendoWebServer = false;
-                pc.printf("Atendendo webServer na conexao %u.\r\n",modemCom::status.connIDWebServer);
+                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){
-            dispositivos[0]->execAct(act);
+            execAct(act);
             boolExecAct = false;    
         }        
     }