teste de publish
Diff: devices.cpp
- Revision:
- 14:2e311903f224
- Parent:
- 13:c1122e7b0b36
--- a/devices.cpp Mon Jan 29 14:22:18 2018 +0000 +++ b/devices.cpp Sat Feb 03 20:14:15 2018 +0000 @@ -1302,18 +1302,18 @@ //Coletando dados do alarmSet e alarmReset pChar = strtok(alarmsSetString,","); - while(pChar!=NULL){ - pc.printf("Lido Alarm Set %lu - <%lu>.\r\n",indexAlarms,atoi(pChar)); + while(pChar!=NULL){ if(atoi(pChar)){ + pc.printf("Lido Alarm Set <%lu>.\r\n",atoi(pChar)); dispositivos[0]->alarmOnOff(atoi(pChar),1); } pChar = strtok(NULL,","); } pChar = strtok(alarmsResetString,","); - while(pChar!=NULL){ - pc.printf("Lido Alarm Reset %lu - <%lu>.\r\n",indexAlarms,atoi(pChar)); + while(pChar!=NULL){ if(atoi(pChar)){ + pc.printf("Lido Alarm Reset <%lu>.\r\n",atoi(pChar)); dispositivos[0]->alarmOnOff(atoi(pChar),0); } pChar = strtok(NULL,","); @@ -1395,30 +1395,33 @@ //sdCardBuf.del(); sdCardBuf.fill("log{data:",9); - //O timestamp é posto nos 4 primeiros bytes (segundos) + //O timestamp é posto nos 5 primeiros bytes (segundos) status "modbus" sdCardBuf.fill(seconds_char,5); for(readingIndex = 0;readingIndex < this->numReadings;readingIndex++){ switch(this->readings[readingIndex].type){ - case modBusType_float: + case modBusType_float: + //pc.printf("Lido um float.\r\n"); 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( + floatBuffer = (float*) malloc(this->readings[readingIndex].numRegs*sizeof(float)+1); //Alocando mais um byte para status + //Aqui vou por na ultima posição a resposta modbus. + ((char*)floatBuffer)[this->readings[readingIndex].numRegs*sizeof(float)]=modBusMaster1::readFloat( this->readings[readingIndex].addr, this->readings[readingIndex].func, this->readings[readingIndex].reg, this->readings[readingIndex].numRegs, floatBuffer - ); + ); }else{ //Busca Interna - floatBuffer = (float*) malloc(sizeof(float)); + floatBuffer = (float*) malloc(sizeof(float)+1); + ((char *)floatBuffer)[4]=0;; if((this->readings[readingIndex].reg<100)&&(this->readings[readingIndex].reg < num_temperatureSensors)){//Registradores das entradas de temperatura //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]; } @@ -1426,33 +1429,35 @@ } //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste()); - sdCardBuf.fill((char *)floatBuffer,((sizeof(float)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status + 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 + //pc.printf("Lido um uint32_t.\r\n"); + uint32_tBuffer = (uint32_t*) malloc(this->readings[readingIndex].numRegs*sizeof(uint32_t)+1); //Alocando mais um byte para status if(this->readings[readingIndex].addr != enderecoControladoraVirtual){ - modBusMaster1::readRegister32BIT(//Ponho o status no ultimo byte + ((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, this->readings[readingIndex].numRegs, uint32_tBuffer - ); - //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste()); + ); }else{ uint32_tBuffer[0] = pulsosEDs[this->readings[readingIndex].reg]; this->readings[readingIndex].numRegs = 1; pulsosEDs[this->readings[readingIndex].reg] = 0; } - sdCardBuf.fill((char *)uint32_tBuffer,((sizeof(uint32_t)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status + ((char*)uint32_tBuffer)[sizeof(uint32_t)]=0; + sdCardBuf.fill((char *)uint32_tBuffer,(sizeof(uint32_t)*this->readings[readingIndex].numRegs)+1);//Ao fim appendo o byte de status free(uint32_tBuffer); break; - case modBusType_uint16_t: + case modBusType_uint16_t: + //pc.printf("Lido um uint16_t.\r\n"); 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(// + uint16_tBuffer = (uint16_t*) malloc((this->readings[readingIndex].numRegs*sizeof(uint16_t))+1);//Alocando mais um byte para status + ((char*)uint16_tBuffer)[this->readings[readingIndex].numRegs*sizeof(uint16_t)]=modBusMaster1::readRegister16BIT(// this->readings[readingIndex].addr, this->readings[readingIndex].func, this->readings[readingIndex].reg, @@ -1460,19 +1465,22 @@ uint16_tBuffer ); //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 + sdCardBuf.fill((char *)uint16_tBuffer,(sizeof(uint16_t)*this->readings[readingIndex].numRegs)+1);//Ao fim appendo o byte de status free(uint16_tBuffer); }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[0]=0; + sdCardBuf.fill(seconds_char,1); //Colocando status de leitura aqui tb } } break; case modBusType_bit: + //pc.printf("Lido um bool.\r\n"); 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 + ((char*)boolBuffer)[1]=modBusMaster1::readCoils( this->readings[readingIndex].addr, this->readings[readingIndex].reg, this->readings[readingIndex].numRegs, @@ -1480,10 +1488,10 @@ ); }else{ boolBuffer = (bool*) malloc(sizeof(bool)); - boolBuffer[0] = entradasDigitais[this->readings[readingIndex].reg]; + boolBuffer[0] = entradasDigitais[this->readings[readingIndex].reg]; } - //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 + //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste()); + sdCardBuf.fill((char *)boolBuffer,(sizeof(bool)+1));//Ao fim appendo o byte de status free(boolBuffer); break; @@ -1492,6 +1500,7 @@ readingIndex = sdCardBuf.fill("}log",4); //Reaproveitando a variável de 16bit readingIndex sdCard::arquivoAberto(40000); //Insiro os dados se for possível. + //pc.printf("Enchendo %lu bytes no arquivo.\r\n",readingIndex); sdCard::insereDadosBank(sdCardBuf.get(),readingIndex); } @@ -1540,12 +1549,13 @@ int configuraDevices(FILE *devicesCfg) { - uint16_t linhas=0; - //uint16_t leituras = 0; + uint16_t linhas=0; char linha[maxCaractereLeLinha]; uint8_t estadoConfiguracao=estadoConfiguracao_idle; int8_t dispositivoEmConfiguracao = -1; + leituras = 0; + while(fgets(linha,maxCaractereLeLinha,devicesCfg)){ if(strstr(linha,"alarmSet")) { //printf("Criando alarme no dispositivo de indice %u.\n",dispositivoEmConfiguracao); @@ -1553,20 +1563,25 @@ estadoConfiguracao = estadoConfiguracao_alarmSet; } - /*if(estadoConfiguracao == estadoConfiguracao_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; - leituras++; + estadoConfiguracao = estadoConfiguracao_readingsSet; } + if(strstr(linha,"scheduleSet")) { //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao); qtdSchedules++; - estadoConfiguracao = estadoConfiguracao_scheduleSet; + estadoConfiguracao = estadoConfiguracao_idle; } if(strstr(linha,"scheduleExceptionsSet")) { @@ -1577,7 +1592,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,12 +1618,6 @@ estadoConfiguracao = estadoConfiguracao_alarmSet; } - if(strstr(linha,"readingsSet")) { - //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao); - leituras++; - estadoConfiguracao = estadoConfiguracao_readingsSet; - } - if(strstr(linha,"scheduleExceptionSet")) { //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao); qtdScheduleExceptions++; @@ -1654,6 +1663,11 @@ dispositivos[dispositivoEmConfiguracao]->setScheduleException(linha); break; } + + if(strstr(linha,"readingsSet")) { + //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao); + estadoConfiguracao = estadoConfiguracao_readingsSet; + } } return 1;