![](/media/cache/profiles/Felicito_-_New_Avatar.jpg.50x50_q85.jpg)
Proyecto ABInBev para la tarjeta Guaria 1/2.
Diff: Program/gpio_exe.cpp
- Revision:
- 1:9e821e640117
- Child:
- 7:01141979e5f2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Program/gpio_exe.cpp Fri Jul 01 12:45:55 2022 -0600 @@ -0,0 +1,440 @@ +/** + * @file gpio_exe.cpp + * @author Felícito Manzano (felicito.manzano@detektor.com.sv) + * @brief + * @version 0.1 + * @date 2020-10-01 + * + * @copyright Copyright (c) 2020 + * + */ + +#include "mbed.h" +#include "inputDebounce.hpp" +#include "BufferedSerial.h" +#include "New_GT521Fx.hpp" +#include "jq8400_voice.hpp" +#include "voice_cn_pa.hpp" +#include "teltonika_fmu130.hpp" +#include "gpio_exe.hpp" +#include "fireup_exe.hpp" +#include "safety_tip_exe.hpp" +#include "USBSerial.h" + + +//Objetos Entradas Digitales / Seriales +/** + * @brief + * + */ +extern BufferedSerial avl_uart; +extern BufferedSerial voice_uart; +extern BufferedSerial fingerprint; +extern DigitalIn in1_ignition; +extern DigitalIn in2_pilot; +extern DigitalIn in3_copilot; +extern DigitalIn in4_crew; +extern DigitalIn in5_rain_sensor; +extern DigitalIn bluetooth_state; +extern USBSerial myPC_debug; +extern Ticker tick_fingerprint; +extern Ticker tick_safety_tip; +extern Ticker tick_fri_ics; + + +// Variables Externas +/** + * @brief + * + */ +extern bool ignition; +extern bool ignition_prev; +extern bool ignition_samples[4]; +extern int ignition_counter; + +extern bool pilot_seatbelt; +extern bool pilot_seatbelt_prev; +extern bool pilot_seatbelt_samples[4]; +extern int pilot_seatbelt_c; + +extern bool copilot_seatbelt; +extern bool copilot_seatbelt_prev; +extern bool copilot_seatbelt_samples[4]; +extern int copilot_seatbelt_c; + +extern bool crew_seatbelt; +extern bool crew_seatbelt_prev; +extern bool crew_seatbelt_samples[4]; +extern int crew_seatbelt_c; + +extern bool ble_connection_state; +extern bool ble_connection_state_prev; +extern bool ble_connection_state_samples[4]; +extern int ble_connection_state_samples_c; + +extern bool rg9_raining; +extern bool rg9_raining_prev; +extern bool rg9_raining_samples[4]; +extern int rg9_raining_samples_c; + +extern int flag_fingerprint_turOn; +extern int flag_fingerprint_Sleep; +extern int flag_ignition; +extern int flag_pilot_seatbelt; +extern int flag_copilot_seatbelt; +extern int flag_crew_pilot_seatbelt; +extern int flag_fingerprint_query; +extern int flag_ble_connection_state; + +extern bool functionality_fingerprint_reader; +extern bool fingerprint_remotly_disable; +extern bool flag_driver_loggin; +extern bool finterprint_flag_working; +extern bool fingerprint_flag_poweroff; +extern bool functionality_force_driver_buclke; +extern bool functionality_seatbelt_reading; +extern bool functionality_safety_tip; +extern bool flag_read_inputs; +extern bool flag_query_rain_sensor; +extern bool functionality_rain_sensor; +extern bool functionality_rainSensor_silentMode; +extern int flag_rainsensorDigInput; + +extern char wet_Speed_CMD[30]; +extern char dry_Speed_CMD[30]; +extern int pilot_buckleUp; +extern int pilot_unfasten; +extern int copilot_buckleUp; +extern int copilot_unfasten; +extern int crew_buckleUp; +extern int crew_unfasten; + +// Variables locales +/** + * @brief + * + */ +char gpio_buffer[64]; +bool estado_actual_cinturon_piloto; +bool estado_actual_cinturon_copiloto; +bool estado_actual_cinturon_tripulante; +bool estado_actual_sensor_lluvia; +extern bool estado_actual_ignicion; +const char TCA_ID_PILOTO[] = "TCA|101|"; +const char TCA_ID_COPILOTO[] = "TCA|102|"; +const char TCA_ID_TRIPULANTE[] = "TCA|103|"; +const char TCA_ID_LECTOR_HUE[] = "TCA|111|"; +const char TCA_ID_BLUETOOTH[] = "TCA|124|"; +const char TCA_ID_WEATHER[] = "TCA|120|"; +const char IO_ENGINE_LOCK[] = "setdigout 0?? ? ? ? ? ? ?"; +const char IO_ENGINE_UNLOCK[] = "setdigout 1?? ? ? ? ? ? ?"; + +#define DEBUG_GPIO_CPP + + +/** + * @brief + * + */ +void process_Inputs() { + flag_read_inputs = false; + memset(gpio_buffer, '\0', sizeof(gpio_buffer)); + + + /** + * @brief + * + */ + flag_ignition = exeIgnition(&in1_ignition, ignition_samples, &ignition, &ignition_prev, &ignition_counter); + + /** + * @brief Construct a new if object + * + */ + if (flag_ignition == 1) { + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("\r\nGPIO - Ign ON\r\n"); + #endif + estado_actual_ignicion = true; + tick_fri_ics.detach(); + tick_fri_ics.attach(&send_fri_ics, 300.0); + process_Engine_FireUp(); + if (rg9_raining) { + if (!(functionality_rainSensor_silentMode)) { + jq8400_addQueue(VOICE_TRACK_CONDITION_WET); + } + } + + } else if (flag_ignition == -1) { + jq8400_addQueue(VOICE_DOOR_SAFETY_REMINDER); + tick_fri_ics.detach(); + tick_fri_ics.attach(&send_fri_ics, 1800.0); + if (functionality_fingerprint_reader) { + FP_Close(); + wait_us(1000000); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Pendiente apagar FP GT521Fx...\r\n"); + #endif + fingerprint_flag_poweroff = true; + } + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Ign OFF\r\n"); + #endif + estado_actual_ignicion = false; + flag_driver_loggin = false; + if (functionality_force_driver_buclke || functionality_fingerprint_reader) { + tx_fmu130_command(IO_ENGINE_LOCK, &avl_uart); // No se debe enviar a desactivar la entrada. + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", IO_ENGINE_LOCK); + #endif + } + flag_fingerprint_turOn = false; + tick_fingerprint.detach(); + if (functionality_safety_tip) { + tick_safety_tip.detach(); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Ticker de Tip de Seguridad Detenido\r\n"); + #endif + } + sprintf(gpio_buffer, "%s3", TCA_ID_LECTOR_HUE); + tx_fmu130_message(gpio_buffer, &avl_uart); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + // Se deja activado el lector para la siguiente interacción + if (!(fingerprint_remotly_disable)) { + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - FP Activado automaticamente\r\n"); + myPC_debug.printf("%s\r\n", IO_ENGINE_LOCK); + #endif + functionality_fingerprint_reader = true; + tx_fmu130_command(IO_ENGINE_LOCK, &avl_uart); // No se debe enviar a desactivar la entrada. + } else { + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - FP Desactivado remotamente\r\n"); + #endif + } + } else { + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Ign sin cambio:%d\r\n", ignition); + #endif + } + + + /** + * @brief + * + */ + flag_ble_connection_state = exeDigInput(&bluetooth_state, ble_connection_state_samples, &ble_connection_state, &ble_connection_state_prev, &ble_connection_state_samples_c); + if (flag_ble_connection_state == 1) { + //jq8400_addQueue(VOICE_BLE_FMU130_CONNECTED); + flag_ble_connection_state = 0; + sprintf(gpio_buffer, "%s1", TCA_ID_BLUETOOTH); + tx_fmu130_message(gpio_buffer, &avl_uart); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Bluetooth Conectado\r\n"); + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + } else if (flag_ble_connection_state == -1) { + //jq8400_addQueue(VOICE_BLE_FMU130_DISCONNECTED); + flag_ble_connection_state = 0; + sprintf(gpio_buffer, "%s0", TCA_ID_BLUETOOTH); + tx_fmu130_message(gpio_buffer, &avl_uart); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Bluetooth Desconectado\r\n"); + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + } + + if (functionality_seatbelt_reading) { + /** + * @brief + * CAMIONES: INTER, KENWORK, FREIGHT + * Normalmente Cerrado + * Abrochado = -1 (buckleUp) + * Desabrochado = 1 (unfasten) + * + * Livianos y cinturones Chinos: + * Normalmente Abierto + * Abrochado = 1 + * Desabrochado = -1 + */ + + + /** + * @brief + * Lectura del Cinturón del piloto + * + */ + flag_pilot_seatbelt = exeDigInput(&in2_pilot, pilot_seatbelt_samples, &pilot_seatbelt, &pilot_seatbelt_prev, &pilot_seatbelt_c); + if (flag_pilot_seatbelt == pilot_buckleUp) { + estado_actual_cinturon_piloto = true; + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Piloto Abrochado\r\n"); + #endif + if (estado_actual_ignicion) { + jq8400_addQueue(VOICE_DRIVER_SEATBELT_FASTENED); + } + flag_pilot_seatbelt = 0; + process_SeatBelt_FireUp(); + sprintf(gpio_buffer, "%s1", TCA_ID_PILOTO); + tx_fmu130_message(gpio_buffer, &avl_uart); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + + } else if (flag_pilot_seatbelt == pilot_unfasten) { + estado_actual_cinturon_piloto = false; + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Piloto Desabrochado\r\n"); + #endif + if (estado_actual_ignicion) { + jq8400_addQueue(VOICE_DRIVER_SEATBELT_UNFASTENED); // Evaluar si se corta el audio. + } + flag_pilot_seatbelt = 0; + sprintf(gpio_buffer, "%s0", TCA_ID_PILOTO); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + tx_fmu130_message(gpio_buffer, &avl_uart); + if (functionality_fingerprint_reader && functionality_force_driver_buclke) { ///// PENDIENTE + FP_Close(); + wait_us(1000000); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Pendiente apagar FP GT521Fx...\r\n"); + #endif + fingerprint_flag_poweroff = true; + } + } + + + /** + * @brief + * + */ + flag_copilot_seatbelt = exeDigInput(&in3_copilot, copilot_seatbelt_samples, &copilot_seatbelt, &copilot_seatbelt_prev, &copilot_seatbelt_c); + if (flag_copilot_seatbelt == copilot_buckleUp) { + estado_actual_cinturon_copiloto = true; + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Copiloto Abrochado\r\n"); + #endif + if (estado_actual_ignicion) { + jq8400_addQueue(VOICE_COPILOT_SEATBELT_FASTENED); + } + flag_copilot_seatbelt = 0; + sprintf(gpio_buffer, "%s1", TCA_ID_COPILOTO); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + tx_fmu130_message(gpio_buffer, &avl_uart); + } else if (flag_copilot_seatbelt == copilot_unfasten) { + estado_actual_cinturon_copiloto = false; + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - copiloto Desabrochado\r\n"); + #endif + if (estado_actual_ignicion) { + jq8400_addQueue(VOICE_COPILOT_SEATBELT_UNFASTENED); + } + flag_copilot_seatbelt = 0; + sprintf(gpio_buffer, "%s0", TCA_ID_COPILOTO); + tx_fmu130_message(gpio_buffer, &avl_uart); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + } + + + /** + * @brief + * + */ + flag_crew_pilot_seatbelt = exeDigInput(&in4_crew, crew_seatbelt_samples, &crew_seatbelt, &crew_seatbelt_prev, &crew_seatbelt_c); + if (flag_crew_pilot_seatbelt == crew_buckleUp) { + estado_actual_cinturon_tripulante = true; + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Tripulante Abrochado\r\n"); + #endif + if (estado_actual_ignicion) { + jq8400_addQueue(VOICE_CREW_SEATBELT_FASTENED); + } + flag_crew_pilot_seatbelt = 0; + sprintf(gpio_buffer, "%s1", TCA_ID_TRIPULANTE); + tx_fmu130_message(gpio_buffer, &avl_uart); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + } else if (flag_crew_pilot_seatbelt == crew_unfasten) { + estado_actual_cinturon_tripulante = false; + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - Tripulante Desabrochado\r\n"); + #endif + if (estado_actual_ignicion) { + jq8400_addQueue(VOICE_CREW_SEATBELT_UNFASTENED); + } + flag_crew_pilot_seatbelt = 0; + sprintf(gpio_buffer, "%s0", TCA_ID_TRIPULANTE); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + tx_fmu130_message(gpio_buffer, &avl_uart); + } + } +} + + +void process_inputRainSensor() { + flag_query_rain_sensor = false; + if (functionality_rain_sensor) { + memset(gpio_buffer, '\0', sizeof(gpio_buffer)); + flag_rainsensorDigInput = exeDigRain(&in5_rain_sensor, rg9_raining_samples, &rg9_raining, &rg9_raining_prev, &rg9_raining_samples_c); + if (flag_rainsensorDigInput == 1) { + estado_actual_sensor_lluvia = true; + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - RG9 Lloviendo \r\n"); + #endif + flag_rainsensorDigInput = 0; + sprintf(gpio_buffer, "%s%d", TCA_ID_WEATHER, 1); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + tx_fmu130_message(gpio_buffer, &avl_uart); + if (functionality_rainSensor_silentMode) { + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - RG9 Modo silencioso no se notifica voz ni cambia velocidad\r\n"); + #endif + } else { + if (estado_actual_ignicion) { + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - RG9 - Condicion de pista mojada\r\n"); + #endif + jq8400_addQueue(VOICE_TRACK_CONDITION_WET); + } + tx_fmu130_var_command(wet_Speed_CMD, &avl_uart); + } + } else if (flag_rainsensorDigInput == -1) { + estado_actual_sensor_lluvia = false; + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - RG9 Seco\r\n"); + #endif + flag_rainsensorDigInput = 0; + sprintf(gpio_buffer, "%s%d", TCA_ID_WEATHER, 0); + tx_fmu130_message(gpio_buffer, &avl_uart); + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("%s\r\n", gpio_buffer); + #endif + if (functionality_rainSensor_silentMode) { + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - RG9 Modo silencioso no se notifica voz ni cambia velocidad\r\n"); + #endif + } else { + if (estado_actual_ignicion) { + #ifdef DEBUG_GPIO_CPP + myPC_debug.printf("GPIO - RG9 - Condicion de pista seca\r\n"); + #endif + jq8400_addQueue(VOICE_TRACK_CONDITION_DRY); + } + tx_fmu130_var_command(dry_Speed_CMD, &avl_uart); + } + } + } +} \ No newline at end of file