Move the calibration CRC value functions into storage.x
This commit is contained in:
parent
564a6b7ea3
commit
ccfc344dc3
|
@ -20,7 +20,6 @@ A full copy of the license may be found in the projects root directory
|
|||
#include "logger.h"
|
||||
#include "comms.h"
|
||||
#include "src/FastCRC/FastCRC.h"
|
||||
#include <EEPROM.h>
|
||||
#ifdef RTC_ENABLED
|
||||
#include "rtc_common.h"
|
||||
#endif
|
||||
|
@ -368,33 +367,13 @@ void processSerialCommand()
|
|||
|
||||
case 'k': //Send CRC values for the calibration pages
|
||||
{
|
||||
uint32_t CRC32_val = 0;
|
||||
switch(serialPayload[2]) //Get the page being requested
|
||||
{
|
||||
case O2_CALIBRATION_PAGE: //Calibration page for O2
|
||||
serialPayload[1] = EEPROM.read(EEPROM_CALIBRATION_O2_CRC);
|
||||
serialPayload[2] = EEPROM.read(EEPROM_CALIBRATION_O2_CRC + 1);
|
||||
serialPayload[3] = EEPROM.read(EEPROM_CALIBRATION_O2_CRC + 2);
|
||||
serialPayload[4] = EEPROM.read(EEPROM_CALIBRATION_O2_CRC + 3);
|
||||
break;
|
||||
case CLT_CALIBRATION_PAGE: //Calibration page 1
|
||||
serialPayload[1] = EEPROM.read(EEPROM_CALIBRATION_CLT_CRC);
|
||||
serialPayload[2] = EEPROM.read(EEPROM_CALIBRATION_CLT_CRC + 1);
|
||||
serialPayload[3] = EEPROM.read(EEPROM_CALIBRATION_CLT_CRC + 2);
|
||||
serialPayload[4] = EEPROM.read(EEPROM_CALIBRATION_CLT_CRC + 3);
|
||||
|
||||
break;
|
||||
case IAT_CALIBRATION_PAGE: //Calibration page 2
|
||||
serialPayload[1] = EEPROM.read(EEPROM_CALIBRATION_IAT_CRC);
|
||||
serialPayload[2] = EEPROM.read(EEPROM_CALIBRATION_IAT_CRC + 1);
|
||||
serialPayload[3] = EEPROM.read(EEPROM_CALIBRATION_IAT_CRC + 2);
|
||||
serialPayload[4] = EEPROM.read(EEPROM_CALIBRATION_IAT_CRC + 3);
|
||||
break;
|
||||
default:
|
||||
sendSerialReturnCode(SERIAL_RC_RANGE_ERR);
|
||||
break;
|
||||
}
|
||||
uint32_t CRC32_val = readCalibrationCRC32(serialPayload[2]); //Get the CRC for the requested page
|
||||
|
||||
serialPayload[0] = SERIAL_RC_OK;
|
||||
serialPayload[1] = ((CRC32_val >> 24) & 255);
|
||||
serialPayload[2] = ((CRC32_val >> 16) & 255);
|
||||
serialPayload[3] = ((CRC32_val >> 8) & 255);
|
||||
serialPayload[4] = (CRC32_val & 255);
|
||||
sendSerialPayload( &serialPayload, 5);
|
||||
|
||||
break;
|
||||
|
@ -674,10 +653,7 @@ void processSerialCommand()
|
|||
{
|
||||
//apply CRC reflection
|
||||
calibrationCRC = ~calibrationCRC;
|
||||
EEPROM.update(EEPROM_CALIBRATION_O2_CRC, (calibrationCRC >> 24));
|
||||
EEPROM.update(EEPROM_CALIBRATION_O2_CRC + 1, (calibrationCRC >> 16));
|
||||
EEPROM.update(EEPROM_CALIBRATION_O2_CRC + 2, (calibrationCRC >> 8));
|
||||
EEPROM.update(EEPROM_CALIBRATION_O2_CRC + 3, (calibrationCRC));
|
||||
storeCalibrationCRC32(O2_CALIBRATION_PAGE, calibrationCRC);
|
||||
}
|
||||
}
|
||||
sendSerialReturnCode(SERIAL_RC_OK);
|
||||
|
@ -715,10 +691,7 @@ void processSerialCommand()
|
|||
}
|
||||
//Update the CRC
|
||||
calibrationCRC = CRC32.crc32(&serialPayload[7], 64);
|
||||
EEPROM.update(EEPROM_CALIBRATION_IAT_CRC, (calibrationCRC >> 24));
|
||||
EEPROM.update(EEPROM_CALIBRATION_IAT_CRC + 1, (calibrationCRC >> 16));
|
||||
EEPROM.update(EEPROM_CALIBRATION_IAT_CRC + 2, (calibrationCRC >> 8));
|
||||
EEPROM.update(EEPROM_CALIBRATION_IAT_CRC + 3, (calibrationCRC));
|
||||
storeCalibrationCRC32(IAT_CALIBRATION_PAGE, calibrationCRC);
|
||||
|
||||
writeCalibration();
|
||||
sendSerialReturnCode(SERIAL_RC_OK);
|
||||
|
@ -750,10 +723,7 @@ void processSerialCommand()
|
|||
}
|
||||
//Update the CRC
|
||||
calibrationCRC = CRC32.crc32(&serialPayload[7], 64);
|
||||
EEPROM.update(EEPROM_CALIBRATION_CLT_CRC, (calibrationCRC >> 24));
|
||||
EEPROM.update(EEPROM_CALIBRATION_CLT_CRC + 1, (calibrationCRC >> 16));
|
||||
EEPROM.update(EEPROM_CALIBRATION_CLT_CRC + 2, (calibrationCRC >> 8));
|
||||
EEPROM.update(EEPROM_CALIBRATION_CLT_CRC + 3, (calibrationCRC));
|
||||
storeCalibrationCRC32(CLT_CALIBRATION_PAGE, calibrationCRC);
|
||||
|
||||
writeCalibration();
|
||||
sendSerialReturnCode(SERIAL_RC_OK);
|
||||
|
|
|
@ -507,6 +507,59 @@ uint32_t readPageCRC32(uint8_t pageNum)
|
|||
return EEPROM.get(compute_crc_address(pageNum), crc32_val);
|
||||
}
|
||||
|
||||
/** Same as above, but writes the CRC32 for the calibration page rather than tune data
|
||||
@param pageNum - Calibration page number
|
||||
@param crcValue - CRC32 checksum
|
||||
*/
|
||||
void storeCalibrationCRC32(uint8_t calibrationPageNum, uint32_t calibrationCRC)
|
||||
{
|
||||
uint16_t targetAddress;
|
||||
switch(calibrationPageNum)
|
||||
{
|
||||
case O2_CALIBRATION_PAGE:
|
||||
targetAddress = EEPROM_CALIBRATION_O2_CRC;
|
||||
break;
|
||||
case IAT_CALIBRATION_PAGE:
|
||||
targetAddress = EEPROM_CALIBRATION_IAT_CRC;
|
||||
break;
|
||||
case CLT_CALIBRATION_PAGE:
|
||||
targetAddress = EEPROM_CALIBRATION_CLT_CRC;
|
||||
break;
|
||||
default:
|
||||
targetAddress = EEPROM_CALIBRATION_CLT_CRC; //Obviously should never happen
|
||||
break;
|
||||
}
|
||||
|
||||
EEPROM.put(targetAddress, calibrationCRC);
|
||||
}
|
||||
|
||||
/** Retrieves and returns the 4 byte CRC32 checksum for a given calibration page from EEPROM.
|
||||
@param pageNum - Config page number
|
||||
*/
|
||||
uint32_t readCalibrationCRC32(uint8_t calibrationPageNum)
|
||||
{
|
||||
uint32_t crc32_val;
|
||||
uint16_t targetAddress;
|
||||
switch(calibrationPageNum)
|
||||
{
|
||||
case O2_CALIBRATION_PAGE:
|
||||
targetAddress = EEPROM_CALIBRATION_O2_CRC;
|
||||
break;
|
||||
case IAT_CALIBRATION_PAGE:
|
||||
targetAddress = EEPROM_CALIBRATION_IAT_CRC;
|
||||
break;
|
||||
case CLT_CALIBRATION_PAGE:
|
||||
targetAddress = EEPROM_CALIBRATION_CLT_CRC;
|
||||
break;
|
||||
default:
|
||||
targetAddress = EEPROM_CALIBRATION_CLT_CRC; //Obviously should never happen
|
||||
break;
|
||||
}
|
||||
|
||||
EEPROM.get(targetAddress, crc32_val);
|
||||
return crc32_val;
|
||||
}
|
||||
|
||||
uint16_t getEEPROMSize()
|
||||
{
|
||||
return EEPROM.length();
|
||||
|
|
|
@ -130,6 +130,8 @@ uint8_t readEEPROMVersion();
|
|||
void storeEEPROMVersion(uint8_t);
|
||||
void storePageCRC32(uint8_t pageNum, uint32_t crcValue);
|
||||
uint32_t readPageCRC32(uint8_t pageNum);
|
||||
void storeCalibrationCRC32(uint8_t calibrationPageNum, uint32_t calibrationCRC);
|
||||
uint32_t readCalibrationCRC32(uint8_t calibrationPageNum);
|
||||
uint16_t getEEPROMSize();
|
||||
bool isEepromWritePending();
|
||||
|
||||
|
|
Loading…
Reference in New Issue