Index: firmware/App/Modes/TreatmentRecirc.c =================================================================== diff -u -r6b870cd0699bb3ee22b93981d51373a6c2d56162 -r3135defd5053f5724eac7375ffd56ad1d129d5ae --- firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision 6b870cd0699bb3ee22b93981d51373a6c2d56162) +++ firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision 3135defd5053f5724eac7375ffd56ad1d129d5ae) @@ -35,7 +35,7 @@ // ********** private definitions ********** /// Alarm if re-circulation is running for this much time. TODO - finalize these times w/ Systems -static const U32 RECIRC_TIMEOUT_MS = ( ( 15 * SEC_PER_MIN * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ); +static const U32 RECIRC_TIMEOUT = ( ( 15 * SEC_PER_MIN * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ); /// Re-circulation status broadcast interval. static const U32 RECIRC_DATA_PUBLISH_INTERVAL = ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); /// Target flow rate for re-circulation of saline on blood-side circuit. @@ -231,7 +231,7 @@ signalEndTreatment(); // signal end Tx sub-mode } // Has max time in re-circ sub-mode been exceeded? - else if ( recircTimerCtr > RECIRC_TIMEOUT_MS ) + else if ( recircTimerCtr > RECIRC_TIMEOUT ) { signalGoToTreatmentStopped(); activateAlarmNoData( ALARM_ID_TREATMENT_RECIRC_TIMEOUT_ALARM ); @@ -269,7 +269,7 @@ result = TREATMENT_RECIRC_RECIRC_STATE; } // Has max time in re-circ sub-mode been exceeded? - else if ( recircTimerCtr > RECIRC_TIMEOUT_MS ) + else if ( recircTimerCtr > RECIRC_TIMEOUT ) { signalGoToTreatmentStopped(); activateAlarmNoData( ALARM_ID_TREATMENT_RECIRC_TIMEOUT_ALARM ); @@ -460,8 +460,8 @@ { if ( ++recircPublishTimerCtr >= RECIRC_DATA_PUBLISH_INTERVAL ) { - U32 timeout = RECIRC_TIMEOUT_MS / TASK_GENERAL_INTERVAL; - U32 countdown = ( recircTimerCtr >= RECIRC_TIMEOUT_MS ? 0 : ( RECIRC_TIMEOUT_MS - recircTimerCtr ) / TASK_GENERAL_INTERVAL ); + U32 timeout = RECIRC_TIMEOUT / TASK_GENERAL_INTERVAL; + U32 countdown = ( recircTimerCtr >= RECIRC_TIMEOUT ? 0 : ( RECIRC_TIMEOUT - recircTimerCtr ) / TASK_GENERAL_INTERVAL ); recircPublishTimerCtr = 0; broadcastRecircData( timeout, countdown ); Index: firmware/App/Modes/TreatmentStop.c =================================================================== diff -u -r6b870cd0699bb3ee22b93981d51373a6c2d56162 -r3135defd5053f5724eac7375ffd56ad1d129d5ae --- firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision 6b870cd0699bb3ee22b93981d51373a6c2d56162) +++ firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision 3135defd5053f5724eac7375ffd56ad1d129d5ae) @@ -22,6 +22,7 @@ #include "DialOutFlow.h" #include "ModeTreatment.h" #include "OperationModes.h" +#include "SystemCommMessages.h" #include "TaskGeneral.h" #include "TreatmentStop.h" #include "Valves.h" @@ -35,17 +36,22 @@ /// Maximum time in this mode before blood sitting warning given (in general task intervals). static const U32 MAX_TIME_BLOOD_SITTING = ( ( 5 * SEC_PER_MIN * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ); +/// Treatment stop status broadcast interval. +static const U32 TREATMENT_STOP_DATA_PUBLISH_INTERVAL = ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); // ********** private data ********** static TREATMENT_STOP_STATE_T currentTxStopState; ///< Current treatment stop state. static U32 bloodSittingTimerCtr; ///< Timer counter tracks time in this mode while blood is sitting. +static U32 stopPublishTimerCtr; ///< Timer counter (in GP task intervals) counts time to next status broadcast. // ********** private function prototypes ********** static TREATMENT_STOP_STATE_T handleTreatmentStopRecircState( void ); static TREATMENT_STOP_STATE_T handleTreatmentStopNoRecircState( void ); +static void publishTreatmentStopData( void ); + /*********************************************************************//** * @brief * The initTreatmentStop function initializes the Treatment Stop sub-mode @@ -58,6 +64,7 @@ { currentTxStopState = TREATMENT_STOP_RECIRC_STATE; bloodSittingTimerCtr = 0; + stopPublishTimerCtr = 0; } /*********************************************************************//** @@ -153,6 +160,9 @@ SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_TREATMENT_STOP_INVALID_STATE, currentTxStopState ); break; } + + // Broadcast treatment stop status + publishTreatmentStopData(); } /*********************************************************************//** @@ -208,4 +218,24 @@ return currentTxStopState; } +/*********************************************************************//** + * @brief + * The publishTreatmentStopData function publishes treatment stop progress to UI + * at 1 Hz interval. + * @details Inputs: stopPublishTimerCtr, bloodSittingTimerCtr + * @details Outputs: treatment stop data published + * @return none + *************************************************************************/ +static void publishTreatmentStopData( void ) +{ + if ( ++stopPublishTimerCtr >= TREATMENT_STOP_DATA_PUBLISH_INTERVAL ) + { + U32 timeout = MAX_TIME_BLOOD_SITTING / TASK_GENERAL_INTERVAL; + U32 countdown = ( bloodSittingTimerCtr >= MAX_TIME_BLOOD_SITTING ? 0 : ( MAX_TIME_BLOOD_SITTING - bloodSittingTimerCtr ) / TASK_GENERAL_INTERVAL ); + + stopPublishTimerCtr = 0; + broadcastTreatmentStopData( timeout, countdown ); + } +} + /**@}*/ Index: firmware/App/Modes/TreatmentStop.h =================================================================== diff -u -rc46815918e7cf33e8736f180094843758f1e21b2 -r3135defd5053f5724eac7375ffd56ad1d129d5ae --- firmware/App/Modes/TreatmentStop.h (.../TreatmentStop.h) (revision c46815918e7cf33e8736f180094843758f1e21b2) +++ firmware/App/Modes/TreatmentStop.h (.../TreatmentStop.h) (revision 3135defd5053f5724eac7375ffd56ad1d129d5ae) @@ -32,6 +32,8 @@ * @{ */ +// ********** public definitions ****************** + // ********** public function prototypes ********** void initTreatmentStop( void ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r161a56481d1a194704b63a5fd55d4c5583fa94df -r3135defd5053f5724eac7375ffd56ad1d129d5ae --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 161a56481d1a194704b63a5fd55d4c5583fa94df) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3135defd5053f5724eac7375ffd56ad1d129d5ae) @@ -1194,6 +1194,37 @@ /***********************************************************************//** * @brief + * The broadcastTreatmentStopData function constructs a treatment stop data msg to + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details Inputs: none + * @details Outputs: treatment stop data msg constructed and queued + * @param timeout treatment stop timeout (in sec) + * @param countdown treatment stop timeout count down (in sec) + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastTreatmentStopData( U32 timeout, U32 countdown ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_TREATMENT_STOP_TIMER_DATA; + msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); + + memcpy( payloadPtr, &timeout, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + memcpy( payloadPtr, &countdown, sizeof( U32 ) ); + + // 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 * The broadcastRinsebackData function constructs a rinseback data msg to * be broadcast and queues the msg for transmit on the appropriate CAN channel. * @details Inputs: none @@ -1249,7 +1280,6 @@ result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED ); return result; - } /***********************************************************************//** Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r161a56481d1a194704b63a5fd55d4c5583fa94df -r3135defd5053f5724eac7375ffd56ad1d129d5ae --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 161a56481d1a194704b63a5fd55d4c5583fa94df) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 3135defd5053f5724eac7375ffd56ad1d129d5ae) @@ -251,6 +251,9 @@ // MSG_ID_SALINE_BOLUS_DATA BOOL broadcastSalineBolusData( SALINE_BOLUS_DATA_PAYLOAD_T data ); +// MSG_ID_HD_TREATMENT_STOP_TIMER_DATA +BOOL broadcastTreatmentStopData( U32 timeout, U32 countdown ); + // MSG_ID_HD_RINSEBACK_PROGRESS BOOL broadcastRinsebackData( RINSEBACK_DATA_PAYLOAD_T data );