teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Committer:
brunofgc
Date:
Fri Jun 08 22:14:21 2018 +0000
Revision:
38:07d3907b74e5
Parent:
0:1c0a769988ee
teste de publish para compilar no mbed-cli

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brunofgc 0:1c0a769988ee 1 #include "devices.h"
brunofgc 0:1c0a769988ee 2
brunofgc 0:1c0a769988ee 3 //Devices
brunofgc 0:1c0a769988ee 4 device ** dispositivos;
brunofgc 0:1c0a769988ee 5 uint8_t devices=0;
brunofgc 0:1c0a769988ee 6 uint8_t alarmes=0;
brunofgc 0:1c0a769988ee 7 //Devices
brunofgc 0:1c0a769988ee 8
brunofgc 0:1c0a769988ee 9 enum {
brunofgc 0:1c0a769988ee 10 estadoConfiguracao_idle = 0,
brunofgc 0:1c0a769988ee 11 estadoConfiguracao_creatingDevice,
brunofgc 0:1c0a769988ee 12 estadoConfiguracao_alarmSet,
brunofgc 0:1c0a769988ee 13 estadoConfiguracao_readingsSet
brunofgc 0:1c0a769988ee 14 };
brunofgc 0:1c0a769988ee 15
brunofgc 0:1c0a769988ee 16 uint8_t resizeArray(uint32_t atual, uint32_t novo, char **array,uint16_t sizeUnit)
brunofgc 0:1c0a769988ee 17 {
brunofgc 0:1c0a769988ee 18 uint32_t i;
brunofgc 0:1c0a769988ee 19 char *p = (char *) malloc(sizeUnit*novo);
brunofgc 0:1c0a769988ee 20 char *aux;
brunofgc 0:1c0a769988ee 21
brunofgc 0:1c0a769988ee 22 if(p==NULL) {
brunofgc 0:1c0a769988ee 23 return 0;
brunofgc 0:1c0a769988ee 24 }
brunofgc 0:1c0a769988ee 25
brunofgc 0:1c0a769988ee 26 aux = *array;
brunofgc 0:1c0a769988ee 27
brunofgc 0:1c0a769988ee 28 if(atual) {
brunofgc 0:1c0a769988ee 29 //So sigo em frente se tinha algo dentro deste array
brunofgc 0:1c0a769988ee 30 for(i=0; i<(novo*sizeUnit); i++) {
brunofgc 0:1c0a769988ee 31 p[i]=aux[i];
brunofgc 0:1c0a769988ee 32 }
brunofgc 0:1c0a769988ee 33 free(aux);
brunofgc 0:1c0a769988ee 34 }
brunofgc 0:1c0a769988ee 35
brunofgc 0:1c0a769988ee 36 *array = p;
brunofgc 0:1c0a769988ee 37 return 1;
brunofgc 0:1c0a769988ee 38 }
brunofgc 0:1c0a769988ee 39
brunofgc 0:1c0a769988ee 40 enum {
brunofgc 0:1c0a769988ee 41 modBusType_float=0,
brunofgc 0:1c0a769988ee 42 modBusType_bit,
brunofgc 0:1c0a769988ee 43 modBusType_uint8_t,
brunofgc 0:1c0a769988ee 44 modBusType_uint16_t,
brunofgc 0:1c0a769988ee 45 modBusType_uint32_t
brunofgc 0:1c0a769988ee 46 };
brunofgc 0:1c0a769988ee 47
brunofgc 0:1c0a769988ee 48 void device::floatToBin(uint8_t dir, float *v,uint8_t *p)
brunofgc 0:1c0a769988ee 49 {
brunofgc 0:1c0a769988ee 50 //Variáveis locais
brunofgc 0:1c0a769988ee 51 union {
brunofgc 0:1c0a769988ee 52 char c[4];
brunofgc 0:1c0a769988ee 53 float v;
brunofgc 0:1c0a769988ee 54 }u;
brunofgc 0:1c0a769988ee 55 int i;
brunofgc 0:1c0a769988ee 56
brunofgc 0:1c0a769988ee 57 if(dir) {
brunofgc 0:1c0a769988ee 58 u.v = *v;
brunofgc 0:1c0a769988ee 59 for(i=0; i<4; i++) {
brunofgc 0:1c0a769988ee 60 p[i]=u.c[3-i];
brunofgc 0:1c0a769988ee 61 }
brunofgc 0:1c0a769988ee 62 } else {
brunofgc 0:1c0a769988ee 63 for(i=0; i<4; i++) {
brunofgc 0:1c0a769988ee 64 u.c[3-i]=p[i];
brunofgc 0:1c0a769988ee 65 }
brunofgc 0:1c0a769988ee 66 *v = u.v;
brunofgc 0:1c0a769988ee 67 }
brunofgc 0:1c0a769988ee 68 }
brunofgc 0:1c0a769988ee 69
brunofgc 0:1c0a769988ee 70 void device::uint32_t_ToBin(uint8_t dir, uint32_t *v,uint8_t *p)
brunofgc 0:1c0a769988ee 71 {
brunofgc 0:1c0a769988ee 72 //Variáveis locais
brunofgc 0:1c0a769988ee 73 union {
brunofgc 0:1c0a769988ee 74 char c[4];
brunofgc 0:1c0a769988ee 75 uint32_t v;
brunofgc 0:1c0a769988ee 76 }u;
brunofgc 0:1c0a769988ee 77 int i;
brunofgc 0:1c0a769988ee 78
brunofgc 0:1c0a769988ee 79 if(dir) {
brunofgc 0:1c0a769988ee 80 u.v = *v;
brunofgc 0:1c0a769988ee 81 for(i=0; i<4; i++) {
brunofgc 0:1c0a769988ee 82 p[i]=u.c[3-i];
brunofgc 0:1c0a769988ee 83 }
brunofgc 0:1c0a769988ee 84 } else {
brunofgc 0:1c0a769988ee 85 for(i=0; i<4; i++) {
brunofgc 0:1c0a769988ee 86 u.c[3-i]=p[i];
brunofgc 0:1c0a769988ee 87 }
brunofgc 0:1c0a769988ee 88 *v = u.v;
brunofgc 0:1c0a769988ee 89 }
brunofgc 0:1c0a769988ee 90 }
brunofgc 0:1c0a769988ee 91
brunofgc 0:1c0a769988ee 92 void device::uint16_t_ToBin(uint8_t dir, uint16_t *v,uint8_t *p)
brunofgc 0:1c0a769988ee 93 {
brunofgc 0:1c0a769988ee 94 //Variáveis locais
brunofgc 0:1c0a769988ee 95 union {
brunofgc 0:1c0a769988ee 96 char c[2];
brunofgc 0:1c0a769988ee 97 uint32_t v;
brunofgc 0:1c0a769988ee 98 }u;
brunofgc 0:1c0a769988ee 99 int i;
brunofgc 0:1c0a769988ee 100
brunofgc 0:1c0a769988ee 101 if(dir) {
brunofgc 0:1c0a769988ee 102 u.v = *v;
brunofgc 0:1c0a769988ee 103 for(i=0; i<2; i++) {
brunofgc 0:1c0a769988ee 104 p[i]=u.c[1-i];
brunofgc 0:1c0a769988ee 105 }
brunofgc 0:1c0a769988ee 106 } else {
brunofgc 0:1c0a769988ee 107 for(i=0; i<2; i++) {
brunofgc 0:1c0a769988ee 108 u.c[1-i]=p[i];
brunofgc 0:1c0a769988ee 109 }
brunofgc 0:1c0a769988ee 110 *v = u.v;
brunofgc 0:1c0a769988ee 111 }
brunofgc 0:1c0a769988ee 112 }
brunofgc 0:1c0a769988ee 113
brunofgc 0:1c0a769988ee 114
brunofgc 0:1c0a769988ee 115 void device::setReading(char *linha)
brunofgc 0:1c0a769988ee 116 {
brunofgc 0:1c0a769988ee 117 uint8_t addr=0;
brunofgc 0:1c0a769988ee 118 uint8_t func=0;
brunofgc 0:1c0a769988ee 119 uint16_t reg=0;
brunofgc 0:1c0a769988ee 120 uint8_t numRegs=0;
brunofgc 0:1c0a769988ee 121 char *pChar;
brunofgc 0:1c0a769988ee 122 bool inputData = false;
brunofgc 0:1c0a769988ee 123
brunofgc 0:1c0a769988ee 124 //printf("Linha <%s>.\n",linha);
brunofgc 0:1c0a769988ee 125 if(strstr(linha,"readingsSet")) {
brunofgc 0:1c0a769988ee 126 return;
brunofgc 0:1c0a769988ee 127 }
brunofgc 0:1c0a769988ee 128
brunofgc 0:1c0a769988ee 129 //printf("O tamanho da struct eh <%lu>.\n",sizeof(reading));
brunofgc 0:1c0a769988ee 130
brunofgc 0:1c0a769988ee 131
brunofgc 0:1c0a769988ee 132 if(resizeArray(this->numReadings, this->numReadings+1, (char **)&this->readings,sizeof(reading))) {
brunofgc 0:1c0a769988ee 133 //printf("Resize em readings beleza!\n");
brunofgc 0:1c0a769988ee 134 this->numReadings++;
brunofgc 0:1c0a769988ee 135 }
brunofgc 0:1c0a769988ee 136
brunofgc 0:1c0a769988ee 137 if(strstr(linha,"float,")) {
brunofgc 0:1c0a769988ee 138 this->readings[this->numReadings-1].type=modBusType_float;
brunofgc 0:1c0a769988ee 139 inputData = true;
brunofgc 0:1c0a769988ee 140 }
brunofgc 0:1c0a769988ee 141
brunofgc 0:1c0a769988ee 142 if(strstr(linha,"uint32_t,")) {
brunofgc 0:1c0a769988ee 143 this->readings[this->numReadings-1].type=modBusType_uint32_t;
brunofgc 0:1c0a769988ee 144 inputData = true;
brunofgc 0:1c0a769988ee 145 }
brunofgc 0:1c0a769988ee 146
brunofgc 0:1c0a769988ee 147 if(strstr(linha,"uint16_t,")) {
brunofgc 0:1c0a769988ee 148 this->readings[this->numReadings-1].type=modBusType_uint16_t;
brunofgc 0:1c0a769988ee 149 inputData = true;
brunofgc 0:1c0a769988ee 150 }
brunofgc 0:1c0a769988ee 151
brunofgc 0:1c0a769988ee 152 if(strstr(linha,"uint8_t,")) {
brunofgc 0:1c0a769988ee 153 this->readings[this->numReadings-1].type=modBusType_uint8_t;
brunofgc 0:1c0a769988ee 154 inputData = true;
brunofgc 0:1c0a769988ee 155 }
brunofgc 0:1c0a769988ee 156
brunofgc 0:1c0a769988ee 157 if(strstr(linha,"bool,")) {
brunofgc 0:1c0a769988ee 158 this->readings[this->numReadings-1].type=modBusType_bit;
brunofgc 0:1c0a769988ee 159 inputData = true;
brunofgc 0:1c0a769988ee 160 }
brunofgc 0:1c0a769988ee 161
brunofgc 0:1c0a769988ee 162 if(inputData){
brunofgc 0:1c0a769988ee 163 pChar = strtok(linha,",");
brunofgc 0:1c0a769988ee 164
brunofgc 0:1c0a769988ee 165 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 166 addr = atoi(pChar);
brunofgc 0:1c0a769988ee 167
brunofgc 0:1c0a769988ee 168 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 169 func = atoi(pChar);
brunofgc 0:1c0a769988ee 170
brunofgc 0:1c0a769988ee 171 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 172 reg = atoi(pChar);
brunofgc 0:1c0a769988ee 173
brunofgc 0:1c0a769988ee 174 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 175 numRegs = atoi(pChar);
brunofgc 0:1c0a769988ee 176
brunofgc 0:1c0a769988ee 177 this->readings[this->numReadings-1].addr=addr;
brunofgc 0:1c0a769988ee 178 this->readings[this->numReadings-1].func=func;
brunofgc 0:1c0a769988ee 179 this->readings[this->numReadings-1].reg=reg;
brunofgc 0:1c0a769988ee 180 this->readings[this->numReadings-1].numRegs=numRegs;
brunofgc 0:1c0a769988ee 181 }
brunofgc 0:1c0a769988ee 182
brunofgc 0:1c0a769988ee 183 }
brunofgc 0:1c0a769988ee 184
brunofgc 0:1c0a769988ee 185 void device::setAlarm(char *linha)
brunofgc 0:1c0a769988ee 186 {
brunofgc 0:1c0a769988ee 187 float floatVar;
brunofgc 0:1c0a769988ee 188 uint32_t aux32_t;
brunofgc 0:1c0a769988ee 189 uint16_t aux16_t;
brunofgc 0:1c0a769988ee 190 char *pChar;
brunofgc 0:1c0a769988ee 191
brunofgc 0:1c0a769988ee 192 if(strstr(linha,"alarmSet")) {
brunofgc 0:1c0a769988ee 193 if(resizeArray(this->numAlarms, this->numAlarms+1, (char **)&this->alarms,sizeof(alarm))) {
brunofgc 0:1c0a769988ee 194 this->numAlarms++;
brunofgc 0:1c0a769988ee 195 }
brunofgc 0:1c0a769988ee 196 }
brunofgc 0:1c0a769988ee 197
brunofgc 0:1c0a769988ee 198 if(strstr(linha,"name:")) {
brunofgc 0:1c0a769988ee 199 strtok(linha,":");
brunofgc 0:1c0a769988ee 200 strcpy(this->alarms[this->numAlarms-1].name,strtok(NULL,"\r\n"));
brunofgc 0:1c0a769988ee 201 }
brunofgc 0:1c0a769988ee 202
brunofgc 0:1c0a769988ee 203
brunofgc 0:1c0a769988ee 204 if(strstr(linha,"seconds:")) {
brunofgc 0:1c0a769988ee 205 //sscanf(linha,"seconds:%lu",&this->alarms[this->numAlarms-1].seconds);
brunofgc 0:1c0a769988ee 206 strtok(linha,":");
brunofgc 0:1c0a769988ee 207 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 208 this->alarms[this->numAlarms-1].seconds = atoi(pChar);
brunofgc 0:1c0a769988ee 209 }
brunofgc 0:1c0a769988ee 210
brunofgc 0:1c0a769988ee 211
brunofgc 0:1c0a769988ee 212 if(strstr(linha,"bool:state")){
brunofgc 0:1c0a769988ee 213 this->alarms[this->numAlarms-1].type=modBusType_bit;
brunofgc 0:1c0a769988ee 214
brunofgc 0:1c0a769988ee 215 pChar = strtok(linha,",");
brunofgc 0:1c0a769988ee 216
brunofgc 0:1c0a769988ee 217 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 218 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 219
brunofgc 0:1c0a769988ee 220 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 221 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 222
brunofgc 0:1c0a769988ee 223 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 224 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 225
brunofgc 0:1c0a769988ee 226 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 227 this->alarms[this->numAlarms-1].max[0]=atoi(pChar);
brunofgc 0:1c0a769988ee 228 }
brunofgc 0:1c0a769988ee 229
brunofgc 0:1c0a769988ee 230
brunofgc 0:1c0a769988ee 231 if(strstr(linha,"max:float")) {
brunofgc 0:1c0a769988ee 232 this->alarms[this->numAlarms-1].type=modBusType_float;
brunofgc 0:1c0a769988ee 233 //sscanf(linha,"max:float,%lu,%lu,%lu,%s",&aux1,&aux2,&aux3,stringVar);
brunofgc 0:1c0a769988ee 234 //this->alarms[this->numAlarms-1].addrModbusRead = aux1;
brunofgc 0:1c0a769988ee 235 //this->alarms[this->numAlarms-1].funcModbusRead = aux2;
brunofgc 0:1c0a769988ee 236 //this->alarms[this->numAlarms-1].regModbusRead = aux3;
brunofgc 0:1c0a769988ee 237
brunofgc 0:1c0a769988ee 238
brunofgc 0:1c0a769988ee 239 strtok(linha,",");
brunofgc 0:1c0a769988ee 240
brunofgc 0:1c0a769988ee 241 //Parametro 1;
brunofgc 0:1c0a769988ee 242 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 243 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 244
brunofgc 0:1c0a769988ee 245 //Parametro 2;
brunofgc 0:1c0a769988ee 246 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 247 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 248
brunofgc 0:1c0a769988ee 249 //Parametro 3;
brunofgc 0:1c0a769988ee 250 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 251 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 252
brunofgc 0:1c0a769988ee 253
brunofgc 0:1c0a769988ee 254
brunofgc 0:1c0a769988ee 255 //Parametro 4;
brunofgc 0:1c0a769988ee 256 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 257 floatVar = diversos::stringToFloat(pChar,100);
brunofgc 0:1c0a769988ee 258
brunofgc 0:1c0a769988ee 259 this->floatToBin(1,&floatVar,&this->alarms[this->numAlarms-1].max[0]);
brunofgc 0:1c0a769988ee 260 }
brunofgc 0:1c0a769988ee 261
brunofgc 0:1c0a769988ee 262
brunofgc 0:1c0a769988ee 263
brunofgc 0:1c0a769988ee 264 if(strstr(linha,"min:float")) {
brunofgc 0:1c0a769988ee 265 this->alarms[this->numAlarms-1].type=modBusType_float;
brunofgc 0:1c0a769988ee 266 strtok(linha,",");
brunofgc 0:1c0a769988ee 267 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 268 floatVar = diversos::stringToFloat(pChar,100);
brunofgc 0:1c0a769988ee 269 this->floatToBin(1,&floatVar,&this->alarms[this->numAlarms-1].min[0]);
brunofgc 0:1c0a769988ee 270 }
brunofgc 0:1c0a769988ee 271
brunofgc 0:1c0a769988ee 272 if(strstr(linha,"max:uint32_t")) {
brunofgc 0:1c0a769988ee 273 this->alarms[this->numAlarms-1].type=modBusType_uint32_t;
brunofgc 0:1c0a769988ee 274 //sscanf(linha,"max:uint32_t,%lu,%lu,%lu,%lu",&aux1,&aux2,&aux3,&aux4);
brunofgc 0:1c0a769988ee 275 strtok(linha,",");
brunofgc 0:1c0a769988ee 276
brunofgc 0:1c0a769988ee 277 //parametro1
brunofgc 0:1c0a769988ee 278 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 279 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 280
brunofgc 0:1c0a769988ee 281 //parametro2
brunofgc 0:1c0a769988ee 282 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 283 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 284
brunofgc 0:1c0a769988ee 285 //parametro3
brunofgc 0:1c0a769988ee 286 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 287 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 288
brunofgc 0:1c0a769988ee 289 //parametro4
brunofgc 0:1c0a769988ee 290 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 291 aux32_t = atoi(pChar);
brunofgc 0:1c0a769988ee 292
brunofgc 0:1c0a769988ee 293 this->uint32_t_ToBin(1,&aux32_t,&this->alarms[this->numAlarms-1].max[0]);
brunofgc 0:1c0a769988ee 294 }
brunofgc 0:1c0a769988ee 295
brunofgc 0:1c0a769988ee 296 if(strstr(linha,"min:uint32_t")) {
brunofgc 0:1c0a769988ee 297 this->alarms[this->numAlarms-1].type=modBusType_uint32_t;
brunofgc 0:1c0a769988ee 298 //sscanf(linha,"min:uint32_t,%lu",&aux4);
brunofgc 0:1c0a769988ee 299 strtok(linha,",");
brunofgc 0:1c0a769988ee 300 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 301 aux32_t = atoi(pChar);
brunofgc 0:1c0a769988ee 302
brunofgc 0:1c0a769988ee 303 this->uint32_t_ToBin(1,&aux32_t,&this->alarms[this->numAlarms-1].min[0]);
brunofgc 0:1c0a769988ee 304 }
brunofgc 0:1c0a769988ee 305
brunofgc 0:1c0a769988ee 306 if(strstr(linha,"max:uint16_t")) {
brunofgc 0:1c0a769988ee 307 this->alarms[this->numAlarms-1].type=modBusType_uint16_t;
brunofgc 0:1c0a769988ee 308 strtok(linha,",");
brunofgc 0:1c0a769988ee 309
brunofgc 0:1c0a769988ee 310 //parametro1
brunofgc 0:1c0a769988ee 311 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 312 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 313
brunofgc 0:1c0a769988ee 314 //parametro2
brunofgc 0:1c0a769988ee 315 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 316 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 317
brunofgc 0:1c0a769988ee 318 //parametro3
brunofgc 0:1c0a769988ee 319 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 320 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 321
brunofgc 0:1c0a769988ee 322 //parametro4
brunofgc 0:1c0a769988ee 323 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 324 aux16_t = atoi(pChar);
brunofgc 0:1c0a769988ee 325
brunofgc 0:1c0a769988ee 326 this->uint16_t_ToBin(1,&aux16_t,&this->alarms[this->numAlarms-1].max[0]);
brunofgc 0:1c0a769988ee 327 }
brunofgc 0:1c0a769988ee 328
brunofgc 0:1c0a769988ee 329 if(strstr(linha,"min:uint16_t")) {
brunofgc 0:1c0a769988ee 330 this->alarms[this->numAlarms-1].type=modBusType_uint16_t;
brunofgc 0:1c0a769988ee 331 strtok(linha,",");
brunofgc 0:1c0a769988ee 332 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 333 aux16_t = atoi(pChar);
brunofgc 0:1c0a769988ee 334
brunofgc 0:1c0a769988ee 335 this->uint16_t_ToBin(1,&aux16_t,&this->alarms[this->numAlarms-1].min[0]);
brunofgc 0:1c0a769988ee 336 }
brunofgc 0:1c0a769988ee 337
brunofgc 0:1c0a769988ee 338 if(strstr(linha,"max:uint8_t")) {
brunofgc 0:1c0a769988ee 339 this->alarms[this->numAlarms-1].type=modBusType_uint8_t;
brunofgc 0:1c0a769988ee 340 strtok(linha,",");
brunofgc 0:1c0a769988ee 341
brunofgc 0:1c0a769988ee 342 //parametro1
brunofgc 0:1c0a769988ee 343 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 344 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 345
brunofgc 0:1c0a769988ee 346 //parametro2
brunofgc 0:1c0a769988ee 347 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 348 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 349
brunofgc 0:1c0a769988ee 350 //parametro3
brunofgc 0:1c0a769988ee 351 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 352 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:1c0a769988ee 353
brunofgc 0:1c0a769988ee 354 //parametro4
brunofgc 0:1c0a769988ee 355 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 356 aux16_t = atoi(pChar);
brunofgc 0:1c0a769988ee 357
brunofgc 0:1c0a769988ee 358 this->alarms[this->numAlarms-1].max[0]=aux16_t;
brunofgc 0:1c0a769988ee 359 }
brunofgc 0:1c0a769988ee 360
brunofgc 0:1c0a769988ee 361 if(strstr(linha,"min:uint8_t")) {
brunofgc 0:1c0a769988ee 362 this->alarms[this->numAlarms-1].type=modBusType_uint8_t;
brunofgc 0:1c0a769988ee 363 strtok(linha,",");
brunofgc 0:1c0a769988ee 364 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 365 aux16_t = atoi(pChar);
brunofgc 0:1c0a769988ee 366
brunofgc 0:1c0a769988ee 367 this->alarms[this->numAlarms-1].min[0]=aux16_t;
brunofgc 0:1c0a769988ee 368 }
brunofgc 0:1c0a769988ee 369
brunofgc 0:1c0a769988ee 370
brunofgc 0:1c0a769988ee 371
brunofgc 0:1c0a769988ee 372 if(strstr(linha,"act:modbus:")) {
brunofgc 0:1c0a769988ee 373 //sscanf(linha,"act:modbus:%u,%u,%u,%u",&aux1,&aux2,&aux3,&aux4);
brunofgc 0:1c0a769988ee 374
brunofgc 0:1c0a769988ee 375 printf("Lido em act <%s>.\n",linha);
brunofgc 0:1c0a769988ee 376 strtok(linha,":");
brunofgc 0:1c0a769988ee 377 strtok(NULL,":");
brunofgc 0:1c0a769988ee 378
brunofgc 0:1c0a769988ee 379
brunofgc 0:1c0a769988ee 380 //parametro1
brunofgc 0:1c0a769988ee 381 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 382 this->alarms[this->numAlarms-1].addrModbusWrite = atoi(pChar);
brunofgc 0:1c0a769988ee 383
brunofgc 0:1c0a769988ee 384 //parametro2
brunofgc 0:1c0a769988ee 385 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 386 this->alarms[this->numAlarms-1].funcModbusWrite = atoi(pChar);
brunofgc 0:1c0a769988ee 387
brunofgc 0:1c0a769988ee 388 //parametro3
brunofgc 0:1c0a769988ee 389 pChar = strtok(NULL,",");
brunofgc 0:1c0a769988ee 390 this->alarms[this->numAlarms-1].regModbusWrite = atoi(pChar);
brunofgc 0:1c0a769988ee 391
brunofgc 0:1c0a769988ee 392 //parametro4
brunofgc 0:1c0a769988ee 393 pChar = strtok(NULL,"\r\n");
brunofgc 0:1c0a769988ee 394 aux16_t = atoi(pChar);
brunofgc 0:1c0a769988ee 395
brunofgc 0:1c0a769988ee 396 this->alarms[this->numAlarms-1].act=aux16_t;
brunofgc 0:1c0a769988ee 397 }
brunofgc 0:1c0a769988ee 398
brunofgc 0:1c0a769988ee 399 }
brunofgc 0:1c0a769988ee 400
brunofgc 0:1c0a769988ee 401 void device::writeReadingsToSD(){
brunofgc 0:1c0a769988ee 402 //Esta função faz a inserção de todos os dados no arquivo armazenamento.
brunofgc 0:1c0a769988ee 403
brunofgc 0:1c0a769988ee 404 /*float floatBuffer[2];
brunofgc 0:1c0a769988ee 405 modBusMaster1::readFloat(9,4,1,2,floatBuffer);
brunofgc 0:1c0a769988ee 406 pc.printf("Lido na fuc problema <%f,%f>.",floatBuffer[0],floatBuffer[1]);*/
brunofgc 0:1c0a769988ee 407
brunofgc 0:1c0a769988ee 408 uint16_t readingIndex=0;
brunofgc 0:1c0a769988ee 409 float *floatBuffer;
brunofgc 0:1c0a769988ee 410
brunofgc 0:1c0a769988ee 411 sdCard::insereDadosArquivo(&sdCard::armazenamento,"data{",5);
brunofgc 0:1c0a769988ee 412 for(readingIndex = 0;readingIndex < this->numReadings;readingIndex++){
brunofgc 0:1c0a769988ee 413 switch(this->readings[readingIndex].type){
brunofgc 0:1c0a769988ee 414 case modBusType_float:
brunofgc 0:1c0a769988ee 415 //readFloat(uint8_t,uint8_t,uint16_t,uint16_t,float*); //Endereço slave, funcCode, registrador, quantidade de registros,ponteiro para registros float
brunofgc 0:1c0a769988ee 416 floatBuffer = (float*) malloc(this->readings[readingIndex].numRegs*sizeof(float));
brunofgc 0:1c0a769988ee 417 modBusMaster1::readFloat(
brunofgc 0:1c0a769988ee 418 this->readings[readingIndex].addr,
brunofgc 0:1c0a769988ee 419 this->readings[readingIndex].func,
brunofgc 0:1c0a769988ee 420 this->readings[readingIndex].reg,
brunofgc 0:1c0a769988ee 421 this->readings[readingIndex].numRegs,
brunofgc 0:1c0a769988ee 422 floatBuffer
brunofgc 0:1c0a769988ee 423 );
brunofgc 0:1c0a769988ee 424 sdCard::insereDadosArquivo(&sdCard::armazenamento,(char *)floatBuffer,4*this->readings[readingIndex].numRegs);
brunofgc 0:1c0a769988ee 425 free(floatBuffer);
brunofgc 0:1c0a769988ee 426 break;
brunofgc 0:1c0a769988ee 427 }
brunofgc 0:1c0a769988ee 428 }
brunofgc 0:1c0a769988ee 429 sdCard::insereDadosArquivo(&sdCard::armazenamento,"}dataEnd;",9);
brunofgc 0:1c0a769988ee 430 }
brunofgc 0:1c0a769988ee 431
brunofgc 0:1c0a769988ee 432
brunofgc 0:1c0a769988ee 433 /*void device::verifyAlarms(){
brunofgc 0:1c0a769988ee 434
brunofgc 0:1c0a769988ee 435 }*/
brunofgc 0:1c0a769988ee 436
brunofgc 0:1c0a769988ee 437 device::device()
brunofgc 0:1c0a769988ee 438 {
brunofgc 0:1c0a769988ee 439 this->numAlarms=0;
brunofgc 0:1c0a769988ee 440 this->numReadings=0;
brunofgc 0:1c0a769988ee 441 }
brunofgc 0:1c0a769988ee 442
brunofgc 0:1c0a769988ee 443 void testa_writeReadingsToSD(){
brunofgc 0:1c0a769988ee 444 int i;
brunofgc 0:1c0a769988ee 445 for(i=0;i<devices;i++){
brunofgc 0:1c0a769988ee 446 dispositivos[i]->writeReadingsToSD();
brunofgc 0:1c0a769988ee 447 }
brunofgc 0:1c0a769988ee 448 }
brunofgc 0:1c0a769988ee 449
brunofgc 0:1c0a769988ee 450 int criaDevices(FILE *devicesCfg)
brunofgc 0:1c0a769988ee 451 {
brunofgc 0:1c0a769988ee 452 char linha[40];
brunofgc 0:1c0a769988ee 453 int i;
brunofgc 0:1c0a769988ee 454 int linhas = 0;
brunofgc 0:1c0a769988ee 455 devices = 0;
brunofgc 0:1c0a769988ee 456
brunofgc 0:1c0a769988ee 457 while(fgets(linha,maxCaractereLeLinha,devicesCfg)) {
brunofgc 0:1c0a769988ee 458 if(strstr(linha,"deviceCreate\\")) {
brunofgc 0:1c0a769988ee 459 devices++;
brunofgc 0:1c0a769988ee 460 }
brunofgc 0:1c0a769988ee 461 linhas++;
brunofgc 0:1c0a769988ee 462 }
brunofgc 0:1c0a769988ee 463
brunofgc 0:1c0a769988ee 464 printf("Contei %u linha(s), %u device(s).\n",linhas,devices);
brunofgc 0:1c0a769988ee 465
brunofgc 0:1c0a769988ee 466 //Criando vetor de objetos dispositivos;
brunofgc 0:1c0a769988ee 467
brunofgc 0:1c0a769988ee 468 dispositivos = (device **) malloc(sizeof(device)*devices);
brunofgc 0:1c0a769988ee 469
brunofgc 0:1c0a769988ee 470 for(i=0; i<devices; i++) {
brunofgc 0:1c0a769988ee 471 dispositivos[i] = new device();
brunofgc 0:1c0a769988ee 472 dispositivos[i]->id=i;
brunofgc 0:1c0a769988ee 473 }
brunofgc 0:1c0a769988ee 474
brunofgc 0:1c0a769988ee 475 rewind(devicesCfg);
brunofgc 0:1c0a769988ee 476 return 1;
brunofgc 0:1c0a769988ee 477 }
brunofgc 0:1c0a769988ee 478
brunofgc 0:1c0a769988ee 479
brunofgc 0:1c0a769988ee 480
brunofgc 0:1c0a769988ee 481
brunofgc 0:1c0a769988ee 482
brunofgc 0:1c0a769988ee 483 int configuraDevices(FILE *devicesCfg)
brunofgc 0:1c0a769988ee 484 {
brunofgc 0:1c0a769988ee 485 uint16_t linhas=0;
brunofgc 0:1c0a769988ee 486 //uint16_t leituras = 0;
brunofgc 0:1c0a769988ee 487 char linha[40];
brunofgc 0:1c0a769988ee 488 uint8_t estadoConfiguracao=estadoConfiguracao_idle;
brunofgc 0:1c0a769988ee 489 int8_t dispositivoEmConfiguracao = -1;
brunofgc 0:1c0a769988ee 490
brunofgc 0:1c0a769988ee 491 while(fgets(linha,maxCaractereLeLinha,devicesCfg)) {
brunofgc 0:1c0a769988ee 492 if(strstr(linha,"deviceCreate\\")) {
brunofgc 0:1c0a769988ee 493 dispositivoEmConfiguracao++;
brunofgc 0:1c0a769988ee 494 //printf("Configurando dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:1c0a769988ee 495 estadoConfiguracao = estadoConfiguracao_creatingDevice;
brunofgc 0:1c0a769988ee 496 }
brunofgc 0:1c0a769988ee 497
brunofgc 0:1c0a769988ee 498 if(strstr(linha,"alarmSet")) {
brunofgc 0:1c0a769988ee 499 //printf("Criando alarme no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:1c0a769988ee 500 alarmes++;
brunofgc 0:1c0a769988ee 501 estadoConfiguracao = estadoConfiguracao_alarmSet;
brunofgc 0:1c0a769988ee 502 }
brunofgc 0:1c0a769988ee 503
brunofgc 0:1c0a769988ee 504 if(strstr(linha,"readingsSet")) {
brunofgc 0:1c0a769988ee 505 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:1c0a769988ee 506 estadoConfiguracao = estadoConfiguracao_readingsSet;
brunofgc 0:1c0a769988ee 507 }
brunofgc 0:1c0a769988ee 508
brunofgc 0:1c0a769988ee 509 if(strstr(linha,"readingsEnd")) {
brunofgc 0:1c0a769988ee 510 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:1c0a769988ee 511 estadoConfiguracao = estadoConfiguracao_idle;
brunofgc 0:1c0a769988ee 512 }
brunofgc 0:1c0a769988ee 513
brunofgc 0:1c0a769988ee 514 if(strstr(linha,">")) {
brunofgc 0:1c0a769988ee 515 //printf("Fechando dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:1c0a769988ee 516 estadoConfiguracao = estadoConfiguracao_idle;
brunofgc 0:1c0a769988ee 517 }
brunofgc 0:1c0a769988ee 518
brunofgc 0:1c0a769988ee 519 switch(estadoConfiguracao) {
brunofgc 0:1c0a769988ee 520 case estadoConfiguracao_creatingDevice:
brunofgc 0:1c0a769988ee 521 if(strstr(linha,"id:")) {
brunofgc 0:1c0a769988ee 522 sscanf(linha,"id:%u",&dispositivos[dispositivoEmConfiguracao]->id);
brunofgc 0:1c0a769988ee 523 }
brunofgc 0:1c0a769988ee 524 break;
brunofgc 0:1c0a769988ee 525 case estadoConfiguracao_alarmSet:
brunofgc 0:1c0a769988ee 526 //Inclue linha nos alarmes do dispositivo em configuração
brunofgc 0:1c0a769988ee 527 dispositivos[dispositivoEmConfiguracao]->setAlarm(linha);
brunofgc 0:1c0a769988ee 528 break;
brunofgc 0:1c0a769988ee 529 case estadoConfiguracao_readingsSet:
brunofgc 0:1c0a769988ee 530 //Inclue linha nas leituras do dispositivo em configuração
brunofgc 0:1c0a769988ee 531 dispositivos[dispositivoEmConfiguracao]->setReading(linha);
brunofgc 0:1c0a769988ee 532 break;
brunofgc 0:1c0a769988ee 533 }
brunofgc 0:1c0a769988ee 534
brunofgc 0:1c0a769988ee 535 linhas++;
brunofgc 0:1c0a769988ee 536 }
brunofgc 0:1c0a769988ee 537 printf("Contei %u linha(s), configurei %u dispositivo(s), instalei %u alarme(s) nos dispositivo(s).\n",linhas,devices,alarmes);
brunofgc 0:1c0a769988ee 538 return 1;
brunofgc 0:1c0a769988ee 539 }
brunofgc 0:1c0a769988ee 540
brunofgc 0:1c0a769988ee 541
brunofgc 0:1c0a769988ee 542
brunofgc 0:1c0a769988ee 543 void testaTudoDevices()
brunofgc 0:1c0a769988ee 544 {
brunofgc 0:1c0a769988ee 545 int i;
brunofgc 0:1c0a769988ee 546 int j;
brunofgc 0:1c0a769988ee 547
brunofgc 0:1c0a769988ee 548 for(i=0; i<devices; i++) {
brunofgc 0:1c0a769988ee 549 printf("Dispositivo %u tem id %u, %u alarmes sendo eles:\n",i,dispositivos[i]->id,dispositivos[i]->numAlarms);
brunofgc 0:1c0a769988ee 550
brunofgc 0:1c0a769988ee 551 for(j=0; j<dispositivos[i]->numAlarms; j++) {
brunofgc 0:1c0a769988ee 552 printf("Alarme %u:\n",j);
brunofgc 0:1c0a769988ee 553 printf("\tName <%s>.\n",dispositivos[i]->alarms[j].name);
brunofgc 0:1c0a769988ee 554 printf("\tSeconds <%lu>.\n",dispositivos[i]->alarms[j].seconds);
brunofgc 0:1c0a769988ee 555 printf("\tAddr %u, func %u, reg %lu.\n",dispositivos[i]->alarms[j].addrModbusRead,dispositivos[i]->alarms[j].funcModbusRead,dispositivos[i]->alarms[j].regModbusRead);
brunofgc 0:1c0a769988ee 556 if(dispositivos[i]->alarms[j].type==modBusType_float) {
brunofgc 0:1c0a769988ee 557 float max,min;
brunofgc 0:1c0a769988ee 558 dispositivos[i]->floatToBin(0,&max,&dispositivos[i]->alarms[j].max[0]);
brunofgc 0:1c0a769988ee 559 dispositivos[i]->floatToBin(0,&min,&dispositivos[i]->alarms[j].min[0]);
brunofgc 0:1c0a769988ee 560 printf("\tFloat Max <%f>.\n",max);
brunofgc 0:1c0a769988ee 561 printf("\tFloat Min <%f>.\n",min);
brunofgc 0:1c0a769988ee 562 }
brunofgc 0:1c0a769988ee 563
brunofgc 0:1c0a769988ee 564 if(dispositivos[i]->alarms[j].type==modBusType_uint32_t) {
brunofgc 0:1c0a769988ee 565 uint32_t max,min;
brunofgc 0:1c0a769988ee 566 dispositivos[i]->uint32_t_ToBin(0,&max,&dispositivos[i]->alarms[j].max[0]);
brunofgc 0:1c0a769988ee 567 dispositivos[i]->uint32_t_ToBin(0,&min,&dispositivos[i]->alarms[j].min[0]);
brunofgc 0:1c0a769988ee 568 printf("\tuint32_t Max <%lu>.\n",max);
brunofgc 0:1c0a769988ee 569 printf("\tuint32_t Min <%lu>.\n",min);
brunofgc 0:1c0a769988ee 570 }
brunofgc 0:1c0a769988ee 571
brunofgc 0:1c0a769988ee 572 if(dispositivos[i]->alarms[j].type==modBusType_uint16_t) {
brunofgc 0:1c0a769988ee 573 uint16_t max,min;
brunofgc 0:1c0a769988ee 574 dispositivos[i]->uint16_t_ToBin(0,&max,&dispositivos[i]->alarms[j].max[0]);
brunofgc 0:1c0a769988ee 575 dispositivos[i]->uint16_t_ToBin(0,&min,&dispositivos[i]->alarms[j].min[0]);
brunofgc 0:1c0a769988ee 576 printf("\tuint16_t Max <%lu>.\n",max);
brunofgc 0:1c0a769988ee 577 printf("\tuint16_t Min <%lu>.\n",min);
brunofgc 0:1c0a769988ee 578 }
brunofgc 0:1c0a769988ee 579
brunofgc 0:1c0a769988ee 580 if(dispositivos[i]->alarms[j].type==modBusType_uint8_t) {
brunofgc 0:1c0a769988ee 581 uint8_t max,min;
brunofgc 0:1c0a769988ee 582 max=dispositivos[i]->alarms[j].max[0];
brunofgc 0:1c0a769988ee 583 min=dispositivos[i]->alarms[j].min[0];
brunofgc 0:1c0a769988ee 584 printf("\tuint8_t Max <%u>.\n",max);
brunofgc 0:1c0a769988ee 585 printf("\tuint8_t Min <%u>.\n",min);
brunofgc 0:1c0a769988ee 586 }
brunofgc 0:1c0a769988ee 587
brunofgc 0:1c0a769988ee 588 if(dispositivos[i]->alarms[j].type==modBusType_bit) {
brunofgc 0:1c0a769988ee 589 uint8_t max;
brunofgc 0:1c0a769988ee 590 max=dispositivos[i]->alarms[j].max[0];
brunofgc 0:1c0a769988ee 591 printf("\tbool state <%u>.\n",max);
brunofgc 0:1c0a769988ee 592 }
brunofgc 0:1c0a769988ee 593
brunofgc 0:1c0a769988ee 594 printf("\tAct %u, Addr %u, func %u, reg %lu.\n",dispositivos[i]->alarms[j].act,dispositivos[i]->alarms[j].addrModbusWrite,dispositivos[i]->alarms[j].funcModbusWrite,dispositivos[i]->alarms[j].regModbusWrite);
brunofgc 0:1c0a769988ee 595 }
brunofgc 0:1c0a769988ee 596
brunofgc 0:1c0a769988ee 597 printf("Dispositivo %u tem id %u, %u leituras sendo elas:\n",i,dispositivos[i]->id,dispositivos[i]->numReadings);
brunofgc 0:1c0a769988ee 598
brunofgc 0:1c0a769988ee 599 for(j=0; j<dispositivos[i]->numReadings; j++) {
brunofgc 0:1c0a769988ee 600 printf("Leitura %u:",j);
brunofgc 0:1c0a769988ee 601 switch(dispositivos[i]->readings[j].type) {
brunofgc 0:1c0a769988ee 602 case modBusType_float:
brunofgc 0:1c0a769988ee 603 printf("Tipo float ");
brunofgc 0:1c0a769988ee 604 break;
brunofgc 0:1c0a769988ee 605 case modBusType_uint32_t:
brunofgc 0:1c0a769988ee 606 printf("Tipo uint32_t ");
brunofgc 0:1c0a769988ee 607 break;
brunofgc 0:1c0a769988ee 608
brunofgc 0:1c0a769988ee 609 case modBusType_uint16_t:
brunofgc 0:1c0a769988ee 610 printf("Tipo uint16_t ");
brunofgc 0:1c0a769988ee 611 break;
brunofgc 0:1c0a769988ee 612
brunofgc 0:1c0a769988ee 613 case modBusType_uint8_t:
brunofgc 0:1c0a769988ee 614 printf("Tipo uint8_t ");
brunofgc 0:1c0a769988ee 615 break;
brunofgc 0:1c0a769988ee 616
brunofgc 0:1c0a769988ee 617 case modBusType_bit:
brunofgc 0:1c0a769988ee 618 printf("Tipo bool ");
brunofgc 0:1c0a769988ee 619 break;
brunofgc 0:1c0a769988ee 620
brunofgc 0:1c0a769988ee 621 }
brunofgc 0:1c0a769988ee 622
brunofgc 0:1c0a769988ee 623 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);
brunofgc 0:1c0a769988ee 624 }
brunofgc 0:1c0a769988ee 625 }
brunofgc 0:1c0a769988ee 626 }