Index: firmware/App/Services/Utilities.c =================================================================== diff -u -r0c085209bea23f66011059a7c19796c1e4b246fa -r24b4c7f4560296765373099ee83597baddc2cf94 --- firmware/App/Services/Utilities.c (.../Utilities.c) (revision 0c085209bea23f66011059a7c19796c1e4b246fa) +++ firmware/App/Services/Utilities.c (.../Utilities.c) (revision 24b4c7f4560296765373099ee83597baddc2cf94) @@ -15,6 +15,7 @@ #define INITIAL_CRC16_VAL 0xFFFF ///< Seed for 16-bit CRC function. #define SHIFT_24_BITS 24 ///< Number of bits to shift in order to shift 3 bytes. +#define MAX_CRC_CALC_DATA_SIZE 0x8000 ///< The maximum size of data for each CRC calculation. // ********** private data ********** @@ -101,14 +102,14 @@ * @details \b Outputs: none * @return TRUE if integrity test passed otherwise, FALSE *************************************************************************/ -BOOL runFWIntegrityTest( void ) +BOOL runFWIntegrityTest( U32 crcTableAddress ) { U32 remainingSize = 0; U32 currentRecord = 0; ///< Current CRC table record to check. U32 currentProcessedSize = 0; ///< Current data size processed for CRC calculation. U32 crcCalculated = 0; ///< The calculated CRC value. - CRC_TABLE const * const crcTablePtr = (CRC_TABLE *)FIRMWARE_CRC_TABLE_ADDRESS; + CRC_TABLE const * const crcTablePtr = (CRC_TABLE *)crcTableAddress; CRC_RECORD const * currentRecordPtr = &crcTablePtr->recs[ currentRecord ]; BOOL integrityStatus = TRUE; @@ -122,14 +123,14 @@ if ( remainingSize > MAX_CRC_CALC_DATA_SIZE ) { - crcCalculated = crc32( crcCalculated, (U08 *)( currentRecordPtr->addr + currentProcessedSize ), MAX_CRC_CALC_DATA_SIZE ); + crcCalculated = crc32( crcCalculated, (U08 *)( currentRecordPtr->addr + currentProcessedSize ), MAX_CRC_CALC_DATA_SIZE ); currentProcessedSize += MAX_CRC_CALC_DATA_SIZE; } else { - crcCalculated = crc32( crcCalculated, (U08 *)( currentRecordPtr->addr + currentProcessedSize ), remainingSize ); - integrityStatus &= ( ( (U32)currentRecordPtr->crc_value == crcCalculated ) ? TRUE : FALSE ); - crcCalculated = 0; + crcCalculated = crc32( crcCalculated, (U08 *)( currentRecordPtr->addr + currentProcessedSize ), remainingSize ); + integrityStatus &= ( ( (U32)currentRecordPtr->crc_value == crcCalculated ) ? TRUE : FALSE ); + crcCalculated = 0; currentProcessedSize = 0; currentRecord++; }