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