Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r47c41046beba8affaaaa13a4f222a7b99bd193f1 -recf20c9111729fe3264aa381ccb06cdd695bf98a --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 47c41046beba8affaaaa13a4f222a7b99bd193f1) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision ecf20c9111729fe3264aa381ccb06cdd695bf98a) @@ -99,6 +99,7 @@ switch ( postState ) { case DG_POST_STATE_START: + SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_STARTUP, 0, 0 ) postState = DG_POST_STATE_FW_COMPATIBILITY; #ifdef SKIP_POST postState = DG_POST_STATE_COMPLETED; Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r992dce16d63424ddd30fe9ac2f819e9a53b21977 -recf20c9111729fe3264aa381ccb06cdd695bf98a --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 992dce16d63424ddd30fe9ac2f819e9a53b21977) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision ecf20c9111729fe3264aa381ccb06cdd695bf98a) @@ -122,6 +122,7 @@ void execOperationModes( void ) { DG_OP_MODE_T newMode; + U32 priorSubMode = currentSubMode; // any new mode requests? newMode = arbitrateModeRequest(); // will return current mode if no pending requests @@ -197,6 +198,16 @@ break; } + // Send sub-mode change event when appropriate + if ( lastMode != currentMode ) + { + priorSubMode = 0; + } + if ( ( priorSubMode != currentSubMode ) || ( lastMode != currentMode ) ) + { + SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_SUB_MODE_CHANGE, priorSubMode, currentSubMode ) + } + // publish op mode on interval broadcastOperationMode(); } @@ -296,6 +307,8 @@ *************************************************************************/ static void transitionToNewOperationMode( DG_OP_MODE_T newMode ) { + SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_OP_MODE_CHANGE, lastMode, newMode ) + // setup for new operating mode switch ( newMode ) { Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r92a0a399021a2d120155b0a779855893284b8cbb -recf20c9111729fe3264aa381ccb06cdd695bf98a --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 92a0a399021a2d120155b0a779855893284b8cbb) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision ecf20c9111729fe3264aa381ccb06cdd695bf98a) @@ -216,6 +216,41 @@ /*********************************************************************//** * @brief + * The sendEvent function constructs an DG event message to the UI and + * queues the msg for transmit on the appropriate CAN channel. + * @details Inputs: none + * @details Outputs: DG event msg constructed and queued. + * @param event Enumeration of event type that occurred + * @param dat1 First data associated with event + * @param dat2 Second data associated with event + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL sendEvent( DG_EVENT_ID_T event, EVENT_DATA_T dat1, EVENT_DATA_T dat2 ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + U32 e = (U32)event; + + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_EVENT; + msg.hdr.payloadLen = sizeof( U32 ) + sizeof( EVENT_DATA_T ) * 2; + + memcpy( payloadPtr, &e, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + memcpy( payloadPtr, &dat1, sizeof( EVENT_DATA_T ) ); + payloadPtr += sizeof( EVENT_DATA_T ); + memcpy( payloadPtr, &dat2, sizeof( EVENT_DATA_T ) ); + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_2_UI, ACK_REQUIRED ); + + return result; +} + +/*********************************************************************//** + * @brief * The broadcastAlarmTriggered function constructs an alarm triggered msg to * be broadcast and queues the msg for transmit on the appropriate CAN channel. * @details Inputs: none Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r233034b67edaee48012bf9a5478327519e0256bb -recf20c9111729fe3264aa381ccb06cdd695bf98a --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 233034b67edaee48012bf9a5478327519e0256bb) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision ecf20c9111729fe3264aa381ccb06cdd695bf98a) @@ -52,6 +52,9 @@ // ACK MSG BOOL sendACKMsg( MESSAGE_T *message ); +// MSG_ID_DG_EVENT +BOOL sendEvent( DG_EVENT_ID_T event, EVENT_DATA_T dat1, EVENT_DATA_T dat2 ); + // MSG_ID_ALARM_TRIGGERED BOOL broadcastAlarmTriggered( U32 alarm, ALARM_DATA_T almData1, ALARM_DATA_T almData2 );