##// END OF EJS Templates
imanay -
r121:122
parent child
Show More
@@ -1,1030 +1,1035
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 * Modified by Iván Manay since Nov 2012 No newline at end of file
13 13 * -From UDP to TCP. No newline at end of file
14 14 * -Use of a frame for TCP communications with the central control module. No newline at end of file
15 15 */ No newline at end of file
16 16 No newline at end of file
17 17 #include <stdio.h> No newline at end of file
18 18 #include <stdlib.h> No newline at end of file
19 19 #include <string.h> No newline at end of file
20 20 #include <unistd.h> No newline at end of file
21 21 #include <errno.h> No newline at end of file
22 22 No newline at end of file
23 23 #include <sys/types.h> No newline at end of file
24 24 #include <sys/socket.h> No newline at end of file
25 25 #include <netinet/in.h> No newline at end of file
26 26 #include <arpa/inet.h> No newline at end of file
27 27 #include <netdb.h> No newline at end of file
28 28 #include <time.h> No newline at end of file
29 29 #include <math.h> No newline at end of file
30 30 No newline at end of file
31 31 #include "./Librerias/at91gpio.h" No newline at end of file
32 32 //#include "./Librerias/Mensajes.h" No newline at end of file
33 33 #include "./Librerias/at91adc.h" No newline at end of file
34 34 //clock No newline at end of file
35 35 #include "./Librerias/at91sysclock.h" No newline at end of file
36 36 No newline at end of file
37 37 #define PUERTO_SERVIDOR 5500 No newline at end of file
38 38 #define TAM_BUFFER 1024 No newline at end of file
39 39 No newline at end of file
40 40 #define maskc_out PC30+PC28+PC26+PC24+PC22+PC20 //MSB-UP-LSB MSB-DOWN-LSB //APUNTE No newline at end of file
41 41 No newline at end of file
42 42 #define maskb_in PB16+PB18+PB20+PB30+PB24+PB22 //MSB-UP-LSB MSB-DOWN-LSB //VERIFICACION No newline at end of file
43 43 No newline at end of file
44 44 #define bit_up_2 0x00010000 //Mascara de cada bit a revisar: bit_up_2 es MSB No newline at end of file
45 45 #define bit_up_1 0x00040000 No newline at end of file
46 46 #define bit_up_0 0x00100000 No newline at end of file
47 47 #define bit_dow_2 0x40000000 No newline at end of file
48 48 #define bit_dow_1 0x01000000 No newline at end of file
49 49 #define bit_dow_0 0x00400000 No newline at end of file
50 50 No newline at end of file
51 51 #define MyID 11 No newline at end of file
52 52 #define MAXPENDING 5 /* Maximum outstanding connection requests */ No newline at end of file
53 53 No newline at end of file
54 54 //parameters for the name of the output file No newline at end of file
55 55 #define FPRE "AD" //prefix for the output file name No newline at end of file
56 56 #define FEXT ".out" //file extension for the output file No newline at end of file
57 57 #define FNAMELEN 40 No newline at end of file
58 58 No newline at end of file
59 59 //ADC parameters No newline at end of file
60 60 #define REP 1 //defines how many times the data acquisation loop is repeated No newline at end of file
61 61 #define NSAMPLES 100 //defines how many samples are taken in one data acqu- No newline at end of file
62 62 // isation loop No newline at end of file
63 63 #define CNVTIME 14.3 //defines how long it takes to get one sample. Value No newline at end of file
64 64 // is only needed for the output file, doesn't change No newline at end of file
65 65 // any ADC configurations No newline at end of file
66 66 #define UREF 3.3 //Reference Voltage of ADC (max. ADC Voltage) No newline at end of file
67 67 #define ADCRES 1023 //Resolution of ADC (10bit=1023) No newline at end of file
68 68 No newline at end of file
69 69 No newline at end of file
70 70 char *buff_experimento= NULL; No newline at end of file
71 71 No newline at end of file
72 72 AT91S_PIO *pioc; No newline at end of file
73 73 AT91S_PIO *piob; No newline at end of file
74 74 No newline at end of file
75 75 struct control_module_parameters { No newline at end of file
76 76 char ID[20]; No newline at end of file
77 77 char param2[20]; No newline at end of file
78 78 char param3[20]; No newline at end of file
79 79 char param4[20]; No newline at end of file
80 80 }; No newline at end of file
81 81 No newline at end of file
82 82 typedef struct control_module_parameters cmp; No newline at end of file
83 83 No newline at end of file
84 84 char *header = NULL; No newline at end of file
85 85 char *TypeOfInstrument = NULL; No newline at end of file
86 86 char *iDSource = NULL; No newline at end of file
87 87 char *iDDestino = NULL; No newline at end of file
88 88 char *rx_len = NULL; No newline at end of file
89 89 char *cmd = NULL; No newline at end of file
90 90 char *rx_data = NULL; No newline at end of file
91 91 char *crc = NULL; No newline at end of file
92 92 No newline at end of file
93 93 cmp parameters; No newline at end of file
94 94 /* No newline at end of file
95 95 * Zona de declaracion de cabeceras. No newline at end of file
96 96 */ No newline at end of file
97 97 cmp inicializa_modulo(cmp p); No newline at end of file
98 98 int inicializa_ethernet(); No newline at end of file
99 99 int rxData(int, char*); No newline at end of file
100 100 void txData(int, char*); No newline at end of file
101 101 void inicializa_gpio(); No newline at end of file
102 102 void procesa_peticion(char *rx_buffer, char *tx_buffer); No newline at end of file
103 103 int cambia_apuntamiento(char *puntero_char); No newline at end of file
104 104 int carga_experimento(char *nombre_archivo); No newline at end of file
105 105 char *chequeo_sistema(char *filename, char *numero_muestras); No newline at end of file
106 106 void recibe_experimento(char *data, char filename[]); No newline at end of file
107 107 void SplitFrame(char *frame); No newline at end of file
108 108 void intToStr( int number, char* str ); No newline at end of file
109 109 No newline at end of file
110 110 //ABS monitoring No newline at end of file
111 111 int ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth); No newline at end of file
112 112 No newline at end of file
113 113 AT91S_ADC * configADC1(void); No newline at end of file
114 114 AT91S_ADC * configADC2(void); No newline at end of file
115 115 No newline at end of file
116 116 FILE * create_Output(char*, time_t); No newline at end of file
117 117 No newline at end of file
118 118 void writeOutput(float resultado, FILE * output); No newline at end of file
119 119 No newline at end of file
120 120 int checkTx(long int results1[],long int results2[], float umbral, int pulsewidth); No newline at end of file
121 121 No newline at end of file
122 122 double mediana(long int *results, unsigned int cuenta); No newline at end of file
123 123 float getPhase(long int results1[], long int results2[]); No newline at end of file
124 124 No newline at end of file
125 125 int fExists(char *); No newline at end of file
126 126 int configCLK(); No newline at end of file
127 127 // No newline at end of file
128 128 No newline at end of file
129 129 /* No newline at end of file
130 130 * No newline at end of file
131 131 */ No newline at end of file
132 132 int main(){ No newline at end of file
133 133 No newline at end of file
134 134 int servSocket; No newline at end of file
135 135 int clntSocket; No newline at end of file
136 136 No newline at end of file
137 137 No newline at end of file
138 138 char *rx_buffer = (char *) malloc(TAM_BUFFER); No newline at end of file
139 139 char *tx_buffer = (char *) malloc(TAM_BUFFER); No newline at end of file
140 140 /* Inicializa parametros del modulo*/ No newline at end of file
141 141 parameters = inicializa_modulo(parameters); No newline at end of file
142 142 printf("%s\n%s\n%s\n%s\n",parameters.ID, parameters.param2, parameters.param3, parameters.param4); No newline at end of file
143 143 /* Inicializa red*/ No newline at end of file
144 144 servSocket = inicializa_ethernet(); No newline at end of file
145 145 /* Inicializamos el puerto GPIO del sistema embebido GSBC-9260S */ No newline at end of file
146 146 inicializa_gpio(); No newline at end of file
147 147 No newline at end of file
148 148 while(1){ No newline at end of file
149 149 // Recepción TCP de petición No newline at end of file
150 150 clntSocket = rxData(servSocket, rx_buffer); No newline at end of file
151 151 //testpoint No newline at end of file
152 152 printf("rx:%s\n",rx_buffer); No newline at end of file
153 153 // Procesamiento de la petición No newline at end of file
154 154 procesa_peticion(rx_buffer, tx_buffer); No newline at end of file
155 155 //testpoint No newline at end of file
156 156 printf("tx:%s\n",tx_buffer); No newline at end of file
157 157 // Respuesta del modulo de control No newline at end of file
158 158 txData(clntSocket, tx_buffer); No newline at end of file
159 159 No newline at end of file
160 160 } No newline at end of file
161 161 } No newline at end of file
162 162 No newline at end of file
163 163 No newline at end of file
164 164 int inicializa_ethernet(){ No newline at end of file
165 165 No newline at end of file
166 166 struct sockaddr_in inf_servidor; No newline at end of file
167 167 No newline at end of file
168 168 int servSocket; No newline at end of file
169 169 No newline at end of file
170 170 int resultado; No newline at end of file
171 171 No newline at end of file
172 172 /* Haciendo la estructura local*/ No newline at end of file
173 173 memset(&inf_servidor, 0, sizeof(inf_servidor)); No newline at end of file
174 174 inf_servidor.sin_family= AF_INET; No newline at end of file
175 175 inf_servidor.sin_port= htons(PUERTO_SERVIDOR); No newline at end of file
176 176 inf_servidor.sin_addr.s_addr= INADDR_ANY; No newline at end of file
177 177 No newline at end of file
178 178 /* Se establece el socket */ No newline at end of file
179 179 servSocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); No newline at end of file
180 180 if (servSocket == -1){ No newline at end of file
181 181 printf("No se establecio correctamente el socket: socket()\n"); No newline at end of file
182 182 //ERROR_FATAL("No se establecio correctamente el socket: socket()\n"); No newline at end of file
183 183 exit(-1); No newline at end of file
184 184 } No newline at end of file
185 185 No newline at end of file
186 186 /* Se asocia el socket a un puerto y una IP */ No newline at end of file
187 187 resultado = bind(servSocket,(struct sockaddr *)&inf_servidor,sizeof(inf_servidor)); No newline at end of file
188 188 if (resultado== -1){ No newline at end of file
189 189 printf("No se establecio correctamente el socket: bind()\n"); No newline at end of file
190 190 //ERROR_FATAL("No se establecio correctamente el socket: bind()\n"); No newline at end of file
191 191 exit(-1); No newline at end of file
192 192 } No newline at end of file
193 193 No newline at end of file
194 194 if (listen(servSocket, MAXPENDING) < 0){ No newline at end of file
195 195 printf("listen() failed\n"); No newline at end of file
196 196 exit(-1); No newline at end of file
197 197 } No newline at end of file
198 198 No newline at end of file
199 199 return servSocket; No newline at end of file
200 200 No newline at end of file
201 201 } No newline at end of file
202 202 No newline at end of file
203 203 int rxData(int servSocket, char* rx_buffer){ No newline at end of file
204 204 No newline at end of file
205 205 int clntSocket; No newline at end of file
206 206 struct sockaddr_in inf_cliente; No newline at end of file
207 207 int numbytes_recibidos; No newline at end of file
208 208 unsigned int inf_client_Len; No newline at end of file
209 209 No newline at end of file
210 210 printf("\nEsperando solicitud de cliente...\n"); No newline at end of file
211 211 No newline at end of file
212 212 /* Set the size of the in-out parameter */ No newline at end of file
213 213 inf_client_Len = sizeof(inf_cliente); No newline at end of file
214 214 /* Se espera hasta que un cliente se conecte */ No newline at end of file
215 215 if ((clntSocket = accept(servSocket, (struct sockaddr *) &inf_cliente, No newline at end of file
216 216 &inf_client_Len)) < 0) No newline at end of file
217 217 printf("accept() failed\n"); No newline at end of file
218 218 No newline at end of file
219 219 if ((numbytes_recibidos = recv(clntSocket, rx_buffer, TAM_BUFFER, 0)) < 0) No newline at end of file
220 220 printf("recv() failed\n"); No newline at end of file
221 221 No newline at end of file
222 222 /* Se procede a procesar los datos recibidos */ No newline at end of file
223 223 rx_buffer[numbytes_recibidos]= '\0'; No newline at end of file
224 224 No newline at end of file
225 225 return clntSocket; No newline at end of file
226 226 } No newline at end of file
227 227 No newline at end of file
228 228 void txData(int clntSocket, char* data){ No newline at end of file
229 229 No newline at end of file
230 230 /* Echo message back to client */ No newline at end of file
231 231 if (send(clntSocket, data, strlen(data), 0) != strlen(data)) No newline at end of file
232 232 printf("send() failed\n"); No newline at end of file
233 233 No newline at end of file
234 234 close(clntSocket); /* Close client socket */ No newline at end of file
235 235 } No newline at end of file
236 236 No newline at end of file
237 237 /* No newline at end of file
238 238 * Esta funcion incializa el puerto GPIO No newline at end of file
239 239 */ No newline at end of file
240 240 void inicializa_gpio(){ No newline at end of file
241 241 No newline at end of file
242 242 // Configuracion de los pines de APUNTE No newline at end of file
243 243 pioc = pio_map(PIOC_BASE); No newline at end of file
244 244 pio_enable(pioc, maskc_out); No newline at end of file
245 245 pio_disable_irq(pioc, maskc_out); No newline at end of file
246 246 pio_disable_multiple_driver(pioc, maskc_out); No newline at end of file
247 247 pio_disable_pull_ups(pioc, maskc_out); No newline at end of file
248 248 pio_synchronous_data_output(pioc, maskc_out); No newline at end of file
249 249 pio_output_enable(pioc, maskc_out); No newline at end of file
250 250 No newline at end of file
251 251 // Configuracion de los pines de VERIFICACION No newline at end of file
252 252 piob = pio_map(PIOB_BASE); No newline at end of file
253 253 pio_enable(piob, maskb_in); No newline at end of file
254 254 pio_disable_irq(piob, maskb_in); No newline at end of file
255 255 pio_disable_multiple_driver(piob, maskb_in); No newline at end of file
256 256 pio_disable_pull_ups(piob, maskb_in); No newline at end of file
257 257 pio_input_enable(piob, maskb_in); No newline at end of file
258 258 } No newline at end of file
259 259 No newline at end of file
260 260 No newline at end of file
261 261 /* No newline at end of file
262 262 * Divide rx frame into the frame components No newline at end of file
263 263 */ No newline at end of file
264 264 void SplitFrame(char *frame){ No newline at end of file
265 265 header = malloc(4); No newline at end of file
266 266 *header = *frame; No newline at end of file
267 267 *(header + 1) = *(frame + 1); No newline at end of file
268 268 *(header + 2) = *(frame + 2); No newline at end of file
269 269 *(header + 3) = '\0'; No newline at end of file
270 270 TypeOfInstrument = malloc(4); No newline at end of file
271 271 *TypeOfInstrument = *(frame + 3); No newline at end of file
272 272 *(TypeOfInstrument + 1) = *(frame + 4); No newline at end of file
273 273 *(TypeOfInstrument + 2) = *(frame + 5); No newline at end of file
274 274 *(TypeOfInstrument + 3) = '\0'; No newline at end of file
275 275 iDSource = malloc(8); No newline at end of file
276 276 *iDSource = *(frame + 6); No newline at end of file
277 277 *(iDSource + 1) = *(frame + 7); No newline at end of file
278 278 *(iDSource + 2) = *(frame + 8); No newline at end of file
279 279 *(iDSource + 3) = *(frame + 9); No newline at end of file
280 280 *(iDSource + 4) = *(frame + 10); No newline at end of file
281 281 *(iDSource + 5) = *(frame + 11); No newline at end of file
282 282 *(iDSource + 6) = *(frame + 12); No newline at end of file
283 283 *(iDSource + 7) = '\0'; No newline at end of file
284 284 iDDestino = malloc(8); No newline at end of file
285 285 *iDDestino = *(frame + 13); No newline at end of file
286 286 *(iDDestino + 1) = *(frame + 14); No newline at end of file
287 287 *(iDDestino + 2) = *(frame + 15); No newline at end of file
288 288 *(iDDestino + 3) = *(frame + 16); No newline at end of file
289 289 *(iDDestino + 4) = *(frame + 17); No newline at end of file
290 290 *(iDDestino + 5) = *(frame + 18); No newline at end of file
291 291 *(iDDestino + 6) = *(frame + 19); No newline at end of file
292 292 *(iDDestino + 7) = '\0'; No newline at end of file
293 293 rx_len = malloc(7); No newline at end of file
294 294 *rx_len = *(frame + 20); No newline at end of file
295 295 *(rx_len + 1) = *(frame + 21); No newline at end of file
296 296 *(rx_len + 2) = *(frame + 22); No newline at end of file
297 297 *(rx_len + 3) = *(frame + 23); No newline at end of file
298 298 *(rx_len + 4) = *(frame + 24); No newline at end of file
299 299 *(rx_len + 5) = *(frame + 25); No newline at end of file
300 300 *(rx_len + 6) = '\0'; No newline at end of file
301 301 cmd = malloc(5); No newline at end of file
302 302 *cmd = *(frame + 26); No newline at end of file
303 303 *(cmd + 1) = *(frame + 27); No newline at end of file
304 304 *(cmd + 2) = *(frame + 28); No newline at end of file
305 305 *(cmd + 3) = *(frame + 29); No newline at end of file
306 306 *(cmd + 4) = '\0'; No newline at end of file
307 307 No newline at end of file
308 308 int l = atoi(rx_len); No newline at end of file
309 309 rx_data = malloc(l + 1); No newline at end of file
310 310 int i; No newline at end of file
311 311 for (i = 30; i < 30 + l; i++) No newline at end of file
312 312 *(rx_data + (i-30)) = *(frame + i); No newline at end of file
313 313 *(rx_data + l) = '\0'; No newline at end of file
314 314 crc = malloc(2); No newline at end of file
315 315 *crc = *(frame + 30 + l); No newline at end of file
316 316 *(crc + 1) = '\0'; No newline at end of file
317 317 } No newline at end of file
318 318 No newline at end of file
319 319 No newline at end of file
320 320 /* No newline at end of file
321 321 * Esta funcion procesa el mensaje de peticion y genera respuesta No newline at end of file
322 322 */ No newline at end of file
323 323 void procesa_peticion(char *rx_buffer, char *tx_buffer){ No newline at end of file
324 324 // int n = 0; No newline at end of file
325 325 char filename1[50]; No newline at end of file
326 326 char filename2[] = "verificacion.txt"; No newline at end of file
327 327 char *tx_data = NULL; No newline at end of file
328 328 char *tx_len = NULL; No newline at end of file
329 329 SplitFrame(rx_buffer); No newline at end of file
330 330 No newline at end of file
331 331 if ((cmd == NULL) || (rx_data == NULL)){ No newline at end of file
332 332 printf("procesarPeticion: formato de mensaje incorrecto"); No newline at end of file
333 333 //ERROR("procesarPeticion: formato de mensaje incorrecto"); No newline at end of file
334 334 No newline at end of file
335 335 } No newline at end of file
336 336 else{ No newline at end of file
337 337 if(strcmp(cmd,"SNDF") == 0){ No newline at end of file
338 338 recibe_experimento(rx_data,filename1); No newline at end of file
339 339 carga_experimento(filename1); No newline at end of file
340 340 cambia_apuntamiento("0"); No newline at end of file
341 341 tx_data = (char*)malloc(3); No newline at end of file
342 342 tx_data = "OK"; No newline at end of file
343 343 } No newline at end of file
344 344 else if(strcmp(cmd,"CHGB") == 0){ No newline at end of file
345 345 cambia_apuntamiento(rx_data); No newline at end of file
346 346 tx_data = (char*)malloc(3); No newline at end of file
347 347 tx_data = "OK"; No newline at end of file
348 348 } No newline at end of file
349 349 else if(strcmp(cmd,"ANST") == 0){ No newline at end of file
350 350 tx_data = chequeo_sistema(filename2,rx_data); No newline at end of file
351 printf("%s\n",tx_data);
No newline at end of file
352 }
No newline at end of file
353 else if(strcmp(cmd,"ANPH") == 0){ No newline at end of file
351 354 ABS_monitoreo(1, 1, 50, 10); No newline at end of file
355 tx_data = "Not implemented\n"; No newline at end of file
352 356 printf("%s\n",tx_data); No newline at end of file
353 357 } No newline at end of file
354 358 else if(strcmp(cmd,"NTST") == 0){ No newline at end of file
355 359 tx_data = malloc(strlen(parameters.ID) + 1); No newline at end of file
356 360 strcpy(tx_data,parameters.ID); No newline at end of file
357 361 printf("%s\n",tx_data); No newline at end of file
358 362 } No newline at end of file
359 363 else{ No newline at end of file
360 364 tx_data = (char*)malloc(6); No newline at end of file
361 365 tx_data = "Error"; No newline at end of file
362 366 printf("procesa_peticion: comando no reconocido"); No newline at end of file
363 367 //ERROR("procesa_peticion: comando no reconocido"); No newline at end of file
364 368 } No newline at end of file
365 369 No newline at end of file
366 370 tx_len = malloc(7); No newline at end of file
367 371 int number = strlen(tx_data); No newline at end of file
368 372 intToStr(number, tx_len ); No newline at end of file
369 373 No newline at end of file
370 374 strcpy(tx_buffer,header); //3 No newline at end of file
371 375 strcat(tx_buffer,TypeOfInstrument); //3 No newline at end of file
372 376 strcat(tx_buffer,parameters.ID); //7 No newline at end of file
373 377 strcat(tx_buffer,iDSource); //7 No newline at end of file
374 378 strcat(tx_buffer,tx_len); //6 No newline at end of file
375 379 strcat(tx_buffer,cmd); //4 No newline at end of file
376 380 strcat(tx_buffer,tx_data); //? No newline at end of file
377 381 strcat(tx_buffer,crc); //1 No newline at end of file
378 382 No newline at end of file
379 383 } No newline at end of file
380 384 No newline at end of file
381 385 } No newline at end of file
382 386 No newline at end of file
383 387 /* No newline at end of file
384 388 * Esta función genera el archivo de experimento a partir de la trama TCP recibida No newline at end of file
385 389 */ No newline at end of file
386 390 void recibe_experimento(char *p_data, char filename[]){ No newline at end of file
387 391 FILE *fd; No newline at end of file
388 392 int i = 0; No newline at end of file
389 393 No newline at end of file
390 394 while (*p_data != '\n'){ No newline at end of file
391 395 filename[i] = *p_data; No newline at end of file
392 396 i++; No newline at end of file
393 397 p_data++; No newline at end of file
394 398 } No newline at end of file
395 399 filename[i] = '\0'; No newline at end of file
396 400 p_data = p_data - i; No newline at end of file
397 401 fd = fopen(filename,"w"); No newline at end of file
398 402 fprintf(fd, p_data); No newline at end of file
399 403 fclose(fd); No newline at end of file
400 404 } No newline at end of file
401 405 No newline at end of file
402 406 /* No newline at end of file
403 407 * Esta funcion carga un archivo en un buffer que esta ubicado en memoria, luego No newline at end of file
404 408 * este buffer es usado en la funcion "cambia_apuntamiento" para obtener el dato No newline at end of file
405 409 * que sera usado en el cambio de apuntamiento. No newline at end of file
406 410 */ No newline at end of file
407 411 int carga_experimento(char *nombre_archivo){ No newline at end of file
408 412 No newline at end of file
409 413 FILE *Archivo_Fd; No newline at end of file
410 414 No newline at end of file
411 415 char *cadena = (char *) malloc(25); No newline at end of file
412 416 No newline at end of file
413 417 int longitud_cadena; No newline at end of file
414 418 int num_bytes= 0; No newline at end of file
415 419 int num_filas= 0; No newline at end of file
416 420 No newline at end of file
417 421 Archivo_Fd = fopen(nombre_archivo,"r"); // Se procede a abrir el archivo, segun la ruta especificada No newline at end of file
418 422 if(!Archivo_Fd){ No newline at end of file
419 423 printf("carga_archivo: No se pudo abrir el archivo!!! --> fopen()\n"); No newline at end of file
420 424 //ERROR("carga_archivo: No se pudo abrir el archivo!!! --> fopen()\n"); No newline at end of file
421 425 return -1; No newline at end of file
422 426 }else{ No newline at end of file
423 427 No newline at end of file
424 428 while(!feof(Archivo_Fd)){ // Se procede a calcular la longitud del archivo para separar memoria No newline at end of file
425 429 fgets(cadena,20,Archivo_Fd); No newline at end of file
426 430 longitud_cadena= strlen(cadena); No newline at end of file
427 431 cadena[longitud_cadena-1] = '\0'; No newline at end of file
428 432 num_bytes = num_bytes + longitud_cadena; No newline at end of file
429 433 num_filas++; No newline at end of file
430 434 } No newline at end of file
431 435 No newline at end of file
432 436 rewind(Archivo_Fd); // Se reinicia el puntero del archivo No newline at end of file
433 437 No newline at end of file
434 438 char *buffer_temporal = (char *) malloc(num_bytes+1); // Se separa espacio de memoria segun No newline at end of file
435 439 // la longitud del archivo No newline at end of file
436 440 fread(buffer_temporal, sizeof(char), num_bytes, Archivo_Fd); No newline at end of file
437 441 No newline at end of file
438 442 char *puntero= strstr(buffer_temporal,".ab1"); // Se procede a eliminar la cabecera del archivo No newline at end of file
439 443 puntero= puntero + 12; No newline at end of file
440 444 No newline at end of file
441 445 buff_experimento = (char *) malloc(7*(num_filas-3)); // num_bytes_fila*(num_filas-3); No newline at end of file
442 446 strncpy(buff_experimento,puntero,7*(num_filas-3)); // Se carga en memoria la informacion del archivo No newline at end of file
443 447 No newline at end of file
444 448 fclose(Archivo_Fd); No newline at end of file
445 449 No newline at end of file
446 450 return 1; No newline at end of file
447 451 } No newline at end of file
448 452 } No newline at end of file
449 453 No newline at end of file
450 454 /* No newline at end of file
451 455 * Esta funcion recibe un numero en formato char, el dato se transforma a su equivalente en No newline at end of file
452 456 * un numero entero, que sera usado para sacar un dato del buffer "buff_experimento", esta No newline at end of file
453 457 * dato es el valor que se enviara al sistema de conmutacion RF para el cambio de apunte a No newline at end of file
454 458 * traves del puerto GPIO. No newline at end of file
455 459 */ No newline at end of file
456 460 int cambia_apuntamiento(char *puntero_char){ No newline at end of file
457 461 No newline at end of file
458 462 /*MSB-UP-LSB MSB-DOWN-LSB*/ No newline at end of file
459 463 int desplazamiento[6]={30,28,26,24,22,20}; // Defino los dezplazamientos que se aplicara No newline at end of file
460 464 // al dato que ingresa para formar el número No newline at end of file
461 465 // entero que se le pasara al puerto GPIO No newline at end of file
462 466 // Estos números son los pines del puerto GPIO No newline at end of file
463 467 // que se estan usando para el control No newline at end of file
464 468 No newline at end of file
465 469 int puntero= atoi(puntero_char); // Se convierte a entero la direccion del puntero No newline at end of file
466 470 No newline at end of file
467 471 int base= 7*puntero; // base= cantidad_bytes del dato x puntero No newline at end of file
468 472 // cantidad de bytes es el numero de bytes que No newline at end of file
469 473 printf("%s\n",puntero_char); // contiene cada dato, para este caso es 7 No newline at end of file
470 474 // porque es 6 bits de datos + 1 bit del cambio No newline at end of file
471 475 // de linea. No newline at end of file
472 476 char valor_char; No newline at end of file
473 477 unsigned long valor; No newline at end of file
474 478 unsigned long acumulado_ceros=0; No newline at end of file
475 479 unsigned long acumulado_unos=0; No newline at end of file
476 480 No newline at end of file
477 481 int offset; // Defino offset para el desplazamiento a traves No newline at end of file
478 482 for(offset=0;offset<6;offset++){ // de cada dato que se obtiene del "buff_experimento" No newline at end of file
479 483 No newline at end of file
480 484 valor_char= buff_experimento[base+offset]; // Obtengo el dato No newline at end of file
481 485 No newline at end of file
482 486 if (valor_char == '0'){ // Obtengo el número acumulado segun sea un cero o un uno No newline at end of file
483 487 valor= 0; No newline at end of file
484 488 acumulado_ceros= acumulado_ceros + (1 << desplazamiento[offset]); No newline at end of file
485 489 }else{ No newline at end of file
486 490 valor= 1; No newline at end of file
487 491 acumulado_unos= acumulado_unos + (1 << desplazamiento[offset]); No newline at end of file
488 492 } No newline at end of file
489 493 } No newline at end of file
490 494 pio_out(pioc, maskc_out, acumulado_unos, 1); No newline at end of file
491 495 pio_out(pioc, maskc_out, acumulado_ceros, 0); No newline at end of file
492 496 No newline at end of file
493 497 return 1; No newline at end of file
494 498 No newline at end of file
495 499 } No newline at end of file
496 500 No newline at end of file
497 501 /* No newline at end of file
498 502 * Esta funcion lee "n" veces el estado del APUNTE actual y reporta No newline at end of file
499 503 * una cadena de Verificacion. No newline at end of file
500 504 */ No newline at end of file
501 505 char* chequeo_sistema(char *filename, char *numero_muestras){ No newline at end of file
502 506 No newline at end of file
503 507 int i; No newline at end of file
504 508 int cnt = 0; No newline at end of file
505 509 unsigned int entradac= 0; No newline at end of file
506 510 No newline at end of file
507 511 char page0[250]; No newline at end of file
508 512
513 No newline at end of file
509 strcpy(page0,"Verificacion\n");
No newline at end of file
514 No newline at end of file
510 strcat(page0,parameters.ID);
No newline at end of file
515 No newline at end of file
511 strcat(page0,"\n------------\n"); No newline at end of file
No newline at end of file
516 strcat(page0,"\n-------\n"); No newline at end of file
512 517 No newline at end of file
513 518 char page1[8]; No newline at end of file
514 519 No newline at end of file
515 520 do{ No newline at end of file
516 521 //Inicializando arreglo No newline at end of file
517 522 for(i=0;i<6;i++) No newline at end of file
518 523 page1[i]='0'; No newline at end of file
519 524 page1[6] = '\n'; No newline at end of file
520 525 page1[7] = '\0'; No newline at end of file
521 526 //Lectura de puerto No newline at end of file
522 527 entradac= pio_in(piob,maskb_in); No newline at end of file
523 528 //Dandole formato al dato No newline at end of file
524 529 if (!(entradac & bit_up_2)) No newline at end of file
525 530 page1[0] = '1'; No newline at end of file
526 531 if (!(entradac & bit_up_1)) No newline at end of file
527 532 page1[1] = '1'; No newline at end of file
528 533 if (!(entradac & bit_up_0)) No newline at end of file
529 534 page1[2] = '1'; No newline at end of file
530 535 if (!(entradac & bit_dow_2)) No newline at end of file
531 536 page1[3] = '1'; No newline at end of file
532 537 if (!(entradac & bit_dow_1)) No newline at end of file
533 538 page1[4] = '1'; No newline at end of file
534 539 if (!(entradac & bit_dow_0)) No newline at end of file
535 540 page1[5] = '1'; No newline at end of file
536 541 No newline at end of file
537 542 strcat(page0, page1); No newline at end of file
538 543 cnt=cnt+1; No newline at end of file
539 544 usleep(1*1000*1000); No newline at end of file
540 545 No newline at end of file
541 546 }while(cnt < atoi(numero_muestras)); No newline at end of file
542 547 No newline at end of file
543 548 page0[strlen(page0)] = '\0'; No newline at end of file
544 549 No newline at end of file
545 550 char *all_pages = malloc(strlen(page0)+1); No newline at end of file
546 551 strcpy(all_pages, page0); No newline at end of file
547 552 return all_pages; No newline at end of file
548 553 } No newline at end of file
549 554 No newline at end of file
550 555 /* No newline at end of file
551 556 * No newline at end of file
552 557 */ No newline at end of file
553 558 cmp inicializa_modulo(cmp p){ No newline at end of file
554 559 FILE *fd = fopen("configuration.txt","r"); No newline at end of file
555 560 fgets(p.ID,20,fd); No newline at end of file
556 561 p.ID[7]='\0'; No newline at end of file
557 562 fgets(p.param2,20,fd); No newline at end of file
558 563 p.param2[10]='\0'; No newline at end of file
559 564 fgets(p.param3,20,fd); No newline at end of file
560 565 p.param3[10]='\0'; No newline at end of file
561 566 fgets(p.param4,20,fd); No newline at end of file
562 567 p.param4[10]='\0'; No newline at end of file
563 568 fclose(fd); No newline at end of file
564 569 return p; No newline at end of file
565 570 } No newline at end of file
566 571 No newline at end of file
567 572 /* No newline at end of file
568 573 * No newline at end of file
569 574 */ No newline at end of file
570 575 void intToStr( int number, char* str ) No newline at end of file
571 576 No newline at end of file
572 577 { No newline at end of file
573 578 int index = 0; No newline at end of file
574 579 No newline at end of file
575 580 while( number > 0 ) No newline at end of file
576 581 { No newline at end of file
577 582 int digit = number%10; No newline at end of file
578 583 str[index++] = digit + '0'; No newline at end of file
579 584 number /= 10; No newline at end of file
580 585 } No newline at end of file
581 586 str[index] = '\0'; No newline at end of file
582 587 //Adding zero to the left No newline at end of file
583 588 int n= strlen(str); No newline at end of file
584 589 if (n == 1) { No newline at end of file
585 590 strcat(str,"00000"); No newline at end of file
586 591 index = index + 5; No newline at end of file
587 592 }else if(n == 2){ No newline at end of file
588 593 strcat(str,"0000"); No newline at end of file
589 594 index = index + 4; No newline at end of file
590 595 }else if(n == 3){ No newline at end of file
591 596 strcat(str,"000"); No newline at end of file
592 597 index = index + 3; No newline at end of file
593 598 }else if(n == 4){ No newline at end of file
594 599 strcat(str,"00"); No newline at end of file
595 600 index = index + 2; No newline at end of file
596 601 }else if(n == 5){ No newline at end of file
597 602 strcat(str,"0"); No newline at end of file
598 603 index = index + 1; No newline at end of file
599 604 } No newline at end of file
600 605 //Now reverse the numbers in the string. No newline at end of file
601 606 int position; No newline at end of file
602 607 for( position = 0; position <= (index-1)/2; ++position ) No newline at end of file
603 608 { No newline at end of file
604 609 char tmp = str[position]; No newline at end of file
605 610 str[position] = str[(index-1)-position]; No newline at end of file
606 611 str[(index-1)-position] = tmp; No newline at end of file
607 612 } No newline at end of file
608 613 } No newline at end of file
609 614 No newline at end of file
610 615 No newline at end of file
611 616 //***************************************************************** No newline at end of file
612 617 //ABS_monitoreo es la funci�n principal del proyecto ABS_Monitoreo. No newline at end of file
613 618 //Esta funci�n es la que se debe agregar en otros c�digos. No newline at end of file
614 619 //***************************************************************** No newline at end of file
615 620 int ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth){ No newline at end of file
616 621 No newline at end of file
617 622 //local variables No newline at end of file
618 623 AT91S_PIO *pioc; No newline at end of file
619 624 pioc = pio_map(PIOC_BASE); No newline at end of file
620 625 unsigned int mask_sel_canal =PC4; //Aqu� se indican los pines que se desean usar como salidas. Las constantes PCx est�n defiidas en el header at91gpio.h No newline at end of file
621 626 unsigned int mask_sel_atenuacion =PC5; No newline at end of file
622 627 unsigned int mask_sel_calibracion =PC6; No newline at end of file
623 628 AT91S_ADC *padc; No newline at end of file
624 629 AT91S_ADC *padd; No newline at end of file
625 630 FILE *fp; No newline at end of file
626 631 long int results1[NSAMPLES], results2[NSAMPLES], results3[NSAMPLES], results4[NSAMPLES]; No newline at end of file
627 632 unsigned int i=0; No newline at end of file
628 633 char fname[FNAMELEN]; No newline at end of file
629 634 int j=0; No newline at end of file
630 635 time_t now; No newline at end of file
631 636 FILE *archivo; No newline at end of file
632 637 float phase1; No newline at end of file
633 638 float phase2; No newline at end of file
634 639 //system("./map_clock"); No newline at end of file
635 640 No newline at end of file
636 641 if (configCLK() == 1) No newline at end of file
637 642 printf("clock ADC enable.\n"); No newline at end of file
638 643 No newline at end of file
639 644 No newline at end of file
640 645 //configurar tres pines como salida usando als m�scaras mask_sel_canal, mask_sel_atenuacion y mask_sel_calibracion. En este caso corresponden a los pines pc4, pc5 y pc6. No newline at end of file
641 646 pio_enable(pioc, mask_sel_canal); No newline at end of file
642 647 pio_enable(pioc, mask_sel_atenuacion); No newline at end of file
643 648 pio_enable(pioc, mask_sel_calibracion); No newline at end of file
644 649 pio_output_enable(pioc, mask_sel_canal); //configurar pc4 como salida No newline at end of file
645 650 pio_output_enable(pioc, mask_sel_atenuacion); //configurar pc5 como salida No newline at end of file
646 651 pio_output_enable(pioc, mask_sel_calibracion); //configurar pc6 como salida No newline at end of file
647 652 No newline at end of file
648 653 No newline at end of file
649 654 //Se modifican las salidas correspondientes a la selecci�n del atenuador y calibraci�n, de acuerdo a los par�metros ingresados en la funci�n ABS_monitoreo. No newline at end of file
650 655 if ( sel_atenuador == 1) No newline at end of file
651 656 pio_out(pioc, mask_sel_atenuacion, sel_atenuador,1); No newline at end of file
652 657 else No newline at end of file
653 658 pio_out(pioc, mask_sel_atenuacion, sel_atenuador,0); No newline at end of file
654 659 if ( sel_calibracion == 1) No newline at end of file
655 660 pio_out(pioc, mask_sel_calibracion, sel_calibracion,1); No newline at end of file
656 661 else No newline at end of file
657 662 pio_out(pioc, mask_sel_calibracion, sel_calibracion,0); No newline at end of file
658 663 No newline at end of file
659 664 No newline at end of file
660 665 strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt"); //Direcci�n y nombre del archivo donde se desea guardar los datos. No newline at end of file
661 666 No newline at end of file
662 667 if (fExists(fname)==0){ //si el archivo no existe, crea uno y le asigna el titulo No newline at end of file
663 668 archivo = fopen(fname,"a+"); No newline at end of file
664 669 fprintf(archivo,"%s"," Registro de datos del ABS Control \n"); No newline at end of file
665 670 fprintf(archivo,"%s"," Fecha y hora Fase UP Fase DOWN\n"); No newline at end of file
666 671 fclose(archivo); No newline at end of file
667 672 } No newline at end of file
668 673 No newline at end of file
669 674 No newline at end of file
670 675 //configure ADC Settings No newline at end of file
671 676 padc=configADC1(); No newline at end of file
672 677 padd=configADC2(); No newline at end of file
673 678 No newline at end of file
674 679 while (1){ No newline at end of file
675 680 No newline at end of file
676 681 ENABLE_CHANNEL(padc, ADC_CH0+ADC_CH1); No newline at end of file
677 682 printf("\nAdquiriendo datos...\n"); //Indica en el terminal que se est�n adquiriendo datos (muestreando la se�al). No newline at end of file
678 683 No newline at end of file
679 684 No newline at end of file
680 685 now = time(0); //Get current Time for File Name No newline at end of file
681 686 No newline at end of file
682 687 No newline at end of file
683 688 //Se pone la salida de selecci�n de canal para seleccionar el canal 1 del detector de fase No newline at end of file
684 689 // pio_out(pioc, mask_sel_canal, 0,1); No newline at end of file
685 690 pio_out(pioc, mask_sel_canal, 0,1); No newline at end of file
686 691 No newline at end of file
687 692 No newline at end of file
688 693 //Se toman muestras para el canal 1 del detector de fase No newline at end of file
689 694 while(1){ No newline at end of file
690 695 for(i=0; i < NSAMPLES; i++){ No newline at end of file
691 696 No newline at end of file
692 697 ADC_INIT(padc); No newline at end of file
693 698 results1[i] = GET_ADC0(padc); No newline at end of file
694 699 results2[i] = GET_ADC1(padd); No newline at end of file
695 700 } No newline at end of file
696 701 No newline at end of file
697 702 No newline at end of file
698 703 if (checkTx(results1, results2, umbral, pulsewidth)==1){ //Se verifica que las muestras tomadas del canal 1 del datector de fase //correspondan a un pulso. No newline at end of file
699 704 break; No newline at end of file
700 705 } No newline at end of file
701 706 } No newline at end of file
702 707 No newline at end of file
703 708 No newline at end of file
704 709 //Se pone la salida de selecci�n de canal para seleccionar el canal 2 del detector de fase No newline at end of file
705 710 pio_out(pioc, mask_sel_canal, 1,1); No newline at end of file
706 711 No newline at end of file
707 712 No newline at end of file
708 713 No newline at end of file
709 714 //Setoman muestras para el canal 2 del detector de fase No newline at end of file
710 715 while(1){ No newline at end of file
711 716 for(i=0; i < NSAMPLES; i++){ No newline at end of file
712 717 No newline at end of file
713 718 ADC_INIT(padc); No newline at end of file
714 719 results3[i] = GET_ADC0(padc); No newline at end of file
715 720 results4[i] = GET_ADC1(padd); No newline at end of file
716 721 } No newline at end of file
717 722 No newline at end of file
718 723 if (checkTx(results3, results4, umbral, pulsewidth)==1){ //Se verifica que las muestras tomadas del canal 2 del detector de fase //correspondan a un pulso. No newline at end of file
719 724 break; No newline at end of file
720 725 } No newline at end of file
721 726 } No newline at end of file
722 727 No newline at end of file
723 728 No newline at end of file
724 729 //Una vez que se ha encontrado un pulso en cada canal, se calcula la fase de ambos. No newline at end of file
725 730 No newline at end of file
726 731 phase1 = getPhase(results1, results2); //Calcular la fase del canal 1 del detector de fase. No newline at end of file
727 732 phase2 = getPhase(results3, results4); //Calcular la fase del canal 2 del detector de fase. No newline at end of file
728 733 //create Output File No newline at end of file
729 734 No newline at end of file
730 735 strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt"); No newline at end of file
731 736 printf("\nTerminada la prueba # %d \n", j++); No newline at end of file
732 737 fp=create_Output(fname, now); //Coloca la fecha y la hora en el archivo de texto No newline at end of file
733 738 printf("mediana ch1 = %1.2f\n", phase1); //muestra resultado en terminal No newline at end of file
734 739 printf("mediana ch2 = %1.2f\n", phase2); //muestra resultado en terminal No newline at end of file
735 740 writeOutput(phase1, fp); //graba el resultado en el archivo de texto No newline at end of file
736 741 writeOutput(phase2, fp); //graba el resultado en el archivo de texto No newline at end of file
737 742 fprintf(fp, "\n"); //Pasa a la siguiente l�nea del archivo de texto No newline at end of file
738 743 fclose(fp); No newline at end of file
739 744 printf("Resultado guardado en %s \n", fname); No newline at end of file
740 745 No newline at end of file
741 746 sleep(1); No newline at end of file
742 747 No newline at end of file
743 748 } No newline at end of file
744 749 return 0; No newline at end of file
745 750 } No newline at end of file
746 751 /*============================================================================= No newline at end of file
747 752 Function definitions No newline at end of file
748 753 =============================================================================*/ No newline at end of file
749 754 No newline at end of file
750 755 // Configures ADC registers in order to get a sample every 10us No newline at end of file
751 756 AT91S_ADC * configADC1(void){ No newline at end of file
752 757 //Variables a usar: No newline at end of file
753 758 unsigned int maskc_adc =PC0; //Usamos ADC0 y ADC1 No newline at end of file
754 759 No newline at end of file
755 760 //configuro pin: No newline at end of file
756 761 AT91S_PIO *pioc; No newline at end of file
757 762 pioc = pio_map(PIOC_BASE); No newline at end of file
758 763 pin_adc_enable(pioc,maskc_adc); //Habilitamos PC0 para usar con ADC0 y 1 No newline at end of file
759 764 pio_disable_irq(pioc, maskc_adc); No newline at end of file
760 765 pio_disable_multiple_driver(pioc, maskc_adc); No newline at end of file
761 766 pio_disable_pull_ups(pioc, maskc_adc); No newline at end of file
762 767 pio_input_enable(pioc, maskc_adc); No newline at end of file
763 768 No newline at end of file
764 769 No newline at end of file
765 770 //Configuro el ADC: No newline at end of file
766 771 AT91S_ADC *padc; No newline at end of file
767 772 No newline at end of file
768 773 padc = adc_map1(ADC_BASE); No newline at end of file
769 774 No newline at end of file
770 775 //clock ADC = 1MHz No newline at end of file
771 776 //time startup = 8us No newline at end of file
772 777 //time sample and hold = 2us No newline at end of file
773 778 // hold No newline at end of file
774 779 // ___________ No newline at end of file
775 780 // start ___________| |___________ No newline at end of file
776 781 // No newline at end of file
777 782 // | --1.2us-- | --0.15us-- | No newline at end of file
778 783 //ADC_RESET(padc); No newline at end of file
779 784 CONFIG_ADC(padc,ADC_TRGEN_DIS | ADC_RES_10BIT | ADC_SLEEP_NORMAL_MODE | ADC_PRESCAL | ADC_STARTUP | ADC_SHTIM); No newline at end of file
780 785 ENABLE_CHANNEL(padc,ADC_CH0); //habilito canal 0 No newline at end of file
781 786 No newline at end of file
782 787 No newline at end of file
783 788 return padc; No newline at end of file
784 789 } No newline at end of file
785 790 No newline at end of file
786 791 AT91S_ADC * configADC2(void){ No newline at end of file
787 792 //Variables a usar: No newline at end of file
788 793 unsigned int maskc_adc =PC1; //Usamos ADC0 y ADC1 No newline at end of file
789 794 No newline at end of file
790 795 //configuro pin: No newline at end of file
791 796 AT91S_PIO *piod; No newline at end of file
792 797 piod = pio_map(PIOC_BASE); No newline at end of file
793 798 pin_adc_enable(piod,maskc_adc); //Habilitamos PC0 para usar con ADC0 y 1 No newline at end of file
794 799 pio_disable_irq(piod, maskc_adc); No newline at end of file
795 800 pio_disable_multiple_driver(piod, maskc_adc); No newline at end of file
796 801 pio_disable_pull_ups(piod, maskc_adc); No newline at end of file
797 802 pio_input_enable(piod, maskc_adc); No newline at end of file
798 803 No newline at end of file
799 804 //Configuro el ADC: No newline at end of file
800 805 AT91S_ADC *padd; No newline at end of file
801 806 No newline at end of file
802 807 padd = adc_map1(ADC_BASE); No newline at end of file
803 808 No newline at end of file
804 809 //clock ADC = 1MHz No newline at end of file
805 810 //time startup = 8us No newline at end of file
806 811 //time sample and hold = 2us No newline at end of file
807 812 // hold No newline at end of file
808 813 // ___________ No newline at end of file
809 814 // start ___________| |___________ No newline at end of file
810 815 // No newline at end of file
811 816 // | --1.2us-- | --0.15us-- | No newline at end of file
812 817 //ADC_RESET(padc); No newline at end of file
813 818 CONFIG_ADC(padd,ADC_TRGEN_DIS | ADC_RES_10BIT | ADC_SLEEP_NORMAL_MODE | ADC_PRESCAL | ADC_STARTUP | ADC_SHTIM); No newline at end of file
814 819 ENABLE_CHANNEL(padd,ADC_CH1); //habilito canal 1 No newline at end of file
815 820 return padd; No newline at end of file
816 821 } No newline at end of file
817 822 No newline at end of file
818 823 No newline at end of file
819 824 //++++++++++++++++++++ No newline at end of file
820 825 No newline at end of file
821 826 //creats the output file with a timestamp in the name No newline at end of file
822 827 FILE * create_Output(char *fname, time_t rawtime){ No newline at end of file
823 828 FILE *file; No newline at end of file
824 829 char timestamp[80];//, counter[5]="dcv"; No newline at end of file
825 830 //char str[4]; No newline at end of file
826 831 struct tm * timeinfo; No newline at end of file
827 832 No newline at end of file
828 833 //format time No newline at end of file
829 834 timeinfo = localtime ( &rawtime ); No newline at end of file
830 835 strftime (timestamp,sizeof(timestamp),"%a %y-%m-%d %H:%M:%S %Z",timeinfo); No newline at end of file
831 836 No newline at end of file
832 837 No newline at end of file
833 838 //Creates the file name out of the #define parameters No newline at end of file
834 839 No newline at end of file
835 840 strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt"); No newline at end of file
836 841 file = fopen(fname,"a+"); No newline at end of file
837 842 fprintf(file,"%s", timestamp); No newline at end of file
838 843 //printf("\nTerminada la prueba # %d. Guardando resultado en %s\n",r, fname); No newline at end of file
839 844 //printf("\nTerminada la prueba # %d/%d. Writing data to the file %s\n",r+1 , REP, fname); No newline at end of file
840 845 //printf("\nAAAAAAAAAA %d...%s\n", counter[1], fname); No newline at end of file
841 846 // return file pointer No newline at end of file
842 847 return file; No newline at end of file
843 848 } No newline at end of file
844 849 No newline at end of file
845 850 //++++++++++++++++++++ No newline at end of file
846 851 No newline at end of file
847 852 //tests if a file already exists. returns 1 if it exists and 0 if it doesn't No newline at end of file
848 853 No newline at end of file
849 854 No newline at end of file
850 855 No newline at end of file
851 856 //Funci�n checkTx verifica que la se�al muestreada corresponda a un pulso. No newline at end of file
852 857 //results1 y results2 son los arreglos que contienen los datos muestreados por ambos canales del ADC del embebido. No newline at end of file
853 858 //umbral indica qu� valor debe superar una muestra para considerarla un posible pulso o pico. No newline at end of file
854 859 //pulsewidth indica cu�ntas muestras consecutivas deben superar el umbral para que se considere que se ha detectado un pulso. No newline at end of file
855 860 int checkTx(long int results1[],long int results2[], float umbral, int pulsewidth){ No newline at end of file
856 861 No newline at end of file
857 862 int i, cont; No newline at end of file
858 863 float z[NSAMPLES], sum, avg; No newline at end of file
859 864 int isSignal, pulse; No newline at end of file
860 865 No newline at end of file
861 866 for(i=0;i<NSAMPLES;i++){ No newline at end of file
862 867 No newline at end of file
863 868 z[i] =sqrt(1.0*results1[i]*results1[i]+1.0*results2[i]*results2[i]); No newline at end of file
864 869 } No newline at end of file
865 870 No newline at end of file
866 871 pulse = 0; No newline at end of file
867 872 isSignal = 0; No newline at end of file
868 873 cont =0; No newline at end of file
869 874 No newline at end of file
870 875 sum = 0; No newline at end of file
871 876 for(i=0;i<NSAMPLES;i++){ No newline at end of file
872 877 No newline at end of file
873 878 sum += z[i]; No newline at end of file
874 879 avg = sum/(i+1); No newline at end of file
875 880 if ((z[i] - avg) > umbral){ No newline at end of file
876 881 if (isSignal == 1){ No newline at end of file
877 882 cont += 1; No newline at end of file
878 883 } No newline at end of file
879 884 if (cont == pulsewidth){ No newline at end of file
880 885 pulse = 1; No newline at end of file
881 886 break; No newline at end of file
882 887 } No newline at end of file
883 888 isSignal = 1; No newline at end of file
884 889 continue; No newline at end of file
885 890 isSignal = 0; No newline at end of file
886 891 cont = 0; No newline at end of file
887 892 } No newline at end of file
888 893 } No newline at end of file
889 894 No newline at end of file
890 895 return pulse; //devuelve un entero: 1 si se ha detectado pulso, de lo contrario, 0. No newline at end of file
891 896 } No newline at end of file
892 897 No newline at end of file
893 898 No newline at end of file
894 899 int fExists(char * fname){ No newline at end of file
895 900 FILE * file; No newline at end of file
896 901 No newline at end of file
897 902 file = fopen (fname, "r"); No newline at end of file
898 903 if (file == NULL) No newline at end of file
899 904 { No newline at end of file
900 905 return 0; No newline at end of file
901 906 } No newline at end of file
902 907 fclose(file); No newline at end of file
903 908 return 1; No newline at end of file
904 909 } No newline at end of file
905 910 No newline at end of file
906 911 No newline at end of file
907 912 //Funci�n que calcula la mediana de un conjunto de muestras No newline at end of file
908 913 double mediana(long int *results,unsigned int cuenta){ No newline at end of file
909 914 unsigned int i=0,j=0,aux=0; No newline at end of file
910 915 No newline at end of file
911 916 double median=0; No newline at end of file
912 917 /*Calculo mediana */ No newline at end of file
913 918 No newline at end of file
914 919 for(i=0;i<cuenta-1;i++){ No newline at end of file
915 920 for (j=i+1;j<cuenta;j++){ No newline at end of file
916 921 if(results[i]>results[j] ){ No newline at end of file
917 922 No newline at end of file
918 923 aux=results[i]; No newline at end of file
919 924 results[i]=results[j]; No newline at end of file
920 925 results[j]=aux; No newline at end of file
921 926 No newline at end of file
922 927 } No newline at end of file
923 928 } No newline at end of file
924 929 No newline at end of file
925 930 } No newline at end of file
926 931 median=results[cuenta/2]; No newline at end of file
927 932 return median; No newline at end of file
928 933 } No newline at end of file
929 934 No newline at end of file
930 935 No newline at end of file
931 936 No newline at end of file
932 937 //Funci�n que halla la fase de la se�al. No newline at end of file
933 938 //Tiene como entradas las muestras correspondientes a la parte real e imaginaria de la se�al. No newline at end of file
934 939 float getPhase(long int results1[],long int results2[]){ No newline at end of file
935 940 No newline at end of file
936 941 unsigned int count=0, i=0,umbral=1000; No newline at end of file
937 942 //long int results1[]; No newline at end of file
938 943 //long int results2[]; No newline at end of file
939 944 long int power[NSAMPLES]; No newline at end of file
940 945 long int sumI=0,sumQ=0,I[NSAMPLES], Q[NSAMPLES],II[NSAMPLES], QQ[NSAMPLES]; No newline at end of file
941 946 double median1=0,median2=0; No newline at end of file
942 947 long int promedioI=0,promedioQ=0;/*Calculo mediana 1*/ No newline at end of file
943 948 float resultado=0; No newline at end of file
944 949 No newline at end of file
945 950 for(i=0;i<NSAMPLES;i++){ No newline at end of file
946 951 No newline at end of file
947 952 I[i] =results1[i]; No newline at end of file
948 953 Q[i] =results2[i]; No newline at end of file
949 954 } No newline at end of file
950 955 No newline at end of file
951 956 /*Calculo mediana 1*/ No newline at end of file
952 957 median1=mediana(I,NSAMPLES); No newline at end of file
953 958 No newline at end of file
954 959 /*Calculo mediana 2*/ No newline at end of file
955 960 median2=mediana(Q,NSAMPLES); No newline at end of file
956 961 No newline at end of file
957 962 No newline at end of file
958 963 No newline at end of file
959 964 No newline at end of file
960 965 No newline at end of file
961 966 No newline at end of file
962 967 for(i=0;i<NSAMPLES;i++){ No newline at end of file
963 968 No newline at end of file
964 969 I[i] =results1[i]; No newline at end of file
965 970 Q[i] =results2[i]; No newline at end of file
966 971 No newline at end of file
967 972 } No newline at end of file
968 973 No newline at end of file
969 974 No newline at end of file
970 975 No newline at end of file
971 976 for(i = 0; i < NSAMPLES ; i++){ No newline at end of file
972 977 No newline at end of file
973 978 I[i]=(I[i]-median1); No newline at end of file
974 979 Q[i]=(Q[i]-median2); No newline at end of file
975 980 No newline at end of file
976 981 } No newline at end of file
977 982 No newline at end of file
978 983 for(i = 0; i < NSAMPLES ; i++){ No newline at end of file
979 984 No newline at end of file
980 985 power[i]=I[i]*I[i]+Q[i]*Q[i]; No newline at end of file
981 986 No newline at end of file
982 987 if(power[i] > umbral) No newline at end of file
983 988 { No newline at end of file
984 989 No newline at end of file
985 990 II[count]=I[i]; No newline at end of file
986 991 QQ[count]=Q[i]; No newline at end of file
987 992 count=count+1; No newline at end of file
988 993 No newline at end of file
989 994 } No newline at end of file
990 995 No newline at end of file
991 996 } No newline at end of file
992 997 No newline at end of file
993 998 for(i = 0; i < count ; i++){ No newline at end of file
994 999 No newline at end of file
995 1000 sumI=sumI+II[i]; No newline at end of file
996 1001 sumQ=sumQ+QQ[i]; No newline at end of file
997 1002 No newline at end of file
998 1003 } No newline at end of file
999 1004 No newline at end of file
1000 1005 promedioI=sumI; No newline at end of file
1001 1006 promedioQ=sumQ; No newline at end of file
1002 1007 No newline at end of file
1003 1008 resultado = atan2(1.0*promedioI,1.0*promedioQ)*180/3.1416+62-44; No newline at end of file
1004 1009 No newline at end of file
1005 1010 No newline at end of file
1006 1011 return resultado; No newline at end of file
1007 1012 No newline at end of file
1008 1013 } No newline at end of file
1009 1014 No newline at end of file
1010 1015 No newline at end of file
1011 1016 No newline at end of file
1012 1017 //Funci�n que muestra la fase detectada en el terminal y tambi�n la graba en el archivo de texto. No newline at end of file
1013 1018 void writeOutput(float resultado, FILE * output){ No newline at end of file
1014 1019 No newline at end of file
1015 1020 No newline at end of file
1016 1021 // No newline at end of file
1017 1022 No newline at end of file
1018 1023 fprintf(output," %1.2f ",resultado); //graba resultado en archivo .txt No newline at end of file
1019 1024 // No newline at end of file
1020 1025 No newline at end of file
1021 1026 } No newline at end of file
1022 1027 No newline at end of file
1023 1028 int configCLK(){ No newline at end of file
1024 1029 //configuro pin: No newline at end of file
1025 1030 AT91S_PMC *sys_clock; No newline at end of file
1026 1031 sys_clock = clock_map(CLOCK_BASE); No newline at end of file
1027 1032 enable_clock_adc(sys_clock); No newline at end of file
1028 1033 //printf("clock ADC enable.\n"); No newline at end of file
1029 1034 return 1; No newline at end of file
1030 1035 } No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now