Skip to content

Commit 5283b03

Browse files
EEPROM parameter integrity enforced.
1 parent 8c7155e commit 5283b03

File tree

3 files changed

+18
-32
lines changed

3 files changed

+18
-32
lines changed

NAV_Algorithms/AHRS.cpp

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -408,20 +408,12 @@ void AHRS_type::write_calibration_into_EEPROM( void)
408408
if( !magnetic_calibration_updated)
409409
return;
410410

411-
EEPROM_initialize();
411+
lock_EEPROM( false);
412412

413-
#if 0 // todo unused, remove me some day
414-
if ( automatic_earth_field_parameters)
415-
{
416-
float inclination=ATAN2(expected_nav_induction[DOWN], expected_nav_induction[NORTH]);
417-
float declination=ATAN2(expected_nav_induction[EAST], expected_nav_induction[NORTH]);
418-
419-
write_EEPROM_value( (EEPROM_PARAMETER_ID)DECLINATION, declination);
420-
write_EEPROM_value( (EEPROM_PARAMETER_ID)INCLINATION, inclination);
421-
}
422-
#endif
423413
compass_calibration.write_into_EEPROM();
424414
magnetic_calibration_updated = false; // done ...
415+
416+
lock_EEPROM( true);
425417
}
426418

427419
void AHRS_type::handle_magnetic_calibration ( char type)

NAV_Algorithms/persistent_data.cpp

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929

3030
ROM 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

6461
ROM 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

7985
const 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 ...

NAV_Algorithms/persistent_data.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ enum EEPROM_PARAMETER_ID
6868
VARIO_INT_TC,
6969
WIND_TC,
7070
MEAN_WIND_TC,
71-
VETF, // VERTICAL_ENERGY_TUNING_FACTOR
7271
HORIZON,
7372

7473
GNSS_CONFIGURATION=40,
@@ -98,7 +97,7 @@ bool write_EEPROM_value( EEPROM_PARAMETER_ID id, float value);
9897
bool read_EEPROM_value( EEPROM_PARAMETER_ID id, float &value);
9998
bool lock_EEPROM( bool lockit);
10099
bool EEPROM_initialize( void);
101-
bool all_EEPROM_parameters_existing( void);
100+
void ensure_EEPROM_parameter_integrity(void);
102101

103102
extern const persistent_data_t PERSISTENT_DATA[];
104103
extern const unsigned PERSISTENT_DATA_ENTRIES;

0 commit comments

Comments
 (0)