@@ -56,6 +56,16 | |||||
56 |
|
56 | |||
57 | typedef struct control_module_parameters cmp; |
|
57 | typedef struct control_module_parameters cmp; | |
58 |
|
58 | |||
|
59 | ||||
|
60 | char *header = NULL; | |||
|
61 | char *TypeOfInstrument = NULL; | |||
|
62 | char *iDSource = NULL; | |||
|
63 | char *iDDestino = NULL; | |||
|
64 | char *len = NULL; | |||
|
65 | char *cmd = NULL; | |||
|
66 | char *rx_data = NULL; | |||
|
67 | char *crc = NULL; | |||
|
68 | ||||
59 | cmp parameters; |
|
69 | cmp parameters; | |
60 | /* |
|
70 | /* | |
61 | * Zona de declaracion de cabeceras. |
|
71 | * Zona de declaracion de cabeceras. | |
@@ -68,9 +78,12 | |||||
68 | void procesa_peticion(char *rx_buffer, char *tx_buffer); |
|
78 | void procesa_peticion(char *rx_buffer, char *tx_buffer); | |
69 | int cambia_apuntamiento(char *puntero_char); |
|
79 | int cambia_apuntamiento(char *puntero_char); | |
70 | int carga_experimento(char *nombre_archivo); |
|
80 | int carga_experimento(char *nombre_archivo); | |
71 |
|
|
81 | char *chequeo_sistema(char *filename, char *numero_muestras); | |
|
82 | int chequeo_sistema2(char *filename, char *numero_muestras); | |||
72 | void recibe_experimento(char *data, char filename[]); |
|
83 | void recibe_experimento(char *data, char filename[]); | |
73 | char* File2buffer(char *filename2, int n); |
|
84 | char* File2buffer(char *filename2, int n); | |
|
85 | void SplitFrame(char *frame); | |||
|
86 | void procesa_peticion2(char *rx_buffer, char *tx_buffer); | |||
74 |
|
87 | |||
75 | /* |
|
88 | /* | |
76 | * |
|
89 | * | |
@@ -85,7 +98,7 | |||||
85 | char *tx_buffer = (char *) malloc(TAM_BUFFER); |
|
98 | char *tx_buffer = (char *) malloc(TAM_BUFFER); | |
86 | /* Inicializa parametros del modulo*/ |
|
99 | /* Inicializa parametros del modulo*/ | |
87 | parameters = inicializa_modulo(parameters); |
|
100 | parameters = inicializa_modulo(parameters); | |
88 | printf("%s%s%s%s",parameters.ID, parameters.param2, parameters.param3, parameters.param4); |
|
101 | printf("%s\n%s\n%s\n%s\n",parameters.ID, parameters.param2, parameters.param3, parameters.param4); | |
89 | /* Inicializa red*/ |
|
102 | /* Inicializa red*/ | |
90 | servSocket = inicializa_ethernet(); |
|
103 | servSocket = inicializa_ethernet(); | |
91 | /* Inicializamos el puerto GPIO del sistema embebido GSBC-9260S */ |
|
104 | /* Inicializamos el puerto GPIO del sistema embebido GSBC-9260S */ | |
@@ -204,7 +217,7 | |||||
204 | /* |
|
217 | /* | |
205 | * Esta funcion procesa el mensaje de peticion y genera respuesta |
|
218 | * Esta funcion procesa el mensaje de peticion y genera respuesta | |
206 | */ |
|
219 | */ | |
207 | void procesa_peticion(char *rx_buffer, char *tx_buffer){ |
|
220 | void procesa_peticion2(char *rx_buffer, char *tx_buffer){ | |
208 | int n = 0; |
|
221 | int n = 0; | |
209 | char filename1[50]; |
|
222 | char filename1[50]; | |
210 | char filename2[] = "verificacion.txt"; |
|
223 | char filename2[] = "verificacion.txt"; | |
@@ -237,7 +250,7 | |||||
237 | } |
|
250 | } | |
238 |
|
251 | |||
239 | else if(strcmp(cmd,"ANST") == 0){ |
|
252 | else if(strcmp(cmd,"ANST") == 0){ | |
240 | n = chequeo_sistema(filename2,rx_data); |
|
253 | n = chequeo_sistema2(filename2,rx_data); | |
241 | printf("%i\n",n); |
|
254 | printf("%i\n",n); | |
242 | tx_data = File2buffer(filename2, n); |
|
255 | tx_data = File2buffer(filename2, n); | |
243 | } |
|
256 | } | |
@@ -264,6 +277,120 | |||||
264 | strcat(tx_buffer,crc); |
|
277 | strcat(tx_buffer,crc); | |
265 | strcat(tx_buffer,":"); |
|
278 | strcat(tx_buffer,":"); | |
266 | strcat(tx_buffer,"quit"); |
|
279 | strcat(tx_buffer,"quit"); | |
|
280 | } | |||
|
281 | } | |||
|
282 | ||||
|
283 | void SplitFrame(char *frame){ | |||
|
284 | header = malloc(4); | |||
|
285 | *header = *frame; | |||
|
286 | *(header + 1) = *(frame + 1); | |||
|
287 | *(header + 2) = *(frame + 2); | |||
|
288 | *(header + 3) = '\0'; | |||
|
289 | TypeOfInstrument = malloc(4); | |||
|
290 | *TypeOfInstrument = *(frame + 3); | |||
|
291 | *(TypeOfInstrument + 1) = *(frame + 4); | |||
|
292 | *(TypeOfInstrument + 2) = *(frame + 5); | |||
|
293 | *(TypeOfInstrument + 3) = '\0'; | |||
|
294 | iDSource = malloc(8); | |||
|
295 | *iDSource = *(frame + 6); | |||
|
296 | *(iDSource + 1) = *(frame + 7); | |||
|
297 | *(iDSource + 2) = *(frame + 8); | |||
|
298 | *(iDSource + 3) = *(frame + 9); | |||
|
299 | *(iDSource + 4) = *(frame + 10); | |||
|
300 | *(iDSource + 5) = *(frame + 11); | |||
|
301 | *(iDSource + 6) = *(frame + 12); | |||
|
302 | *(iDSource + 7) = '\0'; | |||
|
303 | iDDestino = malloc(8); | |||
|
304 | *iDDestino = *(frame + 13); | |||
|
305 | *(iDDestino + 1) = *(frame + 14); | |||
|
306 | *(iDDestino + 2) = *(frame + 15); | |||
|
307 | *(iDDestino + 3) = *(frame + 16); | |||
|
308 | *(iDDestino + 4) = *(frame + 17); | |||
|
309 | *(iDDestino + 5) = *(frame + 18); | |||
|
310 | *(iDDestino + 6) = *(frame + 19); | |||
|
311 | *(iDDestino + 7) = '\0'; | |||
|
312 | len = malloc(7); | |||
|
313 | *len = *(frame + 20); | |||
|
314 | *(len + 1) = *(frame + 21); | |||
|
315 | *(len + 2) = *(frame + 22); | |||
|
316 | *(len + 3) = *(frame + 23); | |||
|
317 | *(len + 4) = *(frame + 24); | |||
|
318 | *(len + 5) = *(frame + 25); | |||
|
319 | *(len + 6) = '\0'; | |||
|
320 | cmd = malloc(5); | |||
|
321 | *cmd = *(frame + 26); | |||
|
322 | *(cmd + 1) = *(frame + 27); | |||
|
323 | *(cmd + 2) = *(frame + 28); | |||
|
324 | *(cmd + 3) = *(frame + 29); | |||
|
325 | *(cmd + 4) = '\0'; | |||
|
326 | ||||
|
327 | int l = atoi(len) - 31; //Resto del tamaΓ±o total de la trama los 31 bytes fijos | |||
|
328 | rx_data = malloc(l); | |||
|
329 | int i; | |||
|
330 | for (i = 30; i < 30 + l; i++) | |||
|
331 | *(rx_data + (i-30)) = *(frame + i); | |||
|
332 | *(rx_data + l) = '\0'; | |||
|
333 | crc = malloc(2); | |||
|
334 | *crc = *(frame + 30 + l); | |||
|
335 | *(crc + 1) = '\0'; | |||
|
336 | } | |||
|
337 | ||||
|
338 | void procesa_peticion(char *rx_buffer, char *tx_buffer){ | |||
|
339 | // int n = 0; | |||
|
340 | char filename1[50]; | |||
|
341 | char filename2[] = "verificacion.txt"; | |||
|
342 | char *tx_data = NULL; | |||
|
343 | SplitFrame(rx_buffer); | |||
|
344 | printf("Split\n"); | |||
|
345 | printf("%s\n",header); | |||
|
346 | printf("%s\n",TypeOfInstrument); | |||
|
347 | printf("%s\n",iDSource); | |||
|
348 | printf("%s\n",iDDestino); | |||
|
349 | printf("%s\n",len); | |||
|
350 | printf("%s\n",cmd); | |||
|
351 | printf("%s\n",rx_data); | |||
|
352 | printf("%s\n",crc); | |||
|
353 | printf("Split\n"); | |||
|
354 | ||||
|
355 | if ((cmd == NULL) || (rx_data == NULL)){ | |||
|
356 | ERROR("procesarPeticion: formato de mensaje incorrecto"); | |||
|
357 | } | |||
|
358 | else{ | |||
|
359 | if(strcmp(cmd,"SNDF") == 0){ | |||
|
360 | recibe_experimento(rx_data,filename1); | |||
|
361 | carga_experimento(filename1); | |||
|
362 | cambia_apuntamiento("0"); | |||
|
363 | tx_data = (char*)malloc(3); | |||
|
364 | tx_data = "OK"; | |||
|
365 | } | |||
|
366 | else if(strcmp(cmd,"CHGB") == 0){ | |||
|
367 | cambia_apuntamiento(rx_data); | |||
|
368 | tx_data = (char*)malloc(3); | |||
|
369 | tx_data = "OK"; | |||
|
370 | ||||
|
371 | } | |||
|
372 | ||||
|
373 | else if(strcmp(cmd,"ANST") == 0){ | |||
|
374 | /*n = chequeo_sistema(filename2,rx_data); | |||
|
375 | printf("%i\n",n); | |||
|
376 | tx_data = File2buffer(filename2, n);*/ | |||
|
377 | tx_data = chequeo_sistema(filename2,rx_data); | |||
|
378 | printf("%s\n",tx_data); | |||
|
379 | } | |||
|
380 | else{ | |||
|
381 | tx_data = (char*)malloc(6); | |||
|
382 | tx_data = "Error"; | |||
|
383 | ERROR("procesa_peticion: comando no reconocido"); | |||
|
384 | } | |||
|
385 | ||||
|
386 | strcpy(tx_buffer,header); //3 | |||
|
387 | strcat(tx_buffer,TypeOfInstrument); //3 | |||
|
388 | strcat(tx_buffer,parameters.ID); //7 | |||
|
389 | strcat(tx_buffer,iDSource); //7 | |||
|
390 | strcat(tx_buffer,"00032"); //5 | |||
|
391 | strcat(tx_buffer,cmd); //4 | |||
|
392 | strcat(tx_buffer,tx_data); //2 | |||
|
393 | strcat(tx_buffer,crc); //1 | |||
267 |
|
394 | |||
268 | } |
|
395 | } | |
269 |
|
396 | |||
@@ -388,7 +515,7 | |||||
388 | * archivo Verificacion. |
|
515 | * archivo Verificacion. | |
389 | */ |
|
516 | */ | |
390 |
|
517 | |||
391 | int chequeo_sistema(char *filename, char *numero_muestras){ |
|
518 | int chequeo_sistema2(char *filename, char *numero_muestras){ | |
392 |
|
519 | |||
393 | char valor[7]; |
|
520 | char valor[7]; | |
394 | int i,cnt; |
|
521 | int i,cnt; | |
@@ -396,7 +523,7 | |||||
396 | FILE *fd; |
|
523 | FILE *fd; | |
397 | fd=fopen(filename,"w"); |
|
524 | fd=fopen(filename,"w"); | |
398 | fprintf(fd,"%s\n","Verificacion"); |
|
525 | fprintf(fd,"%s\n","Verificacion"); | |
399 | fprintf(fd,"%s",parameters.ID); |
|
526 | fprintf(fd,"%s\n",parameters.ID); | |
400 | fprintf(fd,"%s\n","------------"); |
|
527 | fprintf(fd,"%s\n","------------"); | |
401 | cnt=0; |
|
528 | cnt=0; | |
402 | do |
|
529 | do | |
@@ -448,12 +575,68 | |||||
448 | return tx_data; |
|
575 | return tx_data; | |
449 | } |
|
576 | } | |
450 |
|
577 | |||
|
578 | /* | |||
|
579 | * Esta funcion lee "n" veces el estado del APUNTE actual y reporta | |||
|
580 | * una cadena de Verificacion. | |||
|
581 | */ | |||
|
582 | char* chequeo_sistema(char *filename, char *numero_muestras){ | |||
|
583 | ||||
|
584 | int i; | |||
|
585 | int cnt = 0; | |||
|
586 | unsigned int entradac= 0; | |||
|
587 | ||||
|
588 | char page0[250]; | |||
|
589 | ||||
|
590 | strcpy(page0,"Verificacion\n"); | |||
|
591 | strcat(page0,parameters.ID); | |||
|
592 | strcat(page0,"\n------------\n"); | |||
|
593 | ||||
|
594 | char page1[8]; | |||
|
595 | ||||
|
596 | do{ | |||
|
597 | //Inicializando arreglo | |||
|
598 | for(i=0;i<6;i++) | |||
|
599 | page1[i]='0'; | |||
|
600 | page1[6] = '\n'; | |||
|
601 | page1[7] = '\0'; | |||
|
602 | //Lectura de puerto | |||
|
603 | entradac= pio_in(piob,maskb_in); | |||
|
604 | //Dandole formato al dato | |||
|
605 | if (!(entradac & bit_up_2)) | |||
|
606 | page1[0] = '1'; | |||
|
607 | if (!(entradac & bit_up_1)) | |||
|
608 | page1[1] = '1'; | |||
|
609 | if (!(entradac & bit_up_0)) | |||
|
610 | page1[2] = '1'; | |||
|
611 | if (!(entradac & bit_dow_2)) | |||
|
612 | page1[3] = '1'; | |||
|
613 | if (!(entradac & bit_dow_1)) | |||
|
614 | page1[4] = '1'; | |||
|
615 | if (!(entradac & bit_dow_0)) | |||
|
616 | page1[5] = '1'; | |||
|
617 | ||||
|
618 | strcat(page0, page1); | |||
|
619 | cnt=cnt+1; | |||
|
620 | usleep(1*1000*1000); | |||
|
621 | ||||
|
622 | }while(cnt < atoi(numero_muestras)); | |||
|
623 | ||||
|
624 | page0[strlen(page0)] = '\0'; | |||
|
625 | ||||
|
626 | char *all_pages = malloc(strlen(page0)+1); | |||
|
627 | strcpy(all_pages, page0); | |||
|
628 | return all_pages; | |||
|
629 | } | |||
451 | cmp inicializa_modulo(cmp p){ |
|
630 | cmp inicializa_modulo(cmp p){ | |
452 | FILE *fd = fopen("configuration.txt","r"); |
|
631 | FILE *fd = fopen("configuration.txt","r"); | |
453 | fgets(p.ID,20,fd); |
|
632 | fgets(p.ID,20,fd); | |
|
633 | p.ID[7]='\0'; | |||
454 | fgets(p.param2,20,fd); |
|
634 | fgets(p.param2,20,fd); | |
|
635 | p.param2[10]='\0'; | |||
455 | fgets(p.param3,20,fd); |
|
636 | fgets(p.param3,20,fd); | |
|
637 | p.param3[10]='\0'; | |||
456 | fgets(p.param4,20,fd); |
|
638 | fgets(p.param4,20,fd); | |
|
639 | p.param4[10]='\0'; | |||
457 | fclose(fd); |
|
640 | fclose(fd); | |
458 | return p; |
|
641 | return p; | |
459 | } |
|
642 | } |
General Comments 0
You need to be logged in to leave comments.
Login now