Index: firmware/App/Services/Download.c =================================================================== diff -u -r012573b1913d1bfd2357acfadcad6bb20b295ad9 -ra5cbf07811efee3c038a550f251d3daefff2bf63 --- firmware/App/Services/Download.c (.../Download.c) (revision 012573b1913d1bfd2357acfadcad6bb20b295ad9) +++ firmware/App/Services/Download.c (.../Download.c) (revision a5cbf07811efee3c038a550f251d3daefff2bf63) @@ -85,6 +85,17 @@ SWUpdateCommandState = UPDATE_CMD_IDLE; } +void sendFPGAAckNackStatus( ACK_NACK_STATUS_T ackNackStatus ) +{ + SW_UPDATE_RESP_STATUS_T resp; + + BOOL status = FALSE; // TODO do we need this? + + prepareResponseMessage( SWUpdateRCVStatus.msgID, ackNackStatus, &resp ); + status = sendAckNackStatusFromFirmware( (U08*)&resp ); + clearCommBuffer( thisStackMailBox ); +} + // ********** private functions ********** static void processIncomingCmdMessage( SW_UPDATE_CAN_MAIL_BOX_T mailBox ) @@ -132,7 +143,7 @@ { S32 bytesInBuffer = getNumberOfBytesInBuffer( mailBox ); - if ( bytesInBuffer >= NUM_OF_CAN_BYTES_FOR_UPDATE ) + if ( bytesInBuffer == NUM_OF_CAN_BYTES_FOR_UPDATE ) { SW_UPDATE_RESP_STATUS_T resp; @@ -167,10 +178,17 @@ break; } } + else + { + prepareResponseMessage( SWUpdateRCVStatus.msgID, ackNackStatus, &resp ); + status = sendAckNackStatusFromFirmware( (U08*)&resp ); // TODO do we have to retry if send failed? + clearCommBuffer( mailBox ); // TODo does this need to be here? How about resync? + //clearSWUpdateBuffer(); // TODO uncomment + } - prepareResponseMessage( SWUpdateRCVStatus.msgID, ackNackStatus, &resp ); - status = sendAckNackStatusFromFirmware( (U08*)&resp ); // TODO do we have to retry if send failed? - clearCommBuffer( mailBox ); // TODo does this need to be here? How about resync? + //prepareResponseMessage( SWUpdateRCVStatus.msgID, ackNackStatus, &resp ); + //status = sendAckNackStatusFromFirmware( (U08*)&resp ); // TODO do we have to retry if send failed? + //clearCommBuffer( mailBox ); // TODo does this need to be here? How about resync? //clearSWUpdateBuffer(); // TODO uncomment } } @@ -192,16 +210,23 @@ static ACK_NACK_STATUS_T handleFirmwareUpdate( void ) { - ACK_NACK_STATUS_T ackStatus = NACK; + SW_UPDATE_RESP_STATUS_T resp; + ACK_NACK_STATUS_T ackStatus = ACK; + BOOL status = FALSE; + if ( SWUpdateRCVStatus.cyberIndex != SW_UPDATE_FINAL_MSG_INDEX ) { _disable_IRQ(); - BOOL status = handleUpdatingFlash( SWUpdateRCVStatus.SWUpdateBuffer ); - ackStatus = ( TRUE == status ? ACK : NACK ); + status = handleUpdatingFlash( SWUpdateRCVStatus.SWUpdateBuffer ); + ackStatus = ( TRUE == status ? ACK : NACK ); _enable_IRQ(); } + prepareResponseMessage( SWUpdateRCVStatus.msgID, ackStatus, &resp ); + status = sendAckNackStatusFromFirmware( (U08*)&resp ); // TODO do we have to retry if send failed? + clearCommBuffer( thisStackMailBox ); // TODo does this need to be here? How about resync? + return ackStatus; } @@ -258,6 +283,10 @@ } } } + //else + { + BOOL d = FALSE; + } return ackStatus; }