Proyecto ABInBev para la tarjeta Guaria 1/2.

Committer:
fmanzano_dtk
Date:
Thu Jul 07 08:56:13 2022 -0600
Revision:
18:522f706f03b1
Parent:
13:472d40c0fc6b
Actualizacion

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 13:472d40c0fc6b 81 #define FP_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 13:472d40c0fc6b 102 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 103 FP_LED_open();
fmanzano_dtk 8:a174cef25049 104 #else
fmanzano_dtk 8:a174cef25049 105 #endif
fmanzano_dtk 1:9e821e640117 106 wait_us(50000);
fmanzano_dtk 1:9e821e640117 107
fmanzano_dtk 13:472d40c0fc6b 108 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 109 fp_answer = FP_IsPressFinger();
fmanzano_dtk 8:a174cef25049 110 #else
fmanzano_dtk 8:a174cef25049 111 #endif
fmanzano_dtk 1:9e821e640117 112
fmanzano_dtk 1:9e821e640117 113 if (fp_answer == 0) {
fmanzano_dtk 13:472d40c0fc6b 114 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 115 FP_CaptureFinger(1);
fmanzano_dtk 8:a174cef25049 116 #else
fmanzano_dtk 8:a174cef25049 117 #endif
fmanzano_dtk 1:9e821e640117 118
fmanzano_dtk 1:9e821e640117 119 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 120 myPC_debug.printf("FP - Capturando...\r\n");
fmanzano_dtk 1:9e821e640117 121 #endif
fmanzano_dtk 8:a174cef25049 122
fmanzano_dtk 13:472d40c0fc6b 123 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 124 fingerprint_login = FP_Identify();
fmanzano_dtk 8:a174cef25049 125 FP_LED_close();
fmanzano_dtk 8:a174cef25049 126 #else
fmanzano_dtk 8:a174cef25049 127 #endif
fmanzano_dtk 1:9e821e640117 128
fmanzano_dtk 1:9e821e640117 129 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 130 myPC_debug.printf("FP - ID: %d\r\n", fingerprint_login);
fmanzano_dtk 1:9e821e640117 131 #endif
fmanzano_dtk 8:a174cef25049 132
fmanzano_dtk 1:9e821e640117 133 if (fingerprint_login >= 0) {
fmanzano_dtk 1:9e821e640117 134 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 135 myPC_debug.printf("FP - Autorizado...\r\n");
fmanzano_dtk 1:9e821e640117 136 #endif
fmanzano_dtk 1:9e821e640117 137 tick_fingerprint.detach();
fmanzano_dtk 1:9e821e640117 138 jq8400_addQueue(VOICE_DRIVER_AUTHORIZED);
fmanzano_dtk 1:9e821e640117 139 jq8400_addQueue(VOICE_WELLCOME);
fmanzano_dtk 1:9e821e640117 140
fmanzano_dtk 1:9e821e640117 141 // Limpiar cola
fmanzano_dtk 1:9e821e640117 142 if (ble_connection_state) {
fmanzano_dtk 1:9e821e640117 143 // No hacer nada
fmanzano_dtk 1:9e821e640117 144 } else {
fmanzano_dtk 1:9e821e640117 145 // jq8400_addQueue(VOICE_FP_AUTH_NO_BLUETOOTH); // Solicitar asistencia remota
fmanzano_dtk 1:9e821e640117 146 }
fmanzano_dtk 1:9e821e640117 147
fmanzano_dtk 1:9e821e640117 148 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 149 myPC_debug.printf("%s\r\n", FP_ENGINE_UNLOCK);
fmanzano_dtk 1:9e821e640117 150 #endif
fmanzano_dtk 1:9e821e640117 151 tx_fmu130_command(FP_ENGINE_UNLOCK, &avl_uart);
fmanzano_dtk 1:9e821e640117 152 out1_fingerprint = 1;
fmanzano_dtk 1:9e821e640117 153 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 154 out1_fingerprint = 0;
fmanzano_dtk 1:9e821e640117 155 fp_unauthorized_count = 0;
fmanzano_dtk 1:9e821e640117 156 flag_fingerprint_turOn = false;
fmanzano_dtk 1:9e821e640117 157 flag_driver_loggin = true;
fmanzano_dtk 13:472d40c0fc6b 158 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 159 FP_LED_close();
fmanzano_dtk 8:a174cef25049 160 FP_Close();
fmanzano_dtk 8:a174cef25049 161 #else
fmanzano_dtk 8:a174cef25049 162 #endif
fmanzano_dtk 1:9e821e640117 163 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 164 fingerprint_flag_poweroff = true;
fmanzano_dtk 1:9e821e640117 165
fmanzano_dtk 1:9e821e640117 166 if (functionality_safety_tip) {
fmanzano_dtk 1:9e821e640117 167 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 168 myPC_debug.printf("FP - Ticker de Tip de Seguridad Iniciado\r\n");
fmanzano_dtk 1:9e821e640117 169 #endif
fmanzano_dtk 1:9e821e640117 170 tick_safety_tip.attach(&play_SafetyTip, time_safety_tip);
fmanzano_dtk 1:9e821e640117 171 }
fmanzano_dtk 1:9e821e640117 172
fmanzano_dtk 1:9e821e640117 173 /* DESHABILITADA LA FUNCIÓN DE SLEEP EN EL LECTOR
fmanzano_dtk 1:9e821e640117 174 fingerprint.Sleep();
fmanzano_dtk 1:9e821e640117 175 flag_fingerprint_Sleep = true;
fmanzano_dtk 1:9e821e640117 176 */
fmanzano_dtk 1:9e821e640117 177
fmanzano_dtk 1:9e821e640117 178 sprintf(id_buffer, "%s%04d", TCA_ID_FP_LOGIN, fingerprint_login);
fmanzano_dtk 1:9e821e640117 179 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 180 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 181 myPC_debug.printf("GPIO - GT521Fx@Sleep %d\r\n", flag_fingerprint_Sleep);
fmanzano_dtk 1:9e821e640117 182 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 183 #endif
fmanzano_dtk 1:9e821e640117 184
fmanzano_dtk 1:9e821e640117 185 wait_us(100000);
fmanzano_dtk 1:9e821e640117 186 sprintf(id_buffer, "%s3", TCA_ID_LECTOR_HUE);
fmanzano_dtk 1:9e821e640117 187 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 188 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 189 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 190 #endif
fmanzano_dtk 1:9e821e640117 191 } else {
fmanzano_dtk 1:9e821e640117 192 jq8400_addQueue(VOICE_DRIVER_UNAUTHORIZED);
fmanzano_dtk 1:9e821e640117 193 sprintf(id_buffer, "%s%d", TCA_ID_UNIDENTIFIED, fingerprint_login);
fmanzano_dtk 1:9e821e640117 194 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 195 myPC_debug.printf("FP - No Autorizado...\r\n");
fmanzano_dtk 1:9e821e640117 196 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 197 #endif
fmanzano_dtk 1:9e821e640117 198 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 8:a174cef25049 199
fmanzano_dtk 13:472d40c0fc6b 200 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 201 FP_LED_close();
fmanzano_dtk 8:a174cef25049 202 #else
fmanzano_dtk 8:a174cef25049 203 #endif
fmanzano_dtk 1:9e821e640117 204
fmanzano_dtk 1:9e821e640117 205 if (fingerprint_override) {
fmanzano_dtk 1:9e821e640117 206 fp_unauthorized_count++;
fmanzano_dtk 1:9e821e640117 207 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 208 myPC_debug.printf("FP - %d de %d para Anular Identificacion de Huella\r\n", fp_unauthorized_count, fp_override_limit);
fmanzano_dtk 1:9e821e640117 209 #endif
fmanzano_dtk 1:9e821e640117 210 if (fp_unauthorized_count >= fp_override_limit)
fmanzano_dtk 1:9e821e640117 211 {
fmanzano_dtk 1:9e821e640117 212 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 213 myPC_debug.printf("FP - Anulando identificacion de Conductor...\r\n");
fmanzano_dtk 1:9e821e640117 214 #endif
fmanzano_dtk 1:9e821e640117 215 /////////////////////////////
fmanzano_dtk 1:9e821e640117 216 // Limpiar cola de mensajes de voz
fmanzano_dtk 1:9e821e640117 217
fmanzano_dtk 1:9e821e640117 218 //
fmanzano_dtk 1:9e821e640117 219 if (ble_connection_state) {
fmanzano_dtk 1:9e821e640117 220 jq8400_addQueue(VOICE_DRIVER_AUTHORIZED);
fmanzano_dtk 1:9e821e640117 221 } else {
fmanzano_dtk 1:9e821e640117 222 // jq8400_addQueue(VOICE_FP_AUTH_NO_BLUETOOTH); // Solicitar asistencia remota
fmanzano_dtk 1:9e821e640117 223 }
fmanzano_dtk 1:9e821e640117 224 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 225 myPC_debug.printf("%s\r\n", FP_ENGINE_UNLOCK);
fmanzano_dtk 1:9e821e640117 226 #endif
fmanzano_dtk 1:9e821e640117 227 tx_fmu130_command(FP_ENGINE_UNLOCK, &avl_uart);
fmanzano_dtk 1:9e821e640117 228 out1_fingerprint = 1;
fmanzano_dtk 1:9e821e640117 229 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 230 out1_fingerprint = 0;
fmanzano_dtk 1:9e821e640117 231 fp_unauthorized_count = 0;
fmanzano_dtk 1:9e821e640117 232 flag_fingerprint_turOn = false;
fmanzano_dtk 1:9e821e640117 233 flag_driver_loggin = true;
fmanzano_dtk 1:9e821e640117 234 tick_fingerprint.detach();
fmanzano_dtk 13:472d40c0fc6b 235 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 236 FP_LED_close();
fmanzano_dtk 8:a174cef25049 237 #else
fmanzano_dtk 8:a174cef25049 238 #endif
fmanzano_dtk 1:9e821e640117 239 wait_us(1000000);
fmanzano_dtk 1:9e821e640117 240 fingerprint_flag_poweroff = true;
fmanzano_dtk 1:9e821e640117 241
fmanzano_dtk 1:9e821e640117 242 if (functionality_safety_tip) {
fmanzano_dtk 1:9e821e640117 243 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 244 myPC_debug.printf("FP - Ticker de Tip de Seguridad Iniciado\r\n");
fmanzano_dtk 1:9e821e640117 245 #endif
fmanzano_dtk 1:9e821e640117 246 tick_safety_tip.attach(&play_SafetyTip, time_safety_tip);
fmanzano_dtk 1:9e821e640117 247 }
fmanzano_dtk 1:9e821e640117 248 sprintf(id_buffer, "%s", TCA_ID_OVERRIDE_ID);
fmanzano_dtk 1:9e821e640117 249 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 250 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 251 #endif
fmanzano_dtk 1:9e821e640117 252 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 1:9e821e640117 253 }
fmanzano_dtk 1:9e821e640117 254 }
fmanzano_dtk 1:9e821e640117 255 }
fmanzano_dtk 1:9e821e640117 256 } else {
fmanzano_dtk 13:472d40c0fc6b 257 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 258 FP_LED_close();
fmanzano_dtk 8:a174cef25049 259 #else
fmanzano_dtk 8:a174cef25049 260 #endif
fmanzano_dtk 1:9e821e640117 261
fmanzano_dtk 1:9e821e640117 262 // Limpiar cola de mensajes de voz
fmanzano_dtk 1:9e821e640117 263 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 264 myPC_debug.printf("FP - No Presionado\r\n");
fmanzano_dtk 1:9e821e640117 265 #endif
fmanzano_dtk 1:9e821e640117 266 }
fmanzano_dtk 1:9e821e640117 267 }
fmanzano_dtk 1:9e821e640117 268 }
fmanzano_dtk 1:9e821e640117 269 }
fmanzano_dtk 1:9e821e640117 270
fmanzano_dtk 1:9e821e640117 271 /**
fmanzano_dtk 1:9e821e640117 272 * @brief
fmanzano_dtk 1:9e821e640117 273 *
fmanzano_dtk 1:9e821e640117 274 */
fmanzano_dtk 1:9e821e640117 275 void initFingerprintReader() {
fmanzano_dtk 1:9e821e640117 276 // Variable Interna
fmanzano_dtk 1:9e821e640117 277 int answer_GT521Fx = -1;
fmanzano_dtk 1:9e821e640117 278 wait_us(100000); // Tiempo de espera para inicializar el sensor
fmanzano_dtk 1:9e821e640117 279 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 280 myPC_debug.printf("\r\nInicializando GT521Fx");
fmanzano_dtk 1:9e821e640117 281 #endif
fmanzano_dtk 1:9e821e640117 282
fmanzano_dtk 13:472d40c0fc6b 283 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 284 answer_GT521Fx = FP_Open();
fmanzano_dtk 8:a174cef25049 285 #else
fmanzano_dtk 8:a174cef25049 286 #endif
fmanzano_dtk 1:9e821e640117 287 sprintf(id_buffer, "%s%d", TCA_FP_INIT, answer_GT521Fx);
fmanzano_dtk 1:9e821e640117 288 #ifdef DEBUG_F_CPP
fmanzano_dtk 1:9e821e640117 289 myPC_debug.printf("%s\r\n", id_buffer);
fmanzano_dtk 1:9e821e640117 290 myPC_debug.printf("\r\nGT521Fx Open: OK\r\n");
fmanzano_dtk 1:9e821e640117 291 #endif
fmanzano_dtk 1:9e821e640117 292 tx_fmu130_message(id_buffer, &avl_uart);
fmanzano_dtk 13:472d40c0fc6b 293 #if FP_FP_READER_GT521 == 1
fmanzano_dtk 8:a174cef25049 294 FP_Close();
fmanzano_dtk 8:a174cef25049 295 #else
fmanzano_dtk 8:a174cef25049 296 #endif
fmanzano_dtk 1:9e821e640117 297 }