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