Index: App/Services/SystemComm.c =================================================================== diff -u -r1d856a336fbfdc72a1e1165b64f1725e497c5f65 -ra0f8a69651a1c29c9f76894aed5ab23ee8ace7c7 --- App/Services/SystemComm.c (.../SystemComm.c) (revision 1d856a336fbfdc72a1e1165b64f1725e497c5f65) +++ App/Services/SystemComm.c (.../SystemComm.c) (revision a0f8a69651a1c29c9f76894aed5ab23ee8ace7c7) @@ -378,19 +378,24 @@ { // consume message (+sync byte) msgSize = getFromCommBuffer( CAN_IN_BUFFERS[i], data, msgSize+1 ); + // if message data is at least minimum size, convert received message data to a message and add to message queue if ( msgSize > MESSAGE_OVERHEAD_SIZE ) { MESSAGE_WRAPPER_T rcvMsg; U08 *dataPtr = data+1; // skip over sync byte messagesInBuffer = TRUE; - // convert received message data to a message and add to message queue + // blank the new message record blankMessageInWrapper( &rcvMsg ); + // copy message header portion of message data to the new message memcpy( &(rcvMsg.msg.hdr), dataPtr, sizeof(MESSAGE_HEADER_T) ); dataPtr += sizeof(MESSAGE_HEADER_T); + // copy message cargo portion of message data to the new message memcpy( &(rcvMsg.msg.cargo), dataPtr, rcvMsg.msg.hdr.cargoLen ); dataPtr += rcvMsg.msg.hdr.cargoLen; + // copy CRC portion of message data to the new message rcvMsg.crc = *dataPtr; + // add new message to queue for later processing addToMsgQueue( MSG_Q_IN_CAN, &rcvMsg ); } // message is at least as large as minimum size } // looks like there is a complete message in the comm buffer