Felícito Manzano / Mbed OS CCN_Control_Bahia_TFMiniPlus

Dependencies:   BufferedSerial

Committer:
fmanzano_dtk
Date:
Mon May 24 01:42:28 2021 -0600
Revision:
1:c7bcbf5eac28
Child:
3:bf6747585064
Actualizacion general de codigo. Version no compilable.

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