Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -re97a8d6ce7e2ae6c3935854b78f604a6846047ad -r640525dbad258a32c5dfecdc29268b432f72fb43 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision e97a8d6ce7e2ae6c3935854b78f604a6846047ad) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 640525dbad258a32c5dfecdc29268b432f72fb43) @@ -297,6 +297,30 @@ /*********************************************************************//** * @brief + * The getDGTdiTempCounter function gets the TDI temperature high and low counters values. + * @details Inputs: dgTdiTempCounter + * @details Outputs: none + * @return TDI temperature high and low temperature counter values. + *************************************************************************/ +DG_TDI_TEMP_COUNTER_T getDGTdiTempCounter( void ) +{ + return dgTdiTempCounter; +} + +/*********************************************************************//** + * @brief + * The getDGTdiTempetraure function gets the TDI temperature value. + * @details Inputs: dgDialysateTemp + * @details Outputs: none + * @return TDI temperature value. + *************************************************************************/ +F32 getDGTdiTempetraure( void ) +{ + return dgDialysateTemp; +} + +/*********************************************************************//** + * @brief * The getDGSubMode function gets the current DG operating sub-mode. * @details Inputs: dgSubMode * @details Outputs: none Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -re97a8d6ce7e2ae6c3935854b78f604a6846047ad -r640525dbad258a32c5dfecdc29268b432f72fb43 --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision e97a8d6ce7e2ae6c3935854b78f604a6846047ad) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 640525dbad258a32c5dfecdc29268b432f72fb43) @@ -102,12 +102,12 @@ U32 tdiHighTempDownCounter; ///< tdi high temperature down counter U32 prevTdiHighTempUpCounter; ///< previous tdi high temperature Up counter U32 prevTdiHighTempDownCounter; ///< previous tdi high temperature down counter - BOOL tdiHighclearAlarmStartTime; ///< to clear temp high alarm, use persistent method + U32 tdiHighclearAlarmStartTime; ///< to clear temp high alarm, use persistent method U32 tdiLowTempUpCounter; ///< tdi Low temperature Up counter U32 tdiLowTempDownCounter; ///< tdi Low temperature down counter U32 prevTdiLowTempUpCounter; ///< previous tdi low temperature Up counter U32 prevTdiLowTempDownCounter; ///< previous tdi low temperature down counter - BOOL tdiLowclearAlarmStartTime; ///< to clear temp low alarm, use persistent method + U32 tdiLowclearAlarmStartTime; ///< to clear temp low alarm, use persistent method DG_RESERVOIR_ID_T dgPrevActiveReservoir; ///< Previous Active reservoir. DG_RESERVOIR_ID_T dgCurrentActiveReservoir; ///< Current Active reservoir. } DG_TDI_TEMP_COUNTER_T; @@ -118,7 +118,9 @@ void execDGInterfaceMonitor( void ); -DG_OP_MODE_T getDGOpMode( void ); +DG_OP_MODE_T getDGOpMode( void ); +DG_TDI_TEMP_COUNTER_T getDGTdiTempCounter(void); +F32 getDGTdiTempetraure( void ); U32 getDGSubMode( void ); DG_RESERVOIR_ID_T getDGActiveReservoir( void ); DG_RESERVOIR_ID_T getDGInactiveReservoir( void ); Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r37733a07bec6a752717a9eadcab000685546eb83 -r640525dbad258a32c5dfecdc29268b432f72fb43 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 37733a07bec6a752717a9eadcab000685546eb83) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 640525dbad258a32c5dfecdc29268b432f72fb43) @@ -59,6 +59,8 @@ #define TREATMENT_TIME_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) /// Interval (ms/task time) at which the treatment state 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. +#define TDI_TEMPERATURE_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) /// 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 ) /// Interval (ms) at which the treatment periodic data is published on the CAN bus. @@ -88,6 +90,7 @@ static U32 lastTreatmentTimeStamp; ///< Last time elapsed treatment time was recorded (a timestamp in ms). 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 tdiTempCounterBroadcastTimerCtr; ///< TDI temperature 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. /// Interval (in task intervals) at which to publish alarm status to CAN bus. @@ -96,6 +99,8 @@ static OVERRIDE_U32_T treatmentStatePublishInterval = { TREATMENT_STATE_DATA_PUB_INTERVAL, TREATMENT_STATE_DATA_PUB_INTERVAL, TREATMENT_STATE_DATA_PUB_INTERVAL, 0 }; /// Interval (in task intervals) at which to publish alarm status to CAN bus. static OVERRIDE_U32_T treatmentParamRangesPublishInterval = { TREATMENT_SETTINGS_RANGES_PUB_INTERVAL, TREATMENT_SETTINGS_RANGES_PUB_INTERVAL, TREATMENT_SETTINGS_RANGES_PUB_INTERVAL, 0 }; +/// Interval (in task intervals) at which to publish alarm status to CAN bus. +static OVERRIDE_U32_T tdiTemperatureCounterPublishInterval = { TDI_TEMPERATURE_DATA_PUB_INTERVAL, TDI_TEMPERATURE_DATA_PUB_INTERVAL, TDI_TEMPERATURE_DATA_PUB_INTERVAL, 0 }; static BOOL resumeTreatmentAlarmResponseRequest; ///< Flag indicates user has requested treatment resume. static BOOL initiateRinsebackAlarmResponseRequest; ///< Flag indicates user has requested rinseback. @@ -166,6 +171,7 @@ 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 + tdiTempCounterBroadcastTimerCtr = TDI_TEMPERATURE_DATA_PUB_INTERVAL; // So we send state data immediately when we begin treatment mode presTreatmentTimeSecs = 0; presMaxUFVolumeML = 0.0; @@ -677,6 +683,7 @@ broadcastTreatmentTimeAndState(); broadcastTreatmentSettingsRanges(); broadcastTreatmentPeriodicData(); + broadcastTdiTemperatureCounters(); // Manage air trap control execAirTrapMonitorTreatment(); @@ -1462,6 +1469,43 @@ /*********************************************************************//** * @brief + * The broadcastTdiTemperatureCounters function broadcasts tdi temperature high and low + * counter variables. + * @details Inputs: tdiTempCounterBroadcastTimerCtr,dgDialysateTemp + * @details Outputs: tdiTempCounterBroadcastTimerCtr. + * @return none + *************************************************************************/ +void broadcastTdiTemperatureCounters( void ) +{ + DG_TDI_TEMP_COUNTER_T tdiTempCounter; + + // get Tdi temperature counter variables + tdiTempCounter = getDGTdiTempCounter(); + + // Broadcast treatment state data at interval + if ( ++tdiTempCounterBroadcastTimerCtr >= getU32OverrideValue( &tdiTemperatureCounterPublishInterval ) ) + { + TDI_TEMP_COUNTER_T payload; + + payload.tdiHighTempUpCntr = tdiTempCounter.tdiHighTempUpCounter; + payload.tdiHighTempDownCntr = tdiTempCounter.tdiHighTempDownCounter; + payload.prevTdiHighTempUpCntr = tdiTempCounter.prevTdiHighTempUpCounter; + payload.prevTdiHighTempDownCntr = tdiTempCounter.prevTdiHighTempDownCounter; + payload.tdiLowTempUpCntr = tdiTempCounter.tdiLowTempUpCounter; + payload.tdiLowTempDownCntr = tdiTempCounter.tdiLowTempDownCounter; + payload.prevTdiLowTempUpCntr = tdiTempCounter.prevTdiLowTempUpCounter; + payload.prevTdiLowTempDownCntr = tdiTempCounter.prevTdiLowTempDownCounter; + payload.dgCurrentActiveReservoir = tdiTempCounter.dgCurrentActiveReservoir; + payload.dgPrevActiveReservoir = tdiTempCounter.dgPrevActiveReservoir; + payload.dgTdiTemp = getDGTdiTempetraure(); + + broadcastData( MSG_ID_TDI_TEMP_COUNTER_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&payload, sizeof( TDI_TEMP_COUNTER_T ) ); + tdiTempCounterBroadcastTimerCtr = 0; + } +} + +/*********************************************************************//** + * @brief * The broadcastTreatmentSettingsRanges function computes and broadcasts * updated treatment parameter ranges that the user may change during treatment. * It is assumed that prescription settings have already been set prior to calling Index: firmware/App/Modes/ModeTreatment.h =================================================================== diff -u -r16b02389432724c1bd15e9ce58579bff95050a03 -r640525dbad258a32c5dfecdc29268b432f72fb43 --- firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 16b02389432724c1bd15e9ce58579bff95050a03) +++ firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 640525dbad258a32c5dfecdc29268b432f72fb43) @@ -56,6 +56,22 @@ U32 dialysisState; } TREATMENT_STATE_DATA_T; +/// Payload record structure for a tdi temperature counter message. +typedef struct +{ + U32 tdiHighTempUpCntr; + U32 tdiHighTempDownCntr; + U32 prevTdiHighTempUpCntr; + U32 prevTdiHighTempDownCntr; + U32 tdiLowTempUpCntr; + U32 tdiLowTempDownCntr; + U32 prevTdiLowTempUpCntr; + U32 prevTdiLowTempDownCntr; + DG_RESERVOIR_ID_T dgPrevActiveReservoir; + DG_RESERVOIR_ID_T dgCurrentActiveReservoir; + F32 dgTdiTemp; +} TDI_TEMP_COUNTER_T; + /// Payload record structure for an ultrafiltration volume change confirmation message. typedef struct { @@ -129,6 +145,7 @@ U32 getTreatmentEndTimeStamp( void ); // Get the treatment end time stamp void broadcastTreatmentTimeAndState( void ); // Broadcast the times and states of this treatment +void broadcastTdiTemperatureCounters( void ); // Broadcast the counter variables used in Tdi high and low temperature alarms BOOL verifyTreatmentDurationSettingChange( U32 treatmentTime ); BOOL verifyUFSettingsChange( F32 uFVolume );