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 Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -r30f049651877229042e3f8700c8596e5b9a1e0f4 -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 30f049651877229042e3f8700c8596e5b9a1e0f4) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -29,8 +29,22 @@ * @{ */ -// ********** private function prototypes ********** +// ********** public definitions ********** +/// Payload record structure for a pre-treatment state message. +typedef struct +{ + U32 preTreatmentSubMode; ///< Current pre-treatment sub-mode + U32 sampleWaterState; ///< Current sample water state + U32 noCartSelfTestsState; ///< Current no cartridge self-tests state + U32 installState; ///< Current disposable installation state + U32 drySelfTestsState; ///< Current dry self-tests state + U32 primeState; ///< Current prime state + U32 patientConnectionState; ///< Current patient connection state +} PRE_TREATMENT_STATE_DATA_T; + +// ********** public function prototypes ********** + void initPreTreatmentMode( void ); // Initialize this module void transitionToPreTreatmentMode( void ); // Prepares for transition to pre-treatment mode U32 execPreTreatmentMode( void ); // Execute the pre-treatment mode state machine (call from OperationModes) Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r633861a3e472c1a288fa10a52ec0f7e7153e4dce -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 633861a3e472c1a288fa10a52ec0f7e7153e4dce) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -244,6 +244,18 @@ /*********************************************************************//** * @brief + * The getPrimeState function returns the current state of prime sub-mode. + * @details Inputs: currentPrimeState + * @details Outputs: none + * @return current prime state + *************************************************************************/ +U32 getPrimeState( void ) +{ + return (U32)currentPrimeState; +} + +/*********************************************************************//** + * @brief * The isPrimeCompleted function returns the status of prime. * @details Inputs: none * @details Outputs: none Index: firmware/App/Modes/Prime.h =================================================================== diff -u -r19fc8f015489be63932eed969d28329d123332e0 -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Modes/Prime.h (.../Prime.h) (revision 19fc8f015489be63932eed969d28329d123332e0) +++ firmware/App/Modes/Prime.h (.../Prime.h) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -50,7 +50,9 @@ void transitionToPrime( void ); void execPrime( void ); +U32 getPrimeState( void ); BOOL isPrimeCompleted( void ); + void signalResumePrime( void ); void signalStopPrime( void ); Index: firmware/App/Modes/SampleWater.c =================================================================== diff -u -r633861a3e472c1a288fa10a52ec0f7e7153e4dce -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 633861a3e472c1a288fa10a52ec0f7e7153e4dce) +++ firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -110,6 +110,18 @@ /*********************************************************************//** * @brief + * The getSampleWaterState function returns the current state of sample water sub-mode. + * @details Inputs: currentSampleWaterState + * @details Outputs: none + * @return current sample water state + *************************************************************************/ +U32 getSampleWaterState( void ) +{ + return (U32)currentSampleWaterState; +} + +/*********************************************************************//** + * @brief * The isSampleWaterPassed function returns the result of sample water. * @details Inputs: sampleWaterPassed * @details Outputs: none Index: firmware/App/Modes/SampleWater.h =================================================================== diff -u -r633861a3e472c1a288fa10a52ec0f7e7153e4dce -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Modes/SampleWater.h (.../SampleWater.h) (revision 633861a3e472c1a288fa10a52ec0f7e7153e4dce) +++ firmware/App/Modes/SampleWater.h (.../SampleWater.h) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -36,6 +36,7 @@ void transitionToSampleWater( void ); void execSampleWater( void ); +U32 getSampleWaterState( void ); BOOL isSampleWaterPassed( void ); /**@}*/ Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rc7f14267973d4c9731fa0dc42607eeea23722b13 -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision c7f14267973d4c9731fa0dc42607eeea23722b13) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -366,6 +366,19 @@ /*********************************************************************//** * @brief + * The getNoCartSelfTestsState function returns the current state of no + * cartridge self-tests sub-mode. + * @details Inputs: currentNoCartSelfTestsState + * @details Outputs: none + * @return current no cartridge self-tests state + *************************************************************************/ +U32 getNoCartSelfTestsState( void ) +{ + return (U32)currentNoCartSelfTestsState; +} + +/*********************************************************************//** + * @brief * The isNoCartSelfTestsPassed function returns the status of no cartridge self-tests. * @details Inputs: none * @details Outputs: none @@ -476,6 +489,19 @@ /*********************************************************************//** * @brief + * The getDrySelfTestsState function returns the current state of dry self-tests sub-mode. + * @details Inputs: currentDrySelfTestsState + * @details Outputs: none + * @return current dry self-tests state + *************************************************************************/ +U32 getDrySelfTestsState( void ) +{ + return (U32)currentDrySelfTestsState; +} + + +/*********************************************************************//** + * @brief * The isDrySelfTestsPassed function returns the status of dry self-tests. * @details Inputs: none * @details Outputs: none Index: firmware/App/Modes/SelfTests.h =================================================================== diff -u -r19fc8f015489be63932eed969d28329d123332e0 -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Modes/SelfTests.h (.../SelfTests.h) (revision 19fc8f015489be63932eed969d28329d123332e0) +++ firmware/App/Modes/SelfTests.h (.../SelfTests.h) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -39,10 +39,12 @@ void transitionToNoCartSelfTests(); void execNoCartSelfTests( void ); +U32 getNoCartSelfTestsState( void ); BOOL isNoCartSelfTestsPassed( void ); void transitionToDrySelfTests(); void execDrySelfTests( void ); +U32 getDrySelfTestsState( void ); BOOL isDrySelfTestsPassed( void ); void transitionToWetSelfTests(); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r633861a3e472c1a288fa10a52ec0f7e7153e4dce -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 633861a3e472c1a288fa10a52ec0f7e7153e4dce) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -1149,6 +1149,34 @@ return result; } + +/*********************************************************************//** + * @brief + * The broadcastPreTreatmentState function constructs a pre-treatment state msg to + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details Inputs: none + * @details Outputs: pre-treatment state msg constructed and queued + * @param preTreatmentDataPtr pointer to pre-treatment data record to broadcast + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastPreTreatmentState( PRE_TREATMENT_STATE_DATA_T *preTreatmentDataPtr ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_PRE_TREATMENT_STATE; + msg.hdr.payloadLen = sizeof( PRE_TREATMENT_STATE_DATA_T ); + + memcpy( payloadPtr, preTreatmentDataPtr, sizeof( PRE_TREATMENT_STATE_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_HD_BROADCAST, ACK_NOT_REQUIRED ); + + return result; +} /*********************************************************************//** * @brief Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r633861a3e472c1a288fa10a52ec0f7e7153e4dce -rb6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 633861a3e472c1a288fa10a52ec0f7e7153e4dce) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision b6b733b8d1f25bc2dbe2a94c620cd80aa3ae06f7) @@ -25,7 +25,8 @@ #include "DialInFlow.h" #include "DialOutFlow.h" #include "Dialysis.h" -#include "Prime.h" +#include "Prime.h" +#include "ModePreTreat.h" #include "ModeTreatment.h" #include "MsgQueues.h" #include "NVDataMgmt.h" @@ -224,7 +225,10 @@ BOOL broadcastTreatmentTime( U32 secsTotTreatment, U32 secsElapsed, U32 secsRemaining ); // MSG_ID_TREATMENT_STATE -BOOL broadcastTreatmentState( U32 subMode, U32 uFState, U32 salineBolusState ); +BOOL broadcastTreatmentState( U32 subMode, U32 uFState, U32 salineBolusState ); + +// MSG_ID_PRE_TREATMENT_STATE +BOOL broadcastPreTreatmentState( PRE_TREATMENT_STATE_DATA_T *preTreatmentDataPtr ); // MSG_ID_POWER_OFF_WARNING BOOL broadcastPowerOffWarning( void );