teste de publish
Diff: devices.cpp
- Revision:
- 19:d52176ff683d
- Parent:
- 18:66fa6fcba212
- Child:
- 20:e0656406d5b8
--- a/devices.cpp Mon May 07 22:45:07 2018 +0000 +++ b/devices.cpp Fri May 25 23:45:54 2018 +0000 @@ -9,76 +9,16 @@ estadoConfiguracao_scheduleExceptionSet }; -/* -Antigo -uint8_t resizeArray(uint32_t atual, uint32_t novo, char **array,uint16_t sizeUnit) -{ - uint32_t i; - char *p = (char *) malloc(sizeUnit*novo); - char *aux; - - if(p==NULL) { - return 0; - } - - aux = *array; - - if(atual) { - //So sigo em frente se tinha algo dentro deste array - for(i=0; i<(novo*sizeUnit); i++) { - p[i]=aux[i]; - } - free(aux); - } - - *array = p; - return 1; -} -*/ - -/*uint8_t resizeArray(uint32_t atual, uint32_t novo, char **array,uint16_t sizeUnit) -{ - uint32_t i; - char *p = (char *) malloc(sizeUnit*novo); +uint8_t numAlarms; +uint8_t numSchedules; +uint8_t numScheduleExceptions; +uint16_t numReadings; +alarm alarms[maxAlarms] __attribute__ ((section("AHBSRAM0"))); +reading readings[maxReadings] __attribute__ ((section("AHBSRAM0"))); +schedule schedules[maxSchedules] __attribute__ ((section("AHBSRAM0"))); +scheduleException scheduleExceptions[maxSchedulesExceptions] __attribute__ ((section("AHBSRAM0"))); - if(p==NULL) { - return 0; - } - - if(atual) { - //So sigo em frente se tinha algo dentro deste array - for(i=0; i<(novo*sizeUnit); i++) { - p[i]=*array[i]; - } - free(*array); - } - - *array = p; - return 1; -}*/ - -void writeReadingsToSD(){ - int i; - for(i=0;i<devices;i++){ - dispositivos[i]->writeReadingsToSD(); - } -} - -void verifyAlarms(){ - int i; - for(i=0;i<devices;i++){ - dispositivos[i]->verifyAlarms(); - } -} - -void verifySchedules(){ - int i; - for(i=0;i<devices;i++){ - dispositivos[i]->verifySchedules(); - } -} - -void device::floatToBin(uint8_t dir, float *v,uint8_t *p) +void floatToBin(uint8_t dir, float *v,uint8_t *p) { //Variáveis locais union { @@ -100,7 +40,7 @@ } } -void device::uint32_t_ToBin(uint8_t dir, uint32_t *v,uint8_t *p) +void uint32_t_ToBin(uint8_t dir, uint32_t *v,uint8_t *p) { //Variáveis locais union { @@ -122,7 +62,7 @@ } } -void device::uint16_t_ToBin(uint8_t dir, uint16_t *v,uint8_t *p) +void uint16_t_ToBin(uint8_t dir, uint16_t *v,uint8_t *p) { //Variáveis locais union { @@ -144,8 +84,70 @@ } } +void mostraAlarmeEmExecucao(uint32_t indice){ + printf("Alarme %u:\n",indice); + printf("\tId <%lu>.\n",alarms[indice].id); + printf("\tSeconds <%lu>.\n",alarms[indice].seconds); + printf("\tAddr %u, func %u, reg %lu.\n",alarms[indice].addrModbusRead,alarms[indice].funcModbusRead,alarms[indice].regModbusRead); + if(alarms[indice].type==modBusType_float) { + float value; + floatToBin(0,&value,&alarms[indice].value[0]); + if(alarms[indice].max){ + printf("\tFloat max <%f>.\n",value); + } + else{printf("\tFloat min <%f>.\n",value);} + } + + if(alarms[indice].type==modBusType_uint32_t) { + uint32_t value; + uint32_t_ToBin(0,&value,&alarms[indice].value[0]); + if(alarms[indice].max){ + printf("\tuint32_t max <%lu>.\n",value); + } + else{printf("\tuint32_t min <%lu>.\n",value);} + } + + if(alarms[indice].type==modBusType_uint16_t) { + uint16_t value; + uint16_t_ToBin(0,&value,&alarms[indice].value[0]); + if(alarms[indice].max){ + printf("\tuint16_t max <%lu>.\n",value); + } + else{printf("\tuint16_t min <%lu>.\n",value);} + } + + if(alarms[indice].type==modBusType_int32_t) { + uint32_t value; + uint32_t_ToBin(0,&value,&alarms[indice].value[0]); + if(alarms[indice].max){ + printf("\tint32_t max <%ld>.\n",(int32_t)value); + } + else{printf("\tint32_t min <%ld>.\n",(int32_t)value);} + } + + if(alarms[indice].type==modBusType_int16_t) { + uint16_t value; + uint16_t_ToBin(0,&value,&alarms[indice].value[0]); + if(alarms[indice].max){ + printf("\tint16_t max <%ld>.\n",(int16_t)value); + } + else{printf("\tint16_t min <%ld>.\n",(int16_t)value);} + } + + if(alarms[indice].type==modBusType_bit) { + uint8_t value; + value=alarms[indice].value[0]; + if(alarms[indice].max){ + printf("\tBIT max <%lu>.\n",value); + } + else{printf("\tBIT min <%lu>.\n",value);} + } + + printf("\tact:%lu\n",alarms[indice].idAct); +} + //Funcao restaurada -void device::verifyAlarms(){ +void verifyAlarms(){ //Inicio da verificação uint16_t alarmIndex; float leitura_float,value_float; @@ -155,79 +157,82 @@ bool alarmFound; char aux[30]; - for(alarmIndex = 0;alarmIndex < this->numAlarms;alarmIndex++){ + //for(alarmIndex = 0;alarmIndex < alarmes;alarmIndex++){ + for(alarmIndex = 0;alarmIndex < alarmes;alarmIndex++){ - /*pc.printf("\r\nTeste Alarm, id<%lu>.\r\n",this->alarms[alarmIndex].id); - pc.printf("ON<%lu>.\r\n",this->alarms[alarmIndex].on); - pc.printf("secAlarm<%lu>.\r\n",this->alarms[alarmIndex].secAlarm); - pc.printf("alarmFound<%lu>.\r\n",this->alarms[alarmIndex].alarmFound);*/ - if(this->alarms[alarmIndex].on){ - alarmFound=this->alarms[alarmIndex].alarmFound; - switch(this->alarms[alarmIndex].type){ + /*pc.printf("\r\nTeste Alarm, id<%lu>.\r\n",alarms[alarmIndex].id); + pc.printf("ON<%lu>.\r\n",alarms[alarmIndex].on); + pc.printf("secAlarm<%lu>.\r\n",alarms[alarmIndex].secAlarm); + pc.printf("alarmFound<%lu>.\r\n",alarms[alarmIndex].alarmFound);*/ + //if((alarms[alarmIndex].on)&&(alarms[alarmIndex].id<100000000)){ + if(alarms[alarmIndex].on){ + if(debug){mostraAlarmeEmExecucao(alarmIndex);} + alarmFound=alarms[alarmIndex].alarmFound; + switch(alarms[alarmIndex].type){ case modBusType_float: //Montar float! - this->floatToBin(0,&value_float,&this->alarms[alarmIndex].value[0]); + floatToBin(0,&value_float,&alarms[alarmIndex].value[0]); - if(this->alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus; + if(alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus; modBusMaster1::readFloat( - this->alarms[alarmIndex].addrModbusRead, - this->alarms[alarmIndex].funcModbusRead, - this->alarms[alarmIndex].regModbusRead, + alarms[alarmIndex].addrModbusRead, + alarms[alarmIndex].funcModbusRead, + alarms[alarmIndex].regModbusRead, 1, &leitura_float ); }else{ - //leitura_float = temperaturas[this->alarms[alarmIndex].regModbusRead]; + //leitura_float = temperaturas[alarms[alarmIndex].regModbusRead]; //Busca Interna - if(this->alarms[alarmIndex].regModbusRead<100){//Registradores das entradas de temperatura + if(alarms[alarmIndex].regModbusRead<100){//Registradores das entradas de temperatura //Populando floatBuffer com a temperaturas - if(this->alarms[alarmIndex].regModbusRead < num_temperatureSensors){ - leitura_float = temperaturas[this->alarms[alarmIndex].regModbusRead]; + if(alarms[alarmIndex].regModbusRead < num_temperatureSensors){ + leitura_float = temperaturas[alarms[alarmIndex].regModbusRead]; } } - if((this->alarms[alarmIndex].regModbusRead>99)&&(this->alarms[alarmIndex].regModbusRead<104)){//Registradores das entradas analógicas - leitura_float = aiFiltrada[this->alarms[alarmIndex].regModbusRead - 100]; + if((alarms[alarmIndex].regModbusRead>99)&&(alarms[alarmIndex].regModbusRead<104)){//Registradores das entradas analógicas + leitura_float = aiFiltrada[alarms[alarmIndex].regModbusRead - 100]; } } - if(this->alarms[alarmIndex].max!=0){ + if(alarms[alarmIndex].max!=0){ if(leitura_float > value_float){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } } }else{ if(leitura_float < value_float){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } @@ -236,61 +241,61 @@ break; case modBusType_uint32_t: //Montar uint32_t! - this->uint32_t_ToBin(0,&value_uint32_t,&this->alarms[alarmIndex].value[0]); + uint32_t_ToBin(0,&value_uint32_t,&alarms[alarmIndex].value[0]); - if(this->alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus; + if(alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus; //Bloco de leitura da variável modBus; modBusMaster1::readRegister32BIT( - this->alarms[alarmIndex].addrModbusRead, - this->alarms[alarmIndex].funcModbusRead, - this->alarms[alarmIndex].regModbusRead, + alarms[alarmIndex].addrModbusRead, + alarms[alarmIndex].funcModbusRead, + alarms[alarmIndex].regModbusRead, 1, &leitura_uint32_t ); }else{ - leitura_uint32_t = pulsosEDs[this->alarms[alarmIndex].regModbusRead]; + leitura_uint32_t = pulsosEDs[alarms[alarmIndex].regModbusRead]; } - if(this->alarms[alarmIndex].max!=0){ + if(alarms[alarmIndex].max!=0){ if(leitura_uint32_t > value_uint32_t){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; - pulsosEDs[this->alarms[alarmIndex].regModbusRead]=0; + pulsosEDs[alarms[alarmIndex].regModbusRead]=0; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } } }else{ if(leitura_uint32_t < value_uint32_t){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; - pulsosEDs[this->alarms[alarmIndex].regModbusRead]=0; + pulsosEDs[alarms[alarmIndex].regModbusRead]=0; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } @@ -300,61 +305,61 @@ case modBusType_uint16_t: //Montar uint16_t! - this->uint16_t_ToBin(0,&value_uint16_t,&this->alarms[alarmIndex].value[0]); + uint16_t_ToBin(0,&value_uint16_t,&alarms[alarmIndex].value[0]); - if(this->alarms[alarmIndex].addrModbusRead!=enderecoControladoraVirtual){ + if(alarms[alarmIndex].addrModbusRead!=enderecoControladoraVirtual){ //Bloco de leitura da variável modBus; modBusMaster1::readRegister16BIT( - this->alarms[alarmIndex].addrModbusRead, - this->alarms[alarmIndex].funcModbusRead, - this->alarms[alarmIndex].regModbusRead, + alarms[alarmIndex].addrModbusRead, + alarms[alarmIndex].funcModbusRead, + alarms[alarmIndex].regModbusRead, 1, &leitura_uint16_t ); }else{ - if(this->alarms[alarmIndex].regModbusRead<4){ - leitura_uint16_t = aiFiltrada[this->alarms[alarmIndex].regModbusRead]; + if(alarms[alarmIndex].regModbusRead<4){ + leitura_uint16_t = aiFiltrada[alarms[alarmIndex].regModbusRead]; } } - if(this->alarms[alarmIndex].max!=0){ + if(alarms[alarmIndex].max!=0){ if(leitura_uint16_t > value_uint16_t){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } } }else{ if(leitura_uint16_t < value_uint16_t){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } @@ -364,61 +369,61 @@ case modBusType_int32_t: //Montar uint32_t! - this->uint32_t_ToBin(0,&value_uint32_t,&this->alarms[alarmIndex].value[0]); + uint32_t_ToBin(0,&value_uint32_t,&alarms[alarmIndex].value[0]); - if(this->alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus; + if(alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus; //Bloco de leitura da variável modBus; modBusMaster1::readRegister32BIT( - this->alarms[alarmIndex].addrModbusRead, - this->alarms[alarmIndex].funcModbusRead, - this->alarms[alarmIndex].regModbusRead, + alarms[alarmIndex].addrModbusRead, + alarms[alarmIndex].funcModbusRead, + alarms[alarmIndex].regModbusRead, 1, &leitura_uint32_t ); }else{ - leitura_uint32_t = pulsosEDs[this->alarms[alarmIndex].regModbusRead]; + leitura_uint32_t = pulsosEDs[alarms[alarmIndex].regModbusRead]; } - if(this->alarms[alarmIndex].max!=0){ + if(alarms[alarmIndex].max!=0){ if(((int32_t)leitura_uint32_t) > ((int32_t)value_uint32_t)){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; - pulsosEDs[this->alarms[alarmIndex].regModbusRead]=0; + pulsosEDs[alarms[alarmIndex].regModbusRead]=0; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } } }else{ if(((int32_t)leitura_uint32_t) < ((int32_t)value_uint32_t)){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; - pulsosEDs[this->alarms[alarmIndex].regModbusRead]=0; + pulsosEDs[alarms[alarmIndex].regModbusRead]=0; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } @@ -428,61 +433,61 @@ case modBusType_int16_t: //Montar uint16_t! - this->uint16_t_ToBin(0,&value_uint16_t,&this->alarms[alarmIndex].value[0]); + uint16_t_ToBin(0,&value_uint16_t,&alarms[alarmIndex].value[0]); - if(this->alarms[alarmIndex].addrModbusRead!=enderecoControladoraVirtual){ + if(alarms[alarmIndex].addrModbusRead!=enderecoControladoraVirtual){ //Bloco de leitura da variável modBus; modBusMaster1::readRegister16BIT( - this->alarms[alarmIndex].addrModbusRead, - this->alarms[alarmIndex].funcModbusRead, - this->alarms[alarmIndex].regModbusRead, + alarms[alarmIndex].addrModbusRead, + alarms[alarmIndex].funcModbusRead, + alarms[alarmIndex].regModbusRead, 1, &leitura_uint16_t ); }else{ - if(this->alarms[alarmIndex].regModbusRead<4){ - leitura_uint16_t = aiFiltrada[this->alarms[alarmIndex].regModbusRead]; + if(alarms[alarmIndex].regModbusRead<4){ + leitura_uint16_t = aiFiltrada[alarms[alarmIndex].regModbusRead]; } } - if(this->alarms[alarmIndex].max!=0){ + if(alarms[alarmIndex].max!=0){ if(((int16_t)leitura_uint16_t) > ((int16_t)value_uint16_t)){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } } }else{ if(((int16_t)leitura_uint16_t) < ((int16_t)value_uint16_t)){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } @@ -494,35 +499,35 @@ case modBusType_bit: //Montar bit! //O valor de alarm para bit é o value[0]!!! - value_bit = (this->alarms[alarmIndex].value[0] > 0); //Qualquer valor maior que zero da saída 1 + value_bit = (alarms[alarmIndex].value[0] > 0); //Qualquer valor maior que zero da saída 1 - if(this->alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus; + if(alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus; //Bloco de leitura da variável modBus; modBusMaster1::readCoils( - this->alarms[alarmIndex].addrModbusRead, - this->alarms[alarmIndex].regModbusRead, + alarms[alarmIndex].addrModbusRead, + alarms[alarmIndex].regModbusRead, 1, &leitura_bit ); }else{ - leitura_bit = entradasDigitais[this->alarms[alarmIndex].regModbusRead]; + leitura_bit = entradasDigitais[alarms[alarmIndex].regModbusRead]; } if(leitura_bit == value_bit){ - this->alarms[alarmIndex].secAlarm++; - if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){ - this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds; + alarms[alarmIndex].secAlarm++; + if(alarms[alarmIndex].secAlarm >= alarms[alarmIndex].seconds){ + alarms[alarmIndex].secAlarm = alarms[alarmIndex].seconds; alarmFound = true; } }else{ - if(this->alarms[alarmIndex].secAlarm==1){ - this->alarms[alarmIndex].secAlarm=0; + if(alarms[alarmIndex].secAlarm==1){ + alarms[alarmIndex].secAlarm=0; alarmFound = false; }else{ - if(this->alarms[alarmIndex].secAlarm){ + if(alarms[alarmIndex].secAlarm){ if(alarmFound){ - this->alarms[alarmIndex].secAlarm--; + alarms[alarmIndex].secAlarm--; }else{ - this->alarms[alarmIndex].secAlarm=0; + alarms[alarmIndex].secAlarm=0; } } } @@ -530,14 +535,14 @@ break; } - + //Verifico se houve alarme não tratado - if(this->alarms[alarmIndex].alarmFound!=alarmFound){ - this->alarms[alarmIndex].alarmFound=alarmFound; + if(alarms[alarmIndex].alarmFound!=alarmFound){ + alarms[alarmIndex].alarmFound=alarmFound; if(alarmFound){ - printf("Alarm FOUND! Id <%lu>.\n",this->alarms[alarmIndex].id); + printf("Alarm FOUND! Id <%lu>.\n",alarms[alarmIndex].id); sdCardBuf.fill("log{alarm:event:found;id:",25); - sprintf(aux,"%lu",this->alarms[alarmIndex].id); + sprintf(aux,"%lu",alarms[alarmIndex].id); sdCardBuf.fill(aux,strlen(aux)); sdCardBuf.fill(";timestamp:",11); @@ -545,17 +550,17 @@ sdCardBuf.fill(aux,strlen(aux)); sdCardBuf.fill(";reading:",9); - if(this->alarms[alarmIndex].type == modBusType_float){ + if(alarms[alarmIndex].type == modBusType_float){ sprintf(aux,"%f",leitura_float); - }else if(this->alarms[alarmIndex].type == modBusType_uint32_t){ + }else if(alarms[alarmIndex].type == modBusType_uint32_t){ sprintf(aux,"%lu",leitura_uint32_t); - }else if(this->alarms[alarmIndex].type == modBusType_uint16_t){ + }else if(alarms[alarmIndex].type == modBusType_uint16_t){ sprintf(aux,"%lu",leitura_uint16_t); - }else if(this->alarms[alarmIndex].type == modBusType_int32_t){ + }else if(alarms[alarmIndex].type == modBusType_int32_t){ sprintf(aux,"%ld",(int32_t)leitura_uint32_t); - }else if(this->alarms[alarmIndex].type == modBusType_int16_t){ + }else if(alarms[alarmIndex].type == modBusType_int16_t){ sprintf(aux,"%ld",(int16_t)leitura_uint16_t); - }else if(this->alarms[alarmIndex].type == modBusType_bit){ + }else if(alarms[alarmIndex].type == modBusType_bit){ sprintf(aux,"%lu",leitura_bit); } sdCardBuf.fill(aux,strlen(aux)); @@ -563,11 +568,11 @@ sdCard::insereDadosBank(sdCardBuf.get(),leitura_uint16_t); boolExecAct=true; - act = this->alarms[alarmIndex].idAct; + act = alarms[alarmIndex].idAct; }else{ - printf("Alarm RELEASE! id <%lu>.\n",this->alarms[alarmIndex].id); + printf("Alarm RELEASE! id <%lu>.\n",alarms[alarmIndex].id); sdCardBuf.fill("log{alarm:event:release;id:",27); - sprintf(aux,"%lu",this->alarms[alarmIndex].id); + sprintf(aux,"%lu",alarms[alarmIndex].id); sdCardBuf.fill(aux,strlen(aux)); sdCardBuf.fill(";timestamp:",11); @@ -585,7 +590,7 @@ } } -void device::verifySchedules(){ +void verifySchedules(){ char stringTime[30]; char *weekdayString; time_t seconds = time(NULL)+5; @@ -623,19 +628,19 @@ //pc.printf("Passo 1 .\r\n"); for(indexSchedule = 0; indexSchedule < qtdSchedules; indexSchedule++){ //pc.printf("Passo 2.\r\n"); - if(this->schedules[indexSchedule].weekday&(0x1<<weekday)){ + if(schedules[indexSchedule].weekday&(0x1<<weekday)){ //pc.printf("Passo 3.\r\n"); - if(this->schedules[indexSchedule].minute == minuto){ + if(schedules[indexSchedule].minute == minuto){ //pc.printf("Passo 4.\r\n"); //Verifico se já executei e então executo a ação. - if(!this->schedules[indexSchedule].actSent){ + if(!schedules[indexSchedule].actSent){ //pc.printf("Passo 5 .\r\n"); //Executa a ação; - for(indexScheduleException = 0;indexScheduleException<this->numScheduleExceptions;indexScheduleException++){ + for(indexScheduleException = 0;indexScheduleException<numScheduleExceptions;indexScheduleException++){ //pc.printf("Passo 6.\r\n"); - if(this->schedules[indexSchedule].id == this->scheduleExceptions[indexScheduleException].id_schedule){ + if(schedules[indexSchedule].id == scheduleExceptions[indexScheduleException].id_schedule){ //pc.printf("Passo 7.\r\n"); - seconds = this->scheduleExceptions[indexScheduleException].timestamp; + seconds = scheduleExceptions[indexScheduleException].timestamp; strftime(stringTime, 30, "%y,%d,%m", localtime(&seconds)); anoScheduleException=atoi(strtok(stringTime,",")); diaScheduleException=atoi(strtok(NULL,",")); @@ -666,19 +671,19 @@ } if(!exceptionDetected){ diversos::wdt.kick(90.0); - this->execAct(this->schedules[indexSchedule].idAct); - this->schedules[indexSchedule].actSent = true; + execAct(schedules[indexSchedule].idAct); + schedules[indexSchedule].actSent = true; } } }else{ - this->schedules[indexSchedule].actSent = false; + schedules[indexSchedule].actSent = false; } } } } /* -void device::verifySchedules(){ +void verifySchedules(){ char stringTime[15]; char *weekdayString; time_t seconds = time(NULL); @@ -703,64 +708,64 @@ //printf("\r\n\r\nMinuto %lu.\r\n\r\n",minuto); for(indexSchedule = 0; indexSchedule < qtdSchedules; indexSchedule++){ //printf("Executando item %u do for de schedules.\r\n\r\n",indexSchedule); - if((this->schedules[indexSchedule].weekday == weekday)||(this->schedules[indexSchedule].weekday == 0)){ + if((schedules[indexSchedule].weekday == weekday)||(schedules[indexSchedule].weekday == 0)){ //Se for um alarme para o dia de hoje ou o alarme independer de dia (Se o dia for zero) //printf("Hoje eh dia de executar a acão do schedule indice %u.\r\n\r\n",indexSchedule); - if(this->schedules[indexSchedule].minute == minuto){ + if(schedules[indexSchedule].minute == minuto){ //Verifico se já executei e então executo a ação. - if(!this->schedules[indexSchedule].actSent){ + if(!schedules[indexSchedule].actSent){ //Executa a ação; //printf("Executando a acao!\r\n\r\n"); - this->execAct(this->schedules[indexSchedule].idAct); - this->schedules[indexSchedule].actSent = true; + execAct(schedules[indexSchedule].idAct); + schedules[indexSchedule].actSent = true; } }else{ - this->schedules[indexSchedule].actSent = false; + schedules[indexSchedule].actSent = false; } } } } */ /* -uint8_t device::execActSchedule(uint32_t index){ - switch(this->schedules[index].actType){ +uint8_t execActSchedule(uint32_t index){ + switch(schedules[index].actType){ case modBusType_float: float floatValueToWrite; //writeFloat(uint8_t,uint16_t,uint8_t,float*); - this->floatToBin(0,&floatValueToWrite,&this->schedules[index].actValue[0]); + floatToBin(0,&floatValueToWrite,&schedules[index].actValue[0]); modBusMaster1::writeFloat( - this->schedules[index].param1, - this->schedules[index].param2, - this->schedules[index].param3, + schedules[index].param1, + schedules[index].param2, + schedules[index].param3, &floatValueToWrite ); break; case modBusType_uint32_t: uint32_t uint32ValueToWrite; - this->uint32_t_ToBin(0,&uint32ValueToWrite,&this->schedules[index].actValue[0]); + uint32_t_ToBin(0,&uint32ValueToWrite,&schedules[index].actValue[0]); modBusMaster1::writeRegister32BIT( - this->schedules[index].param1, - this->schedules[index].param2, - this->schedules[index].param3, + schedules[index].param1, + schedules[index].param2, + schedules[index].param3, &uint32ValueToWrite ); break; case modBusType_uint16_t: uint16_t uint16ValueToWrite; - this->uint16_t_ToBin(0,&uint16ValueToWrite,&this->schedules[index].actValue[0]); + uint16_t_ToBin(0,&uint16ValueToWrite,&schedules[index].actValue[0]); modBusMaster1::writeRegister16BIT( - this->schedules[index].param1, - this->schedules[index].param2, - this->schedules[index].param3, + schedules[index].param1, + schedules[index].param2, + schedules[index].param3, &uint16ValueToWrite ); break; case modBusType_bit: bool boolValueToWrite; - boolValueToWrite = (this->schedules[index].actValue[0] != 0); + boolValueToWrite = (schedules[index].actValue[0] != 0); modBusMaster1::writeSingleCoil( - this->schedules[index].param1, - this->schedules[index].param3, + schedules[index].param1, + schedules[index].param3, boolValueToWrite ); break; @@ -773,7 +778,7 @@ //printf("\r\n===================DEBUG(Schedule)===================\r\n"); //"Ir:0,6E01FFFFS" - sprintf(indexBusca,"Ir:%u,",this->schedules[index].param3); + sprintf(indexBusca,"Ir:%u,",schedules[index].param3); //printf("indexBusca = <%s>.\r\n",indexBusca); if(sdCard::abreArquivo(&sdCard::devices,"r")){ do{ @@ -790,7 +795,7 @@ //Neste ponto já tenho o meu comando pronto para ser executado dentro de comandoIr; //printf("\r\n\r\n\r\nEstou enviando o comando %s de dentro do schedule.\r\n\r\n\r\n",strtok(NULL,"S")); deserializaPacoteIR(strtok(NULL,"S")); - enviaComandoIR(this->schedules[index].param1,this->schedules[index].param2); + enviaComandoIR(schedules[index].param1,schedules[index].param2); } }else{ return false; @@ -802,45 +807,45 @@ } */ /* -uint8_t device::execActAlarm(uint32_t index){ - switch(this->alarms[index].actType){ +uint8_t execActAlarm(uint32_t index){ + switch(alarms[index].actType){ case modBusType_float: float floatValueToWrite; //writeFloat(uint8_t,uint16_t,uint8_t,float*); - this->floatToBin(0,&floatValueToWrite,&this->alarms[index].actValue[0]); + floatToBin(0,&floatValueToWrite,&alarms[index].actValue[0]); modBusMaster1::writeFloat( - this->alarms[index].addrModbusWrite, - this->alarms[index].funcModbusWrite, - this->alarms[index].regModbusWrite, + alarms[index].addrModbusWrite, + alarms[index].funcModbusWrite, + alarms[index].regModbusWrite, &floatValueToWrite ); break; case modBusType_uint32_t: uint32_t uint32ValueToWrite; - this->uint32_t_ToBin(0,&uint32ValueToWrite,&this->alarms[index].actValue[0]); + uint32_t_ToBin(0,&uint32ValueToWrite,&alarms[index].actValue[0]); modBusMaster1::writeRegister32BIT( - this->alarms[index].addrModbusWrite, - this->alarms[index].funcModbusWrite, - this->alarms[index].regModbusWrite, + alarms[index].addrModbusWrite, + alarms[index].funcModbusWrite, + alarms[index].regModbusWrite, &uint32ValueToWrite ); break; case modBusType_uint16_t: uint16_t uint16ValueToWrite; - this->uint16_t_ToBin(0,&uint16ValueToWrite,&this->alarms[index].actValue[0]); + uint16_t_ToBin(0,&uint16ValueToWrite,&alarms[index].actValue[0]); modBusMaster1::writeRegister16BIT( - this->alarms[index].addrModbusWrite, - this->alarms[index].funcModbusWrite, - this->alarms[index].regModbusWrite, + alarms[index].addrModbusWrite, + alarms[index].funcModbusWrite, + alarms[index].regModbusWrite, &uint16ValueToWrite ); break; case modBusType_bit: bool boolValueToWrite; - boolValueToWrite = (this->alarms[index].actValue[0] != 0); + boolValueToWrite = (alarms[index].actValue[0] != 0); modBusMaster1::writeSingleCoil( - this->alarms[index].addrModbusWrite, - this->alarms[index].regModbusWrite, + alarms[index].addrModbusWrite, + alarms[index].regModbusWrite, boolValueToWrite ); break; @@ -849,7 +854,7 @@ } */ -void device::setReading(char *linha) +void setReading(char *linha) { uint8_t addr=0; uint8_t func=0; @@ -863,40 +868,40 @@ return; } - this->numReadings++; + numReadings++; if(strstr(linha,"float,")) { - this->readings[this->numReadings-1].type=modBusType_float; + readings[numReadings-1].type=modBusType_float; inputData = true; } if(strstr(linha,"int32_t,")) { - this->readings[this->numReadings-1].type=modBusType_int32_t; + readings[numReadings-1].type=modBusType_int32_t; inputData = true; } if(strstr(linha,"int16_t,")) { - this->readings[this->numReadings-1].type=modBusType_int16_t; + readings[numReadings-1].type=modBusType_int16_t; inputData = true; } if(strstr(linha,"uint32_t,")) { - this->readings[this->numReadings-1].type=modBusType_uint32_t; + readings[numReadings-1].type=modBusType_uint32_t; inputData = true; } if(strstr(linha,"uint16_t,")) { - this->readings[this->numReadings-1].type=modBusType_uint16_t; + readings[numReadings-1].type=modBusType_uint16_t; inputData = true; } if(strstr(linha,"uint8_t,")) { - this->readings[this->numReadings-1].type=modBusType_uint8_t; + readings[numReadings-1].type=modBusType_uint8_t; inputData = true; } if(strstr(linha,"bit,")) { - this->readings[this->numReadings-1].type=modBusType_bit; + readings[numReadings-1].type=modBusType_bit; inputData = true; } @@ -915,15 +920,15 @@ pChar = strtok(NULL,","); numRegs = atoi(pChar); - this->readings[this->numReadings-1].addr=addr; - this->readings[this->numReadings-1].func=func; - this->readings[this->numReadings-1].reg=reg; - this->readings[this->numReadings-1].numRegs=numRegs; + readings[numReadings-1].addr=addr; + readings[numReadings-1].func=func; + readings[numReadings-1].reg=reg; + readings[numReadings-1].numRegs=numRegs; } } -void device::setAlarm(char *linha) +void setAlarm(char *linha) { float floatVar; uint32_t aux32_t; @@ -933,217 +938,217 @@ if(strstr(linha,"alarmSet")) { //Inicialização de contadores de alarme //É necessário inicializar estes dados para quando a máquina de alarmes rodar ter um inicio correto. - this->alarms[this->numAlarms].secAlarm=0; - this->alarms[this->numAlarms].idAct=0; - this->alarms[this->numAlarms].on=0; - this->alarms[this->numAlarms].alarmFound = false; + alarms[alarmes].secAlarm=0; + alarms[alarmes].idAct=0; + alarms[alarmes].on=0; + alarms[alarmes].alarmFound = false; //Inicialização de contadores de alarme - this->numAlarms++; + alarmes++; return; } if(strstr(linha,"idAlarm:")){ strtok(linha,":"); - this->alarms[this->numAlarms-1].id = atoi(strtok(NULL,"\r\n")); + alarms[alarmes-1].id = atoi(strtok(NULL,"\r\n")); return; } if(strstr(linha,"seconds:")) { strtok(linha,":"); pChar = strtok(NULL,"\r\n"); - this->alarms[this->numAlarms-1].seconds = atoi(pChar); + alarms[alarmes-1].seconds = atoi(pChar); return; } if(strstr(linha,"on:")) { strtok(linha,":"); pChar = strtok(NULL,"\r\n"); - this->alarms[this->numAlarms-1].on = atoi(pChar); + alarms[alarmes-1].on = atoi(pChar); return; } if(strstr(linha,"idAct:")) { strtok(linha,":"); - this->alarms[this->numAlarms-1].idAct = atoi(strtok(NULL,"")); + alarms[alarmes-1].idAct = atoi(strtok(NULL,"")); return; } if(strstr(linha,"bit,")){ - this->alarms[this->numAlarms-1].type=modBusType_bit; + alarms[alarmes-1].type=modBusType_bit; pChar = strtok(linha,","); //Parametro1 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar); + alarms[alarmes-1].addrModbusRead = atoi(pChar); //Parametro2 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar); + alarms[alarmes-1].funcModbusRead = atoi(pChar); //Parametro3 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar); + alarms[alarmes-1].regModbusRead = atoi(pChar); //Parametro4 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um + alarms[alarmes-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um //Parametro5 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].value[0]= (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um + alarms[alarmes-1].value[0]= (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um return; } if(strstr(linha,"float,")) { - this->alarms[this->numAlarms-1].type=modBusType_float; + alarms[alarmes-1].type=modBusType_float; strtok(linha,","); //Parametro 1; pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar); + alarms[alarmes-1].addrModbusRead = atoi(pChar); //Parametro 2; pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar); + alarms[alarmes-1].funcModbusRead = atoi(pChar); //Parametro 3; pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar); + alarms[alarmes-1].regModbusRead = atoi(pChar); //Parametro 4; pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um + alarms[alarmes-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um //Parametro 5; pChar = strtok(NULL,"\r\n"); //floatVar = diversos::stringToFloat(pChar,100); floatVar = atof(pChar); - this->floatToBin(1,&floatVar,&this->alarms[this->numAlarms-1].value[0]); + floatToBin(1,&floatVar,&alarms[alarmes-1].value[0]); return; } if(strstr(linha,"uint32_t,")) { - this->alarms[this->numAlarms-1].type=modBusType_uint32_t; + alarms[alarmes-1].type=modBusType_uint32_t; //sscanf(linha,"max:uint32_t,%lu,%lu,%lu,%lu",&aux1,&aux2,&aux3,&aux4); strtok(linha,","); //parametro1 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar); + alarms[alarmes-1].addrModbusRead = atoi(pChar); //parametro2 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar); + alarms[alarmes-1].funcModbusRead = atoi(pChar); //parametro3 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar); + alarms[alarmes-1].regModbusRead = atoi(pChar); //Parametro 4; pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um + alarms[alarmes-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um //parametro5 pChar = strtok(NULL,"\r\n"); aux32_t = atoi(pChar); - this->uint32_t_ToBin(1,&aux32_t,&this->alarms[this->numAlarms-1].value[0]); + uint32_t_ToBin(1,&aux32_t,&alarms[alarmes-1].value[0]); return; } if(strstr(linha,"uint16_t,")) { - this->alarms[this->numAlarms-1].type=modBusType_uint16_t; + alarms[alarmes-1].type=modBusType_uint16_t; strtok(linha,","); //parametro1 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar); + alarms[alarmes-1].addrModbusRead = atoi(pChar); //parametro2 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar); + alarms[alarmes-1].funcModbusRead = atoi(pChar); //parametro3 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar); + alarms[alarmes-1].regModbusRead = atoi(pChar); //Parametro 4; pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um + alarms[alarmes-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um //parametro5 pChar = strtok(NULL,"\r\n"); aux16_t = atoi(pChar); - this->uint16_t_ToBin(1,&aux16_t,&this->alarms[this->numAlarms-1].value[0]); + uint16_t_ToBin(1,&aux16_t,&alarms[alarmes-1].value[0]); return; } if(strstr(linha,"int32_t,")) { - this->alarms[this->numAlarms-1].type=modBusType_int32_t; + alarms[alarmes-1].type=modBusType_int32_t; //sscanf(linha,"max:uint32_t,%lu,%lu,%lu,%lu",&aux1,&aux2,&aux3,&aux4); strtok(linha,","); //parametro1 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar); + alarms[alarmes-1].addrModbusRead = atoi(pChar); //parametro2 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar); + alarms[alarmes-1].funcModbusRead = atoi(pChar); //parametro3 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].regModbusRead = atol(pChar); + alarms[alarmes-1].regModbusRead = atol(pChar); //Parametro 4; pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um + alarms[alarmes-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um //parametro5 pChar = strtok(NULL,"\r\n"); aux32_t = atol(pChar); - this->uint32_t_ToBin(1,&aux32_t,&this->alarms[this->numAlarms-1].value[0]); + uint32_t_ToBin(1,&aux32_t,&alarms[alarmes-1].value[0]); return; } if(strstr(linha,"int16_t,")) { - this->alarms[this->numAlarms-1].type=modBusType_int16_t; + alarms[alarmes-1].type=modBusType_int16_t; strtok(linha,","); //parametro1 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar); + alarms[alarmes-1].addrModbusRead = atoi(pChar); //parametro2 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar); + alarms[alarmes-1].funcModbusRead = atoi(pChar); //parametro3 pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar); + alarms[alarmes-1].regModbusRead = atoi(pChar); //Parametro 4; pChar = strtok(NULL,","); - this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um + alarms[alarmes-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um //parametro5 pChar = strtok(NULL,"\r\n"); aux16_t = atoi(pChar); - this->uint16_t_ToBin(1,&aux16_t,&this->alarms[this->numAlarms-1].value[0]); + uint16_t_ToBin(1,&aux16_t,&alarms[alarmes-1].value[0]); return; } } -void device::setSchedule(char *linha) +void setSchedule(char *linha) { //float floatVar; //uint32_t aux32_t; @@ -1153,40 +1158,40 @@ if(strstr(linha,"scheduleSet")) { //Inicialização de contadores de schedules //É necessário inicializar estes dados para quando a máquina de schedules rodar ter um inicio correto. - this->schedules[this->numSchedules].actSent = false; + schedules[numSchedules].actSent = false; //Inicialização de contadores de schedules - this->numSchedules++; + numSchedules++; } if(strstr(linha,"idSchedule:")) { strtok(linha,":"); pChar = strtok(NULL,""); - this->schedules[this->numSchedules-1].id = atoi(pChar); + schedules[numSchedules-1].id = atoi(pChar); } if(strstr(linha,"dayTime:")) { strtok(linha,":"); pChar = strtok(NULL,","); - this->schedules[this->numSchedules-1].weekday = atoi(pChar); + schedules[numSchedules-1].weekday = atoi(pChar); pChar = strtok(NULL,""); - this->schedules[this->numSchedules-1].minute = atoi(pChar); + schedules[numSchedules-1].minute = atoi(pChar); } if(strstr(linha,"idAct:")) { strtok(linha,":"); pChar = strtok(NULL,""); - this->schedules[this->numSchedules-1].idAct = atoi(pChar); + schedules[numSchedules-1].idAct = atoi(pChar); } /*pc.printf("Debugando erro em scheduleSet.\r\n"); pc.printf("Linha <%s>\r\n",linha); - pc.printf("actSent = %lu",this->schedules[this->numSchedules-1].actSent); - pc.printf("idSchedule = %lu",this->schedules[this->numSchedules-1].id); - pc.printf("dayTime = %lu",this->schedules[this->numSchedules-1].weekday); - pc.printf("idAct = %lu",this->schedules[this->numSchedules-1].idAct); + pc.printf("actSent = %lu",schedules[numSchedules-1].actSent); + pc.printf("idSchedule = %lu",schedules[numSchedules-1].id); + pc.printf("dayTime = %lu",schedules[numSchedules-1].weekday); + pc.printf("idAct = %lu",schedules[numSchedules-1].idAct); pc.printf("Debugando erro em scheduleSet.\r\n");*/ } -void device::setScheduleException(char *linha) +void setScheduleException(char *linha) { //float floatVar; //uint32_t aux32_t; @@ -1194,22 +1199,22 @@ char *pChar; if(strstr(linha,"scheduleExceptionSet")) { //Inicialização de contadores de schedulesExceptions - this->numScheduleExceptions++; + numScheduleExceptions++; } if(strstr(linha,"idSchedule:")) { strtok(linha,":"); - this->scheduleExceptions[this->numScheduleExceptions-1].id_schedule = atoi(strtok(NULL,"\r\n")); + scheduleExceptions[numScheduleExceptions-1].id_schedule = atoi(strtok(NULL,"\r\n")); } if(strstr(linha,"timestamp:")) { strtok(linha,":"); pChar = strtok(NULL,","); - this->scheduleExceptions[this->numScheduleExceptions-1].timestamp = atoi(pChar); + scheduleExceptions[numScheduleExceptions-1].timestamp = atoi(pChar); } } -/*void device::writeReadingsToSD(){ +/*void writeReadingsToSD(){ //Esta função faz a inserção de todos os dados no arquivo armazenamento. uint16_t readingIndex=0; @@ -1230,59 +1235,59 @@ //O timestamp é posto nos 4 primeiros bytes (segundos) sdCard::insereDadosBank(&sdCard::armazenamento,(char *)&seconds_uint32_t,4); - for(readingIndex = 0;readingIndex < this->numReadings;readingIndex++){ - switch(this->readings[readingIndex].type){ + for(readingIndex = 0;readingIndex < numReadings;readingIndex++){ + switch(readings[readingIndex].type){ case modBusType_float: - floatBuffer = (float*) malloc(this->readings[readingIndex].numRegs*sizeof(float)); + floatBuffer = (float*) malloc(readings[readingIndex].numRegs*sizeof(float)); modBusMaster1::readFloat( - this->readings[readingIndex].addr, - this->readings[readingIndex].func, - this->readings[readingIndex].reg, - this->readings[readingIndex].numRegs, + readings[readingIndex].addr, + readings[readingIndex].func, + readings[readingIndex].reg, + readings[readingIndex].numRegs, floatBuffer ); //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste()); - sdCard::insereDadosBank((char *)floatBuffer,sizeof(float)*this->readings[readingIndex].numRegs); + sdCard::insereDadosBank((char *)floatBuffer,sizeof(float)*readings[readingIndex].numRegs); free(floatBuffer); break; case modBusType_uint32_t: - uint32_tBuffer = (uint32_t*) malloc(this->readings[readingIndex].numRegs*sizeof(uint32_t)); + uint32_tBuffer = (uint32_t*) malloc(readings[readingIndex].numRegs*sizeof(uint32_t)); modBusMaster1::readRegister32BIT( - this->readings[readingIndex].addr, - this->readings[readingIndex].func, - this->readings[readingIndex].reg, - this->readings[readingIndex].numRegs, + readings[readingIndex].addr, + readings[readingIndex].func, + readings[readingIndex].reg, + readings[readingIndex].numRegs, uint32_tBuffer ); //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste()); - sdCard::insereDadosBank((char *)uint32_tBuffer,sizeof(uint32_t)*this->readings[readingIndex].numRegs); + sdCard::insereDadosBank((char *)uint32_tBuffer,sizeof(uint32_t)*readings[readingIndex].numRegs); free(uint32_tBuffer); break; case modBusType_uint16_t: - uint16_tBuffer = (uint16_t*) malloc(this->readings[readingIndex].numRegs*sizeof(uint16_t)); + uint16_tBuffer = (uint16_t*) malloc(readings[readingIndex].numRegs*sizeof(uint16_t)); modBusMaster1::readRegister16BIT( - this->readings[readingIndex].addr, - this->readings[readingIndex].func, - this->readings[readingIndex].reg, - this->readings[readingIndex].numRegs, + readings[readingIndex].addr, + readings[readingIndex].func, + readings[readingIndex].reg, + readings[readingIndex].numRegs, uint16_tBuffer ); //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste()); - sdCard::insereDadosBank((char *)uint16_tBuffer,sizeof(uint16_t)*this->readings[readingIndex].numRegs); + sdCard::insereDadosBank((char *)uint16_tBuffer,sizeof(uint16_t)*readings[readingIndex].numRegs); free(uint16_tBuffer); break; case modBusType_bit: - boolBuffer = (bool*) malloc(this->readings[readingIndex].numRegs*sizeof(bool)); + boolBuffer = (bool*) malloc(readings[readingIndex].numRegs*sizeof(bool)); modBusMaster1::readCoils( - this->readings[readingIndex].addr, - this->readings[readingIndex].reg, - this->readings[readingIndex].numRegs, + readings[readingIndex].addr, + readings[readingIndex].reg, + readings[readingIndex].numRegs, boolBuffer ); //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste()); - sdCard::insereDadosBank((char *)boolBuffer,sizeof(bool)*this->readings[readingIndex].numRegs); + sdCard::insereDadosBank((char *)boolBuffer,sizeof(bool)*readings[readingIndex].numRegs); free(boolBuffer); break; @@ -1291,7 +1296,7 @@ sdCard::insereDadosBank("}log",4); }*/ -uint8_t device::execAct(uint32_t index){ +uint8_t execAct(uint32_t index){ //Primeiro preciso decidir que tipo de act estou lidando para tanto preciso pegar a ACT inteira. //Busca no arquivo //Abre arquivo @@ -1520,7 +1525,7 @@ while(pChar!=NULL){ pc.printf("Lido Alarm Set %lu - <%lu>.\r\n",indexAlarms,atoi(pChar)); if(atoi(pChar)){ - dispositivos[0]->alarmOnOff(atoi(pChar),1); + alarmOnOff(atoi(pChar),1); } pChar = strtok(NULL,","); } @@ -1529,7 +1534,7 @@ while(pChar!=NULL){ pc.printf("Lido Alarm Reset %lu - <%lu>.\r\n",indexAlarms,atoi(pChar)); if(atoi(pChar)){ - dispositivos[0]->alarmOnOff(atoi(pChar),0); + alarmOnOff(atoi(pChar),0); } pChar = strtok(NULL,","); } @@ -1538,7 +1543,7 @@ return commandExecOk; } -void device::alarmOnOff(uint32_t idAlarm,bool state){ +void alarmOnOff(uint32_t idAlarm,bool state){ uint16_t alarmIndex; char indexBusca[30]; char alarmString[40]; @@ -1547,8 +1552,8 @@ char charState; for(alarmIndex = 0; alarmIndex < alarmes; alarmIndex++){ - if(this->alarms[alarmIndex].id == idAlarm){ - this->alarms[alarmIndex].on = state; + if(alarms[alarmIndex].id == idAlarm){ + alarms[alarmIndex].on = state; } } @@ -1581,7 +1586,7 @@ sdCard::fechaArquivo(&sdCard::devices); } -void device::writeReadingsToSD(){ +void writeReadingsToSD(){ //Buffering before insertData //Esta função faz a inserção de todos os dados no arquivo armazenamento. uint16_t readingIndex=0; @@ -1613,76 +1618,76 @@ //O timestamp é posto nos 4 primeiros bytes (segundos) sdCardBuf.fill(seconds_char,5); - for(readingIndex = 0;readingIndex < this->numReadings;readingIndex++){ - switch(this->readings[readingIndex].type){ + for(readingIndex = 0;readingIndex < numReadings;readingIndex++){ + switch(readings[readingIndex].type){ case modBusType_float: - 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 - ((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, + if(readings[readingIndex].addr != enderecoControladoraVirtual){ + //Busca fora do drome via Modbus + floatBuffer = (float*) malloc(((readings[readingIndex].numRegs*sizeof(float))+1)); //Alocando mais um byte para status + ((char *)floatBuffer)[(readings[readingIndex].numRegs*sizeof(float))] = modBusMaster1::readFloat( + readings[readingIndex].addr, + readings[readingIndex].func, + readings[readingIndex].reg, + readings[readingIndex].numRegs, floatBuffer ); }else{ //Busca Interna floatBuffer = (float*) malloc(sizeof(float)); - if((this->readings[readingIndex].reg<100)&&(this->readings[readingIndex].reg < num_temperatureSensors)){//Registradores das entradas de temperatura + if((readings[readingIndex].reg<100)&&(readings[readingIndex].reg < num_temperatureSensors)){//Registradores das entradas de temperatura //Populando floatBuffer com a temperaturas - floatBuffer[0] = temperaturas[this->readings[readingIndex].reg]; + floatBuffer[0] = temperaturas[readings[readingIndex].reg]; } - if((this->readings[readingIndex].reg>=100)&&(this->readings[readingIndex].reg<104)){ + if((readings[readingIndex].reg>=100)&&(readings[readingIndex].reg<104)){ //Registradores das entradas analógicas - floatBuffer[0] = aiFiltrada[this->readings[readingIndex].reg - 100]; + floatBuffer[0] = aiFiltrada[readings[readingIndex].reg - 100]; } - this->readings[readingIndex].numRegs = 1; + readings[readingIndex].numRegs = 1; } //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)*readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status free(floatBuffer); break; case modBusType_uint32_t: case modBusType_int32_t: - if(this->readings[readingIndex].addr != enderecoControladoraVirtual){ - 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, - this->readings[readingIndex].numRegs, + if(readings[readingIndex].addr != enderecoControladoraVirtual){ + uint32_tBuffer = (uint32_t*) malloc((readings[readingIndex].numRegs*sizeof(uint32_t))+1); //Alocando mais um byte para status + ((char *)uint32_tBuffer)[(readings[readingIndex].numRegs*sizeof(uint32_t))] = modBusMaster1::readRegister32BIT(//Ponho o status no ultimo byte + readings[readingIndex].addr, + readings[readingIndex].func, + readings[readingIndex].reg, + readings[readingIndex].numRegs, uint32_tBuffer ); //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; + uint32_tBuffer[0] = pulsosEDs[readings[readingIndex].reg]; + readings[readingIndex].numRegs = 1; + pulsosEDs[readings[readingIndex].reg] = 0; } - sdCardBuf.fill((char *)uint32_tBuffer,((sizeof(uint32_t)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status + sdCardBuf.fill((char *)uint32_tBuffer,((sizeof(uint32_t)*readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status free(uint32_tBuffer); break; case modBusType_uint16_t: case modBusType_int16_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 - ((char *)uint16_tBuffer)[(this->readings[readingIndex].numRegs*sizeof(uint16_t))] = modBusMaster1::readRegister16BIT(// - this->readings[readingIndex].addr, - this->readings[readingIndex].func, - this->readings[readingIndex].reg, - this->readings[readingIndex].numRegs, + if(readings[readingIndex].addr!=enderecoControladoraVirtual){ + uint16_tBuffer = (uint16_t*) malloc(((readings[readingIndex].numRegs*sizeof(uint16_t))+1));//Alocando mais um byte para status + ((char *)uint16_tBuffer)[(readings[readingIndex].numRegs*sizeof(uint16_t))] = modBusMaster1::readRegister16BIT(// + readings[readingIndex].addr, + readings[readingIndex].func, + readings[readingIndex].reg, + readings[readingIndex].numRegs, 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)*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); + if((readings[readingIndex].reg>0)&&((readings[readingIndex].reg + readings[readingIndex].numRegs)<=4)){ + sdCardBuf.fill((char *)&aiFiltrada[readings[readingIndex].reg-1],sizeof(uint16_t)*readings[readingIndex].numRegs); seconds_char[4]=0; sdCardBuf.fill((char *)&seconds_char[4],1); } @@ -1691,19 +1696,19 @@ case modBusType_bit: 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, + if(readings[readingIndex].addr != enderecoControladoraVirtual){ + ((char *)boolBuffer)[(readings[readingIndex].numRegs*sizeof(bool))] = modBusMaster1::readCoils( + readings[readingIndex].addr, + readings[readingIndex].reg, + readings[readingIndex].numRegs, boolBuffer ); }else{ - boolBuffer[0] = entradasDigitais[this->readings[readingIndex].reg]; + boolBuffer[0] = entradasDigitais[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 + sdCardBuf.fill((char *)boolBuffer,((sizeof(bool)*readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status free(boolBuffer); break; @@ -1722,11 +1727,7 @@ -device::device() -{ - this->numAlarms=0; - this->numReadings=0; -} + int criaDevices(FILE *devicesCfg) { @@ -1742,17 +1743,12 @@ linhas++; } - printf("Contei %u linha(s), %u device(s).\n",linhas,devices); - - //Criando vetor de objetos dispositivos; - - dispositivos = (device **) malloc(sizeof(device)*devices); - - for(i=0; i<devices; i++) { - dispositivos[i] = new device(); - //dispositivos[i]->id=i; - } - + printf("Contei %u linha(s), %u device(s).\n",linhas,devices); + + alarmes=0; + numSchedules=0; + numScheduleExceptions=0; + numReadings=0; rewind(devicesCfg); return 1; } @@ -1760,71 +1756,22 @@ int configuraDevices(FILE *devicesCfg) { - uint16_t linhas=0; + void *pointer; //uint16_t leituras = 0; char linha[maxCaractereLeLinha]; uint8_t estadoConfiguracao=estadoConfiguracao_idle; - int8_t dispositivoEmConfiguracao = -1; - - while(fgets(linha,maxCaractereLeLinha,devicesCfg)){ - if(strstr(linha,"alarmSet")) { - //printf("Criando alarme no dispositivo de indice %u.\n",dispositivoEmConfiguracao); - 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){ - leituras++; - } - - if(strstr(linha,"readingsSet")) { - //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao); - estadoConfiguracao = estadoConfiguracao_readingsSet; - } + alarmes = 0; + bool condicaoDeSaida = false; - if(strstr(linha,"scheduleSet")) { - //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao); - qtdSchedules++; - estadoConfiguracao = estadoConfiguracao_scheduleSet; - } - - if(strstr(linha,"scheduleExceptionsSet")) { - //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao); - qtdScheduleExceptions++; - estadoConfiguracao = estadoConfiguracao_scheduleSet; - } - - linhas++; - } - 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))) { - //(char *) malloc(sizeUnit*novo); - dispositivos[0]->readings = (reading*) malloc(sizeof(reading)*leituras); - dispositivos[0]->alarms = (alarm*) malloc(sizeof(alarm)*alarmes); - dispositivos[0]->schedules = (schedule*) malloc(sizeof(schedule)*qtdSchedules); - dispositivos[0]->scheduleExceptions = (scheduleException*) malloc(sizeof(scheduleException)*qtdScheduleExceptions); - - //Retornando ao inicio o arquivo - rewind(devicesCfg); - - while(fgets(linha,maxCaractereLeLinha,devicesCfg)) { - if(strstr(linha,"deviceCreate\\")) { - dispositivoEmConfiguracao++; + while(fgets(linha,maxCaractereLeLinha,devicesCfg)&&(!condicaoDeSaida)){ + if(strstr(linha,"deviceCreate\\")) { //printf("Configurando dispositivo de indice %u.\n",dispositivoEmConfiguracao); estadoConfiguracao = estadoConfiguracao_creatingDevice; } if(strstr(linha,"alarmSet")) { //printf("Criando alarme no dispositivo de indice %u.\n",dispositivoEmConfiguracao); - alarmes++; + //alarmes++; estadoConfiguracao = estadoConfiguracao_alarmSet; } @@ -1857,34 +1804,34 @@ if(strstr(linha,">")) { //printf("Fechando dispositivo de indice %u.\n",dispositivoEmConfiguracao); + condicaoDeSaida = true; estadoConfiguracao = estadoConfiguracao_idle; } switch(estadoConfiguracao) { case estadoConfiguracao_creatingDevice: /*if(strstr(linha,"id:")) { - sscanf(linha,"id:%u",&dispositivos[dispositivoEmConfiguracao]->id); + sscanf(linha,"id:%u",&id); }*/ break; case estadoConfiguracao_alarmSet: //Inclue linha nos alarmes do dispositivo em configuração - dispositivos[dispositivoEmConfiguracao]->setAlarm(linha); + setAlarm(linha); break; case estadoConfiguracao_readingsSet: //Inclue linha nas leituras do dispositivo em configuração - dispositivos[dispositivoEmConfiguracao]->setReading(linha); + setReading(linha); break; case estadoConfiguracao_scheduleSet: //Inclue linha nos agendamentos do dispositivo em configuração - dispositivos[dispositivoEmConfiguracao]->setSchedule(linha); + setSchedule(linha); break; case estadoConfiguracao_scheduleExceptionSet: //Inclue linha nas excessões dos agendamentos do dispositivo em configuração - dispositivos[dispositivoEmConfiguracao]->setScheduleException(linha); + setScheduleException(linha); break; } - } - + } return 1; } @@ -1892,117 +1839,115 @@ void testaTudoDevices() { - int i; int j; - - for(i=0; i<devices; i++) { - printf("Dispositivo %u tem %u alarmes sendo eles:\n",i,dispositivos[i]->numAlarms); + + printf("O dispositivo tem %u alarmes sendo eles:\n",alarmes); - for(j=0; j<dispositivos[i]->numAlarms; j++) { - printf("Alarme %u:\n",j); - printf("\tId <%lu>.\n",dispositivos[i]->alarms[j].id); - printf("\tSeconds <%lu>.\n",dispositivos[i]->alarms[j].seconds); - printf("\tAddr %u, func %u, reg %lu.\n",dispositivos[i]->alarms[j].addrModbusRead,dispositivos[i]->alarms[j].funcModbusRead,dispositivos[i]->alarms[j].regModbusRead); - if(dispositivos[i]->alarms[j].type==modBusType_float) { - float value; - dispositivos[i]->floatToBin(0,&value,&dispositivos[i]->alarms[j].value[0]); - if(dispositivos[i]->alarms[j].max){ - printf("\tFloat max <%f>.\n",value); - } - else{printf("\tFloat min <%f>.\n",value);} - } - - if(dispositivos[i]->alarms[j].type==modBusType_uint32_t) { - uint32_t value; - dispositivos[i]->uint32_t_ToBin(0,&value,&dispositivos[i]->alarms[j].value[0]); - if(dispositivos[i]->alarms[j].max){ - printf("\tuint32_t max <%lu>.\n",value); - } - else{printf("\tuint32_t min <%lu>.\n",value);} + for(j=0; j<alarmes; j++) { + printf("Alarme %u:\n",j); + printf("\tId <%lu>.\n",alarms[j].id); + printf("\tSeconds <%lu>.\n",alarms[j].seconds); + printf("\tAddr %u, func %u, reg %lu.\n",alarms[j].addrModbusRead,alarms[j].funcModbusRead,alarms[j].regModbusRead); + if(alarms[j].type==modBusType_float) { + float value; + floatToBin(0,&value,&alarms[j].value[0]); + if(alarms[j].max){ + printf("\tFloat max <%f>.\n",value); } - - if(dispositivos[i]->alarms[j].type==modBusType_uint16_t) { - uint16_t value; - dispositivos[i]->uint16_t_ToBin(0,&value,&dispositivos[i]->alarms[j].value[0]); - if(dispositivos[i]->alarms[j].max){ - printf("\tuint16_t max <%lu>.\n",value); - } - else{printf("\tuint16_t min <%lu>.\n",value);} - } - - if(dispositivos[i]->alarms[j].type==modBusType_int32_t) { - uint32_t value; - dispositivos[i]->uint32_t_ToBin(0,&value,&dispositivos[i]->alarms[j].value[0]); - if(dispositivos[i]->alarms[j].max){ - printf("\tint32_t max <%ld>.\n",(int32_t)value); - } - else{printf("\tint32_t min <%ld>.\n",(int32_t)value);} + else{printf("\tFloat min <%f>.\n",value);} + } + + if(alarms[j].type==modBusType_uint32_t) { + uint32_t value; + uint32_t_ToBin(0,&value,&alarms[j].value[0]); + if(alarms[j].max){ + printf("\tuint32_t max <%lu>.\n",value); } - - if(dispositivos[i]->alarms[j].type==modBusType_int16_t) { - uint16_t value; - dispositivos[i]->uint16_t_ToBin(0,&value,&dispositivos[i]->alarms[j].value[0]); - if(dispositivos[i]->alarms[j].max){ - printf("\tint16_t max <%ld>.\n",(int16_t)value); - } - else{printf("\tint16_t min <%ld>.\n",(int16_t)value);} - } - - if(dispositivos[i]->alarms[j].type==modBusType_bit) { - uint8_t value; - value=dispositivos[i]->alarms[j].value[0]; - if(dispositivos[i]->alarms[j].max){ - printf("\tBIT max <%lu>.\n",value); - } - else{printf("\tBIT min <%lu>.\n",value);} - } - - printf("\tact:%lu\n",dispositivos[i]->alarms[j].idAct); + else{printf("\tuint32_t min <%lu>.\n",value);} + } + + if(alarms[j].type==modBusType_uint16_t) { + uint16_t value; + uint16_t_ToBin(0,&value,&alarms[j].value[0]); + if(alarms[j].max){ + printf("\tuint16_t max <%lu>.\n",value); + } + else{printf("\tuint16_t min <%lu>.\n",value);} + } + + if(alarms[j].type==modBusType_int32_t) { + uint32_t value; + uint32_t_ToBin(0,&value,&alarms[j].value[0]); + if(alarms[j].max){ + printf("\tint32_t max <%ld>.\n",(int32_t)value); + } + else{printf("\tint32_t min <%ld>.\n",(int32_t)value);} } - printf("Dispositivo %u tem %u schedules sendo eles:\n",i,dispositivos[i]->numSchedules); - for(j=0; j<dispositivos[i]->numSchedules; j++) { - printf("Schedule %u:\n",j); - printf("\tId <%lu>.\n",dispositivos[i]->schedules[j].id); - printf("\tweekday <%lu>.\n",dispositivos[i]->schedules[j].weekday); - printf("\tminute <%lu>.\n",dispositivos[i]->schedules[j].minute); - printf("\tidAct <%lu>.\n",dispositivos[i]->schedules[j].idAct); - } + if(alarms[j].type==modBusType_int16_t) { + uint16_t value; + uint16_t_ToBin(0,&value,&alarms[j].value[0]); + if(alarms[j].max){ + printf("\tint16_t max <%ld>.\n",(int16_t)value); + } + else{printf("\tint16_t min <%ld>.\n",(int16_t)value);} + } + + if(alarms[j].type==modBusType_bit) { + uint8_t value; + value=alarms[j].value[0]; + if(alarms[j].max){ + printf("\tBIT max <%lu>.\n",value); + } + else{printf("\tBIT min <%lu>.\n",value);} + } - printf("Dispositivo %u tem %u scheduleExceptions sendo eles:\n",i,dispositivos[i]->numScheduleExceptions); - for(j=0; j<dispositivos[i]->numScheduleExceptions; j++) { - printf("scheduleException %u:\n",j); - printf("\tid_schedule <%lu>.\n",dispositivos[i]->scheduleExceptions[j].id_schedule); - printf("\ttimestamp <%lu>.\n",dispositivos[i]->scheduleExceptions[j].timestamp); - } + printf("\tact:%lu\n",alarms[j].idAct); + } + + printf("Dispositivo %u tem %u schedules sendo eles:\n",numSchedules); + for(j=0; j<numSchedules; j++) { + printf("Schedule %u:\n",j); + printf("\tId <%lu>.\n",schedules[j].id); + printf("\tweekday <%lu>.\n",schedules[j].weekday); + printf("\tminute <%lu>.\n",schedules[j].minute); + printf("\tidAct <%lu>.\n",schedules[j].idAct); + } + + printf("O dispositivo tem %u scheduleExceptions sendo eles:\n",numScheduleExceptions); + for(j=0; j<numScheduleExceptions; j++) { + printf("scheduleException %u:\n",j); + printf("\tid_schedule <%lu>.\n",scheduleExceptions[j].id_schedule); + printf("\ttimestamp <%lu>.\n",scheduleExceptions[j].timestamp); + } - printf("Dispositivo %u tem %u leituras sendo elas:\n",i,dispositivos[i]->numReadings); - for(j=0; j<dispositivos[i]->numReadings; j++) { - printf("Leitura %u:",j); - switch(dispositivos[i]->readings[j].type) { - case modBusType_float: - printf("Tipo float "); - break; - case modBusType_uint32_t: - printf("Tipo uint32_t "); - break; - case modBusType_uint16_t: - printf("Tipo uint16_t "); - break; - case modBusType_int32_t: - printf("Tipo int32_t "); - break; - case modBusType_int16_t: - printf("Tipo int16_t "); - break; - case modBusType_uint8_t: - printf("Tipo uint8_t "); - break; - case modBusType_bit: - printf("Tipo bool "); - break; - } - printf("addr %u, func %u, reg %u, numRegs %u.\n",dispositivos[i]->readings[j].addr,dispositivos[i]->readings[j].func,dispositivos[i]->readings[j].reg,dispositivos[i]->readings[j].numRegs); + printf("O dispositivo tem %u leituras sendo elas:\n",numReadings); + for(j=0; j<numReadings; j++) { + printf("Leitura %u:",j); + switch(readings[j].type) { + case modBusType_float: + printf("Tipo float "); + break; + case modBusType_uint32_t: + printf("Tipo uint32_t "); + break; + case modBusType_uint16_t: + printf("Tipo uint16_t "); + break; + case modBusType_int32_t: + printf("Tipo int32_t "); + break; + case modBusType_int16_t: + printf("Tipo int16_t "); + break; + case modBusType_uint8_t: + printf("Tipo uint8_t "); + break; + case modBusType_bit: + printf("Tipo bool "); + break; } + printf("addr %u, func %u, reg %u, numRegs %u.\n",readings[j].addr,readings[j].func,readings[j].reg,readings[j].numRegs); } } +