Felícito Manzano
/
DTK_Guaria2_ABInBev
Proyecto ABInBev para la tarjeta Guaria 1/2.
main.cpp@16:772ea817ec43, 2022-07-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |