Index: firmware/App/Modes/ConsumableSelfTest.c =================================================================== diff -u -r38355442b06187fe5d57deca647b3adf2fa26b89 -r3970ba21aa2500f662620ef3d4b3e1e7a48fc47a --- firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision 38355442b06187fe5d57deca647b3adf2fa26b89) +++ firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision 3970ba21aa2500f662620ef3d4b3e1e7a48fc47a) @@ -72,7 +72,7 @@ signalDialInPumpHardStop(); signalDialOutPumpHardStop(); stopSyringePump(); - setCurrentSubState( (U32)currentConsumableSelfTestState ); + setCurrentSubState( (U32)CONSUMABLE_SELF_TESTS_INSTALL_STATE ); // Set valves to default positions setValveAirTrap( STATE_CLOSED ); Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r38355442b06187fe5d57deca647b3adf2fa26b89 -r3970ba21aa2500f662620ef3d4b3e1e7a48fc47a --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 38355442b06187fe5d57deca647b3adf2fa26b89) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 3970ba21aa2500f662620ef3d4b3e1e7a48fc47a) @@ -153,7 +153,7 @@ signalBloodPumpHardStop(); signalDialOutPumpHardStop(); signalDialInPumpHardStop(); - setCurrentSubState( currentPostTreatmentState ); + setCurrentSubState( NO_SUB_STATE ); collectTreatmentLogData(); exitBloodLeakNormalState(); Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r067fc27c9f9a87c7388d0f1438a7cecd7418170b -r3970ba21aa2500f662620ef3d4b3e1e7a48fc47a --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 067fc27c9f9a87c7388d0f1438a7cecd7418170b) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 3970ba21aa2500f662620ef3d4b3e1e7a48fc47a) @@ -61,7 +61,8 @@ static HD_OP_MODE_T currentMode; ///< Current operation mode. static U32 currentSubMode; ///< The currently active state of the active mode. static U32 broadcastModeIntervalCtr; ///< Interval counter used to determine when to broadcast operation mode. Initialize to 11 to stagger broadcast. -static U32 currentSubState; +static U32 currentSubState; ///< current sub state. +static U32 current4thLevelState; ///< current 4th level state. /// Interval (in task intervals) at which to publish operation mode data to CAN bus. static OVERRIDE_U32_T opModePublishInterval = { BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, 0 }; /// Local structure init for saving confirmation requests @@ -112,7 +113,8 @@ lastMode = MODE_INIT; currentMode = MODE_INIT; currentSubMode = 0; - currentSubState = 0xFF; + currentSubState = NO_SUB_STATE; + current4thLevelState = NO_SUB_STATE; broadcastModeIntervalCtr = DATA_PUBLISH_COUNTER_START_COUNT; transitionToNewOperationMode( MODE_INIT ); @@ -141,6 +143,7 @@ U32 priorSubMode = currentSubMode; U32 priorSubState = currentSubState; U32 priorOpMode = (U32)currentMode; + U32 prior4thLevelState = current4thLevelState; // Any new mode requests? newMode = arbitrateModeRequest(); // Will return current mode if no pending requests @@ -215,7 +218,8 @@ } // End switch // Send operation status event when appropriate - if ( priorOpMode != currentMode || priorSubMode != currentSubMode || priorSubState != currentSubState ) + if ( priorOpMode != currentMode || priorSubMode != currentSubMode || + priorSubState != currentSubState || prior4thLevelState != current4thLevelState ) { sendOperationStatusEvent(); SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, priorSubMode, currentSubMode ) @@ -593,6 +597,19 @@ /*********************************************************************//** * @brief + * The setCurrentSubState function sets the current subState. + * @details Inputs: subState + * @details Outputs: currentSubState + * @param subState the enumerated sub state. + * @return none + *************************************************************************/ +void setCurrent4thLevelState( U32 state ) +{ + current4thLevelState = state; +} + +/*********************************************************************//** + * @brief * The sendOperationStatusEvent function constructs and sends an HD operation * status event. * @details Inputs: currentMode, currentSubMode, currentSubState @@ -606,7 +623,8 @@ EVENT_DATA_T dat2; U32 opData = ( (U08)currentMode + ( (U08)currentSubMode << SHIFT_8_BITS_FOR_BYTE_SHIFT ) + - ( (U08)currentSubState << SHIFT_16_BITS_FOR_WORD_SHIFT ) ); + ( (U08)currentSubState << SHIFT_16_BITS_FOR_WORD_SHIFT ) + + ( (U08)current4thLevelSate << SHIFT_24_BITS ) ); dat2.dataType = EVENT_DATA_TYPE_U32; dat2.data.uInt.data = 0; Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r067fc27c9f9a87c7388d0f1438a7cecd7418170b -r3970ba21aa2500f662620ef3d4b3e1e7a48fc47a --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 067fc27c9f9a87c7388d0f1438a7cecd7418170b) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 3970ba21aa2500f662620ef3d4b3e1e7a48fc47a) @@ -53,6 +53,7 @@ void setConfirmationRequestStatus( GENERIC_CONFIRM_ID_T requestID, CONFIRMATION_REQUEST_STATUS_T status ); // Set the confirmation request status GENERIC_CONFIRM_ID_T addConfirmationRequest( GENERIC_CONFIRM_ID_T requestID, GENERIC_CONFIRM_COMMAND_T requestType, U32 rejectReason ); // Add a new confirmation request void setCurrentSubState( U32 subState ); // Set the current substate. +void setCurrent4thLevelState( U32 state ); // Set the current 4th level state. BOOL testSetOperationMode( HD_OP_MODE_T newMode ); // Force transition to a given mode (if allowed) BOOL testSetOpModePublishIntervalOverride( U32 ms ); Index: firmware/App/Modes/SampleWater.c =================================================================== diff -u -r38355442b06187fe5d57deca647b3adf2fa26b89 -r3970ba21aa2500f662620ef3d4b3e1e7a48fc47a --- firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 38355442b06187fe5d57deca647b3adf2fa26b89) +++ firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 3970ba21aa2500f662620ef3d4b3e1e7a48fc47a) @@ -75,6 +75,7 @@ cmdDGSampleWater( SAMPLE_WATER_CMD_FLUSH ); } initSampleWater(); + setCurrentSubState( (U32)SAMPLE_WATER_SETUP_STATE ); } /*********************************************************************//** Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r6178c7d08bb6b7efce0bc8191a01d2ec77a57858 -r3970ba21aa2500f662620ef3d4b3e1e7a48fc47a --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 6178c7d08bb6b7efce0bc8191a01d2ec77a57858) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 3970ba21aa2500f662620ef3d4b3e1e7a48fc47a) @@ -681,6 +681,7 @@ if ( priorSubState != currentWetSelfTestsState ) { + setCurrent4thLevelState( currentWetSelfTestsState ); SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentWetSelfTestsState ); } }