Proyecto ABInBev para la tarjeta Guaria 1/2.

Committer:
fmanzano_dtk
Date:
Thu Jul 07 16:17:25 2022 +0000
Revision:
19:5580a9a54ad5
Parent:
16:772ea817ec43
Sincronizacion;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 2:1ef167d1b7b8 1 /**
fmanzano_dtk 2:1ef167d1b7b8 2 * @file main.cpp
fmanzano_dtk 2:1ef167d1b7b8 3 * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
fmanzano_dtk 2:1ef167d1b7b8 4 * @brief
fmanzano_dtk 2:1ef167d1b7b8 5 * Proyecto para ABInBev Cervecería Nacional de Panamá, incluye el soporte
fmanzano_dtk 2:1ef167d1b7b8 6 * para para 5 entradas digitales, conexión vía Bluetooth SPP con equipo
fmanzano_dtk 2:1ef167d1b7b8 7 * Teltonika FMU130 para el envío y recepción de mensajes al servidor
fmanzano_dtk 2:1ef167d1b7b8 8 * del ecosistema Detektor, también incluye un puerto serial TTL para
fmanzano_dtk 2:1ef167d1b7b8 9 * controlar el módulo de voz JQ8400, puerto serial para el lector de
fmanzano_dtk 2:1ef167d1b7b8 10 * huellas GT521Fx y puerto serial RS232 con el sensor de lluvia RG9.
fmanzano_dtk 2:1ef167d1b7b8 11 * @version 0.1
fmanzano_dtk 2:1ef167d1b7b8 12 * @date 2020-09-26
fmanzano_dtk 2:1ef167d1b7b8 13 *
fmanzano_dtk 2:1ef167d1b7b8 14 * @copyright Copyright (c) 2020
fmanzano_dtk 2:1ef167d1b7b8 15 *
fmanzano_dtk 0:2d7ac38345d8 16 */
fmanzano_dtk 0:2d7ac38345d8 17
fmanzano_dtk 0:2d7ac38345d8 18 #include "mbed.h"
fmanzano_dtk 16:772ea817ec43 19 //#include "platform/mbed_thread.h"
fmanzano_dtk 2:1ef167d1b7b8 20 #include "stm32f4xx_hal_iwdg.h"
fmanzano_dtk 2:1ef167d1b7b8 21 #include "BufferedSerial.h"
fmanzano_dtk 2:1ef167d1b7b8 22 #include "ics5_pinout.hpp"
fmanzano_dtk 2:1ef167d1b7b8 23 #include "jq8400_voice.hpp"
fmanzano_dtk 2:1ef167d1b7b8 24 #include "voice_cn_pa.hpp"
fmanzano_dtk 2:1ef167d1b7b8 25 #include "New_GT521Fx.hpp"
fmanzano_dtk 2:1ef167d1b7b8 26 #include "gpio_exe.hpp"
fmanzano_dtk 2:1ef167d1b7b8 27 #include "fmu130_exe.hpp"
fmanzano_dtk 2:1ef167d1b7b8 28 #include "fingerprint_exe.hpp"
fmanzano_dtk 2:1ef167d1b7b8 29 #include "playlist_exe.hpp"
fmanzano_dtk 2:1ef167d1b7b8 30 #include "playlist.hpp"
fmanzano_dtk 2:1ef167d1b7b8 31 #include "teltonika_fmu130.hpp"
fmanzano_dtk 2:1ef167d1b7b8 32 #include "fireup_exe.hpp"
fmanzano_dtk 2:1ef167d1b7b8 33 #include "safety_tip_exe.hpp"
fmanzano_dtk 2:1ef167d1b7b8 34 #include "eeprom.h"
fmanzano_dtk 12:5881f350b4da 35 #include "flash_eeprom.h"
fmanzano_dtk 5:07720e3f99d2 36 #include "eeprom_exe.hpp"
fmanzano_dtk 12:5881f350b4da 37 #include "flash_ee_exe.hpp"
fmanzano_dtk 2:1ef167d1b7b8 38 #include "USBSerial.h"
fmanzano_dtk 5:07720e3f99d2 39 #include "custom_def.hpp"
fmanzano_dtk 9:46112570c850 40 #include "flash_eeprom.h"
fmanzano_dtk 2:1ef167d1b7b8 41 #include <ctype.h>
fmanzano_dtk 2:1ef167d1b7b8 42
fmanzano_dtk 12:5881f350b4da 43 // Las funciones de FLASH son arreglos
fmanzano_dtk 12:5881f350b4da 44 uint16_t VirtAddVarTab[NB_OF_VAR] = {ADDR_FINGERPRINT,
fmanzano_dtk 12:5881f350b4da 45 ADDR_OVERRIDE_FP,
fmanzano_dtk 12:5881f350b4da 46 ADDR_OVERRIDE_QT,
fmanzano_dtk 12:5881f350b4da 47 ADDR_IDLE_SHUTDOWN,
fmanzano_dtk 12:5881f350b4da 48 ADDR_IDLE_REMINDER,
fmanzano_dtk 12:5881f350b4da 49 ADDR_IDLE_S_TIME,
fmanzano_dtk 12:5881f350b4da 50 ADDR_IDLE_R_TIME,
fmanzano_dtk 12:5881f350b4da 51 ADDR_SEATBELT_READ,
fmanzano_dtk 12:5881f350b4da 52 ADDR_ENFORCE_SB,
fmanzano_dtk 12:5881f350b4da 53 ADDR_PILOT_BTYPE,
fmanzano_dtk 12:5881f350b4da 54 ADDR_COPILOT_BTYPE,
fmanzano_dtk 12:5881f350b4da 55 ADDR_CREW_BTYPE,
fmanzano_dtk 12:5881f350b4da 56 ADDR_RAINSENSOR,
fmanzano_dtk 12:5881f350b4da 57 ADDR_RS_SILENTMODE,
fmanzano_dtk 12:5881f350b4da 58 ADDR_RS_SAMPLE_T,
fmanzano_dtk 12:5881f350b4da 59 ADDR_WET_LIMIT,
fmanzano_dtk 12:5881f350b4da 60 ADDR_WET_WARNING,
fmanzano_dtk 12:5881f350b4da 61 ADDR_DRY_LIMIT,
fmanzano_dtk 12:5881f350b4da 62 ADDR_DRY_WARNING,
fmanzano_dtk 12:5881f350b4da 63 ADDR_SAFETY_TIP,
fmanzano_dtk 12:5881f350b4da 64 ADDR_SAFETY_TIP_T,
fmanzano_dtk 12:5881f350b4da 65 ADDR_GEOZONE,
fmanzano_dtk 12:5881f350b4da 66 ADDR_VOLUME,
fmanzano_dtk 12:5881f350b4da 67 ADDR_BLE_RESET,
fmanzano_dtk 12:5881f350b4da 68 ADDR_BLE_RESET_T};
fmanzano_dtk 12:5881f350b4da 69 uint16_t VarDataTab[NB_OF_VAR] = {0};
fmanzano_dtk 12:5881f350b4da 70
fmanzano_dtk 2:1ef167d1b7b8 71 /**
fmanzano_dtk 2:1ef167d1b7b8 72 * INTERFACES:
fmanzano_dtk 2:1ef167d1b7b8 73 * Se utiliza la librería ICS5_Pinout para hacer el cambio de pines
fmanzano_dtk 2:1ef167d1b7b8 74 * en base a la tarjeta para la que se compilará. Se tiene soporte para
fmanzano_dtk 2:1ef167d1b7b8 75 * las tarjetas NUCLEO F303K8, NUCLEO F091RC, ICS3 e ICS5.
fmanzano_dtk 2:1ef167d1b7b8 76 */
fmanzano_dtk 11:7de8a2c6f0b1 77 #define M_DEBUG 1
fmanzano_dtk 7:01141979e5f2 78 #define FP_READER_GT521 1
fmanzano_dtk 6:f4907ba89e16 79 extern const bool external_eeprom;
fmanzano_dtk 2:1ef167d1b7b8 80
fmanzano_dtk 2:1ef167d1b7b8 81 #if (ICS_BOARD_ID == 11)
fmanzano_dtk 2:1ef167d1b7b8 82 // Serial
fmanzano_dtk 2:1ef167d1b7b8 83 BufferedSerial avl_uart(BLE_TX, BLE_RX, 1024, 2); //! UART TTL para enlace con el equipo Teltonika FMU130.
fmanzano_dtk 2:1ef167d1b7b8 84 BufferedSerial voice_uart(TTL_VOICE_TX, TTL_VOICE_RX); //! UART TTL para comunicación con el módulo de voz JQ8400.
fmanzano_dtk 6:f4907ba89e16 85
fmanzano_dtk 7:01141979e5f2 86 #if FP_READER_GT521 == 1
fmanzano_dtk 6:f4907ba89e16 87 BufferedSerial fingerprint(TTL_TX, TTL_RX);
fmanzano_dtk 6:f4907ba89e16 88 #else
fmanzano_dtk 6:f4907ba89e16 89
fmanzano_dtk 6:f4907ba89e16 90 #endif
fmanzano_dtk 3:6e55713bc91d 91 #ifdef M_DEBUG
fmanzano_dtk 2:1ef167d1b7b8 92 USBSerial myPC_debug;
fmanzano_dtk 2:1ef167d1b7b8 93 #endif
fmanzano_dtk 2:1ef167d1b7b8 94
fmanzano_dtk 2:1ef167d1b7b8 95 // PCB Support
fmanzano_dtk 2:1ef167d1b7b8 96 InterruptIn mybutton(USER_BUTTON);
fmanzano_dtk 2:1ef167d1b7b8 97 DigitalIn bluetooth_state(BT_STATE);
fmanzano_dtk 2:1ef167d1b7b8 98 DigitalOut myled(USER_LED1);
fmanzano_dtk 2:1ef167d1b7b8 99 DigitalOut flashLED(USER_LED2);
fmanzano_dtk 2:1ef167d1b7b8 100 DigitalOut out2_ble_reset(BT_RESET);
fmanzano_dtk 2:1ef167d1b7b8 101
fmanzano_dtk 2:1ef167d1b7b8 102 // Outputs
fmanzano_dtk 2:1ef167d1b7b8 103 DigitalOut out1_fingerprint(OUTPUT1_NEGATIVE);
fmanzano_dtk 2:1ef167d1b7b8 104 DigitalOut out3_gt521fx(OUTPUT2_NEGATIVE);
fmanzano_dtk 2:1ef167d1b7b8 105 DigitalOut out4_gt521fx(OUTPUT3_NEGATIVE);
fmanzano_dtk 2:1ef167d1b7b8 106
fmanzano_dtk 2:1ef167d1b7b8 107 // Inputs
fmanzano_dtk 2:1ef167d1b7b8 108 DigitalIn in1_ignition(INPUT1_POSITIVE);
fmanzano_dtk 2:1ef167d1b7b8 109 DigitalIn in2_pilot(INPUT2_NEGATIVE);
fmanzano_dtk 2:1ef167d1b7b8 110 DigitalIn in3_copilot(INPUT3_NEGATIVE);
fmanzano_dtk 2:1ef167d1b7b8 111 DigitalIn in4_crew(INPUT4_NEGATIVE);
fmanzano_dtk 2:1ef167d1b7b8 112 DigitalIn in5_rain_sensor(INPUT5_NEGATIVE);
fmanzano_dtk 2:1ef167d1b7b8 113 #endif
fmanzano_dtk 2:1ef167d1b7b8 114
fmanzano_dtk 2:1ef167d1b7b8 115 // EEPROM
fmanzano_dtk 2:1ef167d1b7b8 116 EEPROM ep(I2C_SDA_EE, I2C_SCL_EE, 0x0, EEPROM::T24C32);
fmanzano_dtk 2:1ef167d1b7b8 117 int32_t eeprom_size,max_size;
fmanzano_dtk 2:1ef167d1b7b8 118 #define EEPROM_ADDR 0x0
fmanzano_dtk 2:1ef167d1b7b8 119 #define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
fmanzano_dtk 2:1ef167d1b7b8 120 #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
fmanzano_dtk 2:1ef167d1b7b8 121 typedef struct _MyData {
fmanzano_dtk 2:1ef167d1b7b8 122 int16_t sdata;
fmanzano_dtk 2:1ef167d1b7b8 123 int32_t idata;
fmanzano_dtk 2:1ef167d1b7b8 124 float fdata;
fmanzano_dtk 2:1ef167d1b7b8 125 } MyData;
fmanzano_dtk 2:1ef167d1b7b8 126 static void myerror(std::string msg) {
fmanzano_dtk 2:1ef167d1b7b8 127 printf("Error %s\n",msg.c_str());
fmanzano_dtk 2:1ef167d1b7b8 128 exit(1);
fmanzano_dtk 2:1ef167d1b7b8 129 }
fmanzano_dtk 2:1ef167d1b7b8 130
fmanzano_dtk 5:07720e3f99d2 131 // FLASH
fmanzano_dtk 12:5881f350b4da 132 /* Start @ of user Flash area */
fmanzano_dtk 12:5881f350b4da 133 #define FLASH_USER_START_ADDR ADDR_FLASH_SECTOR_2
fmanzano_dtk 12:5881f350b4da 134 /* End @ of user Flash area : sector start address + sector size -1 */
fmanzano_dtk 12:5881f350b4da 135 #define FLASH_USER_END_ADDR ADDR_FLASH_SECTOR_7 + GetSectorSize(ADDR_FLASH_SECTOR_7) -1
fmanzano_dtk 5:07720e3f99d2 136 #define DATA_32 ((uint32_t)0x12345678)
fmanzano_dtk 2:1ef167d1b7b8 137
fmanzano_dtk 2:1ef167d1b7b8 138 // VOICE
fmanzano_dtk 6:f4907ba89e16 139 queue colaPlaylist(10);
fmanzano_dtk 2:1ef167d1b7b8 140
fmanzano_dtk 2:1ef167d1b7b8 141 // HAL BASED
fmanzano_dtk 6:f4907ba89e16 142 static IWDG_HandleTypeDef my_iwdg;
fmanzano_dtk 0:2d7ac38345d8 143
fmanzano_dtk 0:2d7ac38345d8 144
fmanzano_dtk 2:1ef167d1b7b8 145 // FUNCIONALIDADES
fmanzano_dtk 2:1ef167d1b7b8 146 // Nuevas banderas para habilitar/deshabilitar funciones.
fmanzano_dtk 2:1ef167d1b7b8 147 bool functionality_idle_shutdown;
fmanzano_dtk 2:1ef167d1b7b8 148 bool functionality_idle_reminder;
fmanzano_dtk 2:1ef167d1b7b8 149 bool functionality_seatbelt_reading;
fmanzano_dtk 2:1ef167d1b7b8 150 bool functionality_force_driver_buclke;
fmanzano_dtk 2:1ef167d1b7b8 151 bool functionality_rain_sensor;
fmanzano_dtk 2:1ef167d1b7b8 152 bool functionality_rainSensor_silentMode;
fmanzano_dtk 2:1ef167d1b7b8 153 bool functionality_fingerprint_reader;
fmanzano_dtk 2:1ef167d1b7b8 154 bool functionality_safety_tip;
fmanzano_dtk 2:1ef167d1b7b8 155 bool functionality_geo_warning;
fmanzano_dtk 2:1ef167d1b7b8 156 bool functionality_ble_autoreset;
fmanzano_dtk 2:1ef167d1b7b8 157 bool fingerprint_remotly_disable;
fmanzano_dtk 2:1ef167d1b7b8 158 bool fingerprint_override;
fmanzano_dtk 2:1ef167d1b7b8 159 bool finterprint_flag_working = false;
fmanzano_dtk 2:1ef167d1b7b8 160 bool fingerprint_flag_poweroff = false;
fmanzano_dtk 2:1ef167d1b7b8 161
fmanzano_dtk 2:1ef167d1b7b8 162 /**
fmanzano_dtk 2:1ef167d1b7b8 163 * BANDERAS:
fmanzano_dtk 2:1ef167d1b7b8 164 * Se utiliza un esquema de banderas para indicar el cambio de un estado
fmanzano_dtk 2:1ef167d1b7b8 165 * y que se debe realizar un procesamiento especial (transmitir un
fmanzano_dtk 2:1ef167d1b7b8 166 * evento, activar un accesorio, etc.)
fmanzano_dtk 2:1ef167d1b7b8 167 */
fmanzano_dtk 2:1ef167d1b7b8 168
fmanzano_dtk 2:1ef167d1b7b8 169 float time_safety_tip; // 15 minutos = 900
fmanzano_dtk 2:1ef167d1b7b8 170 float time_sample_rain; // muestras a 9 equivalen a 90 segundos o minuto y medio.
fmanzano_dtk 2:1ef167d1b7b8 171 float time_ble_autoreset;
fmanzano_dtk 2:1ef167d1b7b8 172 bool flag_rain_no_answer = false;
fmanzano_dtk 2:1ef167d1b7b8 173 bool flag_idle_force_shutdown = false;
fmanzano_dtk 2:1ef167d1b7b8 174 bool flag_idle_reminder = false;
fmanzano_dtk 2:1ef167d1b7b8 175 bool flag_fingerprint_Sleep = false;
fmanzano_dtk 2:1ef167d1b7b8 176 bool flag_driver_loggin = false;
fmanzano_dtk 2:1ef167d1b7b8 177 bool flag_playingSound = false;
fmanzano_dtk 2:1ef167d1b7b8 178 bool flag_safety_tip = false;
fmanzano_dtk 2:1ef167d1b7b8 179 bool rain_sensor_type = false; // True = RS232, False = DIN
fmanzano_dtk 2:1ef167d1b7b8 180 bool flag_query_rain_sensor;
fmanzano_dtk 2:1ef167d1b7b8 181 bool flag_notify_rain_sensor;
fmanzano_dtk 2:1ef167d1b7b8 182 bool flag_read_inputs;
fmanzano_dtk 2:1ef167d1b7b8 183 bool flag_fingerprint_turOn;
fmanzano_dtk 2:1ef167d1b7b8 184 bool flag_fri_ics;
fmanzano_dtk 2:1ef167d1b7b8 185 int flag_fingerprint_query;
fmanzano_dtk 2:1ef167d1b7b8 186 int flag_ignition;
fmanzano_dtk 2:1ef167d1b7b8 187 int flag_pilot_seatbelt;
fmanzano_dtk 2:1ef167d1b7b8 188 int flag_copilot_seatbelt;
fmanzano_dtk 2:1ef167d1b7b8 189 int flag_crew_pilot_seatbelt;
fmanzano_dtk 2:1ef167d1b7b8 190 int flag_ble_connection_state;
fmanzano_dtk 2:1ef167d1b7b8 191 int flag_rainsensorDigInput;
fmanzano_dtk 2:1ef167d1b7b8 192
fmanzano_dtk 2:1ef167d1b7b8 193 /**
fmanzano_dtk 2:1ef167d1b7b8 194 * ENTRADAS:
fmanzano_dtk 2:1ef167d1b7b8 195 * Para la lectura de entradas digitales se utiliza un estructura de 4
fmanzano_dtk 2:1ef167d1b7b8 196 * variables que incluyen el estado actual de la entrada, el estado previo
fmanzano_dtk 2:1ef167d1b7b8 197 * de la entrada, un arreglo de cuatro posiciones para tomar muestras y
fmanzano_dtk 2:1ef167d1b7b8 198 * realizar la función de debug y un contador para indicar la posición en
fmanzano_dtk 2:1ef167d1b7b8 199 * el arreglo para capturar la muestra de la entrada.
fmanzano_dtk 2:1ef167d1b7b8 200 */
fmanzano_dtk 2:1ef167d1b7b8 201 bool ignition;
fmanzano_dtk 2:1ef167d1b7b8 202 bool estado_actual_ignicion;
fmanzano_dtk 2:1ef167d1b7b8 203 bool ignition_prev;
fmanzano_dtk 2:1ef167d1b7b8 204 bool ignition_samples[4];
fmanzano_dtk 2:1ef167d1b7b8 205 int ignition_counter;
fmanzano_dtk 2:1ef167d1b7b8 206
fmanzano_dtk 2:1ef167d1b7b8 207 bool pilot_seatbelt;
fmanzano_dtk 2:1ef167d1b7b8 208 bool pilot_seatbelt_prev;
fmanzano_dtk 2:1ef167d1b7b8 209 bool pilot_seatbelt_samples[4];
fmanzano_dtk 2:1ef167d1b7b8 210 int pilot_seatbelt_c;
fmanzano_dtk 2:1ef167d1b7b8 211
fmanzano_dtk 2:1ef167d1b7b8 212 bool copilot_seatbelt;
fmanzano_dtk 2:1ef167d1b7b8 213 bool copilot_seatbelt_prev;
fmanzano_dtk 2:1ef167d1b7b8 214 bool copilot_seatbelt_samples[4];
fmanzano_dtk 2:1ef167d1b7b8 215 int copilot_seatbelt_c;
fmanzano_dtk 2:1ef167d1b7b8 216
fmanzano_dtk 2:1ef167d1b7b8 217 bool crew_seatbelt;
fmanzano_dtk 2:1ef167d1b7b8 218 bool crew_seatbelt_prev;
fmanzano_dtk 2:1ef167d1b7b8 219 bool crew_seatbelt_samples[4];
fmanzano_dtk 2:1ef167d1b7b8 220 int crew_seatbelt_c;
fmanzano_dtk 2:1ef167d1b7b8 221
fmanzano_dtk 2:1ef167d1b7b8 222 bool ble_connection_state;
fmanzano_dtk 2:1ef167d1b7b8 223 bool ble_connection_state_prev;
fmanzano_dtk 2:1ef167d1b7b8 224 bool ble_connection_state_samples[4];
fmanzano_dtk 2:1ef167d1b7b8 225 int ble_connection_state_samples_c;
fmanzano_dtk 2:1ef167d1b7b8 226
fmanzano_dtk 2:1ef167d1b7b8 227 bool rg9_raining;
fmanzano_dtk 2:1ef167d1b7b8 228 bool rg9_raining_prev;
fmanzano_dtk 2:1ef167d1b7b8 229 bool rg9_raining_samples[10];
fmanzano_dtk 2:1ef167d1b7b8 230 int rg9_raining_samples_c;
fmanzano_dtk 2:1ef167d1b7b8 231
fmanzano_dtk 2:1ef167d1b7b8 232
fmanzano_dtk 2:1ef167d1b7b8 233 /**
fmanzano_dtk 2:1ef167d1b7b8 234 * FMU130:
fmanzano_dtk 2:1ef167d1b7b8 235 * Se definen las variables para recepción de datos del equipo FMU130 vía
fmanzano_dtk 2:1ef167d1b7b8 236 * enlace Bluetooth SPP
fmanzano_dtk 2:1ef167d1b7b8 237 */
fmanzano_dtk 2:1ef167d1b7b8 238 char fmu130_payload[1024];
fmanzano_dtk 2:1ef167d1b7b8 239 int fmu130_payload_type;
fmanzano_dtk 2:1ef167d1b7b8 240 int incoming_bytes;
fmanzano_dtk 2:1ef167d1b7b8 241 int temp_JQ8400_Volume;
fmanzano_dtk 2:1ef167d1b7b8 242
fmanzano_dtk 2:1ef167d1b7b8 243 /**
fmanzano_dtk 2:1ef167d1b7b8 244 * HUELLAS:
fmanzano_dtk 2:1ef167d1b7b8 245 * Se definen las variables para el procesamiento del módulo lector de
fmanzano_dtk 2:1ef167d1b7b8 246 * huellas conectado a un UART-TTL
fmanzano_dtk 2:1ef167d1b7b8 247 */
fmanzano_dtk 2:1ef167d1b7b8 248 int bluetooth_cmd_id;
fmanzano_dtk 2:1ef167d1b7b8 249 int fingerprint_id;
fmanzano_dtk 2:1ef167d1b7b8 250 int fingerprint_login;
fmanzano_dtk 2:1ef167d1b7b8 251 char fingerprint_hex[997];
fmanzano_dtk 2:1ef167d1b7b8 252 char fingerprint_asc[499];
fmanzano_dtk 2:1ef167d1b7b8 253 char fingerprint_cmd[4];
fmanzano_dtk 0:2d7ac38345d8 254
fmanzano_dtk 2:1ef167d1b7b8 255 /**
fmanzano_dtk 2:1ef167d1b7b8 256 * EVENTOS_TELTONIKA:
fmanzano_dtk 2:1ef167d1b7b8 257 * Se definen las variables para el procesamiento de Tramas del equipo
fmanzano_dtk 2:1ef167d1b7b8 258 * Teltonika FMU130 con eventos como los hábitos de manejo.
fmanzano_dtk 2:1ef167d1b7b8 259 */
fmanzano_dtk 2:1ef167d1b7b8 260 char avl_fmu130_header[2];
fmanzano_dtk 2:1ef167d1b7b8 261 char avl_fmu130_imei[16];
fmanzano_dtk 2:1ef167d1b7b8 262 int avl_fmu130_id;
fmanzano_dtk 2:1ef167d1b7b8 263 int avl_fmu130_status;
fmanzano_dtk 2:1ef167d1b7b8 264
fmanzano_dtk 2:1ef167d1b7b8 265 // Inicialización de variables de Velocidad
fmanzano_dtk 2:1ef167d1b7b8 266 int wet_Speed_Warning;
fmanzano_dtk 2:1ef167d1b7b8 267 int wet_Speed_Limit;
fmanzano_dtk 2:1ef167d1b7b8 268 int dry_Speed_Warning;
fmanzano_dtk 2:1ef167d1b7b8 269 int dry_Speed_Limit;
fmanzano_dtk 2:1ef167d1b7b8 270 char wet_Speed_CMD[30];
fmanzano_dtk 2:1ef167d1b7b8 271 char dry_Speed_CMD[30];
fmanzano_dtk 2:1ef167d1b7b8 272
fmanzano_dtk 2:1ef167d1b7b8 273 // Fingerprint Override
fmanzano_dtk 2:1ef167d1b7b8 274 int fp_override_limit; // Limite de lecturas fallidas antes de autorizar
fmanzano_dtk 2:1ef167d1b7b8 275 int fp_unauthorized_count = 0;
fmanzano_dtk 2:1ef167d1b7b8 276 int items_queue = 0;
fmanzano_dtk 2:1ef167d1b7b8 277
fmanzano_dtk 2:1ef167d1b7b8 278 // Inicialización de Entradas Digitales para Cinturón de Seguridad
fmanzano_dtk 2:1ef167d1b7b8 279 // Detalle de entradas por cada cinturon
fmanzano_dtk 2:1ef167d1b7b8 280 bool pilot_buckle_type;
fmanzano_dtk 2:1ef167d1b7b8 281 int pilot_buckleUp;
fmanzano_dtk 2:1ef167d1b7b8 282 int pilot_unfasten;
fmanzano_dtk 2:1ef167d1b7b8 283 bool copilot_buckle_type;
fmanzano_dtk 2:1ef167d1b7b8 284 int copilot_buckleUp;
fmanzano_dtk 2:1ef167d1b7b8 285 int copilot_unfasten;
fmanzano_dtk 2:1ef167d1b7b8 286 bool crew_buckle_type;
fmanzano_dtk 2:1ef167d1b7b8 287 int crew_buckleUp;
fmanzano_dtk 2:1ef167d1b7b8 288 int crew_unfasten;
fmanzano_dtk 2:1ef167d1b7b8 289
fmanzano_dtk 2:1ef167d1b7b8 290 /**
fmanzano_dtk 2:1ef167d1b7b8 291 * TICKER DE mbed:
fmanzano_dtk 2:1ef167d1b7b8 292 * Definición de eventos gestionados por eventos temporizados.
fmanzano_dtk 2:1ef167d1b7b8 293 */
fmanzano_dtk 2:1ef167d1b7b8 294 Ticker tick_blink;
fmanzano_dtk 2:1ef167d1b7b8 295 Ticker tick_rain_sensor; // para comunicación vía UART
fmanzano_dtk 2:1ef167d1b7b8 296 Ticker tick_readInputs;
fmanzano_dtk 2:1ef167d1b7b8 297 Ticker tick_fingerprint;
fmanzano_dtk 2:1ef167d1b7b8 298 Ticker tick_idle_shutdown;
fmanzano_dtk 2:1ef167d1b7b8 299 Ticker tick_idle_reminder;
fmanzano_dtk 2:1ef167d1b7b8 300 Ticker tick_safety_tip;
fmanzano_dtk 2:1ef167d1b7b8 301 Ticker tick_playingAudio;
fmanzano_dtk 2:1ef167d1b7b8 302 Ticker tick_fri_ics;
fmanzano_dtk 2:1ef167d1b7b8 303 Ticker tick_autoreset_ble;
fmanzano_dtk 2:1ef167d1b7b8 304
fmanzano_dtk 2:1ef167d1b7b8 305 /**
fmanzano_dtk 2:1ef167d1b7b8 306 * @brief Función para hacer titilar el LED de usuario.
fmanzano_dtk 2:1ef167d1b7b8 307 *
fmanzano_dtk 2:1ef167d1b7b8 308 */
fmanzano_dtk 2:1ef167d1b7b8 309 void blink_led() {
fmanzano_dtk 2:1ef167d1b7b8 310 myled = !myled;
fmanzano_dtk 2:1ef167d1b7b8 311 }
fmanzano_dtk 2:1ef167d1b7b8 312
fmanzano_dtk 2:1ef167d1b7b8 313 /**
fmanzano_dtk 2:1ef167d1b7b8 314 * @brief Activación de la bandera para leer entradas digitales.
fmanzano_dtk 2:1ef167d1b7b8 315 *
fmanzano_dtk 2:1ef167d1b7b8 316 */
fmanzano_dtk 2:1ef167d1b7b8 317 void readInputs() {
fmanzano_dtk 2:1ef167d1b7b8 318 flag_read_inputs = true;
fmanzano_dtk 2:1ef167d1b7b8 319 }
fmanzano_dtk 2:1ef167d1b7b8 320
fmanzano_dtk 2:1ef167d1b7b8 321 // Función al presionar boton
fmanzano_dtk 2:1ef167d1b7b8 322 void pressed() {
fmanzano_dtk 9:46112570c850 323 if (external_eeprom) {
fmanzano_dtk 9:46112570c850 324 eeprom_Default();
fmanzano_dtk 9:46112570c850 325 } else {
fmanzano_dtk 9:46112570c850 326 flash_Default();
fmanzano_dtk 9:46112570c850 327 }
fmanzano_dtk 2:1ef167d1b7b8 328 wait_ms(100);
fmanzano_dtk 2:1ef167d1b7b8 329 NVIC_SystemReset();
fmanzano_dtk 2:1ef167d1b7b8 330 }
fmanzano_dtk 0:2d7ac38345d8 331
fmanzano_dtk 2:1ef167d1b7b8 332 int main() {
fmanzano_dtk 2:1ef167d1b7b8 333
fmanzano_dtk 2:1ef167d1b7b8 334 /**
fmanzano_dtk 2:1ef167d1b7b8 335 * @brief INICIAR INTERFACES
fmanzano_dtk 2:1ef167d1b7b8 336 * Se define el baudrate para las interfaces USART, y el modo para
fmanzano_dtk 2:1ef167d1b7b8 337 * las entradas digitales. También se envía a tierra el pin para la
fmanzano_dtk 2:1ef167d1b7b8 338 * interface Bluetooth.
fmanzano_dtk 2:1ef167d1b7b8 339 */
fmanzano_dtk 2:1ef167d1b7b8 340 avl_uart.baud(115200);
fmanzano_dtk 7:01141979e5f2 341 #if FP_READER_GT521 == 1
fmanzano_dtk 6:f4907ba89e16 342 fingerprint.baud(9600);
fmanzano_dtk 6:f4907ba89e16 343 #else
fmanzano_dtk 6:f4907ba89e16 344
fmanzano_dtk 6:f4907ba89e16 345 #endif
fmanzano_dtk 2:1ef167d1b7b8 346 voice_uart.baud(9600);
fmanzano_dtk 2:1ef167d1b7b8 347 in1_ignition.mode(PullDown);
fmanzano_dtk 2:1ef167d1b7b8 348 in2_pilot.mode(PullDown);
fmanzano_dtk 2:1ef167d1b7b8 349 in3_copilot.mode(PullDown);
fmanzano_dtk 2:1ef167d1b7b8 350 in4_crew.mode(PullDown);
fmanzano_dtk 2:1ef167d1b7b8 351 in5_rain_sensor.mode(PullDown);
fmanzano_dtk 2:1ef167d1b7b8 352 wait_us(1000000);
fmanzano_dtk 2:1ef167d1b7b8 353 out1_fingerprint = 0;
fmanzano_dtk 2:1ef167d1b7b8 354 out2_ble_reset = 0;
fmanzano_dtk 2:1ef167d1b7b8 355 out3_gt521fx = 0;
fmanzano_dtk 2:1ef167d1b7b8 356 out4_gt521fx = 0;
fmanzano_dtk 2:1ef167d1b7b8 357 mybutton.fall(&pressed);
fmanzano_dtk 2:1ef167d1b7b8 358
fmanzano_dtk 6:f4907ba89e16 359 //Load Flash
fmanzano_dtk 2:1ef167d1b7b8 360 boot_message();
fmanzano_dtk 6:f4907ba89e16 361 if (external_eeprom) {
fmanzano_dtk 6:f4907ba89e16 362 eeprom_size = ep.getSize();
fmanzano_dtk 6:f4907ba89e16 363 load_eepromVar();
fmanzano_dtk 6:f4907ba89e16 364 } else {
fmanzano_dtk 6:f4907ba89e16 365 readFlash_Booting();
fmanzano_dtk 6:f4907ba89e16 366 }
fmanzano_dtk 2:1ef167d1b7b8 367
fmanzano_dtk 2:1ef167d1b7b8 368 // Configuración Inicial de Nivel de volumen.
fmanzano_dtk 2:1ef167d1b7b8 369 jq8400_iniVol(temp_JQ8400_Volume, &voice_uart);
fmanzano_dtk 2:1ef167d1b7b8 370
fmanzano_dtk 2:1ef167d1b7b8 371 // Iniciar comandos variables de cambio de velocidad
fmanzano_dtk 2:1ef167d1b7b8 372 sprintf(dry_Speed_CMD, "setparam 11104:%d;50092:%d", dry_Speed_Warning, dry_Speed_Limit);
fmanzano_dtk 2:1ef167d1b7b8 373 sprintf(wet_Speed_CMD, "setparam 11104:%d;50092:%d", wet_Speed_Warning, wet_Speed_Limit);
fmanzano_dtk 2:1ef167d1b7b8 374
fmanzano_dtk 2:1ef167d1b7b8 375 /**
fmanzano_dtk 2:1ef167d1b7b8 376 * @brief Se asignan las funciones para los eventos temporizados de titilar
fmanzano_dtk 2:1ef167d1b7b8 377 * el LED de usuario, realizar el muestreo de las entradas digitales
fmanzano_dtk 2:1ef167d1b7b8 378 * y la consulta al sensor de lluvia.
fmanzano_dtk 2:1ef167d1b7b8 379 */
fmanzano_dtk 2:1ef167d1b7b8 380 tick_blink.attach(&blink_led, 2.0);
fmanzano_dtk 2:1ef167d1b7b8 381 tick_readInputs.attach(&readInputs, 0.250);
fmanzano_dtk 2:1ef167d1b7b8 382 if (functionality_rain_sensor) {
fmanzano_dtk 2:1ef167d1b7b8 383 tick_rain_sensor.attach(&queryRG9, time_sample_rain);
fmanzano_dtk 2:1ef167d1b7b8 384 }
fmanzano_dtk 2:1ef167d1b7b8 385 if (functionality_ble_autoreset) {
fmanzano_dtk 2:1ef167d1b7b8 386 tick_autoreset_ble.attach(&BLE_reset, time_ble_autoreset);
fmanzano_dtk 2:1ef167d1b7b8 387 }
fmanzano_dtk 2:1ef167d1b7b8 388
fmanzano_dtk 2:1ef167d1b7b8 389 /**
fmanzano_dtk 2:1ef167d1b7b8 390 * @brief INICIAR WATCHDOG
fmanzano_dtk 2:1ef167d1b7b8 391 * Se crea una instancia para el Watchdog, se define el pre-escaler
fmanzano_dtk 2:1ef167d1b7b8 392 * y el valor máximo en caso que no se actualice se genera el reinicio.
fmanzano_dtk 2:1ef167d1b7b8 393 */
fmanzano_dtk 2:1ef167d1b7b8 394 my_iwdg.Instance = IWDG;
fmanzano_dtk 4:9b1a4a9b2cdf 395 my_iwdg.Init.Prescaler = IWDG_PRESCALER_32;
fmanzano_dtk 2:1ef167d1b7b8 396 my_iwdg.Init.Reload = 0x0FFF;
fmanzano_dtk 2:1ef167d1b7b8 397 HAL_IWDG_Init(&my_iwdg);
fmanzano_dtk 2:1ef167d1b7b8 398
fmanzano_dtk 0:2d7ac38345d8 399 while (true) {
fmanzano_dtk 2:1ef167d1b7b8 400
fmanzano_dtk 2:1ef167d1b7b8 401 //! Procesamiento del puerto serial vinculado al FMU130 vía Bluetooth.
fmanzano_dtk 2:1ef167d1b7b8 402 process_FMU130();
fmanzano_dtk 2:1ef167d1b7b8 403
fmanzano_dtk 2:1ef167d1b7b8 404 //! Verificar si deben efectuarse la lectura de entradas digitales.
fmanzano_dtk 2:1ef167d1b7b8 405 if(flag_read_inputs) {
fmanzano_dtk 2:1ef167d1b7b8 406 process_Inputs();
fmanzano_dtk 2:1ef167d1b7b8 407 }
fmanzano_dtk 2:1ef167d1b7b8 408
fmanzano_dtk 2:1ef167d1b7b8 409 //! Verificar si debe activarse el lector de huellas.
fmanzano_dtk 2:1ef167d1b7b8 410 if (flag_fingerprint_query) {
fmanzano_dtk 2:1ef167d1b7b8 411 HAL_IWDG_Refresh(&my_iwdg);
fmanzano_dtk 7:01141979e5f2 412 #if FP_READER_GT521 == 1
fmanzano_dtk 6:f4907ba89e16 413 identify_fingerPrint();
fmanzano_dtk 6:f4907ba89e16 414 #else
fmanzano_dtk 6:f4907ba89e16 415
fmanzano_dtk 6:f4907ba89e16 416 #endif
fmanzano_dtk 2:1ef167d1b7b8 417 }
fmanzano_dtk 2:1ef167d1b7b8 418
fmanzano_dtk 2:1ef167d1b7b8 419 //! Verificar si se debe apagar el lector de huellas.
fmanzano_dtk 2:1ef167d1b7b8 420 if (fingerprint_flag_poweroff) {
fmanzano_dtk 2:1ef167d1b7b8 421 out3_gt521fx = out4_gt521fx = finterprint_flag_working = fingerprint_flag_poweroff = false;
fmanzano_dtk 3:6e55713bc91d 422 #ifdef M_DEBUG
fmanzano_dtk 2:1ef167d1b7b8 423 myPC_debug.printf("[MAIN] - OUT3:FALSE\r\n");
fmanzano_dtk 2:1ef167d1b7b8 424 #endif
fmanzano_dtk 2:1ef167d1b7b8 425 }
fmanzano_dtk 2:1ef167d1b7b8 426
fmanzano_dtk 2:1ef167d1b7b8 427 //! Verificar si debe consultarse el estado del sensor de lluvia.
fmanzano_dtk 2:1ef167d1b7b8 428 if (flag_query_rain_sensor) {
fmanzano_dtk 2:1ef167d1b7b8 429 //process_rainSensor();
fmanzano_dtk 2:1ef167d1b7b8 430 process_inputRainSensor();
fmanzano_dtk 2:1ef167d1b7b8 431 }
fmanzano_dtk 2:1ef167d1b7b8 432
fmanzano_dtk 2:1ef167d1b7b8 433 //! verificar si debe ejecutarse un evento de apagado por ralentí.
fmanzano_dtk 2:1ef167d1b7b8 434 if (flag_idle_force_shutdown) {
fmanzano_dtk 2:1ef167d1b7b8 435 exe_idle_shutdown();
fmanzano_dtk 2:1ef167d1b7b8 436 }
fmanzano_dtk 2:1ef167d1b7b8 437
fmanzano_dtk 2:1ef167d1b7b8 438 if (flag_idle_reminder) {
fmanzano_dtk 2:1ef167d1b7b8 439 exe_idle_reminder();
fmanzano_dtk 2:1ef167d1b7b8 440 }
fmanzano_dtk 2:1ef167d1b7b8 441
fmanzano_dtk 2:1ef167d1b7b8 442 if (flag_safety_tip) {
fmanzano_dtk 2:1ef167d1b7b8 443 exe_SafetyTip();
fmanzano_dtk 2:1ef167d1b7b8 444 }
fmanzano_dtk 2:1ef167d1b7b8 445
fmanzano_dtk 2:1ef167d1b7b8 446 if (flag_fri_ics) {
fmanzano_dtk 2:1ef167d1b7b8 447 tx_fri_ics();
fmanzano_dtk 2:1ef167d1b7b8 448 }
fmanzano_dtk 2:1ef167d1b7b8 449
fmanzano_dtk 2:1ef167d1b7b8 450 if (!(flag_playingSound)) {
fmanzano_dtk 2:1ef167d1b7b8 451 processPlaylist();
fmanzano_dtk 2:1ef167d1b7b8 452 }
fmanzano_dtk 2:1ef167d1b7b8 453
fmanzano_dtk 2:1ef167d1b7b8 454 //! Actualizar Watchdog
fmanzano_dtk 2:1ef167d1b7b8 455 HAL_IWDG_Refresh(&my_iwdg);
fmanzano_dtk 0:2d7ac38345d8 456 }
fmanzano_dtk 2:1ef167d1b7b8 457 }