##// END OF EJS Templates
tcp server with malloc bug corrected.
imanay -
r107:108
parent child
Show More
@@ -1,642 +1,642
1 1 /* No newline at end of file
2 2 * Servidor.c No newline at end of file
3 3 * No newline at end of file
4 4 * Created on: Nov 3, 2009 No newline at end of file
5 5 * Author: Jose Francisco Quenta No newline at end of file
6 6 * No newline at end of file
7 7 * Se implementa: No newline at end of file
8 8 * -Carga en memoria los apuntes contenidos en un archivo de experimentos: apunte0 -> GPIO No newline at end of file
9 9 * -Cambio de apunte. No newline at end of file
10 10 * -Lectura del estado actual del apunte y grabado del mismo en un archivo No newline at end of file
11 11 */ No newline at end of file
12 12 No newline at end of file
13 13 #include <stdio.h> No newline at end of file
14 14 #include <stdlib.h> No newline at end of file
15 15 #include <string.h> No newline at end of file
16 16 #include <unistd.h> No newline at end of file
17 17 #include <errno.h> No newline at end of file
18 18 No newline at end of file
19 19 #include <sys/types.h> No newline at end of file
20 20 #include <sys/socket.h> No newline at end of file
21 21 #include <netinet/in.h> No newline at end of file
22 22 #include <arpa/inet.h> No newline at end of file
23 23 #include <netdb.h> No newline at end of file
24 24 No newline at end of file
25 25 #include "./Librerias/AT91gpio_Funciones.h" No newline at end of file
26 26 #include "./Librerias/Mensajes.h" No newline at end of file
27 27 No newline at end of file
28 28 #define PUERTO_SERVIDOR 5500 No newline at end of file
29 29 #define TAM_BUFFER 1024 No newline at end of file
30 30 No newline at end of file
31 31 #define maskc_out PC30+PC28+PC26+PC24+PC22+PC20 //MSB-UP-LSB MSB-DOWN-LSB //APUNTE No newline at end of file
32 32 No newline at end of file
33 33 #define maskb_in PB16+PB18+PB20+PB30+PB24+PB22 //MSB-UP-LSB MSB-DOWN-LSB //VERIFICACION No newline at end of file
34 34 No newline at end of file
35 35 #define bit_up_2 0x00010000 //Mascara de cada bit a revisar: bit_up_2 es MSB No newline at end of file
36 36 #define bit_up_1 0x00040000 No newline at end of file
37 37 #define bit_up_0 0x00100000 No newline at end of file
38 38 #define bit_dow_2 0x40000000 No newline at end of file
39 39 #define bit_dow_1 0x01000000 No newline at end of file
40 40 #define bit_dow_0 0x00400000 No newline at end of file
41 41 No newline at end of file
42 42 #define MyID 11 No newline at end of file
43 43 #define MAXPENDING 5 /* Maximum outstanding connection requests */ No newline at end of file
44 44 No newline at end of file
45 45 char *buff_experimento= NULL; No newline at end of file
46 46 No newline at end of file
47 47 AT91S_PIO *pioc; No newline at end of file
48 48 AT91S_PIO *piob; No newline at end of file
49 49 No newline at end of file
50 50 struct control_module_parameters { No newline at end of file
51 51 char ID[20]; No newline at end of file
52 52 char param2[20]; No newline at end of file
53 53 char param3[20]; No newline at end of file
54 54 char param4[20]; No newline at end of file
55 55 }; No newline at end of file
56 56 No newline at end of file
57 57 typedef struct control_module_parameters cmp; No newline at end of file
58 58 No newline at end of file
59 59 No newline at end of file
60 60 char *header = NULL; No newline at end of file
61 61 char *TypeOfInstrument = NULL; No newline at end of file
62 62 char *iDSource = NULL; No newline at end of file
63 63 char *iDDestino = NULL; No newline at end of file
64 64 char *len = NULL; No newline at end of file
65 65 char *cmd = NULL; No newline at end of file
66 66 char *rx_data = NULL; No newline at end of file
67 67 char *crc = NULL; No newline at end of file
68 68 No newline at end of file
69 69 cmp parameters; No newline at end of file
70 70 /* No newline at end of file
71 71 * Zona de declaracion de cabeceras. No newline at end of file
72 72 */ No newline at end of file
73 73 cmp inicializa_modulo(cmp p); No newline at end of file
74 74 int inicializa_ethernet(); No newline at end of file
75 75 int rxData(int, char*); No newline at end of file
76 76 void txData(int, char*); No newline at end of file
77 77 void inicializa_gpio(); No newline at end of file
78 78 void procesa_peticion(char *rx_buffer, char *tx_buffer); No newline at end of file
79 79 int cambia_apuntamiento(char *puntero_char); No newline at end of file
80 80 int carga_experimento(char *nombre_archivo); No newline at end of file
81 81 char *chequeo_sistema(char *filename, char *numero_muestras); No newline at end of file
82 82 int chequeo_sistema2(char *filename, char *numero_muestras); No newline at end of file
83 83 void recibe_experimento(char *data, char filename[]); No newline at end of file
84 84 char* File2buffer(char *filename2, int n); No newline at end of file
85 85 void SplitFrame(char *frame); No newline at end of file
86 86 void procesa_peticion2(char *rx_buffer, char *tx_buffer); No newline at end of file
87 87 No newline at end of file
88 88 /* No newline at end of file
89 89 * No newline at end of file
90 90 */ No newline at end of file
91 91 int main(){ No newline at end of file
92 92 No newline at end of file
93 93 int servSocket; No newline at end of file
94 94 int clntSocket; No newline at end of file
95 95 No newline at end of file
96 96 No newline at end of file
97 97 char *rx_buffer = (char *) malloc(TAM_BUFFER); No newline at end of file
98 98 char *tx_buffer = (char *) malloc(TAM_BUFFER); No newline at end of file
99 99 /* Inicializa parametros del modulo*/ No newline at end of file
100 100 parameters = inicializa_modulo(parameters); No newline at end of file
101 101 printf("%s\n%s\n%s\n%s\n",parameters.ID, parameters.param2, parameters.param3, parameters.param4); No newline at end of file
102 102 /* Inicializa red*/ No newline at end of file
103 103 servSocket = inicializa_ethernet(); No newline at end of file
104 104 /* Inicializamos el puerto GPIO del sistema embebido GSBC-9260S */ No newline at end of file
105 105 inicializa_gpio(); No newline at end of file
106 106 No newline at end of file
107 107 while(1){ No newline at end of file
108 108 // RecepciΓ³n TCP de peticiΓ³n No newline at end of file
109 109 clntSocket = rxData(servSocket, rx_buffer); No newline at end of file
110 110 //testpoint No newline at end of file
111 111 printf("rx:%s\n",rx_buffer); No newline at end of file
112 112 // Procesamiento de la peticiΓ³n No newline at end of file
113 113 procesa_peticion(rx_buffer, tx_buffer); No newline at end of file
114 114 //testpoint No newline at end of file
115 115 printf("tx:%s\n",tx_buffer); No newline at end of file
116 116 // Respuesta del modulo de control No newline at end of file
117 117 txData(clntSocket, tx_buffer); No newline at end of file
118 118 No newline at end of file
119 119 } No newline at end of file
120 120 } No newline at end of file
121 121 No newline at end of file
122 122 No newline at end of file
123 123 int inicializa_ethernet(){ No newline at end of file
124 124 No newline at end of file
125 125 struct sockaddr_in inf_servidor; No newline at end of file
126 126 No newline at end of file
127 127 int servSocket; No newline at end of file
128 128 No newline at end of file
129 129 int resultado; No newline at end of file
130 130 No newline at end of file
131 131 /* Haciendo la estructura local*/ No newline at end of file
132 132 memset(&inf_servidor, 0, sizeof(inf_servidor)); No newline at end of file
133 133 inf_servidor.sin_family= AF_INET; No newline at end of file
134 134 inf_servidor.sin_port= htons(PUERTO_SERVIDOR); No newline at end of file
135 135 inf_servidor.sin_addr.s_addr= INADDR_ANY; No newline at end of file
136 136 No newline at end of file
137 137 /* Se establece el socket */ No newline at end of file
138 138 servSocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); No newline at end of file
139 139 if (servSocket == -1){ No newline at end of file
140 140 ERROR_FATAL("No se establecio correctamente el socket: socket()\n"); No newline at end of file
141 141 exit(-1); No newline at end of file
142 142 } No newline at end of file
143 143 No newline at end of file
144 144 /* Se asocia el socket a un puerto y una IP */ No newline at end of file
145 145 resultado = bind(servSocket,(struct sockaddr *)&inf_servidor,sizeof(inf_servidor)); No newline at end of file
146 146 if (resultado== -1){ No newline at end of file
147 147 ERROR_FATAL("No se establecio correctamente el socket: bind()\n"); No newline at end of file
148 148 exit(-1); No newline at end of file
149 149 } No newline at end of file
150 150 No newline at end of file
151 151 if (listen(servSocket, MAXPENDING) < 0){ No newline at end of file
152 152 printf("listen() failed\n"); No newline at end of file
153 153 exit(-1); No newline at end of file
154 154 } No newline at end of file
155 155 No newline at end of file
156 156 return servSocket; No newline at end of file
157 157 No newline at end of file
158 158 } No newline at end of file
159 159 No newline at end of file
160 160 int rxData(int servSocket, char* rx_buffer){ No newline at end of file
161 161 No newline at end of file
162 162 int clntSocket; No newline at end of file
163 163 struct sockaddr_in inf_cliente; No newline at end of file
164 164 int numbytes_recibidos; No newline at end of file
165 165 unsigned int inf_client_Len; No newline at end of file
166 166 No newline at end of file
167 167 printf("\nEsperando solicitud de cliente...\n"); No newline at end of file
168 168 No newline at end of file
169 169 /* Set the size of the in-out parameter */ No newline at end of file
170 170 inf_client_Len = sizeof(inf_cliente); No newline at end of file
171 171 /* Se espera hasta que un cliente se conecte */ No newline at end of file
172 172 if ((clntSocket = accept(servSocket, (struct sockaddr *) &inf_cliente, No newline at end of file
173 173 &inf_client_Len)) < 0) No newline at end of file
174 174 printf("accept() failed\n"); No newline at end of file
175 175 No newline at end of file
176 176 if ((numbytes_recibidos = recv(clntSocket, rx_buffer, TAM_BUFFER, 0)) < 0) No newline at end of file
177 177 printf("recv() failed\n"); No newline at end of file
178 178 No newline at end of file
179 179 /* Se procede a procesar los datos recibidos */ No newline at end of file
180 180 rx_buffer[numbytes_recibidos]= '\0'; No newline at end of file
181 181 No newline at end of file
182 182 return clntSocket; No newline at end of file
183 183 } No newline at end of file
184 184 No newline at end of file
185 185 void txData(int clntSocket, char* data){ No newline at end of file
186 186 No newline at end of file
187 187 /* Echo message back to client */ No newline at end of file
188 188 if (send(clntSocket, data, strlen(data), 0) != strlen(data)) No newline at end of file
189 189 printf("send() failed\n"); No newline at end of file
190 190 No newline at end of file
191 191 close(clntSocket); /* Close client socket */ No newline at end of file
192 192 } No newline at end of file
193 193 /* No newline at end of file
194 194 * Esta funcion incializa el puerto GPIO No newline at end of file
195 195 */ No newline at end of file
196 196 void inicializa_gpio(){ No newline at end of file
197 197 No newline at end of file
198 198 // Configuracion de los pines de APUNTE No newline at end of file
199 199 pioc = pio_map(PIOC_BASE); No newline at end of file
200 200 pio_enable(pioc, maskc_out); No newline at end of file
201 201 pio_disable_irq(pioc, maskc_out); No newline at end of file
202 202 pio_disable_multiple_driver(pioc, maskc_out); No newline at end of file
203 203 pio_disable_pull_ups(pioc, maskc_out); No newline at end of file
204 204 pio_synchronous_data_output(pioc, maskc_out); No newline at end of file
205 205 pio_output_enable(pioc, maskc_out); No newline at end of file
206 206 No newline at end of file
207 207 // Configuracion de los pines de VERIFICACION No newline at end of file
208 208 piob = pio_map(PIOB_BASE); No newline at end of file
209 209 pio_enable(piob, maskb_in); No newline at end of file
210 210 pio_disable_irq(piob, maskb_in); No newline at end of file
211 211 pio_disable_multiple_driver(piob, maskb_in); No newline at end of file
212 212 pio_disable_pull_ups(piob, maskb_in); No newline at end of file
213 213 pio_input_enable(piob, maskb_in); No newline at end of file
214 214 No newline at end of file
215 215 } No newline at end of file
216 216 No newline at end of file
217 217 /* No newline at end of file
218 218 * Esta funcion procesa el mensaje de peticion y genera respuesta No newline at end of file
219 219 */ No newline at end of file
220 220 void procesa_peticion2(char *rx_buffer, char *tx_buffer){ No newline at end of file
221 221 int n = 0; No newline at end of file
222 222 char filename1[50]; No newline at end of file
223 223 char filename2[] = "verificacion.txt"; No newline at end of file
224 224 char *tx_data = NULL; No newline at end of file
225 225 char *header = strtok(rx_buffer, ":"); No newline at end of file
226 226 char *TypeOfInstrument = strtok(NULL, ":"); No newline at end of file
227 227 char *iDSource = strtok(NULL, ":"); No newline at end of file
228 228 char *iDDestino = strtok(NULL, ":"); No newline at end of file
229 229 char *len = strtok(NULL, ":"); No newline at end of file
230 230 char *cmd = strtok(NULL, ":"); No newline at end of file
231 231 char *rx_data = strtok(NULL, ":"); No newline at end of file
232 232 char *crc = strtok(NULL, ":"); No newline at end of file
233 233 No newline at end of file
234 234 if ((cmd == NULL) || (rx_data == NULL)){ No newline at end of file
235 235 ERROR("procesarPeticion: formato de mensaje incorrecto"); No newline at end of file
236 236 } No newline at end of file
237 237 else{ No newline at end of file
238 238 if(strcmp(cmd,"SNDF") == 0){ No newline at end of file
239 239 recibe_experimento(rx_data,filename1); No newline at end of file
240 240 carga_experimento(filename1); No newline at end of file
241 241 cambia_apuntamiento("0"); No newline at end of file
242 242 tx_data = (char*)malloc(3); No newline at end of file
243 243 tx_data = "OK"; No newline at end of file
244 244 } No newline at end of file
245 245 else if(strcmp(cmd,"CHGB") == 0){ No newline at end of file
246 246 cambia_apuntamiento(rx_data); No newline at end of file
247 247 tx_data = (char*)malloc(3); No newline at end of file
248 248 tx_data = "OK"; No newline at end of file
249 249 No newline at end of file
250 250 } No newline at end of file
251 251 No newline at end of file
252 252 else if(strcmp(cmd,"ANST") == 0){ No newline at end of file
253 253 n = chequeo_sistema2(filename2,rx_data); No newline at end of file
254 254 printf("%i\n",n); No newline at end of file
255 255 tx_data = File2buffer(filename2, n); No newline at end of file
256 256 } No newline at end of file
257 257 else{ No newline at end of file
258 258 tx_data = (char*)malloc(6); No newline at end of file
259 259 tx_data = "Error"; No newline at end of file
260 260 ERROR("procesa_peticion: comando no reconocido"); No newline at end of file
261 261 } No newline at end of file
262 262 No newline at end of file
263 263 strcpy(tx_buffer,header); No newline at end of file
264 264 strcat(tx_buffer,":"); No newline at end of file
265 265 strcat(tx_buffer,TypeOfInstrument); No newline at end of file
266 266 strcat(tx_buffer,":"); No newline at end of file
267 267 strcat(tx_buffer,iDDestino); No newline at end of file
268 268 strcat(tx_buffer,":"); No newline at end of file
269 269 strcat(tx_buffer,iDSource); No newline at end of file
270 270 strcat(tx_buffer,":"); No newline at end of file
271 271 strcat(tx_buffer,len); No newline at end of file
272 272 strcat(tx_buffer,":"); No newline at end of file
273 273 strcat(tx_buffer,cmd); No newline at end of file
274 274 strcat(tx_buffer,":"); No newline at end of file
275 275 strcat(tx_buffer,tx_data); No newline at end of file
276 276 strcat(tx_buffer,":"); No newline at end of file
277 277 strcat(tx_buffer,crc); No newline at end of file
278 278 strcat(tx_buffer,":"); No newline at end of file
279 279 strcat(tx_buffer,"quit"); No newline at end of file
280 280 } No newline at end of file
281 281 } No newline at end of file
282 282 No newline at end of file
283 283 void SplitFrame(char *frame){ No newline at end of file
284 284 header = malloc(4); No newline at end of file
285 285 *header = *frame; No newline at end of file
286 286 *(header + 1) = *(frame + 1); No newline at end of file
287 287 *(header + 2) = *(frame + 2); No newline at end of file
288 288 *(header + 3) = '\0'; No newline at end of file
289 289 TypeOfInstrument = malloc(4); No newline at end of file
290 290 *TypeOfInstrument = *(frame + 3); No newline at end of file
291 291 *(TypeOfInstrument + 1) = *(frame + 4); No newline at end of file
292 292 *(TypeOfInstrument + 2) = *(frame + 5); No newline at end of file
293 293 *(TypeOfInstrument + 3) = '\0'; No newline at end of file
294 294 iDSource = malloc(8); No newline at end of file
295 295 *iDSource = *(frame + 6); No newline at end of file
296 296 *(iDSource + 1) = *(frame + 7); No newline at end of file
297 297 *(iDSource + 2) = *(frame + 8); No newline at end of file
298 298 *(iDSource + 3) = *(frame + 9); No newline at end of file
299 299 *(iDSource + 4) = *(frame + 10); No newline at end of file
300 300 *(iDSource + 5) = *(frame + 11); No newline at end of file
301 301 *(iDSource + 6) = *(frame + 12); No newline at end of file
302 302 *(iDSource + 7) = '\0'; No newline at end of file
303 303 iDDestino = malloc(8); No newline at end of file
304 304 *iDDestino = *(frame + 13); No newline at end of file
305 305 *(iDDestino + 1) = *(frame + 14); No newline at end of file
306 306 *(iDDestino + 2) = *(frame + 15); No newline at end of file
307 307 *(iDDestino + 3) = *(frame + 16); No newline at end of file
308 308 *(iDDestino + 4) = *(frame + 17); No newline at end of file
309 309 *(iDDestino + 5) = *(frame + 18); No newline at end of file
310 310 *(iDDestino + 6) = *(frame + 19); No newline at end of file
311 311 *(iDDestino + 7) = '\0'; No newline at end of file
312 312 len = malloc(7); No newline at end of file
313 313 *len = *(frame + 20); No newline at end of file
314 314 *(len + 1) = *(frame + 21); No newline at end of file
315 315 *(len + 2) = *(frame + 22); No newline at end of file
316 316 *(len + 3) = *(frame + 23); No newline at end of file
317 317 *(len + 4) = *(frame + 24); No newline at end of file
318 318 *(len + 5) = *(frame + 25); No newline at end of file
319 319 *(len + 6) = '\0'; No newline at end of file
320 320 cmd = malloc(5); No newline at end of file
321 321 *cmd = *(frame + 26); No newline at end of file
322 322 *(cmd + 1) = *(frame + 27); No newline at end of file
323 323 *(cmd + 2) = *(frame + 28); No newline at end of file
324 324 *(cmd + 3) = *(frame + 29); No newline at end of file
325 325 *(cmd + 4) = '\0'; No newline at end of file
326 326 No newline at end of file
327 327 int l = atoi(len) - 31; //Resto del tamaΓ±o total de la trama los 31 bytes fijos
328 No newline at end of file
328 rx_data = malloc(l); No newline at end of file
329 329 int i; No newline at end of file
330 330 for (i = 30; i < 30 + l; i++) No newline at end of file
331 331 *(rx_data + (i-30)) = *(frame + i); No newline at end of file
332 332 *(rx_data + l) = '\0'; No newline at end of file
333 333 crc = malloc(2); No newline at end of file
334 334 *crc = *(frame + 30 + l); No newline at end of file
335 335 *(crc + 1) = '\0'; No newline at end of file
336 336 } No newline at end of file
337 337 No newline at end of file
338 338 void procesa_peticion(char *rx_buffer, char *tx_buffer){ No newline at end of file
339 339 // int n = 0; No newline at end of file
340 340 char filename1[50]; No newline at end of file
341 341 char filename2[] = "verificacion.txt"; No newline at end of file
342 342 char *tx_data = NULL; No newline at end of file
343 343 SplitFrame(rx_buffer); No newline at end of file
344 344 printf("Split\n"); No newline at end of file
345 345 printf("%s\n",header); No newline at end of file
346 346 printf("%s\n",TypeOfInstrument); No newline at end of file
347 347 printf("%s\n",iDSource); No newline at end of file
348 348 printf("%s\n",iDDestino); No newline at end of file
349 349 printf("%s\n",len); No newline at end of file
350 350 printf("%s\n",cmd); No newline at end of file
351 351 printf("%s\n",rx_data); No newline at end of file
352 352 printf("%s\n",crc); No newline at end of file
353 353 printf("Split\n"); No newline at end of file
354 354 No newline at end of file
355 355 if ((cmd == NULL) || (rx_data == NULL)){ No newline at end of file
356 356 ERROR("procesarPeticion: formato de mensaje incorrecto"); No newline at end of file
357 357 } No newline at end of file
358 358 else{ No newline at end of file
359 359 if(strcmp(cmd,"SNDF") == 0){ No newline at end of file
360 360 recibe_experimento(rx_data,filename1); No newline at end of file
361 361 carga_experimento(filename1); No newline at end of file
362 362 cambia_apuntamiento("0"); No newline at end of file
363 363 tx_data = (char*)malloc(3); No newline at end of file
364 364 tx_data = "OK"; No newline at end of file
365 365 } No newline at end of file
366 366 else if(strcmp(cmd,"CHGB") == 0){ No newline at end of file
367 367 cambia_apuntamiento(rx_data); No newline at end of file
368 368 tx_data = (char*)malloc(3); No newline at end of file
369 369 tx_data = "OK"; No newline at end of file
370 370 No newline at end of file
371 371 } No newline at end of file
372 372 No newline at end of file
373 373 else if(strcmp(cmd,"ANST") == 0){ No newline at end of file
374 374 /*n = chequeo_sistema(filename2,rx_data); No newline at end of file
375 375 printf("%i\n",n); No newline at end of file
376 376 tx_data = File2buffer(filename2, n);*/ No newline at end of file
377 377 tx_data = chequeo_sistema(filename2,rx_data); No newline at end of file
378 378 printf("%s\n",tx_data); No newline at end of file
379 379 } No newline at end of file
380 380 else{ No newline at end of file
381 381 tx_data = (char*)malloc(6); No newline at end of file
382 382 tx_data = "Error"; No newline at end of file
383 383 ERROR("procesa_peticion: comando no reconocido"); No newline at end of file
384 384 } No newline at end of file
385 385 No newline at end of file
386 386 strcpy(tx_buffer,header); //3 No newline at end of file
387 387 strcat(tx_buffer,TypeOfInstrument); //3 No newline at end of file
388 388 strcat(tx_buffer,parameters.ID); //7 No newline at end of file
389 389 strcat(tx_buffer,iDSource); //7 No newline at end of file
390 390 strcat(tx_buffer,"00032"); //5 No newline at end of file
391 391 strcat(tx_buffer,cmd); //4 No newline at end of file
392 392 strcat(tx_buffer,tx_data); //2 No newline at end of file
393 393 strcat(tx_buffer,crc); //1 No newline at end of file
394 394 No newline at end of file
395 395 } No newline at end of file
396 396 No newline at end of file
397 397 } No newline at end of file
398 398 No newline at end of file
399 399 /* No newline at end of file
400 400 * Esta funciΓ³n genera el archivo de experimento a partir de la trama TCP recibida No newline at end of file
401 401 */ No newline at end of file
402 402 No newline at end of file
403 403 void recibe_experimento(char *p_data, char filename[]){ No newline at end of file
404 404 FILE *fd; No newline at end of file
405 405 int i = 0; No newline at end of file
406 406 No newline at end of file
407 407 while (*p_data != '\n'){ No newline at end of file
408 408 filename[i] = *p_data; No newline at end of file
409 409 i++; No newline at end of file
410 410 p_data++; No newline at end of file
411 411 } No newline at end of file
412 412 filename[i] = '\0'; No newline at end of file
413 413 p_data = p_data - i; No newline at end of file
414 414 fd = fopen(filename,"w"); No newline at end of file
415 415 fprintf(fd, p_data); No newline at end of file
416 416 fclose(fd); No newline at end of file
417 417 } No newline at end of file
418 418 No newline at end of file
419 419 /* No newline at end of file
420 420 * Esta funcion carga un archivo en un buffer que esta ubicado en memoria, luego No newline at end of file
421 421 * este buffer es usado en la funcion "cambia_apuntamiento" para obtener el dato No newline at end of file
422 422 * que sera usado en el cambio de apuntamiento. No newline at end of file
423 423 */ No newline at end of file
424 424 int carga_experimento(char *nombre_archivo){ No newline at end of file
425 425 No newline at end of file
426 426 FILE *Archivo_Fd; No newline at end of file
427 427 No newline at end of file
428 428 char *cadena = (char *) malloc(25); No newline at end of file
429 429 No newline at end of file
430 430 int longitud_cadena; No newline at end of file
431 431 int num_bytes= 0; No newline at end of file
432 432 int num_filas= 0; No newline at end of file
433 433 No newline at end of file
434 434 Archivo_Fd = fopen(nombre_archivo,"r"); // Se procede a abrir el archivo, segun la ruta especificada No newline at end of file
435 435 if(!Archivo_Fd){ No newline at end of file
436 436 ERROR("carga_archivo: No se pudo abrir el archivo!!! --> fopen()\n"); No newline at end of file
437 437 return -1; No newline at end of file
438 438 }else{ No newline at end of file
439 439 No newline at end of file
440 440 while(!feof(Archivo_Fd)){ // Se procede a calcular la longitud del archivo para separar memoria No newline at end of file
441 441 fgets(cadena,20,Archivo_Fd); No newline at end of file
442 442 longitud_cadena= strlen(cadena); No newline at end of file
443 443 cadena[longitud_cadena-1] = '\0'; No newline at end of file
444 444 num_bytes = num_bytes + longitud_cadena; No newline at end of file
445 445 num_filas++; No newline at end of file
446 446 } No newline at end of file
447 447 No newline at end of file
448 448 rewind(Archivo_Fd); // Se reinicia el puntero del archivo No newline at end of file
449 449 No newline at end of file
450 450 char *buffer_temporal = (char *) malloc(num_bytes+1); // Se separa espacio de memoria segun No newline at end of file
451 451 // la longitud del archivo No newline at end of file
452 452 fread(buffer_temporal, sizeof(char), num_bytes, Archivo_Fd); No newline at end of file
453 453 No newline at end of file
454 454 char *puntero= strstr(buffer_temporal,".ab1"); // Se procede a eliminar la cabecera del archivo No newline at end of file
455 455 puntero= puntero + 12; No newline at end of file
456 456 No newline at end of file
457 457 buff_experimento = (char *) malloc(7*(num_filas-3)); // num_bytes_fila*(num_filas-3); No newline at end of file
458 458 strncpy(buff_experimento,puntero,7*(num_filas-3)); // Se carga en memoria la informacion del archivo No newline at end of file
459 459 No newline at end of file
460 460 fclose(Archivo_Fd); No newline at end of file
461 461 No newline at end of file
462 462 return 1; No newline at end of file
463 463 } No newline at end of file
464 464 } No newline at end of file
465 465 No newline at end of file
466 466 /* No newline at end of file
467 467 * Esta funcion recibe un numero en formato char, el dato se transforma a su equivalente en No newline at end of file
468 468 * un numero entero, que sera usado para sacar un dato del buffer "buff_experimento", esta No newline at end of file
469 469 * dato es el valor que se enviara al sistema de conmutacion RF para el cambio de apunte a No newline at end of file
470 470 * traves del puerto GPIO. No newline at end of file
471 471 */ No newline at end of file
472 472 int cambia_apuntamiento(char *puntero_char){ No newline at end of file
473 473 No newline at end of file
474 474 /*MSB-UP-LSB MSB-DOWN-LSB*/ No newline at end of file
475 475 int desplazamiento[6]={30,28,26,24,22,20}; // Defino los dezplazamientos que se aplicara No newline at end of file
476 476 // al dato que ingresa para formar el nΓΊmero No newline at end of file
477 477 // entero que se le pasara al puerto GPIO No newline at end of file
478 478 // Estos nΓΊmeros son los pines del puerto GPIO No newline at end of file
479 479 // que se estan usando para el control No newline at end of file
480 480 No newline at end of file
481 481 int puntero= atoi(puntero_char); // Se convierte a entero la direccion del puntero No newline at end of file
482 482 No newline at end of file
483 483 int base= 7*puntero; // base= cantidad_bytes del dato x puntero No newline at end of file
484 484 // cantidad de bytes es el numero de bytes que No newline at end of file
485 485 printf("%s\n",puntero_char); // contiene cada dato, para este caso es 7 No newline at end of file
486 486 // porque es 6 bits de datos + 1 bit del cambio No newline at end of file
487 487 // de linea. No newline at end of file
488 488 char valor_char; No newline at end of file
489 489 unsigned long valor; No newline at end of file
490 490 unsigned long acumulado_ceros=0; No newline at end of file
491 491 unsigned long acumulado_unos=0; No newline at end of file
492 492 No newline at end of file
493 493 int offset; // Defino offset para el desplazamiento a traves No newline at end of file
494 494 for(offset=0;offset<6;offset++){ // de cada dato que se obtiene del "buff_experimento" No newline at end of file
495 495 No newline at end of file
496 496 valor_char= buff_experimento[base+offset]; // Obtengo el dato No newline at end of file
497 497 No newline at end of file
498 498 if (valor_char == '0'){ // Obtengo el nΓΊmero acumulado segun sea un cero o un uno No newline at end of file
499 499 valor= 0; No newline at end of file
500 500 acumulado_ceros= acumulado_ceros + (1 << desplazamiento[offset]); No newline at end of file
501 501 }else{ No newline at end of file
502 502 valor= 1; No newline at end of file
503 503 acumulado_unos= acumulado_unos + (1 << desplazamiento[offset]); No newline at end of file
504 504 } No newline at end of file
505 505 } No newline at end of file
506 506 pio_out(pioc, maskc_out, acumulado_unos, 1); No newline at end of file
507 507 pio_out(pioc, maskc_out, acumulado_ceros, 0); No newline at end of file
508 508 No newline at end of file
509 509 return 1; No newline at end of file
510 510 No newline at end of file
511 511 } No newline at end of file
512 512 No newline at end of file
513 513 /* No newline at end of file
514 514 * Esta funcion lee "n" veces el estado del APUNTE actual y lo guarda en el No newline at end of file
515 515 * archivo Verificacion. No newline at end of file
516 516 */ No newline at end of file
517 517 No newline at end of file
518 518 int chequeo_sistema2(char *filename, char *numero_muestras){ No newline at end of file
519 519 No newline at end of file
520 520 char valor[7]; No newline at end of file
521 521 int i,cnt; No newline at end of file
522 522 unsigned int entradac= 0; No newline at end of file
523 523 FILE *fd; No newline at end of file
524 524 fd=fopen(filename,"w"); No newline at end of file
525 525 fprintf(fd,"%s\n","Verificacion"); No newline at end of file
526 526 fprintf(fd,"%s\n",parameters.ID); No newline at end of file
527 527 fprintf(fd,"%s\n","------------"); No newline at end of file
528 528 cnt=0; No newline at end of file
529 529 do No newline at end of file
530 530 { No newline at end of file
531 531 //Inicializando arreglo No newline at end of file
532 532 for(i=0;i<6;i++) No newline at end of file
533 533 valor[i]='0'; No newline at end of file
534 534 No newline at end of file
535 535 valor[6]='\0'; No newline at end of file
536 536 No newline at end of file
537 537 //Lectura de puerto No newline at end of file
538 538 entradac= pio_in(piob,maskb_in); No newline at end of file
539 539 No newline at end of file
540 540 //Dandole formato al dato No newline at end of file
541 541 if (!(entradac & bit_up_2)) No newline at end of file
542 542 valor[0] = '1'; No newline at end of file
543 543 if (!(entradac & bit_up_1)) No newline at end of file
544 544 valor[1] = '1'; No newline at end of file
545 545 if (!(entradac & bit_up_0)) No newline at end of file
546 546 valor[2] = '1'; No newline at end of file
547 547 if (!(entradac & bit_dow_2)) No newline at end of file
548 548 valor[3] = '1'; No newline at end of file
549 549 if (!(entradac & bit_dow_1)) No newline at end of file
550 550 valor[4] = '1'; No newline at end of file
551 551 if (!(entradac & bit_dow_0)) No newline at end of file
552 552 valor[5] = '1'; No newline at end of file
553 553 No newline at end of file
554 554 //Escribiendo en archivo No newline at end of file
555 555 fprintf(fd,"%s\n",valor); No newline at end of file
556 556 cnt=cnt+1; No newline at end of file
557 557 usleep(1*1000*1000); No newline at end of file
558 558 No newline at end of file
559 559 }while(cnt < atoi(numero_muestras)); No newline at end of file
560 560 No newline at end of file
561 561 fclose(fd); No newline at end of file
562 562 No newline at end of file
563 563 return 7*atoi(numero_muestras) + 26 + 4 + 1; //incluye eof No newline at end of file
564 564 } No newline at end of file
565 565 No newline at end of file
566 566 char* File2buffer(char *filename, int n){ No newline at end of file
567 567 FILE *fd; No newline at end of file
568 568 char* tx_data = (char *)malloc(n); No newline at end of file
569 569 fd = fopen(filename,"r"); No newline at end of file
570 570 fread(tx_data, 1, n-1, fd); No newline at end of file
571 571 fclose(fd); No newline at end of file
572 572 tx_data = tx_data + n - 1; No newline at end of file
573 573 *tx_data = '\0'; No newline at end of file
574 574 tx_data = tx_data - n + 1; No newline at end of file
575 575 return tx_data; No newline at end of file
576 576 } No newline at end of file
577 577 No newline at end of file
578 578 /* No newline at end of file
579 579 * Esta funcion lee "n" veces el estado del APUNTE actual y reporta No newline at end of file
580 580 * una cadena de Verificacion. No newline at end of file
581 581 */ No newline at end of file
582 582 char* chequeo_sistema(char *filename, char *numero_muestras){ No newline at end of file
583 583 No newline at end of file
584 584 int i; No newline at end of file
585 585 int cnt = 0; No newline at end of file
586 586 unsigned int entradac= 0; No newline at end of file
587 587 No newline at end of file
588 588 char page0[250]; No newline at end of file
589 589 No newline at end of file
590 590 strcpy(page0,"Verificacion\n"); No newline at end of file
591 591 strcat(page0,parameters.ID); No newline at end of file
592 592 strcat(page0,"\n------------\n"); No newline at end of file
593 593 No newline at end of file
594 594 char page1[8]; No newline at end of file
595 595 No newline at end of file
596 596 do{ No newline at end of file
597 597 //Inicializando arreglo No newline at end of file
598 598 for(i=0;i<6;i++) No newline at end of file
599 599 page1[i]='0'; No newline at end of file
600 600 page1[6] = '\n'; No newline at end of file
601 601 page1[7] = '\0'; No newline at end of file
602 602 //Lectura de puerto No newline at end of file
603 603 entradac= pio_in(piob,maskb_in); No newline at end of file
604 604 //Dandole formato al dato No newline at end of file
605 605 if (!(entradac & bit_up_2)) No newline at end of file
606 606 page1[0] = '1'; No newline at end of file
607 607 if (!(entradac & bit_up_1)) No newline at end of file
608 608 page1[1] = '1'; No newline at end of file
609 609 if (!(entradac & bit_up_0)) No newline at end of file
610 610 page1[2] = '1'; No newline at end of file
611 611 if (!(entradac & bit_dow_2)) No newline at end of file
612 612 page1[3] = '1'; No newline at end of file
613 613 if (!(entradac & bit_dow_1)) No newline at end of file
614 614 page1[4] = '1'; No newline at end of file
615 615 if (!(entradac & bit_dow_0)) No newline at end of file
616 616 page1[5] = '1'; No newline at end of file
617 617 No newline at end of file
618 618 strcat(page0, page1); No newline at end of file
619 619 cnt=cnt+1; No newline at end of file
620 620 usleep(1*1000*1000); No newline at end of file
621 621 No newline at end of file
622 622 }while(cnt < atoi(numero_muestras)); No newline at end of file
623 623 No newline at end of file
624 624 page0[strlen(page0)] = '\0'; No newline at end of file
625 625 No newline at end of file
626 626 char *all_pages = malloc(strlen(page0)+1); No newline at end of file
627 627 strcpy(all_pages, page0); No newline at end of file
628 628 return all_pages; No newline at end of file
629 629 } No newline at end of file
630 630 cmp inicializa_modulo(cmp p){ No newline at end of file
631 631 FILE *fd = fopen("configuration.txt","r"); No newline at end of file
632 632 fgets(p.ID,20,fd); No newline at end of file
633 633 p.ID[7]='\0'; No newline at end of file
634 634 fgets(p.param2,20,fd); No newline at end of file
635 635 p.param2[10]='\0'; No newline at end of file
636 636 fgets(p.param3,20,fd); No newline at end of file
637 637 p.param3[10]='\0'; No newline at end of file
638 638 fgets(p.param4,20,fd); No newline at end of file
639 639 p.param4[10]='\0'; No newline at end of file
640 640 fclose(fd); No newline at end of file
641 641 return p; No newline at end of file
642 642 } No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now