Index: firmware/App/HDCommon.h =================================================================== diff -u -r27f3db92495948d4c1192421c1b0c20338c4a034 -r38e8e85e6add1c4f798af6ada4a45cc7db547f3e --- firmware/App/HDCommon.h (.../HDCommon.h) (revision 27f3db92495948d4c1192421c1b0c20338c4a034) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision 38e8e85e6add1c4f798af6ada4a45cc7db547f3e) @@ -60,6 +60,7 @@ #define SKIP_SELF_TESTS 1 // Skip Pre-treatment Self-tests #define SKIP_PRIMING 1 // Skip Pre-treatment Prime // #define V1_5_SYSTEM 1 // Build for v1.5 system + #define SKIP_UI_INTERACTION 1 // Skip UI interaction #include #include Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r368e2fde80a5cc108f61c021830c684e05fb62d5 -r38e8e85e6add1c4f798af6ada4a45cc7db547f3e --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 368e2fde80a5cc108f61c021830c684e05fb62d5) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 38e8e85e6add1c4f798af6ada4a45cc7db547f3e) @@ -29,6 +29,7 @@ #include "ModePostTreat.h" #include "ModeTreatmentParams.h" #include "SystemCommMessages.h" +#include "TaskGeneral.h" #include "Timers.h" #include "Valves.h" @@ -39,6 +40,9 @@ // ********** private definitions ********** +/// Interval (ms/task time) at which the post-treatment state data is published on the CAN bus. +#define POST_TREATMENT_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) + #define EMPTY_RESERVOIR_VOLUME_ML 0 ///< Empty reservoir volume in ml. #define DIP_FLUSH_FLOW_RATE_ML_MIN 150 ///< Dialysate inlet pump flow rate during flush in mL/min. @@ -62,6 +66,7 @@ static HD_POST_TREATMENT_STATE_T currentPostTreatmentState; ///< Current state of post-treatment mode state machine. static DRAIN_STATE_T currentDrainReservoirState; ///< Current drain reservoir state. +static U32 postTreatmentPublishTimerCounter; ///< Timer counter used to schedule post-treatment data broadcast. static TREATMENT_LOG_DATA_PAYLOAD_T treatmentLogData; ///< Treatment parameters record for logging. @@ -91,6 +96,7 @@ isDrainStarted = FALSE; currentPostTreatmentState = HD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; currentDrainReservoirState = DRAIN_RESERVOIR_ONE_STATE; + postTreatmentPublishTimerCounter = 0; memset( &treatmentLogData, 0x0, sizeof( TREATMENT_LOG_DATA_PAYLOAD_T ) ); } @@ -124,11 +130,10 @@ setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); setValveAirTrap( STATE_CLOSED ); + stopSyringePump(); signalBloodPumpHardStop(); signalDialOutPumpHardStop(); signalDialInPumpHardStop(); - - stopSyringePump(); } /*********************************************************************//** @@ -160,6 +165,12 @@ break; } + if ( ++postTreatmentPublishTimerCounter >= POST_TREATMENT_DATA_PUB_INTERVAL ) + { + broadcastPostTreatmentState( currentPostTreatmentState ); + postTreatmentPublishTimerCounter = 0; + } + return currentPostTreatmentState; } @@ -247,7 +258,9 @@ if ( STATE_CLOSED == getFPGADoorState() ) { +#ifndef SKIP_UI_INTERACTION if ( TRUE == patientDisconnectionConfirmed ) +#endif { patientDisconnectionConfirmed = FALSE; state = HD_POST_TREATMENT_DRAIN_RESERVOIRS_STATE; @@ -291,7 +304,9 @@ if ( DRAIN_COMPLETE_STATE == currentDrainReservoirState ) { +#ifndef SKIP_UI_INTERACTION if ( TRUE == disposableRemovalConfirmed ) +#endif { disposableRemovalConfirmed = FALSE; state = HD_POST_TREATMENT_VERIFY_STATE; @@ -318,7 +333,7 @@ { if ( FALSE == isCartridgeUnloaded() ) { - activateAlarmNoData( ALARM_ID_HD_SYRINGE_DETECTED ); + activateAlarmNoData( ALARM_ID_CARTRIDGE_REMOVAL_FAILURE ); } if ( TRUE == isSyringeDetected() ) Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r368e2fde80a5cc108f61c021830c684e05fb62d5 -r38e8e85e6add1c4f798af6ada4a45cc7db547f3e --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 368e2fde80a5cc108f61c021830c684e05fb62d5) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 38e8e85e6add1c4f798af6ada4a45cc7db547f3e) @@ -1369,7 +1369,31 @@ return result; } - + +/*********************************************************************//** + * @brief + * The broadcastPostTreatmentState function constructs a post treatment state msg + * to be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details Inputs: none + * @details Outputs: post-treatment state msg constructed and queued + * @param postTreatmentSubMode post-treatment state sub-mode + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastPostTreatmentState( U32 postTreatmentSubMode ) +{ + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_POST_TREATMENT_STATE; + msg.hdr.payloadLen = sizeof( U32 ); + + memcpy( payloadPtr, &postTreatmentSubMode, sizeof( U32 ) ); + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + return serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED ); +} + /*********************************************************************//** * @brief * The broadcastPowerOffWarning function constructs a power off warning msg to Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r368e2fde80a5cc108f61c021830c684e05fb62d5 -r38e8e85e6add1c4f798af6ada4a45cc7db547f3e --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 368e2fde80a5cc108f61c021830c684e05fb62d5) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 38e8e85e6add1c4f798af6ada4a45cc7db547f3e) @@ -277,6 +277,9 @@ // MSG_ID_TREATMENT_STATE BOOL broadcastTreatmentState( TREATMENT_STATE_DATA_T payload ); + +// MSG_ID_HD_POST_TREATMENT_STATE +BOOL broadcastPostTreatmentState( U32 postTreatmentSubMode ); // MSG_ID_POWER_OFF_WARNING BOOL broadcastPowerOffWarning( void );