Proyecto ABInBev para la tarjeta Guaria 1/2.

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers flash_ee_exe.cpp Source File

flash_ee_exe.cpp

Go to the documentation of this file.
00001 /**
00002  * @file flash_ee_exe.cpp
00003  * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
00004  * @brief 
00005  * @version 0.1
00006  * @date 2022-07-04
00007  * 
00008  * @copyright Copyright (c) 2022
00009  * 
00010  */
00011 
00012 
00013 #include "mbed.h"
00014 #include "flash_ee_exe.hpp "
00015 #include "flash_eeprom.h"
00016 #include "USBSerial.h"
00017 #include <ctype.h>
00018  
00019 /** * INTERFACES * **/
00020     extern USBSerial    myPC_debug;
00021     extern DigitalOut   flashLED;
00022  
00023 /** * VARIABLES * **/
00024     // Manejo de EEPROM FLASH
00025     extern uint16_t VirtAddVarTab[];
00026     extern uint16_t VarDataTab[];
00027  
00028     // Lector de Huellas
00029     extern bool     fingerprint_enable;
00030     extern bool     fingerprint_remotly_disable;
00031     extern bool     fingerprint_override;
00032     extern int      fp_override_limit;              // 4 intentos
00033  
00034     // Ralentí
00035     extern bool     enable_idle_shutdown;
00036     extern bool     enable_idle_reminder;
00037     extern float    wait_idle_shutdown;             //600.0 segundos
00038     extern float    wait_idle_reminder;             // 180.0 segundos
00039  
00040     // Cinturones
00041     extern bool     enable_seatbelt_reading;
00042     extern bool     enable_force_seatbelt_buclke;
00043     extern bool     pilot_buckle_type;
00044     extern int      pilot_buckleUp;
00045     extern int      pilot_unfasten;
00046     extern bool     copilot_buckle_type;
00047     extern int      copilot_buckleUp;
00048     extern int      copilot_unfasten;
00049     extern bool     crew_buckle_type;
00050     extern int      crew_buckleUp;
00051     extern int      crew_unfasten;
00052  
00053     // Sensor de Lluvia
00054     extern bool     enable_rain_sensor;
00055     extern bool     enable_rain_silent_mode;
00056     extern float    time_sample_rain;               // 6.0 segundos
00057  
00058     // Limites de Velocidad en Mojado y seco
00059     extern int     wet_Speed_Warning;               // 50 Km/h
00060     extern int     wet_Speed_Limit;                 // 55 Km/h
00061     extern int     dry_Speed_Warning;               // 70 Km/h
00062     extern int     dry_Speed_Limit;                 // 80 Km/h
00063  
00064     // Tip de Seguridad y Geocercas
00065     extern bool     enable_geo_warning;
00066     extern bool     enable_safety_tip;
00067     extern float    time_safety_tip;                // 900.0 segundos
00068  
00069     // Volumen de Parlante
00070     extern int     temp_JQ8400_Volume;              // 4 HIGH
00071  
00072     // Autoreset de BLE
00073     extern bool     enable_ble_autoreset;
00074     extern float    time_ble_autoreset;
00075  
00076     #define     DEBUG_FLASH_EE_CPP  1
00077  
00078 /**
00079  * @brief 
00080  *          Esta función inicializa la EEPROM. Después ejecuta un lazo a lo largo 
00081  *          de las direcciones predefinidas como EEPROM y carga en un arreglo su
00082  *          valor.
00083  *         
00084  */
00085 void readFlash_Booting() {
00086     #ifdef DEBUG_FLASH_EE_CPP
00087         myPC_debug.printf("\r\n FLASH - Leyendo datos de memoria...");
00088     #endif
00089     // Variable local
00090     int i;
00091     
00092     // Leer todas las variables de Flash
00093     for(i = 0; i < NB_OF_VAR; i++) {
00094         EE_ReadVariable(VirtAddVarTab[i], &VarDataTab[i]);
00095     }
00096 }
00097  
00098 /**
00099  * @brief 
00100  * 
00101  */
00102 void load_2_Var() {
00103     #ifdef DEBUG_FLASH_EE_CPP
00104         myPC_debug.printf("\r\n FLASH - Cargando datos en Variables...");
00105     #endif
00106     // Lector de Huellas
00107     fingerprint_enable          = (bool) VarDataTab[AP_FINGERPRINT];
00108     fingerprint_remotly_disable = (bool) VarDataTab[AP_FINGERPRINT_RE];
00109     fingerprint_override        = (bool) VarDataTab[AP_OVERRIDE_FP];
00110     fp_override_limit           = (int) VarDataTab[AP_OVERRIDE_QT];
00111  
00112  
00113     // Ralentí
00114     enable_idle_shutdown    = (bool) VarDataTab[AP_IDLE_SHUTDOWN];
00115     enable_idle_reminder    = (bool) VarDataTab[AP_IDLE_REMINDER];
00116     wait_idle_shutdown      = ((int) VarDataTab[AP_IDLE_S_TIME]) * 1.0;
00117     wait_idle_reminder      = ((int) VarDataTab[AP_IDLE_R_TIME]) * 1.0;
00118  
00119     // Cinturones
00120     enable_seatbelt_reading      = (bool) VarDataTab[AP_SEATBELT_READ];
00121     enable_force_seatbelt_buclke = (bool) VarDataTab[AP_ENFORCE_SB];
00122     pilot_buckle_type            = (bool) VarDataTab[AP_PILOT_BTYPE];
00123     copilot_buckle_type          = (bool) VarDataTab[AP_COPILOT_BTYPE];
00124     crew_buckle_type             = (bool) VarDataTab[AP_CREW_BTYPE];
00125  
00126     // Pilot Seatbelt Buckle Type Definition
00127     if (pilot_buckle_type) { // N.O. - Honduras
00128         pilot_buckleUp = 1;
00129         pilot_unfasten = -1;
00130     } else { // N.C. - Panamá
00131         pilot_buckleUp = -1;
00132         pilot_unfasten = 1;
00133     }
00134  
00135     // Copilot Seatbelt Buckle Type Definition
00136     if (copilot_buckle_type) { // N.O. - Honduras
00137         copilot_buckleUp = 1;
00138         copilot_unfasten = -1;
00139     } else { // N.C. - Panamá
00140         copilot_buckleUp = -1;
00141         copilot_unfasten = 1;
00142     }
00143  
00144     // Crew Seatbelt Buckle Type Definition
00145     if (crew_buckle_type) { // N.O. - Honduras
00146         crew_buckleUp = 1;
00147         crew_unfasten = -1;
00148     } else { // N.C. - Panamá
00149         crew_buckleUp    = -1;
00150         crew_unfasten  = 1;
00151     }
00152     
00153     // Sensor de Lluvia
00154     enable_rain_sensor          = (bool) VarDataTab[AP_RAINSENSOR];
00155     enable_rain_silent_mode     = (bool) VarDataTab[AP_RS_SILENTMODE];
00156     time_sample_rain            = ((int) VarDataTab[AP_RS_SAMPLE_T]) * 1.0;;
00157     
00158     // Limites de Velocidad en Mojado y seco
00159     wet_Speed_Warning   = (int) VarDataTab[AP_WET_WARNING];
00160     wet_Speed_Limit     = (int) VarDataTab[AP_WET_LIMIT];
00161     dry_Speed_Warning   = (int) VarDataTab[AP_DRY_WARNING];
00162     dry_Speed_Limit     = (int) VarDataTab[AP_DRY_LIMIT];
00163  
00164     // Tip de Seguridad y Geocercas
00165     enable_safety_tip   = (bool) VarDataTab[AP_SAFETY_TIP];
00166     time_safety_tip     = ((int) VarDataTab[AP_SAFETY_TIP_T]) * 1.0;                // 900.0 segundos
00167     enable_geo_warning  = (bool) VarDataTab[AP_GEOZONE];
00168  
00169     // Volumen de Parlante
00170     temp_JQ8400_Volume  = (int) VarDataTab[AP_VOLUME];
00171  
00172     // Autoreset BLE
00173     enable_ble_autoreset = (bool) VarDataTab[AP_BLE_RESET];
00174     time_ble_autoreset   = ((int) VarDataTab[AB_BLE_RESET_T]) * 1.0;
00175  
00176     
00177     #ifdef DEBUG_FLASH_EE_CPP
00178         myPC_debug.printf("\r\n FLASH - Completado!");
00179         myPC_debug.printf("\r\n FLASH - Valores cargados:");
00180         myPC_debug.printf("\r\n  Lector de Huellas: %s", fingerprint_enable?"TRUE":"FALSE");
00181         myPC_debug.printf("\r\n  Lector de Huellas Deshabilitado Remoto: %s", fingerprint_enable?"TRUE":"FALSE");
00182         myPC_debug.printf("\r\n  Anulacion de Lector: %s", fingerprint_override?"TRUE":"FALSE");
00183         myPC_debug.printf("\r\n  Cantidad para Anulacion: %d\r\n", fp_override_limit);
00184         myPC_debug.printf("\r\n  Apagado por Ralenti: %s", enable_idle_shutdown?"TRUE":"FALSE");
00185         myPC_debug.printf("\r\n  Recordatorio de Ralenti: %s", enable_idle_reminder?"TRUE":"FALSE");
00186         myPC_debug.printf("\r\n  Tiempo Apagado por Ralenti: %.1f", wait_idle_shutdown);
00187         myPC_debug.printf("\r\n  Tiempo Recordatorio de Ralenti: %.1f\r\n", wait_idle_reminder);
00188         myPC_debug.printf("\r\n  Lectura de Cinturones: %s", enable_seatbelt_reading?"TRUE":"FALSE");
00189         myPC_debug.printf("\r\n  Forzar Conductor Abrochado: %s\r\n", enable_force_seatbelt_buclke?"TRUE":"FALSE");
00190         myPC_debug.printf("\r\n  Tipo de Hebilla Piloto: %s", pilot_buckle_type?"N. OPEN":"N. CLOSE");
00191         myPC_debug.printf("\r\n  Tipo de Hebilla Copiloto: %s", copilot_buckle_type?"N. OPEN":"N. CLOSE");
00192         myPC_debug.printf("\r\n  Tipo de Hebilla Tripulante: %s", crew_buckle_type?"N. OPEN":"N. CLOSE");
00193         myPC_debug.printf("\r\n  Sensor de Lluvia: %s", enable_rain_sensor?"TRUE":"FALSE");
00194         myPC_debug.printf("\r\n  Modo Silencioso de Lluvia: %s", enable_rain_silent_mode?"TRUE":"FALSE");
00195         myPC_debug.printf("\r\n  Temporizador para Lluvia: %.1f\r\n", time_sample_rain);
00196         myPC_debug.printf("\r\n  Advertencia Mojado: %d", wet_Speed_Warning);
00197         myPC_debug.printf("\r\n  Limite Mojado: %d", wet_Speed_Limit);
00198         myPC_debug.printf("\r\n  Advertencia Seco: %d", dry_Speed_Warning);
00199         myPC_debug.printf("\r\n  Limite Seco: %d\r\n", dry_Speed_Limit);
00200         myPC_debug.printf("\r\n  Notificacion Geocerca: %s", enable_geo_warning?"TRUE":"FALSE");
00201         myPC_debug.printf("\r\n  Tip de Seguridad: %s", enable_safety_tip?"TRUE":"FALSE");
00202         myPC_debug.printf("\r\n  Tiempo entre Tip de Seguridad: %.1f\r\n", time_safety_tip);
00203         myPC_debug.printf("\r\n  Volumen Parlante: %d\r\n", temp_JQ8400_Volume);
00204         myPC_debug.printf("\r\n  BLE Autoreset: %s", enable_ble_autoreset?"TRUE":"FALSE");
00205         myPC_debug.printf("\r\n  BLE Temporizador: %.1f\r\n\r\n", time_ble_autoreset);
00206     #endif
00207 }
00208  
00209 void flash_Booting() {
00210     HAL_FLASH_Unlock();
00211     EE_Init();
00212     readFlash_Booting();
00213     load_2_Var();
00214 }
00215  
00216 void flash_Default() {
00217     // Desbloquear Flash para Escritura
00218     #ifdef DEBUG_FLASH_EE_CPP
00219         myPC_debug.printf("\r\n FLASH - Cargando valores por defecto");
00220     #endif
00221     #define SEATBELT_CONFIG 7
00222     EE_WriteVariable(VirtAddVarTab[AP_FINGERPRINT],     ((uint16_t) true));     // Fingerprint Enable
00223     EE_WriteVariable(VirtAddVarTab[AP_OVERRIDE_FP],     ((uint16_t) true));     // Override Fingerprint Authentication
00224     EE_WriteVariable(VirtAddVarTab[AP_OVERRIDE_QT],     ((uint16_t) 4));        // Override Fingerprint Quantity
00225     EE_WriteVariable(VirtAddVarTab[AP_IDLE_SHUTDOWN],   ((uint16_t) false));    // Idle Shutdown Enable
00226     EE_WriteVariable(VirtAddVarTab[AP_IDLE_REMINDER],   ((uint16_t) true));     // Idle Shutdown Reminder
00227     EE_WriteVariable(VirtAddVarTab[AP_IDLE_S_TIME],     ((uint16_t) 600));      // Idle Shutdown Cutoff Time
00228     EE_WriteVariable(VirtAddVarTab[AP_IDLE_R_TIME],     ((uint16_t) 180));      // Idle Shutdown Reminder Time
00229     EE_WriteVariable(VirtAddVarTab[AP_SEATBELT_READ],   ((uint16_t) true));     // Seatbelt reading Enable
00230     EE_WriteVariable(VirtAddVarTab[AP_ENFORCE_SB],      ((uint16_t) true));     // Force Driver Buckleup
00231     #if (SEATBELT_CONFIG == 0)
00232         EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE],     ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00233         EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE],   ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00234         EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE],      ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00235     #elif (SEATBELT_CONFIG == 1)
00236         EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE],     ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00237         EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE],   ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00238         EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE],      ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00239     #elif (SEATBELT_CONFIG == 2)
00240         EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE],     ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00241         EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE],   ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00242         EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE],      ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00243     #elif (SEATBELT_CONFIG == 3)
00244         EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE],     ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00245         EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE],   ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00246         EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE],      ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00247     #elif (SEATBELT_CONFIG == 4)
00248         EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE],     ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00249         EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE],   ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00250         EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE],      ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00251     #elif (SEATBELT_CONFIG == 5)
00252         EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE],     ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00253         EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE],   ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00254         EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE],      ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00255     #elif (SEATBELT_CONFIG == 6)
00256         EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE],     ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00257         EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE],   ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00258         EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE],      ((uint16_t) false));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00259     #elif (SEATBELT_CONFIG == 7)
00260         EE_WriteVariable(VirtAddVarTab[AP_PILOT_BTYPE],     ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00261         EE_WriteVariable(VirtAddVarTab[AP_COPILOT_BTYPE],   ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00262         EE_WriteVariable(VirtAddVarTab[AP_CREW_BTYPE],      ((uint16_t) true));    // Seatbelt reading Type (FALSE = PA | TRUE = HN)
00263     #endif
00264     EE_WriteVariable(VirtAddVarTab[AP_RAINSENSOR],      ((uint16_t) true));     // Rain Sensor Enable
00265     EE_WriteVariable(VirtAddVarTab[AP_RS_SILENTMODE],   ((uint16_t) false));     // Silent mode Rain Sensor
00266     EE_WriteVariable(VirtAddVarTab[AP_RS_SAMPLE_T],     ((uint16_t) 6));        // Sample Time Rain Sensor
00267     EE_WriteVariable(VirtAddVarTab[AP_WET_LIMIT],       ((uint16_t) 55));       // Wet Speed Limit
00268     EE_WriteVariable(VirtAddVarTab[AP_WET_WARNING],     ((uint16_t) 50));       // Wet Speed Warning
00269     EE_WriteVariable(VirtAddVarTab[AP_DRY_LIMIT],       ((uint16_t) 80));       // Dry Speed Limit
00270     EE_WriteVariable(VirtAddVarTab[AP_DRY_WARNING],     ((uint16_t) 70));       // Dry Speed Warning
00271     EE_WriteVariable(VirtAddVarTab[AP_SAFETY_TIP],      ((uint16_t) true));    // Enable Safety Tip
00272     EE_WriteVariable(VirtAddVarTab[AP_SAFETY_TIP_T],    ((uint16_t) 1800));      // Time for Safety Tip
00273     EE_WriteVariable(VirtAddVarTab[AP_GEOZONE],         ((uint16_t) false));    // Geozone alert
00274     EE_WriteVariable(VirtAddVarTab[AP_VOLUME],          ((uint16_t) 5));        // Volume Level 6=Maximum
00275     EE_WriteVariable(VirtAddVarTab[AP_BLE_RESET],       ((uint16_t) true));     // BLE Autoreset
00276     EE_WriteVariable(VirtAddVarTab[AB_BLE_RESET_T],     ((uint16_t) 3600));     // BLE Autoreset Time
00277     EE_WriteVariable(VirtAddVarTab[AP_FINGERPRINT_RE],  ((uint16_t) false));     // Fingerprint Enable
00278  
00279     
00280     // LED
00281     flashLED = 1;
00282     wait_ms(3750);
00283     flashLED = 0;
00284     #ifdef DEBUG_FLASH_EE_CPP
00285         myPC_debug.printf("\r\n FLASH - Completado!");
00286     #endif
00287  
00288 }
00289  
00290 void writeFlash(int myAddress, int myValue) {
00291     // Desbloquear Flash para Escritura
00292     EE_WriteVariable(VirtAddVarTab[myAddress], ((uint16_t) myValue));
00293 }