Skip to content
Permalink
Browse files

Fix a bug where calibration routines could potentially overwrite the …

…early memory areas in EEPROM
  • Loading branch information
noisymime committed Feb 14, 2019
1 parent f2c1d6c commit 21cd8609ea3571dcd68854c113e60ecce479d5f6
Showing with 10 additions and 9 deletions.
  1. +8 −7 speeduino/sensors.ino
  2. +1 −1 speeduino/storage.h
  3. +1 −1 speeduino/storage.ino
@@ -8,6 +8,7 @@ A full copy of the license may be found in the projects root directory
#include "globals.h"
#include "maths.h"
#include "storage.h"
#include "comms.h"

void initialiseADC()
{
@@ -106,13 +107,13 @@ void initialiseADC()
//Sanity checks to ensure none of the filter values are set above 240 (Which would include the 255 value which is the default on a new arduino)
//If an invalid value is detected, it's reset to the default the value and burned to EEPROM.
//Each sensor has it's own default value
if(configPage4.ADCFILTER_TPS > 240) { configPage4.ADCFILTER_TPS = 50; writeConfig(4); }
if(configPage4.ADCFILTER_CLT > 240) { configPage4.ADCFILTER_CLT = 180; writeConfig(4); }
if(configPage4.ADCFILTER_IAT > 240) { configPage4.ADCFILTER_IAT = 180; writeConfig(4); }
if(configPage4.ADCFILTER_O2 > 240) { configPage4.ADCFILTER_O2 = 100; writeConfig(4); }
if(configPage4.ADCFILTER_BAT > 240) { configPage4.ADCFILTER_BAT = 128; writeConfig(4); }
if(configPage4.ADCFILTER_MAP > 240) { configPage4.ADCFILTER_MAP = 20; writeConfig(4); }
if(configPage4.ADCFILTER_BARO > 240) { configPage4.ADCFILTER_BARO = 64; writeConfig(4); }
if(configPage4.ADCFILTER_TPS > 240) { configPage4.ADCFILTER_TPS = 50; writeConfig(ignSetPage); }
if(configPage4.ADCFILTER_CLT > 240) { configPage4.ADCFILTER_CLT = 180; writeConfig(ignSetPage); }
if(configPage4.ADCFILTER_IAT > 240) { configPage4.ADCFILTER_IAT = 180; writeConfig(ignSetPage); }
if(configPage4.ADCFILTER_O2 > 240) { configPage4.ADCFILTER_O2 = 100; writeConfig(ignSetPage); }
if(configPage4.ADCFILTER_BAT > 240) { configPage4.ADCFILTER_BAT = 128; writeConfig(ignSetPage); }
if(configPage4.ADCFILTER_MAP > 240) { configPage4.ADCFILTER_MAP = 20; writeConfig(ignSetPage); }
if(configPage4.ADCFILTER_BARO > 240) { configPage4.ADCFILTER_BARO = 64; writeConfig(ignSetPage); }

}

@@ -12,7 +12,7 @@ void writeCalibration();
//These are utility functions that prevent other files from having to use EEPROM.h directly
byte readLastBaro();
void storeLastBaro(byte);
void storeCalibrationValue(byte, byte);
void storeCalibrationValue(uint16_t, byte);
byte readEEPROMVersion();
void storeEEPROMVersion(byte);

@@ -652,6 +652,6 @@ void writeCalibration()
// By having these in this file, it prevents other files from calling EEPROM functions directly. This is useful due to differences in the EEPROM libraries on different devces
byte readLastBaro() { return EEPROM.read(EEPROM_LAST_BARO); }
void storeLastBaro(byte newValue) { EEPROM.update(EEPROM_LAST_BARO, newValue); }
void storeCalibrationValue(byte location, byte value) { EEPROM.update(location, value); } //This is essentially just an abstraction for EEPROM.update()
void storeCalibrationValue(uint16_t location, byte value) { EEPROM.update(location, value); } //This is essentially just an abstraction for EEPROM.update()
byte readEEPROMVersion() { return EEPROM.read(EEPROM_DATA_VERSION); }
void storeEEPROMVersion(byte newVersion) { EEPROM.update(EEPROM_DATA_VERSION, newVersion); }

0 comments on commit 21cd860

Please sign in to comment.
You can’t perform that action at this time.