Index: firmware/App/Modes/ConsumableSelfTest.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -91,6 +91,8 @@ *************************************************************************/ void execConsumableSelfTest( void ) { + CONSUMABLE_SELF_TESTS_STATE_T priorSubState = currentConsumableSelfTestState; + switch( currentConsumableSelfTestState ) { case CONSUMABLE_SELF_TESTS_INSTALL_STATE: @@ -157,6 +159,10 @@ break; } + if ( priorSubState != currentConsumableSelfTestState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentConsumableSelfTestState ); + } // Handle triggered alarm with stop property handleConsumableSelfTestStopRequest(); } Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -623,6 +623,8 @@ *************************************************************************/ void execDialysis( void ) { + DIALYSIS_STATE_T priorSubState = currentDialysisState; + // Check ultrafiltration max rate and accuracy during dialysis (even when ultrafiltration is paused). checkUFAccuracyAndVolume(); @@ -646,6 +648,10 @@ break; } + if ( priorSubState != currentDialysisState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentDialysisState ); + } // Publish saline bolus data at set interval (whether we are delivering one or not) publishSalineBolusData(); } @@ -661,6 +667,7 @@ static DIALYSIS_STATE_T handleDialysisUltrafiltrationState( void ) { DIALYSIS_STATE_T result = DIALYSIS_UF_STATE; + UF_STATE_T priorSubState = currentUFState; U32 preStop = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ); F32 minRem = (F32)getTreatmentTimeRemainingSecs() / (F32)SEC_PER_MIN; @@ -697,6 +704,11 @@ break; } + if ( priorSubState != currentUFState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentUFState ); + } + return result; } @@ -712,6 +724,8 @@ { DIALYSIS_STATE_T result = DIALYSIS_SALINE_BOLUS_STATE; + SALINE_BOLUS_STATE_T priorSubState = currentSalineBolusState; + switch ( currentSalineBolusState ) { case SALINE_BOLUS_STATE_IDLE: @@ -736,6 +750,11 @@ break; } + if ( priorSubState != currentSalineBolusState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentSalineBolusState ); + } + return result; } Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r775f8ad98cccfd06d712ab339d1d88e3e640803c -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 775f8ad98cccfd06d712ab339d1d88e3e640803c) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -171,6 +171,7 @@ U32 execPostTreatmentMode( void ) { BOOL stop = isStopButtonPressed(); + HD_POST_TREATMENT_STATE_T priorSubState = currentPostTreatmentState; switch ( currentPostTreatmentState ) { @@ -195,6 +196,11 @@ break; } + if ( priorSubState != currentPostTreatmentState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, priorSubState, currentPostTreatmentState ); + } + if ( ++postTreatmentPublishTimerCounter >= getU32OverrideValue( &postTreatmentModePublishInterval ) ) { POST_TREATMENT_STATE_DATA_T data; @@ -512,6 +518,8 @@ *************************************************************************/ static void execDrainReservoirs( void ) { + DRAIN_STATE_T priorSubState = currentDrainReservoirState; + switch ( currentDrainReservoirState ) { case DRAIN_DG_DEPRIME_STATE: @@ -538,6 +546,11 @@ SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_POST_TREATMENT_RESERVOIR_MGMT_INVALID_STATE, currentDrainReservoirState ); break; } + + if ( priorSubState != currentDrainReservoirState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentDrainReservoirState ); + } } /*********************************************************************//** Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -276,6 +276,7 @@ *************************************************************************/ U32 execTreatParamsMode( void ) { + HD_TREATMENT_PARAMS_MODE_STATE_T priorSubState = currentTreatmentParamsState; BOOL stop = isStopButtonPressed(); if ( TRUE == stop ) @@ -304,6 +305,11 @@ } + if ( priorSubState != currentTreatmentParamsState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentTreatmentParamsState ); + } + return (U32)currentTreatmentParamsState; } Index: firmware/App/Modes/PreTreatmentRecirc.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -85,6 +85,8 @@ *************************************************************************/ void execPreTreatmentRecirc( void ) { + HD_PRE_TREATMENT_RECIRC_STATE_T priorSubState = currentPreTreatmentRecircState; + // execute pre-treatment recirculate state machine switch ( currentPreTreatmentRecircState ) { @@ -101,6 +103,10 @@ break; } + if ( priorSubState != currentPreTreatmentRecircState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentPreTreatmentRecircState ); + } // All flags should be handled by now, reset in case flags not handle in current state resetPreTreatmentRecircFlags(); } Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -218,6 +218,7 @@ *************************************************************************/ void execPrime( void ) { + HD_PRE_TREATMENT_PRIME_STATE_T priorSubState = currentPrimeState; // execute prime sub-mode state machine switch ( currentPrimeState ) { @@ -293,6 +294,11 @@ // Prime flags should be handled by now resetPrimeFlags(); + if ( priorSubState != currentPrimeState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentPrimeState ); + } + // Broadcast priming data broadcastPrimingStatus(); } Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -281,7 +281,7 @@ void execRinseback( void ) { rinsebackTimerCtr++; - + RINSEBACK_STATE_T priorSubState = rinsebackState; switch ( rinsebackState ) { case RINSEBACK_STOP_INIT_STATE: @@ -309,6 +309,10 @@ break; } + if ( priorSubState != rinsebackState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, rinsebackState ); + } // Rinseback flags should be handled by now - reset in case not handled by current state resetRinsebackFlags(); Index: firmware/App/Modes/SampleWater.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -87,6 +87,8 @@ *************************************************************************/ void execSampleWater( void ) { + SAMPLE_WATER_STATE_T priorSubState = currentSampleWaterState; + #ifndef _RELEASE_ if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_SAMPLE_WATER ) ) { @@ -113,6 +115,11 @@ break; } } + + if ( priorSubState != currentSampleWaterState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentSampleWaterState ); + } } /*********************************************************************//** Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r660876bca7ae34f862ae9cc6feef9a30ec02fe94 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 660876bca7ae34f862ae9cc6feef9a30ec02fe94) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -288,6 +288,8 @@ *************************************************************************/ void execNoCartSelfTests( void ) { + NO_CART_SELF_TESTS_STATE_T priorSubState = currentNoCartSelfTestsState; + // execute no cartridge self-tests state machine switch ( currentNoCartSelfTestsState ) { @@ -335,6 +337,10 @@ // Self-tests flags should be handled by now, reset if flags not handled with current state resetSelfTestsFlags(); + if ( priorSubState != currentNoCartSelfTestsState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentNoCartSelfTestsState ); + } // Publish current self-test time data if ( calcTimeSince( selfTestPreviousPublishDataTime ) >= SELF_TEST_TIME_DATA_PUB_INTERVAL ) { @@ -415,6 +421,8 @@ *************************************************************************/ void execDrySelfTests( void ) { + DRY_SELF_TESTS_STATE_T priorSubState = currentDrySelfTestsState; + // execute dry self-tests state machine switch ( currentDrySelfTestsState ) { @@ -511,6 +519,10 @@ // Self-tests flags should be handled by now, reset if flags not handled with current state resetSelfTestsFlags(); + if ( priorSubState != currentDrySelfTestsState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentDrySelfTestsState ); + } // Publish current self-test time data if ( calcTimeSince( selfTestPreviousPublishDataTime ) >= SELF_TEST_TIME_DATA_PUB_INTERVAL ) { @@ -589,6 +601,8 @@ *************************************************************************/ void execWetSelfTests( void ) { + WET_SELF_TESTS_STATE_T priorSubState = currentWetSelfTestsState; + #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WET_SELF_TEST ) == SW_CONFIG_ENABLE_VALUE ) { @@ -658,6 +672,11 @@ // Self-tests flags should be handled by now, reset if flags not handled with current state resetSelfTestsFlags(); + + if ( priorSubState != currentWetSelfTestsState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentWetSelfTestsState ); + } } /*********************************************************************//** Index: firmware/App/Modes/TreatmentEnd.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -183,6 +183,7 @@ void execTreatmentEnd( void ) { txEndTimerCtr++; + TREATMENT_END_STATE_T priorSubState = treatmentEndState; switch ( treatmentEndState ) { @@ -199,6 +200,10 @@ break; } + if ( priorSubState != treatmentEndState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, treatmentEndState ); + } // Re-circulate flags should be handled by now - reset in case not handled by current state resetTreatmentEndFlags(); } Index: firmware/App/Modes/TreatmentRecirc.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -191,6 +191,7 @@ { // Count time in this sub-mode recircTimerCtr++; + TREATMENT_RECIRC_STATE_T priorSubState = treatmentRecircState; switch ( treatmentRecircState ) { @@ -207,6 +208,10 @@ break; } + if ( priorSubState != treatmentRecircState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, treatmentRecircState ); + } // Re-circulate flags should be handled by now - reset in case not handled by current state resetTreatmentRecircFlags(); Index: firmware/App/Modes/TreatmentStop.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215 --- firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision 82b7c4c94b0f8b3f8a3d3d2e41384a7a7d497215) @@ -218,6 +218,7 @@ *************************************************************************/ void execTreatmentStop( void ) { + TREATMENT_STOP_STATE_T priorSubState = currentTxStopState; // Execute treatment stop sub-mode state machine switch ( currentTxStopState ) { @@ -242,6 +243,10 @@ break; } + if ( priorSubState != currentTxStopState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentTxStopState ); + } // Broadcast treatment stop status publishTreatmentStopData(); }