2929
3030ROM persistent_data_t PERSISTENT_DATA[]=
3131 {
32- {BOARD_ID, " Board_ID" , false , 0 .0f , 0 }, // ! Board ID Hash to avoid board confusion
33-
3432 {SENS_TILT_ROLL," SensTilt_Roll" , true , 0 .0f , 0 }, // ! IMU Sensor tilt angle signed / degrees front right down frame
3533 {SENS_TILT_PITCH," SensTilt_Pitch" , true , 0 .0f , 0 }, // ! IMU Sensor tilt angle signed
3634 {SENS_TILT_YAW, " SensTilt_Yaw" , true , 0 .0f , 0 }, // ! IMU Sensor tilt angle signed
@@ -52,7 +50,6 @@ ROM persistent_data_t PERSISTENT_DATA[]=
5250 {VARIO_INT_TC, " Vario_Int_TC" , false , 30 .0f , 0 }, // ! Vario integrator time constant unsigned s / ( 100.0f / 65536 )
5351 {WIND_TC, " Wind_TC" , false , 5 .0f , 0 }, // ! Wind fast time constant unsigned s / ( 100.0f / 65536 )
5452 {MEAN_WIND_TC, " Mean_Wind_TC" , false , 30 .0f , 0 }, // ! Wind slow time constant unsigned s / ( 100.0f / 65536 )
55- {VETF, " VrtclEnrgTuning" , false , 1 .0f , 0 }, // ! Vertical Energy tuning factor s / ( 1.0f / 65536 )
5653 {HORIZON, " Horizon_active" , false , 1 .0f , 0 }, // ! Horizon output is available
5754
5855 {GNSS_CONFIGURATION, " GNSS_CONFIG" , false , 1 .0f , 0 }, // ! type of GNSS system
@@ -63,17 +60,26 @@ ROM persistent_data_t PERSISTENT_DATA[]=
6360
6461ROM unsigned PERSISTENT_DATA_ENTRIES = sizeof (PERSISTENT_DATA) / sizeof (persistent_data_t );
6562
66- bool all_EEPROM_parameters_existing ( void )
63+ void ensure_EEPROM_parameter_integrity ( void )
6764{
65+ bool EEPROM_has_been_unlocked = false ;
6866 float dummy;
69- const persistent_data_t * parameter = PERSISTENT_DATA + 1 ; // skip BOARD_ID
67+ const persistent_data_t * parameter = PERSISTENT_DATA;
7068 while ( parameter < PERSISTENT_DATA + PERSISTENT_DATA_ENTRIES)
7169 {
72- if ( true == read_EEPROM_value ( parameter->id , dummy))
73- return false ; // read error
70+ if ( true == read_EEPROM_value ( parameter->id , dummy)) // parameter missing
71+ {
72+ if ( EEPROM_has_been_unlocked == false )
73+ {
74+ lock_EEPROM ( false );
75+ EEPROM_has_been_unlocked = true ;
76+ }
77+ (void ) write_EEPROM_value ( parameter->id , parameter->default_value );
78+ }
7479 ++parameter;
7580 }
76- return true ;
81+ if ( EEPROM_has_been_unlocked)
82+ lock_EEPROM ( true );
7783}
7884
7985const persistent_data_t * find_parameter_from_ID ( EEPROM_PARAMETER_ID id)
@@ -182,17 +188,6 @@ bool EEPROM_convert( EEPROM_PARAMETER_ID id, EEPROM_data_t & EEPROM_value, float
182188 else
183189 EEPROM_value.u16 = (uint16_t )(value * 655 .36f );
184190 break ;
185- case VETF:
186- if ( read)
187- value = (float )(EEPROM_value.u16 ) / 65536 .0f ;
188- else
189- {
190- unsigned uvalue = (unsigned ) round ( value * 65536 .0f );
191- if ( uvalue >= 65536 )
192- uvalue = 65535 ;
193- EEPROM_value.u16 = (uint16_t )uvalue;
194- }
195- break ;
196191 case EEPROM_PARAMETER_ID_END:
197192 default :
198193 value = 0 .0f ; // just to be sure ...
0 commit comments