##// END OF EJS Templates
imanay -
r71:72
parent child
Show More
@@ -0,0 +1,460
1 /*
2 * Servidor.c
3 *
4 * Created on: Nov 3, 2009
5 * Author: Jose Francisco Quenta
6 *
7 * Se implementa:
8 * -Carga en memoria los apuntes contenidos en un archivo de experimentos: apunte0 -> GPIO
9 * -Cambio de apunte.
10 * -Lectura del estado actual del apunte y grabado del mismo en un archivo
11 */
12
13 #include <stdio.h>
14 #include <stdlib.h>
15 #include <string.h>
16 #include <unistd.h>
17 #include <errno.h>
18
19 #include <sys/types.h>
20 #include <sys/socket.h>
21 #include <netinet/in.h>
22 #include <arpa/inet.h>
23 #include <netdb.h>
24
25 #include "./Librerias/AT91gpio_Funciones.h"
26 #include "./Librerias/Mensajes.h"
27
28 #define PUERTO_SERVIDOR 5500
29 #define TAM_BUFFER 1024
30
31 #define maskc_out PC30+PC28+PC26+PC24+PC22+PC20 //MSB-UP-LSB MSB-DOWN-LSB //APUNTE
32
33 #define maskb_in PB16+PB18+PB20+PB30+PB24+PB22 //MSB-UP-LSB MSB-DOWN-LSB //VERIFICACION
34
35 #define bit_up_2 0x00010000 //Mascara de cada bit a revisar: bit_up_2 es MSB
36 #define bit_up_1 0x00040000
37 #define bit_up_0 0x00100000
38 #define bit_dow_2 0x40000000
39 #define bit_dow_1 0x01000000
40 #define bit_dow_0 0x00400000
41
42 #define MyID 11
43 #define MAXPENDING 5 /* Maximum outstanding connection requests */
44
45 char *buff_experimento= NULL;
46
47 AT91S_PIO *pioc;
48 AT91S_PIO *piob;
49
50 struct control_module_parameters {
51 char ID[20];
52 char param2[20];
53 char param3[20];
54 char param4[20];
55 };
56
57 typedef struct control_module_parameters cmp;
58
59
60 /*
61 * Zona de declaracion de cabeceras.
62 */
63 cmp inicializa_modulo(cmp p);
64 int inicializa_ethernet();
65 int rxData(int, char*);
66 void txData(int, char*);
67 void inicializa_gpio();
68 void procesa_peticion(char *rx_buffer, char *tx_buffer);
69 int cambia_apuntamiento(char *puntero_char);
70 int carga_experimento(char *nombre_archivo);
71 int chequeo_sistema(char *filename, char *numero_muestras);
72 void recibe_experimento(char *data, char filename[]);
73 char* File2buffer(char *filename2, int n);
74
75 /*
76 *
77 */
78 int main(){
79
80 int servSocket;
81 int clntSocket;
82 cmp parameters;
83
84 char *rx_buffer = (char *) malloc(TAM_BUFFER);
85 char *tx_buffer = (char *) malloc(TAM_BUFFER);
86 /* Inicializa parametros del modulo*/
87 parameters = inicializa_modulo(parameters);
88 printf("%s%s%s%s",parameters.ID, parameters.param2, parameters.param3, parameters.param4);
89 /* Inicializa red*/
90 servSocket = inicializa_ethernet();
91 /* Inicializamos el puerto GPIO del sistema embebido GSBC-9260S */
92 inicializa_gpio();
93
94 while(1){
95 // Recepción TCP de petición
96 clntSocket = rxData(servSocket, rx_buffer);
97 //testpoint
98 printf("rx:%s\n",rx_buffer);
99 // Procesamiento de la petición
100 procesa_peticion(rx_buffer, tx_buffer);
101 //testpoint
102 printf("tx:%s\n",tx_buffer);
103 // Respuesta del modulo de control
104 txData(clntSocket, tx_buffer);
105
106 }
107 }
108
109
110 int inicializa_ethernet(){
111
112 struct sockaddr_in inf_servidor;
113
114 int servSocket;
115
116 int resultado;
117
118 /* Haciendo la estructura local*/
119 memset(&inf_servidor, 0, sizeof(inf_servidor));
120 inf_servidor.sin_family= AF_INET;
121 inf_servidor.sin_port= htons(PUERTO_SERVIDOR);
122 inf_servidor.sin_addr.s_addr= INADDR_ANY;
123
124 /* Se establece el socket */
125 servSocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
126 if (servSocket == -1){
127 ERROR_FATAL("No se establecio correctamente el socket: socket()\n");
128 exit(-1);
129 }
130
131 /* Se asocia el socket a un puerto y una IP */
132 resultado = bind(servSocket,(struct sockaddr *)&inf_servidor,sizeof(inf_servidor));
133 if (resultado== -1){
134 ERROR_FATAL("No se establecio correctamente el socket: bind()\n");
135 exit(-1);
136 }
137
138 if (listen(servSocket, MAXPENDING) < 0){
139 printf("listen() failed\n");
140 exit(-1);
141 }
142
143 return servSocket;
144
145 }
146
147 int rxData(int servSocket, char* rx_buffer){
148
149 int clntSocket;
150 struct sockaddr_in inf_cliente;
151 int numbytes_recibidos;
152 unsigned int inf_client_Len;
153
154 printf("\nEsperando solicitud de cliente...\n");
155
156 /* Set the size of the in-out parameter */
157 inf_client_Len = sizeof(inf_cliente);
158 /* Se espera hasta que un cliente se conecte */
159 if ((clntSocket = accept(servSocket, (struct sockaddr *) &inf_cliente,
160 &inf_client_Len)) < 0)
161 printf("accept() failed\n");
162
163 if ((numbytes_recibidos = recv(clntSocket, rx_buffer, TAM_BUFFER, 0)) < 0)
164 printf("recv() failed\n");
165
166 /* Se procede a procesar los datos recibidos */
167 rx_buffer[numbytes_recibidos]= '\0';
168
169 return clntSocket;
170 }
171
172 void txData(int clntSocket, char* data){
173
174 /* Echo message back to client */
175 if (send(clntSocket, data, strlen(data), 0) != strlen(data))
176 printf("send() failed\n");
177
178 close(clntSocket); /* Close client socket */
179 }
180 /*
181 * Esta funcion incializa el puerto GPIO
182 */
183 void inicializa_gpio(){
184
185 // Configuracion de los pines de APUNTE
186 pioc = pio_map(PIOC_BASE);
187 pio_enable(pioc, maskc_out);
188 pio_disable_irq(pioc, maskc_out);
189 pio_disable_multiple_driver(pioc, maskc_out);
190 pio_disable_pull_ups(pioc, maskc_out);
191 pio_synchronous_data_output(pioc, maskc_out);
192 pio_output_enable(pioc, maskc_out);
193
194 // Configuracion de los pines de VERIFICACION
195 piob = pio_map(PIOB_BASE);
196 pio_enable(piob, maskb_in);
197 pio_disable_irq(piob, maskb_in);
198 pio_disable_multiple_driver(piob, maskb_in);
199 pio_disable_pull_ups(piob, maskb_in);
200 pio_input_enable(piob, maskb_in);
201
202 }
203
204 /*
205 * Esta funcion procesa el mensaje de peticion y genera respuesta
206 */
207 void procesa_peticion(char *rx_buffer, char *tx_buffer){
208 int n = 0;
209 char filename1[50];
210 char filename2[] = "verificacion.txt";
211 char *tx_data = NULL;
212 char *header = strtok(rx_buffer, ":");
213 char *TypeOfInstrument = strtok(NULL, ":");
214 char *iDSource = strtok(NULL, ":");
215 char *iDDestino = strtok(NULL, ":");
216 char *len = strtok(NULL, ":");
217 char *cmd = strtok(NULL, ":");
218 char *rx_data = strtok(NULL, ":");
219 char *crc = strtok(NULL, ":");
220
221 if ((cmd == NULL) || (rx_data == NULL)){
222 ERROR("procesarPeticion: formato de mensaje incorrecto");
223 }
224 else{
225 if(strcmp(cmd,"SNDF") == 0){
226 recibe_experimento(rx_data,filename1);
227 carga_experimento(filename1);
228 cambia_apuntamiento("0");
229 tx_data = (char*)malloc(3);
230 tx_data = "OK";
231 }
232 else if(strcmp(cmd,"CHGB") == 0){
233 //cambia_apuntamiento(rx_data);
234 printf("%s\n",rx_data);
235 //cambia_apuntamiento(rx_data);
236 cambia_apuntamiento("1");
237 tx_data = (char*)malloc(3);
238 tx_data = "OK";
239
240 }
241
242 else if(strcmp(cmd,"ANST") == 0){
243 n = chequeo_sistema(filename2,rx_data);
244 printf("%i\n",n);
245 tx_data = File2buffer(filename2, n);
246 }
247 else{
248 tx_data = (char*)malloc(6);
249 tx_data = "Error";
250 ERROR("procesa_peticion: comando no reconocido");
251 }
252
253 strcpy(tx_buffer,header);
254 strcat(tx_buffer,":");
255 strcat(tx_buffer,TypeOfInstrument);
256 strcat(tx_buffer,":");
257 strcat(tx_buffer,iDDestino);
258 strcat(tx_buffer,":");
259 strcat(tx_buffer,iDSource);
260 strcat(tx_buffer,":");
261 strcat(tx_buffer,len);
262 strcat(tx_buffer,":");
263 strcat(tx_buffer,cmd);
264 strcat(tx_buffer,":");
265 strcat(tx_buffer,tx_data);
266 strcat(tx_buffer,":");
267 strcat(tx_buffer,crc);
268
269 }
270
271 }
272
273 /*
274 * Esta función genera el archivo de experimento a partir de la trama TCP recibida
275 */
276
277 void recibe_experimento(char *p_data, char filename[]){
278 FILE *fd;
279 int i = 0;
280
281 while (*p_data != '\n'){
282 filename[i] = *p_data;
283 i++;
284 p_data++;
285 }
286 filename[i] = '\0';
287 p_data = p_data - i;
288 fd = fopen(filename,"w");
289 fprintf(fd, p_data);
290 fclose(fd);
291 }
292
293 /*
294 * Esta funcion carga un archivo en un buffer que esta ubicado en memoria, luego
295 * este buffer es usado en la funcion "cambia_apuntamiento" para obtener el dato
296 * que sera usado en el cambio de apuntamiento.
297 */
298 int carga_experimento(char *nombre_archivo){
299
300 FILE *Archivo_Fd;
301
302 char *cadena = (char *) malloc(25);
303
304 int longitud_cadena;
305 int num_bytes= 0;
306 int num_filas= 0;
307
308 Archivo_Fd = fopen(nombre_archivo,"r"); // Se procede a abrir el archivo, segun la ruta especificada
309 if(!Archivo_Fd){
310 ERROR("carga_archivo: No se pudo abrir el archivo!!! --> fopen()\n");
311 return -1;
312 }else{
313
314 while(!feof(Archivo_Fd)){ // Se procede a calcular la longitud del archivo para separar memoria
315 fgets(cadena,20,Archivo_Fd);
316 longitud_cadena= strlen(cadena);
317 cadena[longitud_cadena-1] = '\0';
318 num_bytes = num_bytes + longitud_cadena;
319 num_filas++;
320 }
321
322 rewind(Archivo_Fd); // Se reinicia el puntero del archivo
323
324 char *buffer_temporal = (char *) malloc(num_bytes+1); // Se separa espacio de memoria segun
325 // la longitud del archivo
326 fread(buffer_temporal, sizeof(char), num_bytes, Archivo_Fd);
327
328 char *puntero= strstr(buffer_temporal,".abs"); // Se procede a eliminar la cabecera del archivo
329 puntero= puntero + 12;
330
331 buff_experimento = (char *) malloc(7*(num_filas-3)); // num_bytes_fila*(num_filas-3);
332 strncpy(buff_experimento,puntero,7*(num_filas-3)); // Se carga en memoria la informacion del archivo
333
334 fclose(Archivo_Fd);
335
336 return 1;
337 }
338 }
339
340 /*
341 * Esta funcion recibe un numero en formato char, el dato se transforma a su equivalente en
342 * un numero entero, que sera usado para sacar un dato del buffer "buff_experimento", esta
343 * dato es el valor que se enviara al sistema de conmutacion RF para el cambio de apunte a
344 * traves del puerto GPIO.
345 */
346 int cambia_apuntamiento(char *puntero_char){
347
348 /*MSB-UP-LSB MSB-DOWN-LSB*/
349 int desplazamiento[6]={30,28,26,24,22,20}; // Defino los dezplazamientos que se aplicara
350 // al dato que ingresa para formar el número
351 // entero que se le pasara al puerto GPIO
352 // Estos números son los pines del puerto GPIO
353 // que se estan usando para el control
354
355 int puntero= atoi(puntero_char); // Se convierte a entero la direccion del puntero
356
357 int base= 7*puntero; // base= cantidad_bytes del dato x puntero
358 // cantidad de bytes es el numero de bytes que
359 printf("%s\n%i\n",puntero_char,puntero); // contiene cada dato, para este caso es 7
360 // porque es 6 bits de datos + 1 bit del cambio
361 // de linea.
362 char valor_char;
363 unsigned long valor;
364 unsigned long acumulado_ceros=0;
365 unsigned long acumulado_unos=0;
366
367 int offset; // Defino offset para el desplazamiento a traves
368 for(offset=0;offset<6;offset++){ // de cada dato que se obtiene del "buff_experimento"
369 printf("tp1\n");
370 printf("%i\n",base+offset);
371 valor_char= buff_experimento[base+offset]; // Obtengo el dato
372
373 if (valor_char == '0'){ // Obtengo el número acumulado segun sea un cero o un uno
374 valor= 0;
375 acumulado_ceros= acumulado_ceros + (1 << desplazamiento[offset]);
376 }else{
377 valor= 1;
378 acumulado_unos= acumulado_unos + (1 << desplazamiento[offset]);
379 }
380 }
381 printf("tp2\n");
382 pio_out(pioc, maskc_out, acumulado_unos, 1);
383 printf("tp3\n");
384 pio_out(pioc, maskc_out, acumulado_ceros, 0);
385 printf("tp4\n");
386
387 return 1;
388
389 }
390
391 /*
392 * Esta funcion lee "n" veces el estado del APUNTE actual y lo guarda en el
393 * archivo Verificacion.
394 */
395
396 int chequeo_sistema(char *filename, char *numero_muestras){
397
398 char valor[7];
399 int i,cnt;
400 unsigned int entradac= 0;
401 FILE *fd;
402 fd=fopen(filename,"w");
403 fprintf(fd,"%s\n","Verificacion");
404 fprintf(fd,"%s\n","------------");
405 cnt=0;
406 do
407 {
408 //Inicializando arreglo
409 for(i=0;i<6;i++)
410 valor[i]='0';
411
412 valor[6]='\0';
413
414 //Lectura de puerto
415 entradac= pio_in(piob,maskb_in);
416
417 //Dandole formato al dato
418 if (!(entradac & bit_up_2))
419 valor[0] = '1';
420 if (!(entradac & bit_up_1))
421 valor[1] = '1';
422 if (!(entradac & bit_up_0))
423 valor[2] = '1';
424 if (!(entradac & bit_dow_2))
425 valor[3] = '1';
426 if (!(entradac & bit_dow_1))
427 valor[4] = '1';
428 if (!(entradac & bit_dow_0))
429 valor[5] = '1';
430
431 //Escribiendo en archivo
432 fprintf(fd,"%s\n",valor);
433 cnt=cnt+1;
434 usleep(1*1000*1000);
435
436 }while(cnt < atoi(numero_muestras));
437
438 fclose(fd);
439
440 return 7*atoi(numero_muestras) + 26 + 1; //incluye eof
441 }
442
443 char* File2buffer(char *filename, int n){
444 FILE *fd;
445 char* tx_data = (char *)malloc(n);
446 fd = fopen(filename,"r");
447 fread(tx_data, 1, n, fd);
448 fclose(fd);
449 return tx_data;
450 }
451
452 cmp inicializa_modulo(cmp p){
453 FILE *fd = fopen("configuration.txt","r");
454 fgets(p.ID,20,fd);
455 fgets(p.param2,20,fd);
456 fgets(p.param3,20,fd);
457 fgets(p.param4,20,fd);
458 fclose(fd);
459 return p;
460 }
@@ -0,0 +1,339
1 /*
2 * Servidor.c
3 *
4 * Created on: Nov 3, 2009
5 * Author: Jose Francisco Quenta
6 *
7 * Se implementa:
8 * -Carga en memoria los apuntes contenidos en un archivo de experimentos: apunte0 -> GPIO
9 * -Cambio de apunte.
10 * -Lectura del estado actual del apunte y grabado del mismo en un archivo
11 */
12
13 #include <stdio.h>
14 #include <stdlib.h>
15 #include <string.h>
16 #include <unistd.h>
17 #include <errno.h>
18
19 #include <sys/types.h>
20 #include <sys/socket.h>
21 #include <netinet/in.h>
22 #include <arpa/inet.h>
23 #include <netdb.h>
24
25 #include "./Librerias/AT91gpio_Funciones.h"
26 #include "./Librerias/Mensajes.h"
27
28 #define PUERTO_SERVIDOR 5500
29 #define TAM_BUFFER 100
30
31 #define maskc_out PC30+PC28+PC26+PC24+PC22+PC20 //MSB-UP-LSB MSB-DOWN-LSB //APUNTE
32
33 #define maskb_in PB16+PB18+PB20+PB30+PB24+PB22 //MSB-UP-LSB MSB-DOWN-LSB //VERIFICACION
34
35 #define bit_up_2 0x00010000 //Mascara de cada bit a revisar: bit_up_2 es MSB
36 #define bit_up_1 0x00040000
37 #define bit_up_0 0x00100000
38 #define bit_dow_2 0x40000000
39 #define bit_dow_1 0x01000000
40 #define bit_dow_0 0x00400000
41
42 #define MyID 192.168.1.11
43
44 char *buff_experimento= NULL;
45
46 AT91S_PIO *pioc;
47 AT91S_PIO *piob;
48
49 /*
50 * Zona de declaracion de cabeceras.
51 */
52 void inicializa_gpio();
53 //int procesa_peticion(char *buff_peticion);
54 void procesa_peticion(char *buff_peticion);
55 //int cambia_apuntamiento(char *puntero_char);
56 void cambia_apuntamiento(char *puntero_char);
57 //int carga_experimento(char *nombre_archivo);
58 void carga_experimento(char *nombre_archivo);
59 //int chequeo_sistema(char *numero_muestras);
60 void chequeo_sistema(char *numero_muestras);
61
62 /*
63 *
64 */
65 int main(){
66
67 int conexion_servidorFd;
68 struct sockaddr_in inf_servidor;
69 struct sockaddr_storage inf_cliente;
70 int resultado;
71 int numbytes_recibidos;
72 //int rpta;
73
74 char *buff_peticion = (char *) malloc(TAM_BUFFER);
75
76 size_t addr_len;
77
78 memset(&inf_servidor, 0, sizeof(inf_servidor));
79 inf_servidor.sin_family= AF_INET;
80 inf_servidor.sin_port= htons(PUERTO_SERVIDOR);
81 inf_servidor.sin_addr.s_addr= INADDR_ANY;
82
83 /* Se establece el socket */
84 conexion_servidorFd = socket(AF_INET,SOCK_DGRAM,0);
85 if (conexion_servidorFd == -1){
86 ERROR_FATAL("No se establecio correctamente el socket: socket()");
87 }
88
89 /* Se asocia el socket a un puerto y una IP */
90 resultado = bind(conexion_servidorFd,(struct sockaddr *)&inf_servidor,sizeof(inf_servidor));
91 if (resultado== -1){
92 ERROR_FATAL("No se establecio correctamente el socket: bind()");
93 }
94
95 /* Inicializamos el puerto GPIO del sistema embebido GSBC-9260S */
96 inicializa_gpio();
97
98 while(1){
99 LOG_SERVIDOR("Esperando solicitud de cliente...\n");
100
101 /* Se espera hasta que un cliente se conecte */
102 addr_len = sizeof(inf_cliente);
103 numbytes_recibidos = recvfrom(conexion_servidorFd, buff_peticion, TAM_BUFFER-1, 0, (struct sockaddr *)&inf_cliente, &addr_len);
104 if (numbytes_recibidos == -1){
105 ERROR_FATAL("Error en la recepcion de datos: recvfrom()");
106 }else
107 printf("Recibidos: %i\n",numbytes_recibidos);
108
109 /* Se procede a procesar los datos recibidos */
110 buff_peticion[numbytes_recibidos]= '\0';
111 printf("%s\n",buff_peticion);
112
113 /* procesamiento de la peticion */
114 //rpta = procesa_peticion(buff_peticion);
115 procesa_peticion(buff_peticion);
116
117 //Respuesta del modulo de control
118 //
119
120
121 }
122 }
123
124 /*
125 * Esta funcion incializa el puerto GPIO
126 */
127 void inicializa_gpio(){
128
129 // Configuracion de los pines de APUNTE
130 pioc = pio_map(PIOC_BASE);
131 pio_enable(pioc, maskc_out);
132 pio_disable_irq(pioc, maskc_out);
133 pio_disable_multiple_driver(pioc, maskc_out);
134 pio_disable_pull_ups(pioc, maskc_out);
135 pio_synchronous_data_output(pioc, maskc_out);
136 pio_output_enable(pioc, maskc_out);
137
138 // Configuracion de los pines de VERIFICACION
139 piob = pio_map(PIOB_BASE);
140 pio_enable(piob, maskb_in);
141 pio_disable_irq(piob, maskb_in);
142 pio_disable_multiple_driver(piob, maskb_in);
143 pio_disable_pull_ups(piob, maskb_in);
144 pio_input_enable(piob, maskb_in);
145
146 }
147
148 /*
149 * Esta funcion procesa el mensaje de peticion y genera respuesta
150 */
151 //int procesa_peticion(char *buff_peticion){
152 void procesa_peticion(char *buff_peticion){
153 //int rpta = 0;
154
155 // char *header = strtok(buff_peticion, ":");
156 // char *ipSource = strtok(buff_peticion, ":");
157 // char *ipDestino = strtok(buff_peticion, ":");
158 char *comando = strtok(buff_peticion, ":");
159 char *valor = strtok(NULL, ":");
160
161 printf("Testpoint_1\n");
162 if ((comando == NULL) || (valor == NULL)){
163 ERROR("procesarPeticion: formato de mensaje incorrecto");
164 }
165 else{
166 if(strcmp(comando,"CARGA") == 0)
167 //rpta = carga_experimento(valor);
168 carga_experimento(valor);
169 else if(strcmp(comando,"CAMBIA") == 0)
170 //rpta = cambia_apuntamiento(valor);
171 cambia_apuntamiento(valor);
172 else if(strcmp(comando,"CHEQUEO") == 0)
173 //rpta = chequeo_sistema(valor);
174 chequeo_sistema(valor);
175 else
176 ERROR("procesa_peticion: comando no reconocido");
177 }
178
179 //return rpta;
180 }
181
182
183 /*
184 * Esta funcion carga un archivo en un buffer que esta ubicado en memoria, luego
185 * este buffer es usado en la funcion "cambia_apuntamiento" para obtener el dato
186 * que sera usado en el cambio de apuntamiento.
187 */
188 //int carga_experimento(char *nombre_archivo){
189 void carga_experimento(char *nombre_archivo){
190
191 FILE *Archivo_Fd;
192
193 char *cadena = (char *) malloc(25);
194
195 int longitud_cadena;
196 int num_bytes= 0;
197 int num_filas= 0;
198
199 char ruta_archivo[50]; // Se crea la ruta para abrir el archivo
200 strcpy(ruta_archivo,"/mnt/sd/archivos/");
201 strcat(ruta_archivo,nombre_archivo);
202
203 Archivo_Fd = fopen(ruta_archivo,"r"); // Se procede a abrir el archivo, segun la ruta especificada
204 if(!Archivo_Fd){
205 ERROR("carga_archivo: No se pudo abrir el archivo!!! --> fopen()\n");
206 // return -1;
207 }else{
208 printf("Testpoint_2\n");
209 while(!feof(Archivo_Fd)){ // Se procede a calcular la longitud del archivo para separar memoria
210 fgets(cadena,20,Archivo_Fd);
211 longitud_cadena= strlen(cadena);
212 cadena[longitud_cadena-1] = '\0';
213 num_bytes = num_bytes + longitud_cadena;
214 num_filas++;
215 }
216
217 rewind(Archivo_Fd); // Se reinicia el puntero del archivo
218
219 char *buffer_temporal = (char *) malloc(num_bytes+1); // Se separa espacio de memoria segun
220 // la longitud del archivo
221 fread(buffer_temporal, sizeof(char), num_bytes, Archivo_Fd);
222
223 printf("Testpoint_3\n");
224 char *puntero= strstr(buffer_temporal,".ab1"); // Se procede a eliminar la cabecera del archivo
225 puntero= puntero + 12;
226
227 buff_experimento = (char *) malloc(7*(num_filas-3)); // num_bytes_fila*(num_filas-3);
228 strncpy(buff_experimento,puntero,7*(num_filas-3)); // Se carga en memoria la informacion del archivo
229
230 fclose(Archivo_Fd);
231
232 //cambia_apuntamiento("0"); // Se apunta a la direccion 0
233
234 // return 1;
235 }
236 }
237
238 /*
239 * Esta funcion recibe un numero en formato char, el dato se transforma a su equivalente en
240 * un numero entero, que sera usado para sacar un dato del buffer "buff_experimento", esta
241 * dato es el valor que se enviara al sistema de conmutacion RF para el cambio de apunte a
242 * traves del puerto GPIO.
243 */
244 //int cambia_apuntamiento(char *puntero_char){
245 void cambia_apuntamiento(char *puntero_char){
246
247 /*MSB-UP-LSB MSB-DOWN-LSB*/
248 int desplazamiento[6]={30,28,26,24,22,20}; // Defino los dezplazamientos que se aplicara
249 // al dato que ingresa para formar el número
250 // entero que se le pasara al puerto GPIO
251 // Estos números son los pines del puerto GPIO
252 // que se estan usando para el control
253
254 int puntero= atoi(puntero_char); // Se convierte a entero la direccion del puntero
255
256 int base= 7*puntero; // base= cantidad_bytes del dato x puntero
257 // cantidad de bytes es el numero de bytes que
258 printf("%i\n",puntero); // contiene cada dato, para este caso es 7
259 // porque es 6 bits de datos + 1 bit del cambio
260 // de linea.
261 char valor_char;
262 unsigned long valor;
263 unsigned long acumulado_ceros=0;
264 unsigned long acumulado_unos=0;
265
266 int offset; // Defino offset para el desplazamiento a traves
267 for(offset=0;offset<6;offset++){ // de cada dato que se obtiene del "buff_experimento"
268
269 valor_char= buff_experimento[base+offset]; // Obtengo el dato
270
271 if (valor_char == '0'){ // Obtengo el número acumulado segun sea un cero o un uno
272 valor= 0;
273 acumulado_ceros= acumulado_ceros + (1 << desplazamiento[offset]);
274 }else{
275 valor= 1;
276 acumulado_unos= acumulado_unos + (1 << desplazamiento[offset]);
277 }
278
279 }
280
281 pio_out(pioc, maskc_out, acumulado_unos, 1);
282 pio_out(pioc, maskc_out, acumulado_ceros, 0);
283
284 //return 1;
285
286 }
287
288 /*
289 * Esta funcion lee "n" veces el estado del APUNTE actual y lo guarda en el
290 * archivo Verificacion.
291 */
292
293 //int chequeo_sistema(char *numero_muestras){
294 void chequeo_sistema(char *numero_muestras){
295
296 char valor[7];
297 int i,cnt;
298 unsigned int entradac= 0;
299 FILE *fd;
300 fd=fopen("/mnt/sd/archivos/Verificacion","w");
301 fprintf(fd,"%s\n","Verificacion");
302 fprintf(fd,"%s\n","------------");
303 cnt=0;
304 do
305 {
306 //Inicializando arreglo
307 for(i=0;i<6;i++)
308 valor[i]='0';
309
310 valor[6]='\0';
311
312 //Lectura de puerto
313 entradac= pio_in(piob,maskb_in);
314
315 //Dandole formato al dato
316 if (!(entradac & bit_up_2))
317 valor[0] = '1';
318 if (!(entradac & bit_up_1))
319 valor[1] = '1';
320 if (!(entradac & bit_up_0))
321 valor[2] = '1';
322 if (!(entradac & bit_dow_2))
323 valor[3] = '1';
324 if (!(entradac & bit_dow_1))
325 valor[4] = '1';
326 if (!(entradac & bit_dow_0))
327 valor[5] = '1';
328
329 //Escribiendo en archivo
330 fprintf(fd,"%s\n",valor);
331 cnt=cnt+1;
332 usleep(1*1000*1000);
333
334 }while(cnt < (atoi(numero_muestras)+1));
335
336 fclose(fd);
337
338 //return 1;
339 }
@@ -0,0 +1,4
1 S01
2 parameter2
3 parameter3
4 parameter4 No newline at end of file
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now