Felícito Manzano
/
DTK_Guaria2_ABInBev
Proyecto ABInBev para la tarjeta Guaria 1/2.
Diff: Program/flash_ee_exe.cpp
- Revision:
- 5:07720e3f99d2
- Child:
- 10:a0005a4116ae
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Program/flash_ee_exe.cpp Mon Jul 04 22:28:16 2022 -0600 @@ -0,0 +1,294 @@ +/** + * @file flash_ee_exe.cpp + * @author Felícito Manzano (felicito.manzano@detektor.com.sv) + * @brief + * @version 0.1 + * @date 2022-07-04 + * + * @copyright Copyright (c) 2022 + * + */ + + +#include "mbed.h" +#include "flash_ee_exe.hpp" +#include "flash_eeprom.h" +#include "USBSerial.h" +#include <ctype.h> + +/** * INTERFACES * **/ + extern USBSerial myPC_debug; + extern DigitalOut flashLED; + +/** * VARIABLES * **/ + // Manejo de EEPROM FLASH + extern uint16_t VirtAddVarTab[]; + extern uint16_t VarDataTab[]; + + // Lector de Huellas + extern bool fingerprint_enable; + extern bool fingerprint_remotly_disable; + extern bool fingerprint_override; + extern int fp_override_limit; // 4 intentos + + // Ralentí + extern bool enable_idle_shutdown; + extern bool enable_idle_reminder; + extern float wait_idle_shutdown; //600.0 segundos + extern float wait_idle_reminder; // 180.0 segundos + + // Cinturones + extern bool enable_seatbelt_reading; + extern bool enable_force_seatbelt_buclke; + extern bool pilot_buckle_type; + extern int pilot_buckleUp; + extern int pilot_unfasten; + extern bool copilot_buckle_type; + extern int copilot_buckleUp; + extern int copilot_unfasten; + extern bool crew_buckle_type; + extern int crew_buckleUp; + extern int crew_unfasten; + + // Sensor de Lluvia + extern bool enable_rain_sensor; + extern bool enable_rain_silent_mode; + extern float time_sample_rain; // 6.0 segundos + + // Limites de Velocidad en Mojado y seco + extern int wet_Speed_Warning; // 50 Km/h + extern int wet_Speed_Limit; // 55 Km/h + extern int dry_Speed_Warning; // 70 Km/h + extern int dry_Speed_Limit; // 80 Km/h + + // Tip de Seguridad y Geocercas + extern bool enable_geo_warning; + extern bool enable_safety_tip; + extern float time_safety_tip; // 900.0 segundos + + // Volumen de Parlante + extern int temp_JQ8400_Volume; // 4 HIGH + + // Autoreset de BLE + extern bool enable_ble_autoreset; + extern float time_ble_autoreset; + + #define DEBUG_FLASH_EE_CPP 1 + +/** + * @brief + * Esta función inicializa la EEPROM. Después ejecuta un lazo a lo largo + * de las direcciones predefinidas como EEPROM y carga en un arreglo su + * valor. + * + */ +void readFlash_Booting() { + #ifdef DEBUG_FLASH_EE_CPP + myPC_debug.printf("\r\n FLASH - Leyendo datos de memoria..."); + #endif + // Variable local + int i; + + // Leer todas las variables de Flash + for(i = 0; i < NB_OF_VAR; i++) { + EE_ReadVariable(VirtAddVarTab[i], &VarDataTab[i]); + } +} + + +/** + * @brief + * + */ +void load_2_Var() { + #ifdef DEBUG_FLASH_EE_CPP + myPC_debug.printf("\r\n FLASH - Cargando datos en Variables..."); + #endif + // Lector de Huellas + fingerprint_enable = (bool) VarDataTab[AP_FINGERPRINT]; + fingerprint_remotly_disable = (bool) VarDataTab[AP_FINGERPRINT_RE]; + fingerprint_override = (bool) VarDataTab[AP_OVERRIDE_FP]; + fp_override_limit = (int) VarDataTab[AP_OVERRIDE_QT]; + + + // Ralentí + enable_idle_shutdown = (bool) VarDataTab[AP_IDLE_SHUTDOWN]; + enable_idle_reminder = (bool) VarDataTab[AP_IDLE_REMINDER]; + wait_idle_shutdown = ((int) VarDataTab[AP_IDLE_S_TIME]) * 1.0; + wait_idle_reminder = ((int) VarDataTab[AP_IDLE_R_TIME]) * 1.0; + + // Cinturones + enable_seatbelt_reading = (bool) VarDataTab[AP_SEATBELT_READ]; + enable_force_seatbelt_buclke = (bool) VarDataTab[AP_ENFORCE_SB]; + pilot_buckle_type = (bool) VarDataTab[AP_PILOT_BTYPE]; + copilot_buckle_type = (bool) VarDataTab[AP_COPILOT_BTYPE]; + crew_buckle_type = (bool) VarDataTab[AP_CREW_BTYPE]; + + // Pilot Seatbelt Buckle Type Definition + if (pilot_buckle_type) { // N.O. - Honduras + pilot_buckleUp = 1; + pilot_unfasten = -1; + } else { // N.C. - Panamá + pilot_buckleUp = -1; + pilot_unfasten = 1; + } + + // Copilot Seatbelt Buckle Type Definition + if (copilot_buckle_type) { // N.O. - Honduras + copilot_buckleUp = 1; + copilot_unfasten = -1; + } else { // N.C. - Panamá + copilot_buckleUp = -1; + copilot_unfasten = 1; + } + + // Crew Seatbelt Buckle Type Definition + if (crew_buckle_type) { // N.O. - Honduras + crew_buckleUp = 1; + crew_unfasten = -1; + } else { // N.C. - Panamá + crew_buckleUp = -1; + crew_unfasten = 1; + } + + // Sensor de Lluvia + enable_rain_sensor = (bool) VarDataTab[AP_RAINSENSOR]; + enable_rain_silent_mode = (bool) VarDataTab[AP_RS_SILENTMODE]; + time_sample_rain = ((int) VarDataTab[AP_RS_SAMPLE_T]) * 1.0;; + + // Limites de Velocidad en Mojado y seco + wet_Speed_Warning = (int) VarDataTab[AP_WET_WARNING]; + wet_Speed_Limit = (int) VarDataTab[AP_WET_LIMIT]; + dry_Speed_Warning = (int) VarDataTab[AP_DRY_WARNING]; + dry_Speed_Limit = (int) VarDataTab[AP_DRY_LIMIT]; + + // Tip de Seguridad y Geocercas + enable_safety_tip = (bool) VarDataTab[AP_SAFETY_TIP]; + time_safety_tip = ((int) VarDataTab[AP_SAFETY_TIP_T]) * 1.0; // 900.0 segundos + enable_geo_warning = (bool) VarDataTab[AP_GEOZONE]; + + // Volumen de Parlante + temp_JQ8400_Volume = (int) VarDataTab[AP_VOLUME]; + + // Autoreset BLE + enable_ble_autoreset = (bool) VarDataTab[AP_BLE_RESET]; + time_ble_autoreset = ((int) VarDataTab[AB_BLE_RESET_T]) * 1.0; + + + #ifdef DEBUG_FLASH_EE_CPP + myPC_debug.printf("\r\n FLASH - Completado!"); + myPC_debug.printf("\r\n FLASH - Valores cargados:"); + myPC_debug.printf("\r\n Lector de Huellas: %s", fingerprint_enable?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Lector de Huellas Deshabilitado Remoto: %s", fingerprint_enable?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Anulacion de Lector: %s", fingerprint_override?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Cantidad para Anulacion: %d\r\n", fp_override_limit); + myPC_debug.printf("\r\n Apagado por Ralenti: %s", enable_idle_shutdown?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Recordatorio de Ralenti: %s", enable_idle_reminder?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Tiempo Apagado por Ralenti: %.1f", wait_idle_shutdown); + myPC_debug.printf("\r\n Tiempo Recordatorio de Ralenti: %.1f\r\n", wait_idle_reminder); + myPC_debug.printf("\r\n Lectura de Cinturones: %s", enable_seatbelt_reading?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Forzar Conductor Abrochado: %s\r\n", enable_force_seatbelt_buclke?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Tipo de Hebilla Piloto: %s", pilot_buckle_type?"N. OPEN":"N. CLOSE"); + myPC_debug.printf("\r\n Tipo de Hebilla Copiloto: %s", copilot_buckle_type?"N. OPEN":"N. CLOSE"); + myPC_debug.printf("\r\n Tipo de Hebilla Tripulante: %s", crew_buckle_type?"N. OPEN":"N. CLOSE"); + myPC_debug.printf("\r\n Sensor de Lluvia: %s", enable_rain_sensor?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Modo Silencioso de Lluvia: %s", enable_rain_silent_mode?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Temporizador para Lluvia: %.1f\r\n", time_sample_rain); + myPC_debug.printf("\r\n Advertencia Mojado: %d", wet_Speed_Warning); + myPC_debug.printf("\r\n Limite Mojado: %d", wet_Speed_Limit); + myPC_debug.printf("\r\n Advertencia Seco: %d", dry_Speed_Warning); + myPC_debug.printf("\r\n Limite Seco: %d\r\n", dry_Speed_Limit); + myPC_debug.printf("\r\n Notificacion Geocerca: %s", enable_geo_warning?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Tip de Seguridad: %s", enable_safety_tip?"TRUE":"FALSE"); + myPC_debug.printf("\r\n Tiempo entre Tip de Seguridad: %.1f\r\n", time_safety_tip); + myPC_debug.printf("\r\n Volumen Parlante: %d\r\n", temp_JQ8400_Volume); + myPC_debug.printf("\r\n BLE Autoreset: %s", enable_ble_autoreset?"TRUE":"FALSE"); + myPC_debug.printf("\r\n BLE Temporizador: %.1f\r\n\r\n", time_ble_autoreset); + #endif +} + +void flash_Booting() { + HAL_FLASH_Unlock(); + EE_Init(); + readFlash_Booting(); + load_2_Var(); +} + +void flash_Default() { + // Desbloquear Flash para Escritura + #ifdef DEBUG_FLASH_EE_CPP + myPC_debug.printf("\r\n FLASH - Cargando valores por defecto"); + #endif + #define SEATBELT_CONFIG 7 + EE_WriteVariable(VirtAddVarTab[AP_FINGERPRINT], ((uint16_t) true)); // Fingerprint Enable + EE_WriteVariable(VirtAddVarTab[AP_OVERRIDE_FP], ((uint16_t) true)); // Override Fingerprint Authentication + EE_WriteVariable(VirtAddVarTab[AP_OVERRIDE_QT], ((uint16_t) 4)); // Override Fingerprint Quantity + EE_WriteVariable(VirtAddVarTab[AP_IDLE_SHUTDOWN], ((uint16_t) false)); // Idle Shutdown Enable + EE_WriteVariable(VirtAddVarTab[AP_IDLE_REMINDER], ((uint16_t) true)); // Idle Shutdown Reminder + EE_WriteVariable(VirtAddVarTab[AP_IDLE_S_TIME], ((uint16_t) 780)); // Idle Shutdown Cutoff Time + EE_WriteVariable(VirtAddVarTab[AP_IDLE_R_TIME], ((uint16_t) 180)); // Idle Shutdown Reminder Time + EE_WriteVariable(VirtAddVarTab[AP_SEATBELT_READ], ((uint16_t) true)); // Seatbelt reading Enable + EE_WriteVariable(VirtAddVarTab[AP_ENFORCE_SB], ((uint16_t) true)); // Force Driver Buckleup + #if (SEATBELT_CONFIG == 0) + EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + #elif (SEATBELT_CONFIG == 1) + EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + #elif (SEATBELT_CONFIG == 2) + EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + #elif (SEATBELT_CONFIG == 3) + EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + #elif (SEATBELT_CONFIG == 4) + EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + #elif (SEATBELT_CONFIG == 5) + EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + #elif (SEATBELT_CONFIG == 6) + EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE], ((uint16_t) false)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + #elif (SEATBELT_CONFIG == 7) + EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE], ((uint16_t) true)); // Seatbelt reading Type (FALSE = PA | TRUE = HN) + #endif + EE_WriteVariable(VirtAddVarTab[AP_RAINSENSOR], ((uint16_t) true)); // Rain Sensor Enable + EE_WriteVariable(VirtAddVarTab[AP_RS_SILENTMODE], ((uint16_t) true)); // Silent mode Rain Sensor + EE_WriteVariable(VirtAddVarTab[AP_RS_SAMPLE_T], ((uint16_t) 6)); // Sample Time Rain Sensor + EE_WriteVariable(VirtAddVarTab[AP_WET_LIMIT], ((uint16_t) 55)); // Wet Speed Limit + EE_WriteVariable(VirtAddVarTab[AP_WET_WARNING], ((uint16_t) 50)); // Wet Speed Warning + EE_WriteVariable(VirtAddVarTab[AP_DRY_LIMIT], ((uint16_t) 80)); // Dry Speed Limit + EE_WriteVariable(VirtAddVarTab[AP_DRY_WARNING], ((uint16_t) 70)); // Dry Speed Warning + EE_WriteVariable(VirtAddVarTab[AP_SAFETY_TIP], ((uint16_t) false)); // Enable Safety Tip + EE_WriteVariable(VirtAddVarTab[AP_SAFETY_TIP_T], ((uint16_t) 900)); // Time for Safety Tip + EE_WriteVariable(VirtAddVarTab[AP_GEOZONE], ((uint16_t) false)); // Geozone alert + EE_WriteVariable(VirtAddVarTab[AP_VOLUME], ((uint16_t) 6)); // Volume Level 6=Maximum + EE_WriteVariable(VirtAddVarTab[AP_BLE_RESET], ((uint16_t) true)); // BLE Autoreset + EE_WriteVariable(VirtAddVarTab[AB_BLE_RESET_T], ((uint16_t) 3600)); // BLE Autoreset Time + EE_WriteVariable(VirtAddVarTab[AP_FINGERPRINT_RE], ((uint16_t) false)); // Fingerprint Enable + + + // LED + flashLED = 1; + wait_ms(3750); + flashLED = 0; + #ifdef DEBUG_FLASH_EE_CPP + myPC_debug.printf("\r\n FLASH - Completado!"); + #endif + +} + +void writeFlash(int myAddress, int myValue) { + // Desbloquear Flash para Escritura + EE_WriteVariable(VirtAddVarTab[myAddress], ((uint16_t) myValue)); +} \ No newline at end of file