Proyecto ABInBev para la tarjeta Guaria 1/2.

Committer:
fmanzano_dtk
Date:
Thu Jul 07 14:49:02 2022 +0000
Revision:
16:772ea817ec43
Parent:
12:5881f350b4da
Version no compilable. Se soluciona problema de libreria de I2C de mbed. Pendiente solventar inconveniente con HEADER HPP para solventar error de simbolo no definido.

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 }