teste de publish
Diff: devices.cpp
- Revision:
- 15:6d9e9cafe138
- Parent:
- 13:c1122e7b0b36
- Child:
- 16:1b43a57ee676
--- 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);