Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r699c4f96ab672fb9db9ac218a5a00358dc68c2c6 -r2db16f950f61815bd8be6d7d300a82eb1f6ee6da --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 699c4f96ab672fb9db9ac218a5a00358dc68c2c6) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 2db16f950f61815bd8be6d7d300a82eb1f6ee6da) @@ -73,7 +73,7 @@ valveStates[ i ].ovData = DEENERGIZED; valveStates[ i ].override = OVERRIDE_RESET; } - commandedValvesStates = fromU32ArrayToU16( valveStates ); + commandedValvesStates = fromU32ArrayToU16(); setFPGAValveStates( commandedValvesStates ); // initially set all valves to de-energized state via FPGA valvesStatesPublicationTimerCounter = 0; // reset valves states publication timer @@ -106,7 +106,7 @@ } // set valves states (via FPGA) to currently commanded states - commandedValvesStates = fromU32ArrayToU16( valveStates ); + commandedValvesStates = fromU32ArrayToU16(); setFPGAValveStates( commandedValvesStates ); // publish valve states on interval Index: firmware/App/DGCommon.h =================================================================== diff -u -rc5e1315bfeb11335f66f7439e00857f26649e25b -r2db16f950f61815bd8be6d7d300a82eb1f6ee6da --- firmware/App/DGCommon.h (.../DGCommon.h) (revision c5e1315bfeb11335f66f7439e00857f26649e25b) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 2db16f950f61815bd8be6d7d300a82eb1f6ee6da) @@ -37,7 +37,7 @@ #define DISABLE_HEATERS_AND_TEMPS 1 // #define ENABLE_DIP_SWITCHES 1 // #define EMC_TEST_BUILD 1 -// #define ALARMS_DEBUG 1 + #define ALARMS_DEBUG 1 // #define HEATERS_DEBUG 1 // #define PRESSURES_DEBUG 1 #include Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r8f5feed92f41a476d5656038bcdfe884e17bd593 -r2db16f950f61815bd8be6d7d300a82eb1f6ee6da --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 8f5feed92f41a476d5656038bcdfe884e17bd593) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 2db16f950f61815bd8be6d7d300a82eb1f6ee6da) @@ -55,7 +55,7 @@ /* FAUL */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* SERV */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* INIT */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_INIT, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, - /* STAN */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_CIRC, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_NLEG, DG_MODE_CHEM }, + /* STAN */{ DG_MODE_FAUL, DG_MODE_SERV, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_CIRC, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_HEAT, DG_MODE_CHEM }, /* SOLO */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_SOLO, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_FLUS, DG_MODE_HEAT, DG_MODE_NLEG }, /* CIRC */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_CIRC, DG_MODE_FILL, DG_MODE_DRAI, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, /* FILL */{ DG_MODE_FAUL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_STAN, DG_MODE_NLEG, DG_MODE_CIRC, DG_MODE_FILL, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG, DG_MODE_NLEG }, Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r8f5feed92f41a476d5656038bcdfe884e17bd593 -r2db16f950f61815bd8be6d7d300a82eb1f6ee6da --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 8f5feed92f41a476d5656038bcdfe884e17bd593) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 2db16f950f61815bd8be6d7d300a82eb1f6ee6da) @@ -136,7 +136,8 @@ SW_FAULT_ID_CAN_PASSIVE_WARNING, SW_FAULT_ID_CAN_OFF_ERROR, SW_FAULT_ID_FPGA_UART_FRAME_ERROR, - SW_FAULT_ID_FPGA_UART_OVERRUN_ERROR, + SW_FAULT_ID_FPGA_UART_OVERRUN_ERROR, + SW_FAULT_ID_UTIL_TIME_WINDOWED_COUNT_ERROR, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/CommBuffers.c =================================================================== diff -u -r8f5feed92f41a476d5656038bcdfe884e17bd593 -r2db16f950f61815bd8be6d7d300a82eb1f6ee6da --- firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision 8f5feed92f41a476d5656038bcdfe884e17bd593) +++ firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision 2db16f950f61815bd8be6d7d300a82eb1f6ee6da) @@ -84,10 +84,7 @@ for ( d = 0; d < DOUBLE_BUFFERS; d++ ) { commBufferByteCount[ buffer ][ d ] = 0; - for ( i = 0; i < COMM_BUFFER_LENGTH; i++ ) - { - commBuffers[ buffer ][ d ][ i ] = 0; - } + memset( &commBuffers[ buffer ][ d ][ 0 ], 0, COMM_BUFFER_LENGTH ); } // release thread protection Index: firmware/App/Services/CommBuffers.h =================================================================== diff -u -r3f3729899d6811c763bc8e5ef9baf54a2d5c9cfe -r2db16f950f61815bd8be6d7d300a82eb1f6ee6da --- firmware/App/Services/CommBuffers.h (.../CommBuffers.h) (revision 3f3729899d6811c763bc8e5ef9baf54a2d5c9cfe) +++ firmware/App/Services/CommBuffers.h (.../CommBuffers.h) (revision 2db16f950f61815bd8be6d7d300a82eb1f6ee6da) @@ -36,6 +36,7 @@ COMM_BUFFER_IN_CAN_PC, COMM_BUFFER_OUT_CAN_PC, COMM_BUFFER_OUT_CAN_DG_2_UI, + COMM_BUFFER_LAST_CAN_BUFFER = COMM_BUFFER_OUT_CAN_DG_2_UI, #ifdef DEBUG_ENABLED COMM_BUFFER_IN_UART_PC, COMM_BUFFER_OUT_UART_PC, Index: firmware/App/Services/Interrupts.c =================================================================== diff -u -rc5e1315bfeb11335f66f7439e00857f26649e25b -r2db16f950f61815bd8be6d7d300a82eb1f6ee6da --- firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision c5e1315bfeb11335f66f7439e00857f26649e25b) +++ firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision 2db16f950f61815bd8be6d7d300a82eb1f6ee6da) @@ -92,7 +92,7 @@ { char debugStr[ 50 ]; - sprintf( debugStr, "DG-phantom interrupt\n" ); + strcpy( debugStr, "DG-phantom interrupt\n" ); sendDebugData( (U08*)debugStr, strlen(debugStr) ); sendDebugDataToUI( (U08*)debugStr ); } Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r699c4f96ab672fb9db9ac218a5a00358dc68c2c6 -r2db16f950f61815bd8be6d7d300a82eb1f6ee6da --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 699c4f96ab672fb9db9ac218a5a00358dc68c2c6) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 2db16f950f61815bd8be6d7d300a82eb1f6ee6da) @@ -231,45 +231,57 @@ * @return none *************************************************************************/ void execSystemCommTx( void ) -{ - // if CAN transmitter is idle, start transmitting any pending packets - if ( ( FALSE == dgIsOnlyCANNode ) && ( FALSE == isCAN1TransmitInProgress() ) ) - { - transmitNextCANPacket(); - } - else - { // generally, transmitter should not be busy at time of this function call - check timeout just in case so we don't get stuck waiting forever - if ( TRUE == didTimeout( lastCANPacketSentTimeStamp, CAN_XMIT_PACKET_TIMEOUT_MS ) ) +{ + // don't bother with transmitting if no other nodes on CAN bus + if ( FALSE == dgIsOnlyCANNode ) + { + // if CAN transmitter is idle, start transmitting any pending packets + if ( FALSE == isCAN1TransmitInProgress() ) { - // assume last packet was not successfully transmitted. Re-send last packet. - if ( ++canXmitRetryCtr <= MAX_XMIT_RETRIES ) + transmitNextCANPacket(); + } + else + { + // generally, transmitter should not be busy at time of this function call - check timeout just in case so we don't get stuck waiting forever + if ( TRUE == didTimeout( lastCANPacketSentTimeStamp, CAN_XMIT_PACKET_TIMEOUT_MS ) ) { - canTransmit( canREG1, lastCANPacketSentChannel, lastCANPacketSent ); -#ifdef DEBUG_ENABLED + // assume last packet was not successfully transmitted. Re-send last packet. + if ( ++canXmitRetryCtr <= MAX_XMIT_RETRIES ) { - char debugStr[100]; - sprintf( debugStr, "SystemComm-DG resend Last Frame.\n" ); - sendDebugDataToUI( (U08*)debugStr ); - } -#endif - } - // we must be only node on CAN bus - nobody is ACKing our transmitted frames - else - { - dgIsOnlyCANNode = TRUE; // set only CAN node flag - canXmitRetryCtr = MAX_XMIT_RETRIES; - signalCANXmitsCompleted(); // clear pending xmit flag - clearCANXmitBuffers(); // clear xmit buffers - nothing is going out right now + // ensure we have a previous CAN packet/channel to resend - canTransmit() channel param MUST be valid + if ( ( lastCANPacketSentChannel > COMM_BUFFER_NOT_USED ) && ( lastCANPacketSentChannel <= COMM_BUFFER_LAST_CAN_BUFFER ) ) + { + canTransmit( canREG1, lastCANPacketSentChannel, lastCANPacketSent ); + } #ifdef DEBUG_ENABLED - { - char debugStr[100]; - sprintf( debugStr, "SystemComm-DG is only node.\n" ); - sendDebugDataToUI( (U08*)debugStr ); + { + char debugStr[100]; + strcpy( debugStr, "SystemComm-DG resend Last Frame.\n" ); + sendDebugData( (U08*)debugStr, strlen(debugStr) ); + sendDebugDataToUI( (U08*)debugStr ); + } +#endif } + // we must be only node on CAN bus - nobody is ACKing our transmitted frames + else + { + if ( FALSE == dgIsOnlyCANNode ) + { +#ifdef DEBUG_ENABLED + char debugStr[100]; + strcpy( debugStr, "SystemComm-DG is only node.\n" ); + sendDebugData( (U08*)debugStr, strlen(debugStr) ); + sendDebugDataToUI( (U08*)debugStr ); #endif - } - } - } + dgIsOnlyCANNode = TRUE; // set only CAN node flag + canXmitRetryCtr = MAX_XMIT_RETRIES; + signalCANXmitsCompleted(); // clear pending xmit flag + clearCANXmitBuffers(); // clear xmit buffers - nothing is going out right now + } + } // end - are we retrying xmit or are we alone on CAN bus + } // end - pending xmit timeout? + } // end - transmit in progress or not + } // end - DG not alone on CAN bus #ifdef DEBUG_ENABLED // if UART transmitter is idle, start transmitting any pending packets @@ -883,7 +895,8 @@ #ifdef DEBUG_ENABLED { char debugStr[100]; - sprintf( debugStr, "SystemComm-DG-Bad Msg CRC.\n" ); + + strcpy( debugStr, "SystemComm-DG-Bad Msg CRC.\n" ); sendDebugDataToUI( (U08*)debugStr ); } #endif