Index: firmware/App/Services/Download.c =================================================================== diff -u -r567a9736641b877ac0028db7481daad2dc65305f -re8511af1e4e9d91cfd3378471869fb0246110870 --- firmware/App/Services/Download.c (.../Download.c) (revision 567a9736641b877ac0028db7481daad2dc65305f) +++ firmware/App/Services/Download.c (.../Download.c) (revision e8511af1e4e9d91cfd3378471869fb0246110870) @@ -49,10 +49,9 @@ static SW_UPDATE_RCV_STATUS_T SWUpdateRCVStatus; static SW_UPDATE_CMD_T SWUpdateCommandState; static SW_UPDATE_CAN_MAIL_BOX_T thisStackMailBox; +static U32 sizeToWrite; static U32 REMOVETHEVAR = 0; -static U08 REMOVETESTBUFFER[ 256 ]; -static U32 sizeToWrite; static void processIncomingCmdMessage( SW_UPDATE_CAN_MAIL_BOX_T mailBox ); static void processIncomingUpdateMessage( SW_UPDATE_CAN_MAIL_BOX_T mailBox ); @@ -71,6 +70,7 @@ void execDownload( void ) { + // TODO make this a state machine processIncomingCmdMessage( SW_UPDATE_COMMAD ); processIncomingUpdateMessage( thisStackMailBox ); } @@ -96,19 +96,26 @@ clearCommBuffer( thisStackMailBox ); } +U08 getTempRemoveMSGID() +{ + return SWUpdateRCVStatus.msgID; +} + // ********** private functions ********** static void processIncomingCmdMessage( SW_UPDATE_CAN_MAIL_BOX_T mailBox ) { SW_UPDATE_CMD_STATUS_T SWUpdateCmdStatus; - S32 numOfBytes = getNumberOfBytesInBuffer( mailBox ); - BOOL status = getCommBuffer( mailBox, (U08*)&SWUpdateCmdStatus, sizeof( SW_UPDATE_CMD_STATUS_T ) ); + S32 bytesInBuffer = getNumberOfBytesInBuffer( mailBox ); - if ( ( TRUE == status ) && ( numOfBytes >= CAN_MESSAGE_PAYLOAD_SIZE ) ) + if ( bytesInBuffer == CAN_MESSAGE_PAYLOAD_SIZE ) { SW_UPDATE_RESP_STATUS_T resp; + 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; @@ -154,7 +161,7 @@ getCommBuffer( mailBox, (U08*)&SWUpdateRCVStatus, NUM_OF_CAN_BYTES_FOR_UPDATE ); - calcCRC = crc32( calcCRC, SWUpdateRCVStatus.SWUpdateBuffer, MAX_CRC_CALC_DATA_SIZE ); + calcCRC = crc32( calcCRC, SWUpdateRCVStatus.SWUpdateBuffer, MAX_CRC_CALC_DATA_SIZE ); // TODO fix the CRC length hasCRCPassed = ( SWUpdateRCVStatus.msgCRC == calcCRC ? TRUE : FALSE ); // TODO remove @@ -227,56 +234,60 @@ { ACK_NACK_STATUS_T ackStatus = NACK; - //if ( FPGA_UPDATE_READY == getFPGAFlashState() ) + if ( SWUpdateRCVStatus.cyberIndex != SW_UPDATE_FINAL_MSG_INDEX ) { - if ( SWUpdateRCVStatus.cyberIndex != SW_UPDATE_FINAL_MSG_INDEX ) - { - U16 removeThis; - U08 index = 0; - U32 counter; - U08 test[8]; - sizeToWrite = SW_UPDATE_FLASH_BUFFER_SIZE; - BOOL done = FALSE; + U16 removeThis; + U08 index = 0; + U32 counter; + U08 test[8]; + sizeToWrite = SW_UPDATE_FLASH_BUFFER_SIZE; + BOOL done = FALSE; - for ( removeThis = 0; removeThis < SW_UPDATE_FLASH_BUFFER_SIZE; ++removeThis ) + /*for ( removeThis = 0; removeThis < SW_UPDATE_FLASH_BUFFER_SIZE; ++removeThis ) + { + test[ index ] = SWUpdateRCVStatus.SWUpdateBuffer[removeThis]; + if ( index == 7 ) { - test[ index ] = SWUpdateRCVStatus.SWUpdateBuffer[removeThis]; - if ( index == 7 ) - { - canTransmit( canREG1, (U32)SW_TEST, test ); // Transmit the FPGA back up to make sure we totally received what we sent - for ( counter = 0; counter < 6000; counter++ ) {} - index = 0; - } - else - { - index += 1; - } - - // TODO this is temporary until the ROTTING is removed from the APP - // SWUpdateRCVStatus.SWUpdateBuffer[ removeThis ] = 0xFF & ( SWUpdateRCVStatus.SWUpdateBuffer[removeThis] - 27 ); + canTransmit( canREG1, (U32)SW_TEST, test ); // Transmit the FPGA back up to make sure we totally received what we sent + for ( counter = 0; counter < 6000; counter++ ) {} + index = 0; } - // 3192290 - // 1596144 - if ( ( 1596144 - REMOVETHEVAR < SW_UPDATE_FLASH_BUFFER_SIZE ) && ( REMOVETHEVAR != 0 ) ) - { - sizeToWrite = 1596144 - REMOVETHEVAR; - REMOVETHEVAR += sizeToWrite; - done = TRUE; - } else { - REMOVETHEVAR += SW_UPDATE_FLASH_BUFFER_SIZE; + index += 1; } - memcpy( REMOVETESTBUFFER, SWUpdateRCVStatus.SWUpdateBuffer, sizeToWrite); - signalFPGAToWriteToFlash( SWUpdateRCVStatus.SWUpdateBuffer, sizeToWrite ); - if ( TRUE == done ) - { - signalFPGAToSelfConfigure(); - } + // TODO this is temporary until the ROTTING is removed from the APP + // SWUpdateRCVStatus.SWUpdateBuffer[ removeThis ] = 0xFF & ( SWUpdateRCVStatus.SWUpdateBuffer[removeThis] - 27 ); + }*/ + // 3192290 + // 1596144 + 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 ) + { + signalFPGAToSelfConfigure(); + } } + else + { + SW_UPDATE_RESP_STATUS_T resp; + prepareResponseMessage( SWUpdateRCVStatus.msgID, ACK, &resp ); + sendAckNackStatusFromFirmware( (U08*)&resp ); + } + return ackStatus; }