Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r79d12d6910a03b6fe08161d0cd3c706e7d359fff -r729561329c224146d94b91bce5992cddec51f7c6 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 79d12d6910a03b6fe08161d0cd3c706e7d359fff) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 729561329c224146d94b91bce5992cddec51f7c6) @@ -62,6 +62,8 @@ #define CONCENTRATE_BOTTLE_RESERVOIOR_FILLS 3 ///< Concentrate bottle reservoir vlls. #define BICARB_PERCENT_FILL 0.03514F ///< Bicarb volume percentage of reservoir volume. #define ACID_PERCENT_FILL 0.02222F ///< Acid volume percentage of reservoir volume. +#define DATA_PUBLISH_COUNTER_START_COUNT 70 ///< Data publish counter start count. +#define DRAIN_MODE_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the drain mode data is published on the CAN bus. ///< Concentrate bottle acid low volume in mL. static const F32 CONCENTRATE_BOTTLE_ACID_LOW_VOLUME_ML = ( CONCENTRATE_BOTTLE_PRIMING_VOL_ML + @@ -78,13 +80,15 @@ static BOOL rinseConcentrateLines; ///< Flag indicates to rinse concentrate lines. static U32 rinseConcentrateLinesTimerCtr; ///< Timer counter for rinsing concentrate lines. static U32 dialysateDrainStartTime; ///< Dialysate drain start time. - +static U32 dataPublishCounter; ///< Used to schedule drain mode data publication to CAN bus. +static OVERRIDE_U32_T drainModeDataPublishInterval = { DRAIN_MODE_DATA_PUB_INTERVAL, + DRAIN_MODE_DATA_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish drain mode data to CAN bus. // ********** private function prototypes ********** static DG_DRAIN_STATE_T handleDrainStateStart( void ); static DG_DRAIN_STATE_T handleDrainStateDrain( void ); static DG_DRAIN_STATE_T handleDrainStateTare( void ); static DG_DRAIN_STATE_T handleRinseState( void ); - +static void publishDrainModeData( void ); /*********************************************************************//** * @brief * The initDrainMode function initializes the drain mode module. @@ -101,6 +105,7 @@ drainEmptyTareTimerCtr = 0; rinseConcentrateLinesTimerCtr = 0; dialysateDrainStartTime = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; } /*********************************************************************//** @@ -398,4 +403,33 @@ return result; } +/*********************************************************************//** + * @brief + * The publishFillModeData function publishes fill mode data + * at the set interval. + * @details Inputs: fillModeDataPublicationTimerCounter, fillModeDataPublishInterval + * @details Outputs: fillModeData + * @return none + *************************************************************************/ +static void publishDrainModeData( void ) +{ + // publish Drain mode data on interval + if ( ++dataPublishCounter >= getU32OverrideValue( &fillModeDataPublishInterval ) ) + { + DG_DRAIN_MODE_DATA_T drainModeData; + + U32 drainModeState; ///< Drain Mode state. + U32 badFillSignal; ///< Gen Idle bad fill signal. + U32 badFillState; ///< Gen Idle bad fill substate. + + drainModeData.drainModeState = drainState; + drainModeData.badFillSignal = getCurrentBadFillSignal(); + drainModeData.badFillState = getCurrentGenIdleBadFillState() + + broadcastData( /, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&drainModeData, sizeof( DG_DRAIN_MODE_DATA_T ) ); + // Populate the data structure for publication + dataPublishCounter = 0; + } +} + /**@}*/