Index: firmware/App/Services/CommBuffers.c =================================================================== diff -u -r3f3729899d6811c763bc8e5ef9baf54a2d5c9cfe -r8f5feed92f41a476d5656038bcdfe884e17bd593 --- firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision 3f3729899d6811c763bc8e5ef9baf54a2d5c9cfe) +++ firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision 8f5feed92f41a476d5656038bcdfe884e17bd593) @@ -17,7 +17,8 @@ #include // for memcpy() -#include "CommBuffers.h" +#include "CommBuffers.h" +#include "SystemComm.h" #include "SystemCommMessages.h" #include "Timers.h" @@ -118,34 +119,40 @@ { BOOL bufferFull = FALSE; U32 activeBuffer; - U32 currentActiveBufCount; // where to start adding new data to buffer (after existing data) + U32 currentActiveBufCount; // where to start adding new data to buffer (after existing data) + + // prevent adding to out-going CAN buffer if DG is only node on CAN bus + if ( ( FALSE == isDGOnlyCANNode() ) || + ( FALSE == isCANBoxForXmit( (CAN_MESSAGE_BOX_T)buffer ) ) ) + { + // thread protection for queue operations + _disable_IRQ(); - // thread protection for queue operations - _disable_IRQ(); + activeBuffer = activeDoubleBuffer[ buffer ]; + currentActiveBufCount = commBufferByteCount[ buffer ][ activeBuffer ]; - activeBuffer = activeDoubleBuffer[ buffer ]; - currentActiveBufCount = commBufferByteCount[ buffer ][ activeBuffer ]; + // check to make sure buffer is not too full to service this add + if ( len <= ( COMM_BUFFER_LENGTH - currentActiveBufCount ) ) + { + U08 *buffPtr; // buffer destination for added data - // check to make sure buffer is not too full to service this add - if ( len <= ( COMM_BUFFER_LENGTH - currentActiveBufCount ) ) - { - U08 *buffPtr; // buffer destination for added data + // set destination pointer to end of active buffer data + buffPtr = &commBuffers[ buffer ][ activeBuffer ][ currentActiveBufCount ]; + // copy source data to destination buffer + memcpy( buffPtr, data, len ); + // adjust buffer count per this data add (also reserves space to add data before releasing thread protection) + commBufferByteCount[ buffer ][ activeBuffer ] += len; + // data successfully added to buffer + result = TRUE; + } + else // buffer too full to add this much data + { + bufferFull = TRUE; + } + // release thread protection + _enable_IRQ(); + } - // set destination pointer to end of active buffer data - buffPtr = &commBuffers[ buffer ][ activeBuffer ][ currentActiveBufCount ]; - // copy source data to destination buffer - memcpy( buffPtr, data, len ); - // adjust buffer count per this data add (also reserves space to add data before releasing thread protection) - commBufferByteCount[ buffer ][ activeBuffer ] += len; - // data successfully added to buffer - result = TRUE; - } - else // buffer too full to add this much data - { - bufferFull = TRUE; - } - // release thread protection - _enable_IRQ(); // if buffer was full, check persistence - trigger s/w fault if persists if ( TRUE == bufferFull ) { @@ -162,7 +169,7 @@ // if buffer overflows persists, fault if ( calcTimeSince( firstBufferOverflowTimeStamp ) > BUFFER_OVERFLOW_PERSISTENCE_MS ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_ADD_TOO_MUCH_DATA, len ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_ADD_TOO_MUCH_DATA, (U32)buffer ) } } else // first overflow - set time stamp for persistence check @@ -180,7 +187,7 @@ } else // invalid buffer given { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_ADD_INVALID_BUFFER, buffer ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_ADD_INVALID_BUFFER, buffer ) } return result; @@ -241,7 +248,7 @@ } else // invalid buffer given { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_GET_INVALID_BUFFER, buffer ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_GET_INVALID_BUFFER, buffer ) } return result; @@ -299,7 +306,7 @@ } else // invalid buffer given { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_PEEK_INVALID_BUFFER, buffer ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_PEEK_INVALID_BUFFER, buffer ) } return numOfBytesPeeked; @@ -330,7 +337,7 @@ } else // invalid buffer { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_COUNT_INVALID_BUFFER, buffer ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_COUNT_INVALID_BUFFER, buffer ) } return result;