Index: firmware/App/Services/Download.c =================================================================== diff -u -rfc99f47309c9d96f73a2d4696b42d6d302f334a7 -rb8160225a28a2ba4d6dff4d0433e55465c737a14 --- firmware/App/Services/Download.c (.../Download.c) (revision fc99f47309c9d96f73a2d4696b42d6d302f334a7) +++ firmware/App/Services/Download.c (.../Download.c) (revision b8160225a28a2ba4d6dff4d0433e55465c737a14) @@ -41,7 +41,7 @@ { U08 msgID; U08 updateDest; - U16 cyberIndex; + U16 updatePayloadLen; U32 msgCRC; U08 SWUpdateBuffer[ SW_UPDATE_FLASH_BUFFER_SIZE ]; } SW_UPDATE_RCV_STATUS_T; @@ -119,14 +119,13 @@ getCommBuffer( mailBox, (U08*)&SWUpdateCmdStatus, sizeof( SW_UPDATE_CMD_STATUS_T ) ); - BOOL status = FALSE; BOOL hasCRCPassed = FALSE; ACK_NACK_STATUS_T ackStatus = NACK; U32 calcCRC = 0; U08 msgID = SWUpdateCmdStatus.msgID; SW_UPDATE_DESINTATION_T dest = (SW_UPDATE_DESINTATION_T)( SWUpdateCmdStatus.updateCmd >> SHIFT_BITS_TO_GET_TARGET ); // TODO add more logic for other stacks - calcCRC = crc32( calcCRC, (U08*)&SWUpdateCmdStatus, MAX_CRC_CALC_DATA_SIZE ); + calcCRC = crc32( calcCRC, (U08*)&SWUpdateCmdStatus, sizeof( SW_UPDATE_CMD_STATUS_T ) - sizeof( U32 ) ); hasCRCPassed = ( SWUpdateCmdStatus.msgCRC == calcCRC ? TRUE : FALSE ); // TODO remove @@ -145,7 +144,7 @@ } prepareResponseMessage( msgID, ackStatus, &resp ); - status = sendAckNackStatusFromFirmware( (U08*)&resp ); + sendAckNackStatusFromFirmware( (U08*)&resp ); clearCommBuffer( mailBox ); } } @@ -157,6 +156,7 @@ if ( bytesInBuffer == NUM_OF_CAN_BYTES_FOR_UPDATE ) { SW_UPDATE_RESP_STATUS_T resp; + U08 bufferWithNoCRC[ SW_UPDATE_FLASH_BUFFER_SIZE + sizeof( U32 ) ]; BOOL status = FALSE; U32 calcCRC = 0; @@ -165,7 +165,10 @@ getCommBuffer( mailBox, (U08*)&SWUpdateRCVStatus, NUM_OF_CAN_BYTES_FOR_UPDATE ); - calcCRC = crc32( calcCRC, SWUpdateRCVStatus.SWUpdateBuffer, MAX_CRC_CALC_DATA_SIZE ); // TODO fix the CRC length + memcpy( bufferWithNoCRC, (U08*)&SWUpdateRCVStatus, sizeof( U32 ) ); + memcpy( &bufferWithNoCRC[ sizeof( U32 ) ], SWUpdateRCVStatus.SWUpdateBuffer, sizeof( SWUpdateRCVStatus.SWUpdateBuffer ) ); + + calcCRC = crc32( calcCRC, bufferWithNoCRC, sizeof( bufferWithNoCRC ) ); hasCRCPassed = ( SWUpdateRCVStatus.msgCRC == calcCRC ? TRUE : FALSE ); // TODO remove @@ -219,7 +222,7 @@ ACK_NACK_STATUS_T ackStatus = ACK; BOOL status = FALSE; - if ( SWUpdateRCVStatus.cyberIndex != SW_UPDATE_FINAL_MSG_INDEX ) + if ( SWUpdateRCVStatus.updatePayloadLen != SW_UPDATE_FINAL_MSG_INDEX ) { _disable_IRQ(); status = handleUpdatingFlash( SWUpdateRCVStatus.SWUpdateBuffer ); @@ -238,26 +241,14 @@ { ACK_NACK_STATUS_T ackStatus = NACK; - if ( SWUpdateRCVStatus.cyberIndex != SW_UPDATE_FINAL_MSG_INDEX ) + if ( SWUpdateRCVStatus.updatePayloadLen != SW_UPDATE_FINAL_MSG_INDEX ) { - sizeToWrite = SW_UPDATE_FLASH_BUFFER_SIZE; + sizeToWrite = SWUpdateRCVStatus.updatePayloadLen; + REMOVETHEVAR += sizeToWrite; - BOOL done = FALSE; - - if ( ( 1596144 - REMOVETHEVAR < SW_UPDATE_FLASH_BUFFER_SIZE ) && ( REMOVETHEVAR != 0 ) ) - { - sizeToWrite = 1596144 - REMOVETHEVAR; - REMOVETHEVAR += sizeToWrite; - done = TRUE; - } - else - { - REMOVETHEVAR += SW_UPDATE_FLASH_BUFFER_SIZE; - } - signalFPGAToWriteToFlash( SWUpdateRCVStatus.SWUpdateBuffer, sizeToWrite ); - if ( TRUE == done ) + if ( sizeToWrite < SW_UPDATE_FLASH_BUFFER_SIZE ) { signalFPGAToSelfConfigure(); }