Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -ra51419e487a62eac8bce5f5e2a6c366b11e9e11e -r5072f7dedbe4be9dd9d2bfe9a46f53c1d3f356fc --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision a51419e487a62eac8bce5f5e2a6c366b11e9e11e) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 5072f7dedbe4be9dd9d2bfe9a46f53c1d3f356fc) @@ -52,7 +52,8 @@ #define USER_CONFIRM_CHANGE_TIMEOUT_MS ( 60 * MS_PER_SECOND ) ///< Require user to confirm UF volume change within this time. #define PREVENT_UF_VOL_CHANGE_IF_NEARLY_DONE_SEC ( 10 * SEC_PER_MIN ) ///< Prevent UF volume change if treatment within this much time from end of treatment (in seconds). -#define TREATMENT_TIME_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the treatment time & state data is published on the CAN bus. +#define TREATMENT_TIME_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the treatment time data is published on the CAN bus. +#define TREATMENT_STATE_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the treatment state data is published on the CAN bus. /// Interval (ms/task time) at which updated, valid treatment setting ranges are published on the CAN bus. #define TREATMENT_SETTINGS_RANGES_PUB_INTERVAL ( ( 60 * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) @@ -77,7 +78,8 @@ static U32 treatmentTimeMS; ///< Elapsed treatment time (in ms). static U32 lastTreatmentTimeStamp; ///< Last time elapsed treatment time was recorded (a timestamp in ms). -static U32 treatmentTimeBroadcastTimerCtr; ///< Treatment data broadcast timer counter used to schedule when to transmit data. +static U32 treatmentTimeBroadcastTimerCtr; ///< Treatment time data broadcast timer counter used to schedule when to transmit data. +static U32 treatmentStateBroadcastTimerCtr; ///< Treatment state data broadcast timer counter used to schedule when to transmit data. static U32 treatmentParamsRangesBroadcastTimerCtr; ///< Treatment parameter ranges broadcast timer counter used to schedule when to transmit updated ranges. static BOOL alarmStopSignalled; ///< Flag indicates an alarm w/ stop property was triggered. @@ -124,8 +126,9 @@ treatmentTimeMS = 0; lastTreatmentTimeStamp = 0; - treatmentTimeBroadcastTimerCtr = 0; - treatmentParamsRangesBroadcastTimerCtr = TREATMENT_SETTINGS_RANGES_PUB_INTERVAL; // So we send ranges immediately + treatmentTimeBroadcastTimerCtr = TREATMENT_TIME_DATA_PUB_INTERVAL; // So we send time data immediately when we begin treatment mode + treatmentStateBroadcastTimerCtr = TREATMENT_STATE_DATA_PUB_INTERVAL; // So we send state data immediately when we begin treatment mode + treatmentParamsRangesBroadcastTimerCtr = TREATMENT_SETTINGS_RANGES_PUB_INTERVAL; // So we send ranges immediately when we begin treatment mode presTreatmentTimeSecs = 0; presBloodFlowRate = 0; @@ -1137,10 +1140,17 @@ elapsedTreatmentTimeInSecs = presTreatmentTimeSecs; currentTreatmentState = TREATMENT_END_STATE; } - // Broadcast treatment time and state data at interval + // Broadcast treatment time data at interval if ( ++treatmentTimeBroadcastTimerCtr >= TREATMENT_TIME_DATA_PUB_INTERVAL ) { U32 timeRemaining = presTreatmentTimeSecs - elapsedTreatmentTimeInSecs; + + broadcastTreatmentTime( presTreatmentTimeSecs, elapsedTreatmentTimeInSecs, timeRemaining ); + treatmentTimeBroadcastTimerCtr = 0; + } + // Broadcast treatment state data at interval + if ( ++treatmentStateBroadcastTimerCtr >= TREATMENT_STATE_DATA_PUB_INTERVAL ) + { DIALYSIS_STATE_T dialysisState = getDialysisState(); UF_STATE_T uFState = getUltrafiltrationState(); SALINE_BOLUS_STATE_T salineBolusInProgress = getSalineBolusState(); @@ -1149,14 +1159,11 @@ RINSEBACK_STATE_T rBState = getCurrentRinsebackState(); TREATMENT_RECIRC_STATE_T rCState = getCurrentTreatmentRecircState(); TREATMENT_END_STATE_T endState = getCurrentTreatmentEndState(); - HEPARIN_STATE_T hepState = HEPARIN_STATE_OFF; // TODO - get Heparin state when implemented - - broadcastTreatmentTime( presTreatmentTimeSecs, elapsedTreatmentTimeInSecs, timeRemaining ); broadcastTreatmentState( (U32)currentTreatmentState, (U32)uFState, (U32)salineBolusInProgress, (U32)hepState, (U32)rBState, (U32)rCState, (U32)bldPrimeState, (U32)endState, (U32)stopState ); - treatmentTimeBroadcastTimerCtr = 0; + treatmentStateBroadcastTimerCtr = 0; } }