Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r633861a3e472c1a288fa10a52ec0f7e7153e4dce -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 633861a3e472c1a288fa10a52ec0f7e7153e4dce) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -24,6 +24,7 @@ #include "SelfTests.h" #include "SampleWater.h" #include "SystemCommMessages.h" +#include "TaskGeneral.h" /** * @addtogroup HDPreTreatmentMode @@ -32,16 +33,21 @@ // ********** private definitions ********** +///< Interval (ms/task time) at which the pre-treatment state data is published on the CAN bus. +#define PRE_TREATMENT_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) + // ********** private data ********** static BOOL treatStartReqReceived = FALSE; ///< Flag indicates user requests treatment begin. static BOOL alarmActionStopReceived = FALSE; ///< Flag indicates an alarm w/ stop property was triggered. static BOOL alarmActionResumeReceived = FALSE; ///< Flag indicates alarm action resume received. static HD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. +static U32 preTreatmentPublishTimerCounter; ///< Pre-treatment data broadcast timer counter used to schedule when to transmit data. // ********** private function prototypes ********** +static void publishPreTreatmentState( void ); static void resetSignalFlags( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleWaterSampleState( void ); @@ -142,6 +148,9 @@ // Alarm response request flags should be handled at this point, reset in case not handled in current state resetSignalFlags(); + // Broadcast pre-treatment data + publishPreTreatmentState(); + return (U32)currentPreTreatmentState; } @@ -206,6 +215,34 @@ /*********************************************************************//** * @brief + * The publishPreTreatmentState function broadcasts pre-treatment sub-mode + * and current sub-mode state. + * @details Inputs: pre-treatment sub-mode, state + * @details Outputs: pre-treatment sub-mode, state messages sent on interval + * @return none + *************************************************************************/ +static void publishPreTreatmentState( void ) +{ + // Broadcast treatment time and state data at interval + if ( ++preTreatmentPublishTimerCounter >= PRE_TREATMENT_DATA_PUB_INTERVAL ) + { + PRE_TREATMENT_STATE_DATA_T preTreatmentData; + + preTreatmentData.preTreatmentSubMode = currentPreTreatmentState; + preTreatmentData.sampleWaterState = getSampleWaterState(); + preTreatmentData.noCartSelfTestsState = getNoCartSelfTestsState(); + preTreatmentData.installState = 0; // TODO: Add install state from the module + preTreatmentData.drySelfTestsState = getDrySelfTestsState(); + preTreatmentData.primeState = getPrimeState(); + preTreatmentData.patientConnectionState = 0; // TODO: Add patient connection state from the module + + broadcastPreTreatmentState( &preTreatmentData ); + preTreatmentPublishTimerCounter = 0; + } +} + +/*********************************************************************//** + * @brief * The resetSignalFlags function resets all signal flags. * @details Inputs: none * @details Outputs: signal flags set to FALSE