teste de publish

Revision:
15:6d9e9cafe138
Parent:
13:c1122e7b0b36
Child:
16:1b43a57ee676
diff -r c1122e7b0b36 -r 6d9e9cafe138 devices.cpp
--- a/devices.cpp	Mon Jan 29 14:22:18 2018 +0000
+++ b/devices.cpp	Tue Feb 06 16:33:21 2018 +0000
@@ -1404,7 +1404,7 @@
                     if(this->readings[readingIndex].addr != enderecoControladoraVirtual){
                         //Busca externa via Modbus
                         floatBuffer = (float*) malloc(((this->readings[readingIndex].numRegs*sizeof(float))+1)); //Alocando mais um byte para status
-                        modBusMaster1::readFloat(
+                        ((char *)floatBuffer)[(this->readings[readingIndex].numRegs*sizeof(float))] = modBusMaster1::readFloat(
                             this->readings[readingIndex].addr,
                             this->readings[readingIndex].func,
                             this->readings[readingIndex].reg,
@@ -1418,7 +1418,7 @@
                             //Populando floatBuffer com a temperaturas                            
                             floatBuffer[0] = temperaturas[this->readings[readingIndex].reg];                            
                         }
-                        if((this->readings[readingIndex].reg>100)&&(this->readings[readingIndex].reg<104)){
+                        if((this->readings[readingIndex].reg>=100)&&(this->readings[readingIndex].reg<104)){
                             //Registradores das entradas analógicas                            
                             floatBuffer[0] = aiFiltrada[this->readings[readingIndex].reg - 100];                            
                         }
@@ -1429,10 +1429,10 @@
                     sdCardBuf.fill((char *)floatBuffer,((sizeof(float)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status
                     free(floatBuffer);
                 break;
-            case modBusType_uint32_t:
-                    uint32_tBuffer = (uint32_t*) malloc((this->readings[readingIndex].numRegs*sizeof(uint32_t))+1); //Alocando mais um byte para status
+            case modBusType_uint32_t:                    
                     if(this->readings[readingIndex].addr != enderecoControladoraVirtual){
-                        modBusMaster1::readRegister32BIT(//Ponho o status no ultimo byte
+                        uint32_tBuffer = (uint32_t*) malloc((this->readings[readingIndex].numRegs*sizeof(uint32_t))+1); //Alocando mais um byte para status
+                        ((char *)uint32_tBuffer)[(this->readings[readingIndex].numRegs*sizeof(uint32_t))] = modBusMaster1::readRegister32BIT(//Ponho o status no ultimo byte
                             this->readings[readingIndex].addr,
                             this->readings[readingIndex].func,
                             this->readings[readingIndex].reg,
@@ -1441,6 +1441,7 @@
                         );
                         //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
                     }else{
+                        uint32_tBuffer = (uint32_t*) malloc(sizeof(uint32_t)+1); //Alocando mais um byte para status
                         uint32_tBuffer[0] = pulsosEDs[this->readings[readingIndex].reg];
                         this->readings[readingIndex].numRegs = 1;
                         pulsosEDs[this->readings[readingIndex].reg] = 0;
@@ -1449,10 +1450,10 @@
                     free(uint32_tBuffer);            
                 break;
                 
-            case modBusType_uint16_t:                    
+            case modBusType_uint16_t:                                        
                     if(this->readings[readingIndex].addr!=enderecoControladoraVirtual){
                         uint16_tBuffer = (uint16_t*) malloc(((this->readings[readingIndex].numRegs*sizeof(uint16_t))+1));//Alocando mais um byte para status
-                        modBusMaster1::readRegister16BIT(//
+                        ((char *)uint16_tBuffer)[(this->readings[readingIndex].numRegs*sizeof(uint16_t))] = modBusMaster1::readRegister16BIT(//
                             this->readings[readingIndex].addr,
                             this->readings[readingIndex].func,
                             this->readings[readingIndex].reg,
@@ -1462,25 +1463,27 @@
                         //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
                         sdCardBuf.fill((char *)uint16_tBuffer,((sizeof(uint16_t)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status
                         free(uint16_tBuffer); 
-                    }else{
+                    }else{                        
                         if((this->readings[readingIndex].reg>0)&&((this->readings[readingIndex].reg + this->readings[readingIndex].numRegs)<=4)){                                                        
-                            sdCardBuf.fill((char *)&aiFiltrada[this->readings[readingIndex].reg-1],sizeof(uint16_t)*this->readings[readingIndex].numRegs);    
+                            sdCardBuf.fill((char *)&aiFiltrada[this->readings[readingIndex].reg-1],sizeof(uint16_t)*this->readings[readingIndex].numRegs);
+                            seconds_char[4]=0;
+                            sdCardBuf.fill((char *)&seconds_char[4],1);
                         }
                      }
                 break;
             
             case modBusType_bit:
-                    if(this->readings[readingIndex].addr != enderecoControladoraVirtual){
-                        boolBuffer = (bool*) malloc(((this->readings[readingIndex].numRegs*sizeof(bool))+1));//Alocando mais um byte para status
-                        modBusMaster1::readCoils(
+                    boolBuffer = (bool*) malloc(sizeof(bool)+1);//Alocando mais um byte para status
+                    if(this->readings[readingIndex].addr != enderecoControladoraVirtual){                        
+                        ((char *)boolBuffer)[(this->readings[readingIndex].numRegs*sizeof(bool))] = modBusMaster1::readCoils(
                             this->readings[readingIndex].addr,                        
                             this->readings[readingIndex].reg,
                             this->readings[readingIndex].numRegs,
                             boolBuffer
                         );
-                    }else{
-                        boolBuffer = (bool*) malloc(sizeof(bool));
+                    }else{                        
                         boolBuffer[0] = entradasDigitais[this->readings[readingIndex].reg];
+                        ((char *)boolBuffer)[1]=0;
                      }
                     //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
                     sdCardBuf.fill((char *)boolBuffer,((sizeof(bool)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status
@@ -1552,15 +1555,20 @@
             alarmes++;
             estadoConfiguracao = estadoConfiguracao_alarmSet;
         }        
+    
+        if(strstr(linha,"readingsEnd")) {
+            //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);            
+            estadoConfiguracao = estadoConfiguracao_idle;
+            leituras++;
+        }
 
-        /*if(estadoConfiguracao == estadoConfiguracao_readingsSet){
+        if(estadoConfiguracao == estadoConfiguracao_readingsSet){
             leituras++;
-        }*/
+        }
 
         if(strstr(linha,"readingsSet")) {
             //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);            
-            estadoConfiguracao = estadoConfiguracao_readingsSet;
-            leituras++;
+            estadoConfiguracao = estadoConfiguracao_readingsSet;            
         }
 
         if(strstr(linha,"scheduleSet")) {
@@ -1577,7 +1585,7 @@
 
         linhas++;
     }
-    printf("Contei %u linha(s), configurei %u dispositivo(s), instalei %u alarme(s), %u leituras(s) e %u schedule(s) nos dispositivo(s).\n",linhas,devices,alarmes,leituras,qtdSchedules);
+    printf("Contei %u linha(s), configurei %u dispositivo(s), instalei %u alarme(s), %u leitura(s) e %u schedule(s) nos dispositivo(s).\n",linhas,devices,alarmes,leituras,qtdSchedules);
     //Reservar memoria aqui.
     
     //if(resizeArray(this->numReadings, this->numReadings+1, (char **)&this->readings,sizeof(reading))) {        
@@ -1603,9 +1611,18 @@
             estadoConfiguracao = estadoConfiguracao_alarmSet;
         }
 
-        if(strstr(linha,"readingsSet")) {
+        if(strstr(linha,"readingsEnd")) {
             //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
+            estadoConfiguracao = estadoConfiguracao_idle;
+        }
+
+        if(estadoConfiguracao == estadoConfiguracao_readingsSet){
             leituras++;
+        }
+
+
+        if(strstr(linha,"readingsSet")) {
+            //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);            
             estadoConfiguracao = estadoConfiguracao_readingsSet;
         }
 
@@ -1613,12 +1630,7 @@
             //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
             qtdScheduleExceptions++;
             estadoConfiguracao = estadoConfiguracao_scheduleExceptionSet;
-        }
-
-        if(strstr(linha,"readingsEnd")) {
-            //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
-            estadoConfiguracao = estadoConfiguracao_idle;
-        }
+        }        
         
         if(strstr(linha,"scheduleSet")) {
             //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);