Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r09e6320e3f3c3c973de0b66e5799d710db8cc427 -r5645305f9349c5c64be5560982bdf1abd5edb0fb --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 09e6320e3f3c3c973de0b66e5799d710db8cc427) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 5645305f9349c5c64be5560982bdf1abd5edb0fb) @@ -37,37 +37,40 @@ *************************************************************************/ void handleCANMsgInterrupt( SW_UPDATE_CAN_MAIL_BOX_T mailBox ) { - // TODO do we need check the range of the messages? - // TODO retry? + U08 data[ CAN_MESSAGE_FRAME_SIZE_BYTES ]; - U08 data[ CAN_MESSAGE_FRAME_SIZE ]; - - if ( SW_UPDATE_COMMAD == mailBox ) + switch ( mailBox ) { - if ( FALSE != canIsRxMessageArrived( canREG1, mailBox ) ) - { - U32 result = canGetData( canREG1, mailBox, data ); - - if ( result != 0 ) - { - addToCommBuffer( mailBox, data, CAN_MESSAGE_FRAME_SIZE ); - } - } - } - else - { - if ( RECEIVE_MSG_ID[ BL_STACK_ID ][ FW_STACKS_RCV_MAIL_BOX_INDEX ] == mailBox ) - { + case SW_UPDATE_COMMAD: + case SW_UPDATE_FFU_BROADCAST: + // Check for the command and broadcast messages if ( FALSE != canIsRxMessageArrived( canREG1, mailBox ) ) { U32 result = canGetData( canREG1, mailBox, data ); if ( result != 0 ) { - addToCommBuffer( mailBox, data, CAN_MESSAGE_FRAME_SIZE ); + addToCommBuffer( mailBox, data, CAN_MESSAGE_FRAME_SIZE_BYTES ); } } - } + break; + + default: + // If the update message is received and the update mail box is the mail box for this stack + // then process the message. The rest of the messages are ignored. + if ( RECEIVE_MSG_ID[ BL_STACK_ID ][ FW_STACKS_RCV_MAIL_BOX_INDEX ] == mailBox ) + { + if ( FALSE != canIsRxMessageArrived( canREG1, mailBox ) ) + { + U32 result = canGetData( canREG1, mailBox, data ); + + if ( result != 0 ) + { + addToCommBuffer( mailBox, data, CAN_MESSAGE_FRAME_SIZE_BYTES ); + } + } + } + break; } }