Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r59357d3831aa60f17ccdfbe0eef1a005935b9a58 -r4375a4147ee6ced5c7f254a2869673c9559a3921 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 59357d3831aa60f17ccdfbe0eef1a005935b9a58) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 4375a4147ee6ced5c7f254a2869673c9559a3921) @@ -104,6 +104,8 @@ static OVERRIDE_U32_T activeReservoir = { 0, 0, 0, 0 }; ///< The active reservoir that the DG is filling/draining/etc. static OVERRIDE_U32_T fillVolumeTargetMl = { 0, 0, 0, 0 }; ///< The target reservoir fill volume (in mL). static OVERRIDE_U32_T drainVolumeTargetMl = { 0, 0, 0, 0 }; ///< The target reservoir drain volume (in mL). +static OVERRIDE_U32_T reservoirDataPublishInterval = { RESERVOIR_DATA_PUB_INTERVAL, + RESERVOIR_DATA_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish reservoir data to CAN bus. /// The reservoirs' associate load cell. static LOAD_CELL_ID_T associatedLoadCell[ NUM_OF_DG_RESERVOIRS ] = { LOAD_CELL_RESERVOIR_1_PRIMARY, LOAD_CELL_RESERVOIR_2_PRIMARY }; @@ -124,6 +126,9 @@ static HD_MODE_SUB_MODE_T hdModes; ///< HD operations mode. static NV_OPS_T nvOps; ///< Non-volatile memory operations. +// ********** private function prototypes ********** +static void publishReservoirData( void ); + /*********************************************************************//** * @brief * The initReservoirs function initializes the Reservoirs module. @@ -191,27 +196,7 @@ } } - // publish active reservoir, fill/drain volume targets at 1 Hz. - if ( ++dataPublishCounter >= RESERVOIR_DATA_PUB_INTERVAL ) - { - RESERVOIR_DATA_T data; - - data.activeReservoir = getU32OverrideValue( &activeReservoir ); - data.fillToVolumeMl = getU32OverrideValue( &fillVolumeTargetMl ); - data.drainToVolumeMl = getU32OverrideValue( &drainVolumeTargetMl ); - data.timeReservoirCycleMS = heatersTempCalc.timeReservoirCycleMS; - data.timeReservoirFill2SwitchMS = heatersTempCalc.timeReservoirFill2SwitchMS; - data.timeUFDecayMS = heatersTempCalc.timeUFDecayMS; - data.tempUFFill = heatersTempCalc.tempUFFill; - data.tempReservoirUseActual = getReservoirCurrentTemperature(); - data.tempReservoirEndFill = heatersTempCalc.tempReservoirEndFill; - data.tempAvgFill = getAvgFillTemperature(); - data.tempLastFill = getLastFillTemperature(); - data.timereservoirFill = heatersTempCalc.timeReservoirFillMS; - - broadcastData( MSG_ID_DG_RESERVOIRS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( RESERVOIR_DATA_T ) ); - dataPublishCounter = 0; - } + publishReservoirData(); } /*********************************************************************//** @@ -1025,7 +1010,40 @@ reservoirPreviousStatus[ reservoirId ].previousDrainFlowML = 0.0F; } +/*********************************************************************//** + * @brief + * The publishReservoirData function publishes reservoir data + * at the set interval. + * @details Inputs: dataPublishCounter, reservoirDataPublishInterval + * @details Outputs: data + * @return none + *************************************************************************/ +static void publishReservoirData( void ) +{ + // publish active reservoir, fill/drain volume targets at 1 Hz. + if ( ++dataPublishCounter >= getU32OverrideValue( &reservoirDataPublishInterval ) ) + { + RESERVOIR_DATA_T data; + data.activeReservoir = getU32OverrideValue( &activeReservoir ); + data.fillToVolumeMl = getU32OverrideValue( &fillVolumeTargetMl ); + data.drainToVolumeMl = getU32OverrideValue( &drainVolumeTargetMl ); + data.timeReservoirCycleMS = heatersTempCalc.timeReservoirCycleMS; + data.timeReservoirFill2SwitchMS = heatersTempCalc.timeReservoirFill2SwitchMS; + data.timeUFDecayMS = heatersTempCalc.timeUFDecayMS; + data.tempUFFill = heatersTempCalc.tempUFFill; + data.tempReservoirUseActual = getReservoirCurrentTemperature(); + data.tempReservoirEndFill = heatersTempCalc.tempReservoirEndFill; + data.tempAvgFill = getAvgFillTemperature(); + data.tempLastFill = getLastFillTemperature(); + data.timereservoirFill = heatersTempCalc.timeReservoirFillMS; + + broadcastData( MSG_ID_DG_RESERVOIRS_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( RESERVOIR_DATA_T ) ); + dataPublishCounter = 0; + } +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -1216,4 +1234,50 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetReservoirDataPublishIntervalOverride function overrides the + * reservoir data publish interval. + * @details Inputs: reservoirDataPublishInterval + * @details Outputs: reservoirDataPublishInterval + * @param: value override reservoir data publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetReservoirDataPublishIntervalOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + U32 intvl = value / TASK_GENERAL_INTERVAL; + reservoirDataPublishInterval.ovData = intvl; + reservoirDataPublishInterval.override = OVERRIDE_KEY; + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetReservoirDataPublishIntervalOverride function resets the + * override of the reservoir publish interval. + * @details Inputs: reservoirDataPublishInterval + * @details Outputs: reservoirDataPublishInterval + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetReservoirDataPublishIntervalOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + reservoirDataPublishInterval.override = OVERRIDE_RESET; + reservoirDataPublishInterval.ovData = reservoirDataPublishInterval.ovInitData; + result = TRUE; + } + + return result; +} + /**@}*/