2021-06-21 22:30:52 -07:00
/** @file
* EEPROM Storage updates .
*/
/** Store and load various configs to/from EEPROM considering the the data format versions of various SW generations.
* This routine is used for doing any data conversions that are required during firmware changes .
2017-05-15 22:05:39 -07:00
* This prevents users getting difference reports in TS when such a data change occurs .
2021-06-21 22:30:52 -07:00
* It also can be used for setting good values when there are viarables that move locations in the ini .
* When a user skips multiple firmware versions at a time , this will roll through the updates 1 at a time .
* The doUpdates ( ) uses may lower level routines from Arduino EEPROM library and storage . ino to carry out EEPROM storage tasks .
2017-05-15 22:05:39 -07:00
*/
2018-07-21 07:17:08 -07:00
# include "globals.h"
# include "storage.h"
2021-12-21 12:56:55 -08:00
# include "sensors.h"
2019-03-04 06:02:53 -08:00
# include EEPROM_LIB_H //This is defined in the board .h files
2017-05-15 22:05:39 -07:00
void doUpdates ( )
{
2021-11-23 17:18:41 -08:00
# define CURRENT_DATA_VERSION 19
2021-03-22 14:33:03 -07:00
//Only the latest updat for small flash devices must be retained
# ifndef SMALL_FLASH_MODE
2017-05-15 22:05:39 -07:00
2017-08-02 18:46:48 -07:00
//May 2017 firmware introduced a -40 offset on the ignition table. Update that table to +40
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 2 )
2017-08-02 18:46:48 -07:00
{
2021-11-17 16:30:29 -08:00
auto table_it = ignitionTable . values . begin ( ) ;
while ( ! table_it . at_end ( ) )
2017-05-15 22:05:39 -07:00
{
2021-11-17 16:30:29 -08:00
auto row = * table_it ;
while ( ! row . at_end ( ) )
2017-05-15 22:05:39 -07:00
{
2021-11-17 16:30:29 -08:00
* row = * row + 40 ;
+ + row ;
}
+ + table_it ;
2017-05-15 22:05:39 -07:00
}
2017-09-18 21:05:43 -07:00
writeAllConfig ( ) ;
2019-01-17 01:47:19 -08:00
storeEEPROMVersion ( 3 ) ;
2017-08-02 18:46:48 -07:00
}
2017-08-02 18:51:07 -07:00
//June 2017 required the forced addition of some CAN values to avoid weird errors
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 3 )
2017-08-02 18:51:07 -07:00
{
2018-01-23 17:05:50 -08:00
configPage9 . speeduino_tsCanId = 0 ;
configPage9 . true_address = 256 ;
configPage9 . realtime_base_address = 336 ;
2017-08-02 18:51:07 -07:00
//There was a bad value in the May base tune for the spark duration setting, fix it here if it's a problem
2018-01-23 17:05:50 -08:00
if ( configPage4 . sparkDur = = 255 ) { configPage4 . sparkDur = 10 ; }
2017-08-02 18:51:07 -07:00
2017-09-18 21:05:43 -07:00
writeAllConfig ( ) ;
2019-01-17 01:47:19 -08:00
storeEEPROMVersion ( 4 ) ;
2017-08-02 18:51:07 -07:00
}
2017-08-04 12:12:16 -07:00
//July 2017 adds a cranking enrichment curve in place of the single value. This converts that single value to the curve
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 4 )
2017-08-04 12:12:16 -07:00
{
//Some default values for the bins (Doesn't matter too much here as the values against them will all be identical)
2018-01-23 17:05:50 -08:00
configPage10 . crankingEnrichBins [ 0 ] = 0 ;
configPage10 . crankingEnrichBins [ 1 ] = 40 ;
configPage10 . crankingEnrichBins [ 2 ] = 70 ;
configPage10 . crankingEnrichBins [ 3 ] = 100 ;
2017-08-04 12:12:16 -07:00
2018-01-23 17:05:50 -08:00
configPage10 . crankingEnrichValues [ 0 ] = 100 + configPage2 . crankingPct ;
configPage10 . crankingEnrichValues [ 1 ] = 100 + configPage2 . crankingPct ;
configPage10 . crankingEnrichValues [ 2 ] = 100 + configPage2 . crankingPct ;
configPage10 . crankingEnrichValues [ 3 ] = 100 + configPage2 . crankingPct ;
2017-08-04 12:12:16 -07:00
2017-09-18 21:05:43 -07:00
writeAllConfig ( ) ;
2019-01-17 01:47:19 -08:00
storeEEPROMVersion ( 5 ) ;
2017-08-04 12:12:16 -07:00
}
2017-09-19 21:07:15 -07:00
//September 2017 had a major change to increase the minimum table size to 128. This required multiple pieces of data being moved around
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 5 )
2017-09-19 21:07:15 -07:00
{
//Data after page 4 has to move back 128 bytes
for ( int x = 0 ; x < 1152 ; x + + )
{
2018-01-23 17:05:50 -08:00
int endMem = EEPROM_CONFIG10_END - x ;
2017-09-19 21:07:15 -07:00
int startMem = endMem - 128 ; //
byte currentVal = EEPROM . read ( startMem ) ;
EEPROM . update ( endMem , currentVal ) ;
}
//The remaining data only has to move back 64 bytes
for ( int x = 0 ; x < 352 ; x + + )
{
2018-01-23 17:05:50 -08:00
int endMem = EEPROM_CONFIG10_END - 1152 - x ;
2017-09-19 21:07:15 -07:00
int startMem = endMem - 64 ; //
byte currentVal = EEPROM . read ( startMem ) ;
EEPROM . update ( endMem , currentVal ) ;
}
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 6 ) ;
2017-09-19 21:07:15 -07:00
loadConfig ( ) ; //Reload the config after changing everything in EEPROM
}
2017-11-20 20:17:55 -08:00
//November 2017 added the staging table that comes after boost and vvt in the EEPROM. This required multiple pieces of data being moved around
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 6 )
2017-11-20 20:17:55 -08:00
{
//Data after page 8 has to move back 82 bytes
for ( int x = 0 ; x < 529 ; x + + )
{
2018-01-23 17:05:50 -08:00
int endMem = EEPROM_CONFIG10_END - x ;
2017-11-20 20:17:55 -08:00
int startMem = endMem - 82 ; //
byte currentVal = EEPROM . read ( startMem ) ;
EEPROM . update ( endMem , currentVal ) ;
}
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 7 ) ;
2017-11-20 20:17:55 -08:00
loadConfig ( ) ; //Reload the config after changing everything in EEPROM
}
2017-05-15 22:05:39 -07:00
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 7 ) {
2018-01-19 19:25:01 -08:00
//Convert whatever flex fuel settings are there into the new tables
2018-02-17 09:46:42 -08:00
configPage10 . flexBoostBins [ 0 ] = 0 ;
2020-04-18 15:21:52 -07:00
configPage10 . flexBoostAdj [ 0 ] = ( int8_t ) configPage2 . aeColdPct ;
2018-02-17 09:46:42 -08:00
configPage10 . flexFuelBins [ 0 ] = 0 ;
2018-05-04 00:55:58 -07:00
configPage10 . flexFuelAdj [ 0 ] = configPage2 . idleUpPin ;
2018-02-17 09:46:42 -08:00
configPage10 . flexAdvBins [ 0 ] = 0 ;
2019-05-30 01:02:18 -07:00
configPage10 . flexAdvAdj [ 0 ] = configPage2 . aeTaperMin ;
2018-01-20 14:33:14 -08:00
for ( uint8_t x = 1 ; x < 6 ; x + + )
2018-01-19 19:25:01 -08:00
{
uint8_t pct = x * 20 ;
2018-02-11 15:45:02 -08:00
configPage10 . flexBoostBins [ x ] = pct ;
configPage10 . flexFuelBins [ x ] = pct ;
configPage10 . flexAdvBins [ x ] = pct ;
2018-01-20 14:33:14 -08:00
2020-04-18 15:21:52 -07:00
int16_t boostAdder = ( ( ( configPage2 . aeColdTaperMin - ( int8_t ) configPage2 . aeColdPct ) * pct ) / 100 ) + ( int8_t ) configPage2 . aeColdPct ;
2018-01-25 05:37:38 -08:00
configPage10 . flexBoostAdj [ x ] = boostAdder ;
2018-01-20 14:33:14 -08:00
2018-05-04 00:55:58 -07:00
uint8_t fuelAdder = ( ( ( configPage2 . idleUpAdder - configPage2 . idleUpPin ) * pct ) / 100 ) + configPage2 . idleUpPin ;
2018-01-25 05:37:38 -08:00
configPage10 . flexFuelAdj [ x ] = fuelAdder ;
2018-01-20 14:33:14 -08:00
2019-05-30 01:02:18 -07:00
uint8_t advanceAdder = ( ( ( configPage2 . aeTaperMax - configPage2 . aeTaperMin ) * pct ) / 100 ) + configPage2 . aeTaperMin ;
2018-01-25 05:37:38 -08:00
configPage10 . flexAdvAdj [ x ] = advanceAdder ;
2018-01-19 19:25:01 -08:00
}
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 8 ) ;
2018-01-19 19:25:01 -08:00
}
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 8 )
2018-05-07 23:43:18 -07:00
{
//May 2018 adds separate load sources for fuel and ignition. Copy the existing load alogirthm into Both
2019-08-06 16:51:18 -07:00
configPage2 . fuelAlgorithm = configPage2 . legacyMAP ; //Was configPage2.unused2_38c
configPage2 . ignAlgorithm = configPage2 . legacyMAP ; //Was configPage2.unused2_38c
2018-05-07 23:43:18 -07:00
2018-05-14 21:05:45 -07:00
//Add option back in for open or closed loop boost. For all current configs to use closed
configPage4 . boostType = 1 ;
2018-05-07 23:43:18 -07:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 9 ) ;
2018-05-07 23:43:18 -07:00
}
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 9 )
2018-09-18 00:14:37 -07:00
{
2018-11-11 00:25:00 -08:00
//October 2018 set default values for all the aux in variables (These were introduced in Aug, but no defaults were set then)
2018-09-18 00:14:37 -07:00
//All aux channels set to Off
for ( byte AuxinChan = 0 ; AuxinChan < 16 ; AuxinChan + + )
{
configPage9 . caninput_sel [ AuxinChan ] = 0 ;
}
//Ability to change the analog filter values was added. Set default values for these:
2021-12-21 12:56:55 -08:00
configPage4 . ADCFILTER_TPS = ADCFILTER_TPS_DEFAULT ;
configPage4 . ADCFILTER_CLT = ADCFILTER_CLT_DEFAULT ;
configPage4 . ADCFILTER_IAT = ADCFILTER_IAT_DEFAULT ;
configPage4 . ADCFILTER_O2 = ADCFILTER_O2_DEFAULT ;
configPage4 . ADCFILTER_BAT = ADCFILTER_BAT_DEFAULT ;
configPage4 . ADCFILTER_MAP = ADCFILTER_MAP_DEFAULT ;
configPage4 . ADCFILTER_BARO = ADCFILTER_BARO_DEFAULT ;
2018-09-18 00:14:37 -07:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 10 ) ;
2018-09-18 00:14:37 -07:00
}
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 10 )
2019-04-16 00:34:46 -07:00
{
2019-05-21 14:47:09 -07:00
//May 2019 version adds the use of a 2D table for the priming pulse rather than a single value.
2019-04-16 00:34:46 -07:00
//This sets all the values in the 2D table to be the same as the previous single value
2020-04-18 15:21:52 -07:00
configPage2 . primePulse [ 0 ] = configPage2 . aeColdTaperMax / 5 ; //New priming pulse values are in the range 0-127.5 rather than 0-25.5 so they must be divided by 5
configPage2 . primePulse [ 1 ] = configPage2 . aeColdTaperMax / 5 ; //New priming pulse values are in the range 0-127.5 rather than 0-25.5 so they must be divided by 5
configPage2 . primePulse [ 2 ] = configPage2 . aeColdTaperMax / 5 ; //New priming pulse values are in the range 0-127.5 rather than 0-25.5 so they must be divided by 5
configPage2 . primePulse [ 3 ] = configPage2 . aeColdTaperMax / 5 ; //New priming pulse values are in the range 0-127.5 rather than 0-25.5 so they must be divided by 5
2019-04-16 00:34:46 -07:00
//Set some sane default temperatures for this table
configPage2 . primeBins [ 0 ] = 0 ;
configPage2 . primeBins [ 1 ] = 40 ;
configPage2 . primeBins [ 2 ] = 70 ;
configPage2 . primeBins [ 3 ] = 100 ;
2019-06-06 03:10:17 -07:00
//Also added is coolant based ASE for both duration and amount
//All the adder amounts are set to what the single value was previously
2020-04-18 15:21:52 -07:00
configPage2 . asePct [ 0 ] = configPage2 . aeColdTaperMin ;
configPage2 . asePct [ 1 ] = configPage2 . aeColdTaperMin ;
configPage2 . asePct [ 2 ] = configPage2 . aeColdTaperMin ;
configPage2 . asePct [ 3 ] = configPage2 . aeColdTaperMin ;
2019-06-06 03:10:17 -07:00
//ASE duration is set to 10s for all coolant values
configPage2 . aseCount [ 0 ] = 10 ;
configPage2 . aseCount [ 1 ] = 10 ;
configPage2 . aseCount [ 2 ] = 10 ;
configPage2 . aseCount [ 3 ] = 10 ;
//Finally the coolant bins for the above are set to sane values (Rememerbing these are offset values)
configPage2 . aseBins [ 0 ] = 0 ;
configPage2 . aseBins [ 1 ] = 20 ;
configPage2 . aseBins [ 2 ] = 60 ;
configPage2 . aseBins [ 3 ] = 80 ;
2019-06-06 06:29:04 -07:00
//Coolant based ignition advance was added also. Set sane values
configPage4 . cltAdvBins [ 0 ] = 0 ;
configPage4 . cltAdvBins [ 1 ] = 30 ;
configPage4 . cltAdvBins [ 2 ] = 60 ;
configPage4 . cltAdvBins [ 3 ] = 70 ;
configPage4 . cltAdvBins [ 4 ] = 85 ;
configPage4 . cltAdvBins [ 5 ] = 100 ;
configPage4 . cltAdvValues [ 0 ] = 0 ;
configPage4 . cltAdvValues [ 1 ] = 0 ;
configPage4 . cltAdvValues [ 2 ] = 0 ;
configPage4 . cltAdvValues [ 3 ] = 0 ;
configPage4 . cltAdvValues [ 4 ] = 0 ;
configPage4 . cltAdvValues [ 5 ] = 0 ;
2019-06-06 03:10:17 -07:00
2019-04-16 00:34:46 -07:00
//March 19 added a tacho pulse duration that could default to stupidly high values. Check if this is the case and fix it if found. 6ms is tha maximum allowed value
if ( configPage2 . tachoDuration > 6 ) { configPage2 . tachoDuration = 3 ; }
2019-05-21 14:47:09 -07:00
//MAP based AE was introduced, force the AE mode to be TPS for all existing tunes
configPage2 . aeMode = AE_MODE_TPS ;
2019-06-06 03:10:17 -07:00
configPage2 . maeThresh = configPage2 . taeThresh ;
2019-05-21 14:47:09 -07:00
//Set some sane values for the MAP AE curve
configPage4 . maeRates [ 0 ] = 75 ;
2019-07-11 23:46:34 -07:00
configPage4 . maeRates [ 1 ] = 75 ;
2019-05-21 14:47:09 -07:00
configPage4 . maeRates [ 2 ] = 75 ;
configPage4 . maeRates [ 3 ] = 75 ;
configPage4 . maeBins [ 0 ] = 7 ;
configPage4 . maeBins [ 1 ] = 12 ;
configPage4 . maeBins [ 2 ] = 20 ;
configPage4 . maeBins [ 3 ] = 40 ;
2019-06-05 01:27:40 -07:00
//The 2nd fuel table was added. To prevent issues, force it to be disabled.
configPage10 . fuel2Mode = 0 ;
2019-05-21 14:47:09 -07:00
2019-04-16 00:34:46 -07:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 11 ) ;
2019-04-16 00:34:46 -07:00
}
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 11 )
2019-07-08 00:51:08 -07:00
{
2019-09-04 19:02:15 -07:00
//Sep 2019
2019-07-08 00:56:02 -07:00
//A battery calibration offset value was introduced. Set default value to 0
2019-07-08 00:51:08 -07:00
configPage4 . batVoltCorrect = 0 ;
2019-07-08 00:56:02 -07:00
2019-08-06 16:51:18 -07:00
//An option was added to select the older method of performing MAP reads with the pullup resistor active
configPage2 . legacyMAP = 0 ;
2019-09-04 19:02:15 -07:00
//Secondary fuel table was added for swtiching. Make sure it's all turned off initially
configPage10 . fuel2Mode = 0 ;
configPage10 . fuel2SwitchVariable = 0 ; //Set switch variable to RPM
configPage10 . fuel2SwitchValue = 7000 ; //7000 RPM switch point is safe
2019-07-08 00:56:02 -07:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 12 ) ;
2019-07-08 00:51:08 -07:00
}
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 12 )
2019-11-13 23:00:39 -08:00
{
//Nov 2019
//New option to only apply voltage correction to dead time. Set existing tunes to use old method
configPage2 . battVCorMode = BATTV_COR_MODE_WHOLE ;
//Manual baro correction curve was added. Give it some default values (All baro readings set to 100%)
configPage4 . baroFuelBins [ 0 ] = 80 ;
configPage4 . baroFuelBins [ 1 ] = 85 ;
configPage4 . baroFuelBins [ 2 ] = 90 ;
configPage4 . baroFuelBins [ 3 ] = 95 ;
configPage4 . baroFuelBins [ 4 ] = 100 ;
configPage4 . baroFuelBins [ 5 ] = 105 ;
configPage4 . baroFuelBins [ 6 ] = 110 ;
configPage4 . baroFuelBins [ 7 ] = 115 ;
configPage4 . baroFuelValues [ 0 ] = 100 ;
configPage4 . baroFuelValues [ 1 ] = 100 ;
configPage4 . baroFuelValues [ 2 ] = 100 ;
configPage4 . baroFuelValues [ 3 ] = 100 ;
configPage4 . baroFuelValues [ 4 ] = 100 ;
configPage4 . baroFuelValues [ 5 ] = 100 ;
configPage4 . baroFuelValues [ 6 ] = 100 ;
configPage4 . baroFuelValues [ 7 ] = 100 ;
//Idle advance curve was added. Add default values
configPage2 . idleAdvEnabled = 0 ; //Turn this off by default
configPage2 . idleAdvTPS = 5 ; //Active below 5% tps
configPage2 . idleAdvRPM = 20 ; //Active below 2000 RPM
configPage4 . idleAdvBins [ 0 ] = 30 ;
configPage4 . idleAdvBins [ 1 ] = 40 ;
configPage4 . idleAdvBins [ 2 ] = 50 ;
configPage4 . idleAdvBins [ 3 ] = 60 ;
configPage4 . idleAdvBins [ 4 ] = 70 ;
configPage4 . idleAdvBins [ 5 ] = 80 ;
configPage4 . idleAdvValues [ 0 ] = 15 ; //These values offset by 15, so this is just making this equal to 0
configPage4 . idleAdvValues [ 1 ] = 15 ;
configPage4 . idleAdvValues [ 2 ] = 15 ;
configPage4 . idleAdvValues [ 3 ] = 15 ;
configPage4 . idleAdvValues [ 4 ] = 15 ;
configPage4 . idleAdvValues [ 5 ] = 15 ;
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 13 ) ;
2019-11-13 23:00:39 -08:00
}
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 13 )
2020-03-16 16:38:03 -07:00
{
2020-05-24 04:36:28 -07:00
//202005
2020-03-16 16:38:03 -07:00
//Cranking enrichment range 0..1275% instead of older 0.255, so need to divide old values by 5
configPage10 . crankingEnrichValues [ 0 ] = configPage10 . crankingEnrichValues [ 0 ] / 5 ;
configPage10 . crankingEnrichValues [ 1 ] = configPage10 . crankingEnrichValues [ 1 ] / 5 ;
configPage10 . crankingEnrichValues [ 2 ] = configPage10 . crankingEnrichValues [ 2 ] / 5 ;
configPage10 . crankingEnrichValues [ 3 ] = configPage10 . crankingEnrichValues [ 3 ] / 5 ;
2020-03-17 00:27:05 -07:00
//Added the injector timing curve
2020-08-07 19:39:53 -07:00
//Set all the values to be the same as the first one.
configPage2 . injAng [ 0 ] = configPage2 . injAng [ 0 ] ; //Obviously not needed, but here for completeness
configPage2 . injAng [ 1 ] = configPage2 . injAng [ 0 ] ;
configPage2 . injAng [ 2 ] = configPage2 . injAng [ 0 ] ;
configPage2 . injAng [ 3 ] = configPage2 . injAng [ 0 ] ;
2020-03-17 00:27:05 -07:00
//The RPMs are divided by 100
configPage2 . injAngRPM [ 0 ] = 5 ;
configPage2 . injAngRPM [ 1 ] = 25 ;
configPage2 . injAngRPM [ 2 ] = 45 ;
configPage2 . injAngRPM [ 3 ] = 65 ;
2020-04-02 20:53:15 -07:00
//Introdced a DFCO delay option. Default it to 0
configPage2 . dfcoDelay = 0 ;
2020-04-07 18:25:53 -07:00
//Introdced a minimum temperature for DFCO. Default it to 40C
2020-05-28 19:25:33 -07:00
configPage2 . dfcoMinCLT = 80 ; //CALIBRATION_TEMPERATURE_OFFSET is 40
2020-04-15 23:31:54 -07:00
//Update flexfuel ignition config values for 40 degrees offset
for ( int i = 0 ; i < 6 ; i + + )
{
configPage10 . flexAdvAdj [ i ] + = 40 ;
}
2020-03-16 16:38:03 -07:00
2020-04-18 15:21:52 -07:00
//AE cold modifier added. Default to sane values
configPage2 . aeColdPct = 100 ;
configPage2 . aeColdTaperMin = 40 ;
configPage2 . aeColdTaperMax = 100 ;
2020-05-21 02:29:38 -07:00
//New PID resolution, old resolution was 100% for each increase, 100% now is stored as 32
2020-05-24 04:36:28 -07:00
if ( configPage6 . idleKP > = 8 ) { configPage6 . idleKP = 255 ; }
else { configPage6 . idleKP = configPage6 . idleKP < < 5 ; }
if ( configPage6 . idleKI > = 8 ) { configPage6 . idleKI = 255 ; }
else { configPage6 . idleKI = configPage6 . idleKI < < 5 ; }
if ( configPage6 . idleKD > = 8 ) { configPage6 . idleKD = 255 ; }
else { configPage6 . idleKD = configPage6 . idleKD < < 5 ; }
if ( configPage10 . vvtCLKP > = 8 ) { configPage10 . vvtCLKP = 255 ; }
else { configPage10 . vvtCLKP = configPage10 . vvtCLKP < < 5 ; }
if ( configPage10 . vvtCLKI > = 8 ) { configPage10 . vvtCLKI = 255 ; }
else { configPage10 . vvtCLKI = configPage10 . vvtCLKI < < 5 ; }
if ( configPage10 . vvtCLKD > = 8 ) { configPage10 . vvtCLKD = 255 ; }
else { configPage10 . vvtCLKD = configPage10 . vvtCLKD < < 5 ; }
2020-05-21 02:29:38 -07:00
2020-05-18 22:22:43 -07:00
//Cranking enrichment to run taper added. Default it to 0,1 secs
configPage10 . crankingEnrichTaper = 1 ;
2020-05-28 19:25:33 -07:00
//ASE to run taper added. Default it to 0,1 secs
configPage2 . aseTaperTime = 1 ;
2020-08-06 21:30:56 -07:00
// there is now optioon for fixed and relative timing retard for soft limit. This sets the soft limiter to the old fixed timing mode.
configPage2 . SoftLimitMode = SOFT_LIMIT_FIXED ;
//VSS was added for testing, disable it by default
configPage2 . vssMode = 0 ;
2020-07-21 18:27:21 -07:00
2020-03-16 16:38:03 -07:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 14 ) ;
2020-05-08 15:39:13 -07:00
2020-08-06 21:30:56 -07:00
//
2020-03-16 16:38:03 -07:00
}
2020-06-15 15:09:14 -07:00
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 14 )
2020-06-15 15:09:14 -07:00
{
2020-08-10 19:07:12 -07:00
//202008
2020-06-15 15:09:14 -07:00
//MAJOR update to move the coolant, IAT and O2 calibrations to 2D tables
int y ;
for ( int x = 0 ; x < ( CALIBRATION_TABLE_SIZE / 16 ) ; x + + ) //Each calibration table is 512 bytes long
{
2020-07-06 23:47:28 -07:00
y = EEPROM_CALIBRATION_CLT_OLD + ( x * 16 ) ;
2020-06-15 15:09:14 -07:00
cltCalibration_values [ x ] = EEPROM . read ( y ) ;
2020-08-06 21:30:56 -07:00
cltCalibration_bins [ x ] = ( x * 32 ) ;
2020-06-15 15:09:14 -07:00
2020-07-06 23:47:28 -07:00
y = EEPROM_CALIBRATION_IAT_OLD + ( x * 16 ) ;
2020-06-15 15:09:14 -07:00
iatCalibration_values [ x ] = EEPROM . read ( y ) ;
2020-08-06 21:30:56 -07:00
iatCalibration_bins [ x ] = ( x * 32 ) ;
2020-08-10 19:07:12 -07:00
y = EEPROM_CALIBRATION_O2_OLD + ( x * 16 ) ;
o2Calibration_values [ x ] = EEPROM . read ( y ) ;
o2Calibration_bins [ x ] = ( x * 32 ) ;
2020-06-15 15:09:14 -07:00
}
2020-08-06 21:30:56 -07:00
writeCalibration ( ) ;
2020-06-15 15:09:14 -07:00
2020-07-06 23:47:28 -07:00
//Oil and fuel pressure inputs were introduced. Disable them both by default
configPage10 . oilPressureProtEnbl = false ;
configPage10 . oilPressureEnable = false ;
configPage10 . fuelPressureEnable = false ;
2020-08-06 21:30:56 -07:00
//wmi
configPage10 . wmiEnabled = 0 ;
configPage10 . wmiMode = 0 ;
configPage10 . wmiOffset = 0 ;
configPage10 . wmiIndicatorEnabled = 0 ;
configPage10 . wmiEmptyEnabled = 0 ;
configPage10 . wmiAdvEnabled = 0 ;
for ( int i = 0 ; i < 6 ; i + + )
{
configPage10 . wmiAdvBins [ i ] = i * 100 / 2 ;
configPage10 . wmiAdvAdj [ i ] = OFFSET_IGNITION ;
}
2020-08-22 02:06:14 -07:00
//Programmable outputs added. Set all to disabled
configPage13 . outputPin [ 0 ] = 0 ;
configPage13 . outputPin [ 1 ] = 0 ;
configPage13 . outputPin [ 2 ] = 0 ;
configPage13 . outputPin [ 3 ] = 0 ;
configPage13 . outputPin [ 4 ] = 0 ;
configPage13 . outputPin [ 5 ] = 0 ;
configPage13 . outputPin [ 6 ] = 0 ;
configPage13 . outputPin [ 7 ] = 0 ;
2020-08-15 16:36:20 -07:00
//New multiply MAP option added. Set new option to be the same as old
configPage2 . multiplyMAP = configPage2 . multiplyMAP_old ;
2020-08-15 16:55:13 -07:00
//New AE option added to allow for PW added in addition to existing PW multiply
configPage2 . aeApplyMode = 0 ; //Set the AE mode to Multiply
2020-08-15 16:36:20 -07:00
2020-12-12 14:40:03 -08:00
//Injector priming delay added
configPage2 . primingDelay = 0 ;
//ASE taper time added
configPage2 . aseTaperTime = 10 ; //1 second taper
2020-08-06 21:30:56 -07:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 15 ) ;
2020-06-15 15:09:14 -07:00
}
2020-08-22 15:09:51 -07:00
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 15 )
2020-08-22 15:09:51 -07:00
{
2020-12-11 13:09:01 -08:00
//202012
configPage10 . spark2Mode = 0 ; //Disable 2nd spark table
2020-08-22 15:09:51 -07:00
2021-02-11 14:11:42 -08:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 16 ) ;
2021-02-11 14:11:42 -08:00
}
2021-03-22 14:33:03 -07:00
//Move this #endif to only do latest updates to safe ROM space on small devices.
# endif
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 16 )
2021-02-11 14:11:42 -08:00
{
2021-02-01 14:41:51 -08:00
//Fix for wrong placed page 13
for ( int x = EEPROM_CONFIG14_END ; x > = EEPROM_CONFIG13_START ; x - - )
{
EEPROM . update ( x , EEPROM . read ( x - 112 ) ) ;
}
2021-02-11 14:11:42 -08:00
2021-03-02 02:32:14 -08:00
configPage6 . iacPWMrun = false ; // just in case. This should be false anyways, but sill.
2021-02-11 14:11:42 -08:00
configPage2 . useDwellMap = 0 ; //Dwell map added, use old fixed value as default
2020-08-22 15:09:51 -07:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 17 ) ;
2020-08-22 15:09:51 -07:00
}
2021-04-21 15:56:39 -07:00
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) = = 17 )
2021-04-21 15:56:39 -07:00
{
//VVT stuff has now 0.5 accurasy, so shift values in vvt table by one.
2021-11-17 16:30:29 -08:00
auto table_it = vvtTable . values . begin ( ) ;
while ( ! table_it . at_end ( ) )
2021-04-21 15:56:39 -07:00
{
2021-11-17 16:30:29 -08:00
auto row = * table_it ;
while ( ! row . at_end ( ) )
2021-04-21 15:56:39 -07:00
{
2021-11-17 16:30:29 -08:00
* row = * row < < 1 ;
+ + row ;
}
+ + table_it ;
2021-04-21 15:56:39 -07:00
}
2021-11-17 16:30:29 -08:00
2021-04-21 15:56:39 -07:00
configPage10 . vvtCLholdDuty = configPage10 . vvtCLholdDuty < < 1 ;
configPage10 . vvtCLminDuty = configPage10 . vvtCLminDuty < < 1 ;
configPage10 . vvtCLmaxDuty = configPage10 . vvtCLmaxDuty < < 1 ;
//VVT2 added, so default values and disable it
configPage10 . vvt2Enabled = 0 ;
configPage4 . vvt2PWMdir = 0 ;
configPage10 . TrigEdgeThrd = 0 ;
//Old use as On/Off selection is removed, so change VVT mode to On/Off based on that
if ( configPage6 . unused_bit = = 1 ) { configPage6 . vvtMode = VVT_MODE_ONOFF ; }
//Closed loop VVT improvements. Set safety limits to max/min working values and filter to minimum.
configPage10 . vvtCLMinAng = 0 ;
configPage10 . vvtCLMaxAng = 200 ;
configPage4 . ANGLEFILTER_VVT = 0 ;
2021-09-16 07:07:54 -07:00
configPage2 . idleAdvDelay * = 2 ; //Increased resolution to 0.5 second
2021-07-19 01:03:07 -07:00
2021-07-18 16:07:44 -07:00
//RPM switch point added for map sample method. Set to 0 to not affect existing tunes.
configPage2 . mapSwitchPoint = 0 ;
2021-07-17 17:37:16 -07:00
configPage9 . boostByGearEnabled = 0 ;
2021-07-18 16:11:04 -07:00
//Added possibility to set minimum programmable output time
configPage13 . outputTimeLimit [ 0 ] = 0 ;
configPage13 . outputTimeLimit [ 1 ] = 0 ;
configPage13 . outputTimeLimit [ 2 ] = 0 ;
configPage13 . outputTimeLimit [ 3 ] = 0 ;
configPage13 . outputTimeLimit [ 4 ] = 0 ;
configPage13 . outputTimeLimit [ 5 ] = 0 ;
configPage13 . outputTimeLimit [ 6 ] = 0 ;
configPage13 . outputTimeLimit [ 7 ] = 0 ;
2021-04-21 15:56:39 -07:00
writeAllConfig ( ) ;
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( 18 ) ;
2021-04-21 15:56:39 -07:00
}
2021-11-23 17:18:41 -08:00
if ( readEEPROMVersion ( ) = = 18 )
{
configPage2 . fanEnable = configPage6 . fanUnused ; // PWM Fan mode added, but take the previous setting of Fan in use.
writeAllConfig ( ) ;
storeEEPROMVersion ( 19 ) ;
}
2017-08-02 18:46:48 -07:00
//Final check is always for 255 and 0 (Brand new arduino)
2021-09-13 23:51:26 -07:00
if ( ( readEEPROMVersion ( ) = = 0 ) | | ( readEEPROMVersion ( ) = = 255 ) )
2017-08-02 18:46:48 -07:00
{
2018-01-23 17:05:50 -08:00
configPage9 . true_address = 0x200 ;
2021-02-01 14:41:51 -08:00
//Programmable outputs added. Set all to disabled
configPage13 . outputPin [ 0 ] = 0 ;
configPage13 . outputPin [ 1 ] = 0 ;
configPage13 . outputPin [ 2 ] = 0 ;
configPage13 . outputPin [ 3 ] = 0 ;
configPage13 . outputPin [ 4 ] = 0 ;
configPage13 . outputPin [ 5 ] = 0 ;
configPage13 . outputPin [ 6 ] = 0 ;
configPage13 . outputPin [ 7 ] = 0 ;
2021-12-21 12:56:55 -08:00
configPage4 . FILTER_FLEX = FILTER_FLEX_DEFAULT ;
2021-07-16 16:42:58 -07:00
2021-09-13 23:51:26 -07:00
storeEEPROMVersion ( CURRENT_DATA_VERSION ) ;
2017-08-02 18:46:48 -07:00
}
2017-09-19 21:07:15 -07:00
//Check to see if someone has downgraded versions:
2021-09-13 23:51:26 -07:00
if ( readEEPROMVersion ( ) > CURRENT_DATA_VERSION ) { storeEEPROMVersion ( CURRENT_DATA_VERSION ) ; }
2017-08-02 18:46:48 -07:00
}