Proyecto ABInBev para la tarjeta Guaria 1/2.

Committer:
fmanzano_dtk
Date:
Mon Jul 04 23:23:01 2022 -0600
Revision:
7:01141979e5f2
Parent:
1:9e821e640117
Child:
8:a174cef25049
Se agregan las definiciones para soportar dos lectores de huellas

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 1:9e821e640117 1 /**
fmanzano_dtk 1:9e821e640117 2 * @file fingerprint_exe.cpp
fmanzano_dtk 1:9e821e640117 3 * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
fmanzano_dtk 1:9e821e640117 4 * @brief
fmanzano_dtk 1:9e821e640117 5 * @version 0.1
fmanzano_dtk 1:9e821e640117 6 * @date 2020-10-03
fmanzano_dtk 1:9e821e640117 7 *
fmanzano_dtk 1:9e821e640117 8 * @copyright Copyright (c) 2020
fmanzano_dtk 1:9e821e640117 9 *
fmanzano_dtk 1:9e821e640117 10 */
fmanzano_dtk 1:9e821e640117 11
fmanzano_dtk 1:9e821e640117 12 #include "mbed.h"
fmanzano_dtk 1:9e821e640117 13 #include "BufferedSerial.h"
fmanzano_dtk 1:9e821e640117 14 //#include "GT521FX.hpp"
fmanzano_dtk 1:9e821e640117 15 #include "New_GT521Fx.hpp"
fmanzano_dtk 1:9e821e640117 16 #include "jq8400_voice.hpp"
fmanzano_dtk 1:9e821e640117 17 #include "voice_cn_pa.hpp"
fmanzano_dtk 1:9e821e640117 18 #include "teltonika_fmu130.hpp"
fmanzano_dtk 1:9e821e640117 19 #include "jq8400_voice.hpp"
fmanzano_dtk 1:9e821e640117 20 #include "playlist.hpp"
fmanzano_dtk 1:9e821e640117 21 #include "safety_tip_exe.hpp"
fmanzano_dtk 1:9e821e640117 22 #include "USBSerial.h"
fmanzano_dtk 1:9e821e640117 23
fmanzano_dtk 1:9e821e640117 24
fmanzano_dtk 1:9e821e640117 25 // Objetos Entradas Digitales / Seriales
fmanzano_dtk 1:9e821e640117 26 /**
fmanzano_dtk 1:9e821e640117 27 * @brief
fmanzano_dtk 1:9e821e640117 28 *
fmanzano_dtk 1:9e821e640117 29 */
fmanzano_dtk 1:9e821e640117 30 extern BufferedSerial avl_uart;
fmanzano_dtk 1:9e821e640117 31 extern BufferedSerial voice_uart;
fmanzano_dtk 1:9e821e640117 32 extern DigitalOut out1_fingerprint;
fmanzano_dtk 1:9e821e640117 33 extern DigitalOut out3_gt521fx;
fmanzano_dtk 1:9e821e640117 34 extern DigitalOut out4_gt521fx;
fmanzano_dtk 1:9e821e640117 35 extern BufferedSerial fingerprint;
fmanzano_dtk 1:9e821e640117 36 extern USBSerial myPC_debug;
fmanzano_dtk 1:9e821e640117 37 extern Ticker tick_fingerprint;
fmanzano_dtk 1:9e821e640117 38 extern Ticker tick_safety_tip;
fmanzano_dtk 1:9e821e640117 39 extern queue colaPlaylist;
fmanzano_dtk 1:9e821e640117 40
fmanzano_dtk 1:9e821e640117 41
fmanzano_dtk 1:9e821e640117 42 // Variables Externas
fmanzano_dtk 1:9e821e640117 43 /**
fmanzano_dtk 1:9e821e640117 44 * @brief
fmanzano_dtk 1:9e821e640117 45 *
fmanzano_dtk 1:9e821e640117 46 */
fmanzano_dtk 1:9e821e640117 47 extern float time_safety_tip;
fmanzano_dtk 1:9e821e640117 48 extern bool flag_fingerprint_Sleep;
fmanzano_dtk 1:9e821e640117 49 extern bool flag_driver_loggin;
fmanzano_dtk 1:9e821e640117 50 extern bool functionality_safety_tip;
fmanzano_dtk 1:9e821e640117 51 extern bool flag_fingerprint_query;
fmanzano_dtk 1:9e821e640117 52 extern bool ble_connection_state;
fmanzano_dtk 1:9e821e640117 53 extern bool fingerprint_override;
fmanzano_dtk 1:9e821e640117 54 extern bool ignition;
fmanzano_dtk 1:9e821e640117 55 extern bool finterprint_flag_working;
fmanzano_dtk 1:9e821e640117 56 extern bool fingerprint_flag_poweroff;
fmanzano_dtk 1:9e821e640117 57 extern int fingerprint_login;
fmanzano_dtk 1:9e821e640117 58 extern int flag_fingerprint_turOn;
fmanzano_dtk 1:9e821e640117 59 extern int fp_override_limit;
fmanzano_dtk 1:9e821e640117 60 extern int fp_unauthorized_count;
fmanzano_dtk 1:9e821e640117 61 extern int items_queue;
fmanzano_dtk 1:9e821e640117 62
fmanzano_dtk 1:9e821e640117 63
fmanzano_dtk 1:9e821e640117 64 // Variables locales
fmanzano_dtk 1:9e821e640117 65 /**
fmanzano_dtk 1:9e821e640117 66 * @brief
fmanzano_dtk 1:9e821e640117 67 *
fmanzano_dtk 1:9e821e640117 68 */
fmanzano_dtk 1:9e821e640117 69 int fp_answer = 0;
fmanzano_dtk 1:9e821e640117 70 int w;
fmanzano_dtk 1:9e821e640117 71 char id_buffer[64];
fmanzano_dtk 1:9e821e640117 72 const char TCA_ID_FP_LOGIN[] = "TCA|004|DTK_FP;";
fmanzano_dtk 1:9e821e640117 73 const char TCA_ID_UNIDENTIFIED[] = "TCA|110|";
fmanzano_dtk 1:9e821e640117 74 const char TCA_ID_LECTOR_HUE[] = "TCA|111|";
fmanzano_dtk 1:9e821e640117 75 const char TCA_FP_INIT[] = "TCA|154|";
fmanzano_dtk 1:9e821e640117 76 const char TCA_ID_OVERRIDE_ID[] = "TCA|149|0";
fmanzano_dtk 1:9e821e640117 77 const char FP_ENGINE_LOCK[] = "setdigout 0?? ? ? ? ? ? ?";
fmanzano_dtk 1:9e821e640117 78 const char FP_ENGINE_UNLOCK[] = "setdigout 1?? ? ? ? ? ? ?";
fmanzano_dtk 1:9e821e640117 79
fmanzano_dtk 7:01141979e5f2 80 #define DEBUG_F_CPP 1
fmanzano_dtk 7:01141979e5f2 81 #define FP_READER_GT521 1
fmanzano_dtk 1:9e821e640117 82 /**
fmanzano_dtk 1:9e821e640117 83 * @brief
fmanzano_dtk 1:9e821e640117 84 *
fmanzano_dtk 1:9e821e640117 85 */
fmanzano_dtk 1:9e821e640117 86 void identify_fingerPrint() {
fmanzano_dtk 1:9e821e640117 87 flag_fingerprint_query = false;
fmanzano_dtk 1:9e821e640117 88 memset(id_buffer, '\0', sizeof(id_buffer));
fmanzano_dtk 1:9e821e640117 89
fmanzano_dtk 1:9e821e640117 90 if (out3_gt521fx) {
fmanzano_dtk 1:9e821e640117 91 /* DESHABILITADA LA FUNCIÓN DE SLEEP EN EL LECTOR
fmanzano_dtk 1:9e821e640117 92 if (flag_fingerprint_Sleep) {
fmanzano_dtk 1:9e821e640117 93 fingerprint.WakeUp();
fmanzano_dtk 1:9e821e640117 94 flag_fingerprint_Sleep = false;
fmanzano_dtk 1:9e821e640117 95 //myPC_debug.printf("FP - GT521Fx@WakeUp\r\n");
fmanzano_dtk 1:9e821e640117 96 jq8400_addQueue(VOICE_functionality_fingerprint_reader);
fmanzano_dtk 1:9e821e640117 97 }
fmanzano_dtk 1:9e821e640117 98 */
fmanzano_dtk 1:9e821e640117 99 if (!(flag_driver_loggin) && ignition) {
fmanzano_dtk 1:9e821e640117 100 //Verificar con ignicion
fmanzano_dtk 1:9e821e640117 101 //fingerprint.CmosLed(1);
fmanzano_dtk 1:9e821e640117 102 FP_LED_open();
fmanzano_dtk 1:9e821e640117 103 wait_us(50000);
fmanzano_dtk 1:9e821e640117 104
fmanzano_dtk 1:9e821e640117 105 //fp_answer = fingerprint.IsPress();
fmanzano_dtk 1:9e821e640117 106 fp_answer = FP_IsPressFinger();
fmanzano_dtk 1:9e821e640117 107
fmanzano_dtk 1:9e821e640117 108 if (fp_answer == 0) {
fmanzano_dtk 1:9e821e640117 109 //fingerprint.Capture(1);
fmanzano_dtk 1:9e821e640117 110 FP_CaptureFinger(1);
fmanzano_dtk 1:9e821e640117 111
fmanzano_dtk 1:9e821e640117 112 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 113 myPC_debug.printf("FP - Capturando...\r\n");
fmanzano_dtk 1:9e821e640117 114 #endif
fmanzano_dtk 1:9e821e640117 115 //fingerprint_login = fingerprint.Identify();
fmanzano_dtk 1:9e821e640117 116 fingerprint_login = FP_Identify();
fmanzano_dtk 1:9e821e640117 117
fmanzano_dtk 1:9e821e640117 118 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 119 myPC_debug.printf("FP - ID: %d\r\n", fingerprint_login);
fmanzano_dtk 1:9e821e640117 120 #endif
fmanzano_dtk 1:9e821e640117 121 FP_LED_close();
fmanzano_dtk 1:9e821e640117 122
fmanzano_dtk 1:9e821e640117 123 if (fingerprint_login >= 0) {
fmanzano_dtk 1:9e821e640117 124 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 125 myPC_debug.printf("FP - Autorizado...\r\n");
fmanzano_dtk 1:9e821e640117 126 #endif
fmanzano_dtk 1:9e821e640117 127 tick_fingerprint.detach();
fmanzano_dtk 1:9e821e640117 128 jq8400_addQueue(VOICE_DRIVER_AUTHORIZED);
fmanzano_dtk 1:9e821e640117 129 jq8400_addQueue(VOICE_WELLCOME);
fmanzano_dtk 1:9e821e640117 130
fmanzano_dtk 1:9e821e640117 131 // Limpiar cola
fmanzano_dtk 1:9e821e640117 132 if (ble_connection_state) {
fmanzano_dtk 1:9e821e640117 133 // No hacer nada
fmanzano_dtk 1:9e821e640117 134 } else {
fmanzano_dtk 1:9e821e640117 135 // jq8400_addQueue(VOICE_FP_AUTH_NO_BLUETOOTH); // Solicitar asistencia remota
fmanzano_dtk 1:9e821e640117 136 }
fmanzano_dtk 1:9e821e640117 137
fmanzano_dtk 1:9e821e640117 138 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 139 myPC_debug.printf("%s\r\n", FP_ENGINE_UNLOCK);
fmanzano_dtk 1:9e821e640117 140 #endif
fmanzano_dtk 1:9e821e640117 141 tx_fmu130_command(FP_ENGINE_UNLOCK, &avl_uart);
fmanzano_dtk 1:9e821e640117 142 out1_fingerprint = 1;
fmanzano_dtk 1:9e821e640117 143 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 144 out1_fingerprint = 0;
fmanzano_dtk 1:9e821e640117 145 fp_unauthorized_count = 0;
fmanzano_dtk 1:9e821e640117 146 flag_fingerprint_turOn = false;
fmanzano_dtk 1:9e821e640117 147 flag_driver_loggin = true;
fmanzano_dtk 1:9e821e640117 148 FP_LED_close();
fmanzano_dtk 1:9e821e640117 149 FP_Close();
fmanzano_dtk 1:9e821e640117 150 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 151 fingerprint_flag_poweroff = true;
fmanzano_dtk 1:9e821e640117 152
fmanzano_dtk 1:9e821e640117 153 if (functionality_safety_tip) {
fmanzano_dtk 1:9e821e640117 154 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 155 myPC_debug.printf("FP - Ticker de Tip de Seguridad Iniciado\r\n");
fmanzano_dtk 1:9e821e640117 156 #endif
fmanzano_dtk 1:9e821e640117 157 tick_safety_tip.attach(&play_SafetyTip, time_safety_tip);
fmanzano_dtk 1:9e821e640117 158 }
fmanzano_dtk 1:9e821e640117 159
fmanzano_dtk 1:9e821e640117 160 /* DESHABILITADA LA FUNCIÓN DE SLEEP EN EL LECTOR
fmanzano_dtk 1:9e821e640117 161 fingerprint.Sleep();
fmanzano_dtk 1:9e821e640117 162 flag_fingerprint_Sleep = true;
fmanzano_dtk 1:9e821e640117 163 */
fmanzano_dtk 1:9e821e640117 164
fmanzano_dtk 1:9e821e640117 165 sprintf(id_buffer, "%s%04d", TCA_ID_FP_LOGIN, fingerprint_login);
fmanzano_dtk 1:9e821e640117 166 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 167 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 168 myPC_debug.printf("GPIO - GT521Fx@Sleep %d\r\n", flag_fingerprint_Sleep);
fmanzano_dtk 1:9e821e640117 169 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 170 #endif
fmanzano_dtk 1:9e821e640117 171
fmanzano_dtk 1:9e821e640117 172 wait_us(100000);
fmanzano_dtk 1:9e821e640117 173 sprintf(id_buffer, "%s3", TCA_ID_LECTOR_HUE);
fmanzano_dtk 1:9e821e640117 174 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 175 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 176 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 177 #endif
fmanzano_dtk 1:9e821e640117 178 } else {
fmanzano_dtk 1:9e821e640117 179 jq8400_addQueue(VOICE_DRIVER_UNAUTHORIZED);
fmanzano_dtk 1:9e821e640117 180 //avl_uart.printf("%s\r\n", FP_ENGINE_LOCK);
fmanzano_dtk 1:9e821e640117 181 sprintf(id_buffer, "%s%d", TCA_ID_UNIDENTIFIED, fingerprint_login);
fmanzano_dtk 1:9e821e640117 182 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 183 myPC_debug.printf("FP - No Autorizado...\r\n");
fmanzano_dtk 1:9e821e640117 184 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 185 #endif
fmanzano_dtk 1:9e821e640117 186 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 187 //fingerprint.CmosLed(0);
fmanzano_dtk 1:9e821e640117 188 FP_LED_close();
fmanzano_dtk 1:9e821e640117 189
fmanzano_dtk 1:9e821e640117 190 if (fingerprint_override) {
fmanzano_dtk 1:9e821e640117 191 fp_unauthorized_count++;
fmanzano_dtk 1:9e821e640117 192 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 193 myPC_debug.printf("FP - %d de %d para Anular Identificacion de Huella\r\n", fp_unauthorized_count, fp_override_limit);
fmanzano_dtk 1:9e821e640117 194 #endif
fmanzano_dtk 1:9e821e640117 195 if (fp_unauthorized_count >= fp_override_limit)
fmanzano_dtk 1:9e821e640117 196 {
fmanzano_dtk 1:9e821e640117 197 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 198 myPC_debug.printf("FP - Anulando identificacion de Conductor...\r\n");
fmanzano_dtk 1:9e821e640117 199 #endif
fmanzano_dtk 1:9e821e640117 200 /////////////////////////////
fmanzano_dtk 1:9e821e640117 201 // Limpiar cola de mensajes de voz
fmanzano_dtk 1:9e821e640117 202
fmanzano_dtk 1:9e821e640117 203 //
fmanzano_dtk 1:9e821e640117 204 if (ble_connection_state) {
fmanzano_dtk 1:9e821e640117 205 jq8400_addQueue(VOICE_DRIVER_AUTHORIZED);
fmanzano_dtk 1:9e821e640117 206 } else {
fmanzano_dtk 1:9e821e640117 207 // jq8400_addQueue(VOICE_FP_AUTH_NO_BLUETOOTH); // Solicitar asistencia remota
fmanzano_dtk 1:9e821e640117 208 }
fmanzano_dtk 1:9e821e640117 209 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 210 myPC_debug.printf("%s\r\n", FP_ENGINE_UNLOCK);
fmanzano_dtk 1:9e821e640117 211 #endif
fmanzano_dtk 1:9e821e640117 212 tx_fmu130_command(FP_ENGINE_UNLOCK, &avl_uart);
fmanzano_dtk 1:9e821e640117 213 out1_fingerprint = 1;
fmanzano_dtk 1:9e821e640117 214 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 215 out1_fingerprint = 0;
fmanzano_dtk 1:9e821e640117 216 fp_unauthorized_count = 0;
fmanzano_dtk 1:9e821e640117 217 flag_fingerprint_turOn = false;
fmanzano_dtk 1:9e821e640117 218 flag_driver_loggin = true;
fmanzano_dtk 1:9e821e640117 219 tick_fingerprint.detach();
fmanzano_dtk 1:9e821e640117 220 FP_LED_close();
fmanzano_dtk 1:9e821e640117 221 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 222 fingerprint_flag_poweroff = true;
fmanzano_dtk 1:9e821e640117 223
fmanzano_dtk 1:9e821e640117 224 if (functionality_safety_tip) {
fmanzano_dtk 1:9e821e640117 225 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 226 myPC_debug.printf("FP - Ticker de Tip de Seguridad Iniciado\r\n");
fmanzano_dtk 1:9e821e640117 227 #endif
fmanzano_dtk 1:9e821e640117 228 tick_safety_tip.attach(&play_SafetyTip, time_safety_tip);
fmanzano_dtk 1:9e821e640117 229 }
fmanzano_dtk 1:9e821e640117 230 sprintf(id_buffer, "%s", TCA_ID_OVERRIDE_ID);
fmanzano_dtk 1:9e821e640117 231 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 232 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 233 #endif
fmanzano_dtk 1:9e821e640117 234 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 235 }
fmanzano_dtk 1:9e821e640117 236 }
fmanzano_dtk 1:9e821e640117 237 }
fmanzano_dtk 1:9e821e640117 238 } else {
fmanzano_dtk 1:9e821e640117 239 //fingerprint.CmosLed(0);
fmanzano_dtk 1:9e821e640117 240 FP_LED_close();
fmanzano_dtk 1:9e821e640117 241
fmanzano_dtk 1:9e821e640117 242 // Limpiar cola de mensajes de voz
fmanzano_dtk 1:9e821e640117 243 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 244 myPC_debug.printf("FP - No Presionado\r\n");
fmanzano_dtk 1:9e821e640117 245 #endif
fmanzano_dtk 1:9e821e640117 246 }
fmanzano_dtk 1:9e821e640117 247 }
fmanzano_dtk 1:9e821e640117 248 }
fmanzano_dtk 1:9e821e640117 249 }
fmanzano_dtk 1:9e821e640117 250
fmanzano_dtk 1:9e821e640117 251 /**
fmanzano_dtk 1:9e821e640117 252 * @brief
fmanzano_dtk 1:9e821e640117 253 *
fmanzano_dtk 1:9e821e640117 254 */
fmanzano_dtk 1:9e821e640117 255 void initFingerprintReader() {
fmanzano_dtk 1:9e821e640117 256 // Variable Interna
fmanzano_dtk 1:9e821e640117 257 int answer_GT521Fx = -1;
fmanzano_dtk 1:9e821e640117 258 wait_us(100000); // Tiempo de espera para inicializar el sensor
fmanzano_dtk 1:9e821e640117 259 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 260 myPC_debug.printf("\r\nInicializando GT521Fx");
fmanzano_dtk 1:9e821e640117 261 #endif
fmanzano_dtk 1:9e821e640117 262
fmanzano_dtk 1:9e821e640117 263 answer_GT521Fx = FP_Open();
fmanzano_dtk 1:9e821e640117 264 sprintf(id_buffer, "%s%d", TCA_FP_INIT, answer_GT521Fx);
fmanzano_dtk 1:9e821e640117 265 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 266 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 267 myPC_debug.printf("\r\nGT521Fx Open: OK\r\n");
fmanzano_dtk 1:9e821e640117 268 #endif
fmanzano_dtk 1:9e821e640117 269 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 270 FP_Close();
fmanzano_dtk 1:9e821e640117 271 }