Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r070554b23739bf16ea2bf9528ebabda1ce0ffeb3 -rd9cc76524777a12ba77b58ce95416dddfb032997 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 070554b23739bf16ea2bf9528ebabda1ce0ffeb3) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d9cc76524777a12ba77b58ce95416dddfb032997) @@ -68,12 +68,12 @@ static U08 pcRecvPacket[PC_MESSAGE_PACKET_SIZE] = {0,0,0,0,0,0,0,0}; // DMA control records -static g_dmaCTRL pcDMAXmitControlRecord; -static g_dmaCTRL pcDMARecvControlRecord; +static g_dmaCTRL pcDMAXmitControlRecord; // DMA transmit control record (UART-debug) +static g_dmaCTRL pcDMARecvControlRecord; // DMA receive control record (UART-debug) -static BOOL dgIsCommunicating = FALSE; -static BOOL uiIsCommunicating = FALSE; -static BOOL uiDidCommunicate = FALSE; +static BOOL dgIsCommunicating = FALSE; // has DG sent a message since last check +static BOOL uiIsCommunicating = FALSE; // has UI sent a message since last check +static BOOL uiDidCommunicate = FALSE; // has UI every sent a message // ********** private function prototypes ********** @@ -82,8 +82,8 @@ static BOOL isCANBoxForRecv( CAN_MESSAGE_BOX_T srcCANBox ); static COMM_BUFFER_T findNextHighestPriorityCANPacketToTransmit( void ); -static void transmitNextCANPacket( void ); -static void transmitNextUARTPacket( void ); +static U32 transmitNextCANPacket( void ); +static U32 transmitNextUARTPacket( void ); static void processIncomingData( void ); static U32 parseMessageFromBuffer( U08 *data, U32 len ); @@ -222,13 +222,23 @@ // if CAN transmitter is idle, start transmitting any pending packets if ( FALSE == isCAN1TransmitInProgress() ) { - transmitNextCANPacket(); + U32 bytesXmitted = transmitNextCANPacket(); + + if ( bytesXmitted > 0 ) + { + signalCANXmitsInitiated(); + } } // if UART transmitter is idle, start transmitting any pending packets if ( FALSE == isSCI1DMATransmitInProgress() ) { - transmitNextUARTPacket(); + U32 bytesXmitted = transmitNextUARTPacket(); + + if ( bytesXmitted > 0 ) + { + signalSCI1XmitsInitiated(); + } } } @@ -249,7 +259,12 @@ // message interrupt is for a transmit message box? if ( TRUE == isCANBoxForXmit( srcCANBox ) ) { - transmitNextCANPacket(); + U32 bytesXmitted = transmitNextCANPacket(); + + if ( 0 == bytesXmitted ) + { + signalCANXmitsCompleted(); + } } else if ( TRUE == isCANBoxForRecv( srcCANBox ) ) { @@ -302,7 +317,12 @@ *************************************************************************/ void handleUARTMsgXmitPacketInterrupt( void ) { - transmitNextUARTPacket(); + U32 bytesXmitted = transmitNextUARTPacket(); + + if ( 0 == bytesXmitted ) + { + signalSCI1XmitsCompleted(); + } } /************************************************************************* @@ -466,10 +486,11 @@ * Inputs : Output CAN Comm Buffers * Outputs : CAN packet transmit initiated. * @param msg : none - * @return none + * @return # of bytes transmitted *************************************************************************/ -static void transmitNextCANPacket( void ) +static U32 transmitNextCANPacket( void ) { + U32 result = 0; COMM_BUFFER_T buffer = findNextHighestPriorityCANPacketToTransmit(); // if a buffer is found with a packet to transmit, get packet from buffer and transmit it @@ -483,8 +504,11 @@ if ( dataSize == CAN_MESSAGE_PAYLOAD_SIZE ) { canTransmit( canREG1, mBox, data ); + result = CAN_MESSAGE_PAYLOAD_SIZE; } } + + return result; } /************************************************************************* @@ -495,10 +519,11 @@ * Inputs : Output UART Comm Buffer(s) * Outputs : UART DMA transmit initiated. * @param msg : none - * @return none + * @return # of bytes transmitted *************************************************************************/ -static void transmitNextUARTPacket( void ) +static U32 transmitNextUARTPacket( void ) { + U32 result = 0; U32 dataPend = numberOfBytesInCommBuffer( COMM_BUFFER_OUT_UART_PC ); U32 dataSize; @@ -512,8 +537,11 @@ dmaSetCtrlPacket( DMA_CH3, pcDMAXmitControlRecord ); dmaSetChEnable( DMA_CH3, DMA_HW ); setSCI1DMATransmitInterrupt(); + result = PC_MESSAGE_PACKET_SIZE; } } + + return result; }