Actualizacion General del codigo para CCN con el objetivo de proveer mantenimiento estable.

Dependencies:   BufferedSerial

Committer:
fmanzano_dtk
Date:
Mon May 24 12:13:06 2021 -0600
Revision:
8:3fc41e5029f7
Parent:
7:d11eb8f1a02e
Cambio de puertos RFID y LIDAR

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 1:c7bcbf5eac28 1 /**
fmanzano_dtk 1:c7bcbf5eac28 2 * @file f_basicas.cpp
fmanzano_dtk 1:c7bcbf5eac28 3 * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
fmanzano_dtk 1:c7bcbf5eac28 4 * @brief
fmanzano_dtk 1:c7bcbf5eac28 5 * @version 0.1
fmanzano_dtk 1:c7bcbf5eac28 6 * @date 2021-05-23
fmanzano_dtk 1:c7bcbf5eac28 7 *
fmanzano_dtk 1:c7bcbf5eac28 8 * @copyright Copyright (c) 2021
fmanzano_dtk 1:c7bcbf5eac28 9 *
fmanzano_dtk 1:c7bcbf5eac28 10 */
fmanzano_dtk 1:c7bcbf5eac28 11
fmanzano_dtk 1:c7bcbf5eac28 12 #include "mbed.h"
fmanzano_dtk 3:bf6747585064 13 #include "BufferedSerial.h"
fmanzano_dtk 1:c7bcbf5eac28 14 #include "constantes.hpp"
fmanzano_dtk 1:c7bcbf5eac28 15 #include "tagid.hpp"
fmanzano_dtk 7:d11eb8f1a02e 16 #include "f_basicas.hpp"
fmanzano_dtk 3:bf6747585064 17
fmanzano_dtk 1:c7bcbf5eac28 18
fmanzano_dtk 1:c7bcbf5eac28 19
fmanzano_dtk 1:c7bcbf5eac28 20 /**
fmanzano_dtk 1:c7bcbf5eac28 21 * @brief
fmanzano_dtk 1:c7bcbf5eac28 22 * Esta función recibe un entero que es el contador de tramas
fmanzano_dtk 1:c7bcbf5eac28 23 realiza el incremento en uno y verifica si el valor es mayor
fmanzano_dtk 1:c7bcbf5eac28 24 o igual que 65535 que es equivalente a 0xFFFF. Si se cumple
fmanzano_dtk 1:c7bcbf5eac28 25 la condución se regresa el valor a 1.
fmanzano_dtk 1:c7bcbf5eac28 26 Esta función siempre retorna 0.
fmanzano_dtk 1:c7bcbf5eac28 27 *
fmanzano_dtk 1:c7bcbf5eac28 28 * @param tramas
fmanzano_dtk 1:c7bcbf5eac28 29 * @return true
fmanzano_dtk 1:c7bcbf5eac28 30 * @return false
fmanzano_dtk 1:c7bcbf5eac28 31 */
fmanzano_dtk 1:c7bcbf5eac28 32 bool incrementar_trama(int *tramas)
fmanzano_dtk 1:c7bcbf5eac28 33 {
fmanzano_dtk 1:c7bcbf5eac28 34
fmanzano_dtk 1:c7bcbf5eac28 35 int actual = *tramas;
fmanzano_dtk 1:c7bcbf5eac28 36 int limite = 65535;
fmanzano_dtk 1:c7bcbf5eac28 37 actual++;
fmanzano_dtk 1:c7bcbf5eac28 38
fmanzano_dtk 1:c7bcbf5eac28 39 if (actual > limite) {
fmanzano_dtk 1:c7bcbf5eac28 40 *tramas = 1;
fmanzano_dtk 1:c7bcbf5eac28 41 } else {
fmanzano_dtk 1:c7bcbf5eac28 42 *tramas = actual;
fmanzano_dtk 1:c7bcbf5eac28 43 }
fmanzano_dtk 1:c7bcbf5eac28 44 return(false);
fmanzano_dtk 1:c7bcbf5eac28 45 }
fmanzano_dtk 1:c7bcbf5eac28 46
fmanzano_dtk 1:c7bcbf5eac28 47
fmanzano_dtk 1:c7bcbf5eac28 48
fmanzano_dtk 1:c7bcbf5eac28 49 /**
fmanzano_dtk 1:c7bcbf5eac28 50 * @brief
fmanzano_dtk 1:c7bcbf5eac28 51 *
fmanzano_dtk 1:c7bcbf5eac28 52 * @param puerto_usb
fmanzano_dtk 1:c7bcbf5eac28 53 * @param puerto_cp
fmanzano_dtk 1:c7bcbf5eac28 54 * @return true
fmanzano_dtk 1:c7bcbf5eac28 55 * @return false
fmanzano_dtk 1:c7bcbf5eac28 56 */
fmanzano_dtk 1:c7bcbf5eac28 57 bool booting_gtdat(Serial *puerto_usb, Serial *puerto_cp) {
fmanzano_dtk 1:c7bcbf5eac28 58 wait_us(1000000);
fmanzano_dtk 1:c7bcbf5eac28 59 puerto_usb -> printf("\r\n*** DETEKTOR LATAM ***\r\n");
fmanzano_dtk 1:c7bcbf5eac28 60 puerto_usb -> printf("INICIANDO NUCLEO STM32\r\n");
fmanzano_dtk 1:c7bcbf5eac28 61 puerto_usb -> printf("CCN TIEMPO EN PLANTA\r\n");
fmanzano_dtk 1:c7bcbf5eac28 62 puerto_usb -> printf("R.0A.1 - 2021-05-24\r\n\r\n");
fmanzano_dtk 1:c7bcbf5eac28 63 puerto_usb -> printf("BAHIA-%d\r\n", BAY_ADDRESS);
fmanzano_dtk 1:c7bcbf5eac28 64 puerto_cp -> printf("%s*INICIA BAHIA-%d*%s0001%s\r\n",
fmanzano_dtk 1:c7bcbf5eac28 65 CABECERA_TX, BAY_ADDRESS, FIN_CABECERA_TX, ULTIMO_CARACTER);
fmanzano_dtk 1:c7bcbf5eac28 66 wait_us(T_TX);
fmanzano_dtk 1:c7bcbf5eac28 67 return(false);
fmanzano_dtk 1:c7bcbf5eac28 68 }
fmanzano_dtk 1:c7bcbf5eac28 69
fmanzano_dtk 1:c7bcbf5eac28 70
fmanzano_dtk 1:c7bcbf5eac28 71
fmanzano_dtk 1:c7bcbf5eac28 72 /**
fmanzano_dtk 1:c7bcbf5eac28 73 * @brief
fmanzano_dtk 1:c7bcbf5eac28 74 *
fmanzano_dtk 1:c7bcbf5eac28 75 * Esta función recibe los digitos correspondientes a las horas, decenas y
fmanzano_dtk 1:c7bcbf5eac28 76 minutos que representan la hora y que deben presentarse en los tres
fmanzano_dtk 1:c7bcbf5eac28 77 display de siete segmentos. La función siempre retorna 0.
fmanzano_dtk 1:c7bcbf5eac28 78 * @param horas
fmanzano_dtk 1:c7bcbf5eac28 79 * @param decenas
fmanzano_dtk 1:c7bcbf5eac28 80 * @param minutos
fmanzano_dtk 1:c7bcbf5eac28 81 * @param d7_h
fmanzano_dtk 1:c7bcbf5eac28 82 * @param d7_d
fmanzano_dtk 1:c7bcbf5eac28 83 * @param d7_m
fmanzano_dtk 1:c7bcbf5eac28 84 * @return int
fmanzano_dtk 1:c7bcbf5eac28 85 */
fmanzano_dtk 1:c7bcbf5eac28 86 int presentar_tiempo(int *horas, int *decenas, int *minutos,
fmanzano_dtk 1:c7bcbf5eac28 87 BusOut *d7_h, BusOut *d7_d, BusOut *d7_m)
fmanzano_dtk 1:c7bcbf5eac28 88 {
fmanzano_dtk 1:c7bcbf5eac28 89 // Digito más significativo (HORAS)
fmanzano_dtk 1:c7bcbf5eac28 90 switch (*horas) {
fmanzano_dtk 1:c7bcbf5eac28 91 case 0 :
fmanzano_dtk 1:c7bcbf5eac28 92 d7_h -> write(DIGITOS[CERO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 93 break;
fmanzano_dtk 1:c7bcbf5eac28 94 case 1 :
fmanzano_dtk 1:c7bcbf5eac28 95 d7_h -> write(DIGITOS[UNO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 96 break;
fmanzano_dtk 1:c7bcbf5eac28 97 case 2 :
fmanzano_dtk 1:c7bcbf5eac28 98 d7_h -> write(DIGITOS[DOS_7S]);
fmanzano_dtk 1:c7bcbf5eac28 99 break;
fmanzano_dtk 1:c7bcbf5eac28 100 case 3 :
fmanzano_dtk 1:c7bcbf5eac28 101 d7_h -> write(DIGITOS[TRES_7S]);
fmanzano_dtk 1:c7bcbf5eac28 102 break;
fmanzano_dtk 1:c7bcbf5eac28 103 case 4 :
fmanzano_dtk 1:c7bcbf5eac28 104 d7_h -> write(DIGITOS[CUATRO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 105 break;
fmanzano_dtk 1:c7bcbf5eac28 106 case 5 :
fmanzano_dtk 1:c7bcbf5eac28 107 d7_h -> write(DIGITOS[CINCO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 108 break;
fmanzano_dtk 1:c7bcbf5eac28 109 case 6 :
fmanzano_dtk 1:c7bcbf5eac28 110 d7_h -> write(DIGITOS[SEIS_7S]);
fmanzano_dtk 1:c7bcbf5eac28 111 break;
fmanzano_dtk 1:c7bcbf5eac28 112 case 7 :
fmanzano_dtk 1:c7bcbf5eac28 113 d7_h -> write(DIGITOS[SIETE_7S]);
fmanzano_dtk 1:c7bcbf5eac28 114 break;
fmanzano_dtk 1:c7bcbf5eac28 115 case 8 :
fmanzano_dtk 1:c7bcbf5eac28 116 d7_h -> write(DIGITOS[OCHO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 117 break;
fmanzano_dtk 1:c7bcbf5eac28 118 case 9 :
fmanzano_dtk 1:c7bcbf5eac28 119 d7_h -> write(DIGITOS[NUEVE_7S]);
fmanzano_dtk 1:c7bcbf5eac28 120 break;
fmanzano_dtk 1:c7bcbf5eac28 121 case 10:
fmanzano_dtk 1:c7bcbf5eac28 122 d7_h -> write(DIGITOS[APAGADO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 123 break;
fmanzano_dtk 1:c7bcbf5eac28 124 }
fmanzano_dtk 1:c7bcbf5eac28 125
fmanzano_dtk 1:c7bcbf5eac28 126 // DECENAS DE MINUTOS
fmanzano_dtk 1:c7bcbf5eac28 127 switch (*decenas) {
fmanzano_dtk 1:c7bcbf5eac28 128 case 0 :
fmanzano_dtk 1:c7bcbf5eac28 129 d7_d -> write(DIGITOS[CERO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 130 break;
fmanzano_dtk 1:c7bcbf5eac28 131 case 1 :
fmanzano_dtk 1:c7bcbf5eac28 132 d7_d -> write(DIGITOS[UNO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 133 break;
fmanzano_dtk 1:c7bcbf5eac28 134 case 2 :
fmanzano_dtk 1:c7bcbf5eac28 135 d7_d -> write(DIGITOS[DOS_7S]);
fmanzano_dtk 1:c7bcbf5eac28 136 break;
fmanzano_dtk 1:c7bcbf5eac28 137 case 3 :
fmanzano_dtk 1:c7bcbf5eac28 138 d7_d -> write(DIGITOS[TRES_7S]);
fmanzano_dtk 1:c7bcbf5eac28 139 break;
fmanzano_dtk 1:c7bcbf5eac28 140 case 4 :
fmanzano_dtk 1:c7bcbf5eac28 141 d7_d -> write(DIGITOS[CUATRO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 142 break;
fmanzano_dtk 1:c7bcbf5eac28 143 case 5 :
fmanzano_dtk 1:c7bcbf5eac28 144 d7_d -> write(DIGITOS[CINCO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 145 break;
fmanzano_dtk 1:c7bcbf5eac28 146 case 6 :
fmanzano_dtk 1:c7bcbf5eac28 147 d7_d -> write(DIGITOS[SEIS_7S]);
fmanzano_dtk 1:c7bcbf5eac28 148 break;
fmanzano_dtk 1:c7bcbf5eac28 149 case 7 :
fmanzano_dtk 1:c7bcbf5eac28 150 d7_d -> write(DIGITOS[SIETE_7S]);
fmanzano_dtk 1:c7bcbf5eac28 151 break;
fmanzano_dtk 1:c7bcbf5eac28 152 case 8 :
fmanzano_dtk 1:c7bcbf5eac28 153 d7_d -> write(DIGITOS[OCHO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 154 break;
fmanzano_dtk 1:c7bcbf5eac28 155 case 9 :
fmanzano_dtk 1:c7bcbf5eac28 156 d7_d -> write(DIGITOS[NUEVE_7S]);
fmanzano_dtk 1:c7bcbf5eac28 157 break;
fmanzano_dtk 1:c7bcbf5eac28 158 case 10:
fmanzano_dtk 1:c7bcbf5eac28 159 d7_d -> write(DIGITOS[APAGADO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 160 break;
fmanzano_dtk 1:c7bcbf5eac28 161 }
fmanzano_dtk 1:c7bcbf5eac28 162
fmanzano_dtk 1:c7bcbf5eac28 163 // Digito menos significativo (MINUTOS )
fmanzano_dtk 1:c7bcbf5eac28 164 switch (*minutos) {
fmanzano_dtk 1:c7bcbf5eac28 165 case 0 :
fmanzano_dtk 1:c7bcbf5eac28 166 d7_m -> write(DIGITOS[CERO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 167 break;
fmanzano_dtk 1:c7bcbf5eac28 168 case 1 :
fmanzano_dtk 1:c7bcbf5eac28 169 d7_m -> write(DIGITOS[UNO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 170 break;
fmanzano_dtk 1:c7bcbf5eac28 171 case 2 :
fmanzano_dtk 1:c7bcbf5eac28 172 d7_m -> write(DIGITOS[DOS_7S]);
fmanzano_dtk 1:c7bcbf5eac28 173 break;
fmanzano_dtk 1:c7bcbf5eac28 174 case 3 :
fmanzano_dtk 1:c7bcbf5eac28 175 d7_m -> write(DIGITOS[TRES_7S]);
fmanzano_dtk 1:c7bcbf5eac28 176 break;
fmanzano_dtk 1:c7bcbf5eac28 177 case 4 :
fmanzano_dtk 1:c7bcbf5eac28 178 d7_m -> write(DIGITOS[CUATRO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 179 break;
fmanzano_dtk 1:c7bcbf5eac28 180 case 5 :
fmanzano_dtk 1:c7bcbf5eac28 181 d7_m -> write(DIGITOS[CINCO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 182 break;
fmanzano_dtk 1:c7bcbf5eac28 183 case 6 :
fmanzano_dtk 1:c7bcbf5eac28 184 d7_m -> write(DIGITOS[SEIS_7S]);
fmanzano_dtk 1:c7bcbf5eac28 185 break;
fmanzano_dtk 1:c7bcbf5eac28 186 case 7 :
fmanzano_dtk 1:c7bcbf5eac28 187 d7_m -> write(DIGITOS[SIETE_7S]);
fmanzano_dtk 1:c7bcbf5eac28 188 break;
fmanzano_dtk 1:c7bcbf5eac28 189 case 8 :
fmanzano_dtk 1:c7bcbf5eac28 190 d7_m -> write(DIGITOS[OCHO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 191 break;
fmanzano_dtk 1:c7bcbf5eac28 192 case 9 :
fmanzano_dtk 1:c7bcbf5eac28 193 d7_m -> write(DIGITOS[NUEVE_7S]);
fmanzano_dtk 1:c7bcbf5eac28 194 break;
fmanzano_dtk 1:c7bcbf5eac28 195 case 10:
fmanzano_dtk 1:c7bcbf5eac28 196 d7_m -> write(DIGITOS[APAGADO_7S]);
fmanzano_dtk 1:c7bcbf5eac28 197 break;
fmanzano_dtk 1:c7bcbf5eac28 198 }
fmanzano_dtk 1:c7bcbf5eac28 199
fmanzano_dtk 1:c7bcbf5eac28 200 return(0);
fmanzano_dtk 1:c7bcbf5eac28 201 }
fmanzano_dtk 1:c7bcbf5eac28 202
fmanzano_dtk 1:c7bcbf5eac28 203 int presentar_torre(const int *color, BusOut *torre_luz)
fmanzano_dtk 1:c7bcbf5eac28 204 {
fmanzano_dtk 1:c7bcbf5eac28 205 /*
fmanzano_dtk 1:c7bcbf5eac28 206 Esta función recibe el código de color correspondiente a la torre de luz
fmanzano_dtk 1:c7bcbf5eac28 207 estilo semaforo para activar el LED correspondiente.
fmanzano_dtk 1:c7bcbf5eac28 208 La función siempre retorna 0
fmanzano_dtk 1:c7bcbf5eac28 209 */
fmanzano_dtk 1:c7bcbf5eac28 210
fmanzano_dtk 1:c7bcbf5eac28 211 switch (*color) {
fmanzano_dtk 1:c7bcbf5eac28 212 case 0 :
fmanzano_dtk 1:c7bcbf5eac28 213 torre_luz -> write(COLOR_TORRE_LUZ[APAGADO_TL]);
fmanzano_dtk 1:c7bcbf5eac28 214 break;
fmanzano_dtk 1:c7bcbf5eac28 215 case 1 :
fmanzano_dtk 1:c7bcbf5eac28 216 torre_luz -> write(COLOR_TORRE_LUZ[VERDE]);
fmanzano_dtk 1:c7bcbf5eac28 217 break;
fmanzano_dtk 1:c7bcbf5eac28 218 case 2 :
fmanzano_dtk 1:c7bcbf5eac28 219 torre_luz -> write(COLOR_TORRE_LUZ[AMARILLO]);
fmanzano_dtk 1:c7bcbf5eac28 220 break;
fmanzano_dtk 1:c7bcbf5eac28 221 case 3 :
fmanzano_dtk 1:c7bcbf5eac28 222 torre_luz -> write(COLOR_TORRE_LUZ[ROJO]);
fmanzano_dtk 1:c7bcbf5eac28 223 break;
fmanzano_dtk 1:c7bcbf5eac28 224 }
fmanzano_dtk 1:c7bcbf5eac28 225
fmanzano_dtk 1:c7bcbf5eac28 226 return(0);
fmanzano_dtk 1:c7bcbf5eac28 227 }
fmanzano_dtk 1:c7bcbf5eac28 228
fmanzano_dtk 1:c7bcbf5eac28 229
fmanzano_dtk 1:c7bcbf5eac28 230
fmanzano_dtk 1:c7bcbf5eac28 231 /**
fmanzano_dtk 1:c7bcbf5eac28 232 * @brief
fmanzano_dtk 1:c7bcbf5eac28 233 * Esta función se encarga de buscar el grupo al que está asignado el TAGRFiD
fmanzano_dtk 1:c7bcbf5eac28 234 que ha sido leido por el lector. Se ha predefinido 3 arreglos con los TAG
fmanzano_dtk 1:c7bcbf5eac28 235 validos. En función del arreglo en que se genere la coincidencia se retorna
fmanzano_dtk 1:c7bcbf5eac28 236 el tiempo para cambiar.
fmanzano_dtk 1:c7bcbf5eac28 237 La función retorna 1 cuando encuentra coincidencia. 0 cuando no encuentra coincidencia y
fmanzano_dtk 1:c7bcbf5eac28 238 se define el tiempo de la torre de luz amarillo y rojo en 50 minutos y 1 hora.
fmanzano_dtk 1:c7bcbf5eac28 239 *
fmanzano_dtk 1:c7bcbf5eac28 240 * @param id
fmanzano_dtk 1:c7bcbf5eac28 241 * @param amarillo
fmanzano_dtk 1:c7bcbf5eac28 242 * @param rojo
fmanzano_dtk 1:c7bcbf5eac28 243 * @return int
fmanzano_dtk 1:c7bcbf5eac28 244 */
fmanzano_dtk 1:c7bcbf5eac28 245 int tiempo_asignado(char id[9], int *amarillo, int *rojo)
fmanzano_dtk 1:c7bcbf5eac28 246 {
fmanzano_dtk 1:c7bcbf5eac28 247 int i = 0;
fmanzano_dtk 1:c7bcbf5eac28 248 int v = 0;
fmanzano_dtk 1:c7bcbf5eac28 249 int busca_id = 0;
fmanzano_dtk 1:c7bcbf5eac28 250
fmanzano_dtk 1:c7bcbf5eac28 251 for (i=0; i<TOTAL_PLACAS_A; i++) {
fmanzano_dtk 1:c7bcbf5eac28 252 busca_id = strncmp(PLACAS_A[i], id, 10);
fmanzano_dtk 1:c7bcbf5eac28 253 if (busca_id == 0) {
fmanzano_dtk 1:c7bcbf5eac28 254 *amarillo = GRUPO_A_AMARILLO;
fmanzano_dtk 1:c7bcbf5eac28 255 *rojo = GRUPO_A_ROJO;
fmanzano_dtk 1:c7bcbf5eac28 256 v = 1; return(1);
fmanzano_dtk 1:c7bcbf5eac28 257 }
fmanzano_dtk 1:c7bcbf5eac28 258 }
fmanzano_dtk 1:c7bcbf5eac28 259
fmanzano_dtk 1:c7bcbf5eac28 260 for (i=0; i<TOTAL_PLACAS_B; i++) {
fmanzano_dtk 1:c7bcbf5eac28 261 busca_id = strncmp(PLACAS_B[i], id, 10);
fmanzano_dtk 1:c7bcbf5eac28 262 if (busca_id == 0) {
fmanzano_dtk 1:c7bcbf5eac28 263 *amarillo = GRUPO_B_AMARILLO;
fmanzano_dtk 1:c7bcbf5eac28 264 *rojo = GRUPO_B_ROJO;
fmanzano_dtk 1:c7bcbf5eac28 265 v = 1; return(1);
fmanzano_dtk 1:c7bcbf5eac28 266 }
fmanzano_dtk 1:c7bcbf5eac28 267 }
fmanzano_dtk 1:c7bcbf5eac28 268
fmanzano_dtk 1:c7bcbf5eac28 269 for (i=0; i<TOTAL_PLACAS_C; i++) {
fmanzano_dtk 1:c7bcbf5eac28 270 busca_id = strncmp(PLACAS_C[i], id, 10);
fmanzano_dtk 1:c7bcbf5eac28 271 if (busca_id == 0) {
fmanzano_dtk 1:c7bcbf5eac28 272 *amarillo = GRUPO_C_AMARILLO;
fmanzano_dtk 1:c7bcbf5eac28 273 *rojo = GRUPO_C_ROJO;
fmanzano_dtk 1:c7bcbf5eac28 274 v = 1; return(1);
fmanzano_dtk 1:c7bcbf5eac28 275 }
fmanzano_dtk 1:c7bcbf5eac28 276 }
fmanzano_dtk 1:c7bcbf5eac28 277
fmanzano_dtk 1:c7bcbf5eac28 278 if (v) {
fmanzano_dtk 1:c7bcbf5eac28 279 return(1);
fmanzano_dtk 1:c7bcbf5eac28 280 } else {
fmanzano_dtk 1:c7bcbf5eac28 281 *amarillo = GRUPO_DEFAULT_AMARILLO;
fmanzano_dtk 1:c7bcbf5eac28 282 *rojo = GRUPO_DEFAULT_ROJO;
fmanzano_dtk 1:c7bcbf5eac28 283 return(0);
fmanzano_dtk 1:c7bcbf5eac28 284 }
fmanzano_dtk 1:c7bcbf5eac28 285 }
fmanzano_dtk 1:c7bcbf5eac28 286
fmanzano_dtk 1:c7bcbf5eac28 287
fmanzano_dtk 1:c7bcbf5eac28 288
fmanzano_dtk 1:c7bcbf5eac28 289 /**
fmanzano_dtk 1:c7bcbf5eac28 290 * @brief
fmanzano_dtk 1:c7bcbf5eac28 291 *
fmanzano_dtk 1:c7bcbf5eac28 292 * Esta función se encarga de analisar el payload de una
fmanzano_dtk 1:c7bcbf5eac28 293 huella que es enviada dentro de una cadena (char array)
fmanzano_dtk 1:c7bcbf5eac28 294 expresada de manera hexadecimal. en su equivalente de código
fmanzano_dtk 1:c7bcbf5eac28 295 ASCII que es guardado en otra cadena.
fmanzano_dtk 1:c7bcbf5eac28 296
fmanzano_dtk 1:c7bcbf5eac28 297 * @param id_original
fmanzano_dtk 1:c7bcbf5eac28 298 * @param id_hex
fmanzano_dtk 1:c7bcbf5eac28 299 * @param tamano_id
fmanzano_dtk 1:c7bcbf5eac28 300 * @return int
fmanzano_dtk 1:c7bcbf5eac28 301 */
fmanzano_dtk 1:c7bcbf5eac28 302 int convertir_id(char id_original[256], char id_hex[15], int *tamano_id)
fmanzano_dtk 1:c7bcbf5eac28 303 {
fmanzano_dtk 1:c7bcbf5eac28 304 int i = 0;
fmanzano_dtk 1:c7bcbf5eac28 305 int j = 0;
fmanzano_dtk 1:c7bcbf5eac28 306 int limite = *tamano_id;
fmanzano_dtk 1:c7bcbf5eac28 307 int k = 0;
fmanzano_dtk 1:c7bcbf5eac28 308 char tmp_buffer_ascii[77];
fmanzano_dtk 1:c7bcbf5eac28 309
fmanzano_dtk 1:c7bcbf5eac28 310 memset(tmp_buffer_ascii, '\0', sizeof tmp_buffer_ascii);
fmanzano_dtk 1:c7bcbf5eac28 311 memset(id_hex, '\0', sizeof id_hex);
fmanzano_dtk 1:c7bcbf5eac28 312
fmanzano_dtk 1:c7bcbf5eac28 313 for (i=0; i<limite; i++) {
fmanzano_dtk 1:c7bcbf5eac28 314 snprintf(&tmp_buffer_ascii[j*2], 3,"%02X", id_original[i]);
fmanzano_dtk 1:c7bcbf5eac28 315 j++;
fmanzano_dtk 1:c7bcbf5eac28 316 }
fmanzano_dtk 1:c7bcbf5eac28 317
fmanzano_dtk 1:c7bcbf5eac28 318 limite = strlen(tmp_buffer_ascii);
fmanzano_dtk 1:c7bcbf5eac28 319 k = limite - 14;
fmanzano_dtk 1:c7bcbf5eac28 320
fmanzano_dtk 1:c7bcbf5eac28 321 strncpy(id_hex, &tmp_buffer_ascii[k], 14);
fmanzano_dtk 1:c7bcbf5eac28 322 id_hex[15] = '\0';
fmanzano_dtk 1:c7bcbf5eac28 323
fmanzano_dtk 1:c7bcbf5eac28 324 return(1);
fmanzano_dtk 1:c7bcbf5eac28 325 }
fmanzano_dtk 1:c7bcbf5eac28 326
fmanzano_dtk 1:c7bcbf5eac28 327
fmanzano_dtk 1:c7bcbf5eac28 328
fmanzano_dtk 1:c7bcbf5eac28 329 /**
fmanzano_dtk 1:c7bcbf5eac28 330 * @brief
fmanzano_dtk 1:c7bcbf5eac28 331 * Esta funsión se utiliza para limpiar el buffer de recepción del puerto seleccionado.
fmanzano_dtk 1:c7bcbf5eac28 332 No se guarda ninguna información. Siempre devuelve true
fmanzano_dtk 1:c7bcbf5eac28 333 *
fmanzano_dtk 1:c7bcbf5eac28 334 * @param uart
fmanzano_dtk 1:c7bcbf5eac28 335 * @return true
fmanzano_dtk 1:c7bcbf5eac28 336 * @return false
fmanzano_dtk 1:c7bcbf5eac28 337 */
fmanzano_dtk 1:c7bcbf5eac28 338 bool flush_uart_rx(BufferedSerial *uart)
fmanzano_dtk 1:c7bcbf5eac28 339 {
fmanzano_dtk 1:c7bcbf5eac28 340 while (uart -> readable()) {
fmanzano_dtk 1:c7bcbf5eac28 341 uart -> getc();
fmanzano_dtk 1:c7bcbf5eac28 342 }
fmanzano_dtk 1:c7bcbf5eac28 343 return(true);
fmanzano_dtk 1:c7bcbf5eac28 344 }
fmanzano_dtk 1:c7bcbf5eac28 345
fmanzano_dtk 1:c7bcbf5eac28 346
fmanzano_dtk 1:c7bcbf5eac28 347
fmanzano_dtk 1:c7bcbf5eac28 348
fmanzano_dtk 1:c7bcbf5eac28 349
fmanzano_dtk 1:c7bcbf5eac28 350
fmanzano_dtk 1:c7bcbf5eac28 351 /**
fmanzano_dtk 1:c7bcbf5eac28 352 * @brief
fmanzano_dtk 1:c7bcbf5eac28 353 *
fmanzano_dtk 1:c7bcbf5eac28 354 */
fmanzano_dtk 1:c7bcbf5eac28 355 extern Serial pcusb;
fmanzano_dtk 1:c7bcbf5eac28 356 extern BusOut torreLuz;
fmanzano_dtk 1:c7bcbf5eac28 357 extern BusOut display_H;
fmanzano_dtk 1:c7bcbf5eac28 358 extern BusOut display_dM;
fmanzano_dtk 1:c7bcbf5eac28 359 extern BusOut display_uM;
fmanzano_dtk 3:bf6747585064 360 extern Ticker ticker_minuto;
fmanzano_dtk 3:bf6747585064 361 extern Timer t_ocupado;
fmanzano_dtk 3:bf6747585064 362 extern Timer t_apagado;
fmanzano_dtk 1:c7bcbf5eac28 363 extern float tiempo_actual;
fmanzano_dtk 1:c7bcbf5eac28 364 extern bool mostrar_tiempo;
fmanzano_dtk 1:c7bcbf5eac28 365 extern char actual_trailerID_HEX[];
fmanzano_dtk 1:c7bcbf5eac28 366 extern char antena_trailerID_HEX[];
fmanzano_dtk 1:c7bcbf5eac28 367 extern int rtc_delta;
fmanzano_dtk 1:c7bcbf5eac28 368 extern int uminutos;
fmanzano_dtk 1:c7bcbf5eac28 369 extern int dminutos;
fmanzano_dtk 1:c7bcbf5eac28 370 extern int horas;
fmanzano_dtk 1:c7bcbf5eac28 371 extern int tiempo_luz_amarilla;
fmanzano_dtk 3:bf6747585064 372 extern int tiempo_luz_roja;
fmanzano_dtk 1:c7bcbf5eac28 373
fmanzano_dtk 4:e0b1d06c5cc5 374 void actualizar_minuto() {
fmanzano_dtk 1:c7bcbf5eac28 375 // ACTUALIZACIÓN DE PANTALLA DE CRONOMETRO
fmanzano_dtk 1:c7bcbf5eac28 376 uminutos++; // Acumular un minuto
fmanzano_dtk 1:c7bcbf5eac28 377 if (uminutos >= 10) { // Si es 10 cambiar 0
fmanzano_dtk 1:c7bcbf5eac28 378 uminutos = 0;
fmanzano_dtk 1:c7bcbf5eac28 379 dminutos++; // Acumularse las decenas de minutos
fmanzano_dtk 1:c7bcbf5eac28 380 }
fmanzano_dtk 1:c7bcbf5eac28 381 if (dminutos >= 6) { // Si es 6 cambiar 0
fmanzano_dtk 1:c7bcbf5eac28 382 dminutos = 0; // Acumular una hora
fmanzano_dtk 1:c7bcbf5eac28 383 horas++;
fmanzano_dtk 1:c7bcbf5eac28 384 }
fmanzano_dtk 1:c7bcbf5eac28 385
fmanzano_dtk 1:c7bcbf5eac28 386 if (mostrar_tiempo) {
fmanzano_dtk 1:c7bcbf5eac28 387 rtc_delta = (int)t_ocupado.read();
fmanzano_dtk 1:c7bcbf5eac28 388 pcusb.printf("\r\nTiempo total en Bahia: %d segundos", rtc_delta);
fmanzano_dtk 1:c7bcbf5eac28 389
fmanzano_dtk 1:c7bcbf5eac28 390 if ((rtc_delta >= tiempo_luz_amarilla) && (rtc_delta < tiempo_luz_roja)) { // Si estamos en el rango de 50 - 59 minutos
fmanzano_dtk 1:c7bcbf5eac28 391 pcusb.printf("\r\nSemaforo AMARILLO...");
fmanzano_dtk 1:c7bcbf5eac28 392 presentar_torre(&AMARILLO, &torreLuz); // Activar luz ambar
fmanzano_dtk 1:c7bcbf5eac28 393 } else if (rtc_delta >= tiempo_luz_roja) {
fmanzano_dtk 1:c7bcbf5eac28 394 pcusb.printf("\r\nSemaforo ROJO...");
fmanzano_dtk 1:c7bcbf5eac28 395 presentar_torre(&ROJO, &torreLuz); // Activar luz roja
fmanzano_dtk 1:c7bcbf5eac28 396 } else {
fmanzano_dtk 1:c7bcbf5eac28 397 presentar_torre(&VERDE, &torreLuz); // Activar luz ambar
fmanzano_dtk 1:c7bcbf5eac28 398 }
fmanzano_dtk 1:c7bcbf5eac28 399 presentar_tiempo(&horas, &dminutos, &uminutos, &display_H, &display_dM, &display_uM);// Actualizar la vista del cronometro
fmanzano_dtk 1:c7bcbf5eac28 400 pcusb.printf("\r\nTiempo actual [H:MM] = %d:%d%d\r\n\r\n", horas, dminutos, uminutos);
fmanzano_dtk 1:c7bcbf5eac28 401 } else {
fmanzano_dtk 1:c7bcbf5eac28 402 tiempo_actual = t_apagado.read();
fmanzano_dtk 1:c7bcbf5eac28 403 if (tiempo_actual >= (TIEMPO_RECARGA)) {
fmanzano_dtk 1:c7bcbf5eac28 404 pcusb.printf("\r\nSobrepasa limite de %d segundos con pantallas apagadas", TIEMPO_RECARGA);
fmanzano_dtk 1:c7bcbf5eac28 405 pcusb.printf("\r\nSe descarta TAG actual y reinicia contadores.\r\n");
fmanzano_dtk 1:c7bcbf5eac28 406 ticker_minuto.detach();
fmanzano_dtk 1:c7bcbf5eac28 407 t_apagado.stop();
fmanzano_dtk 1:c7bcbf5eac28 408 }
fmanzano_dtk 1:c7bcbf5eac28 409 }
fmanzano_dtk 1:c7bcbf5eac28 410
fmanzano_dtk 1:c7bcbf5eac28 411
fmanzano_dtk 1:c7bcbf5eac28 412 }
fmanzano_dtk 1:c7bcbf5eac28 413
fmanzano_dtk 1:c7bcbf5eac28 414
fmanzano_dtk 1:c7bcbf5eac28 415 /**
fmanzano_dtk 1:c7bcbf5eac28 416 * @brief
fmanzano_dtk 1:c7bcbf5eac28 417 *
fmanzano_dtk 1:c7bcbf5eac28 418 */
fmanzano_dtk 1:c7bcbf5eac28 419 extern Serial gv300;
fmanzano_dtk 1:c7bcbf5eac28 420 extern char skytrack_frame[];
fmanzano_dtk 1:c7bcbf5eac28 421 extern int contador_tramas;
fmanzano_dtk 1:c7bcbf5eac28 422 void tx_skytrack()
fmanzano_dtk 1:c7bcbf5eac28 423 {
fmanzano_dtk 1:c7bcbf5eac28 424 sprintf(skytrack_frame, "%s%s%s%s%04X%s",
fmanzano_dtk 1:c7bcbf5eac28 425 CABECERA_TX,CODIGO_INT,ALIVE, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 1:c7bcbf5eac28 426 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 3:bf6747585064 427
fmanzano_dtk 1:c7bcbf5eac28 428 incrementar_trama(&contador_tramas);
fmanzano_dtk 1:c7bcbf5eac28 429 pcusb.printf("\r\n%s", ALIVE);
fmanzano_dtk 1:c7bcbf5eac28 430 }