Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -ra726311564521affd46cbbaf129bdffb22e1d58f -r7336ffd91e991f7156b01a7f15ed2afd85b62f80 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision a726311564521affd46cbbaf129bdffb22e1d58f) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 7336ffd91e991f7156b01a7f15ed2afd85b62f80) @@ -46,7 +46,7 @@ /// Volume output per pulse. #define CONCENTRATE_PUMP_VOLUME_PER_PULSE ( CONCENTRATE_PUMP_VOLUME_PER_REV / CONCENTRATE_PUMP_PULSE_PER_REV ) -#define CONCENTRATE_PUMP_MONITOR_INTERVAL ( 500 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is monitored. +#define CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL ( 500 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is monitored. #define CONCENTRATE_PUMP_CONTROL_INTERVAL ( 500 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is controlled. /// Enumeration of concentrate pump states. @@ -63,6 +63,8 @@ static BOOL isPumpOffRequested; ///< Flag indicates a request to turn concentrate pumps off. static U32 concentratePumpControlTimerCounter; ///< Timer counter to perform control on concentrate pump. static U32 concentratePumpMonitorTimerCounter; ///< Timer counter to perform monitor on concentrate pump. +/// Concentrate pump data publish interval. +static OVERRIDE_U32_T concentratePumpDataPublishInterval = { CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, 0, 0 }; static OVERRIDE_F32_T pumpTargetSpeed[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Target concentrate pumps' speed (mL/min). static F32 currentPumpSpeed[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Current controlled concentrate pumps' speed (mL/min). @@ -76,6 +78,7 @@ static void stepConcentratePumpToTargetSpeed( CONCENTRATE_PUMPS_T pumpId ); static CONCENTRATE_PUMP_STATE_T handleConcentratePumpOnState( void ); static F32 getConcentratePumpTargetSpeed( CONCENTRATE_PUMPS_T pumpId ); +static U32 getPublishConcentratePumpDataInterval( void ); /*********************************************************************//** * @brief @@ -104,7 +107,7 @@ *************************************************************************/ void execConcentratePumpMonitor( void ) { - if ( ++concentratePumpMonitorTimerCounter >= CONCENTRATE_PUMP_CONTROL_INTERVAL ) + if ( ++concentratePumpMonitorTimerCounter >= getPublishConcentratePumpDataInterval() ) { concentratePumpMonitorTimerCounter = 0U; @@ -349,14 +352,81 @@ return result; } +/*********************************************************************//** + * @brief + * The getPublishConcentratePumpDataInterval function gets the concentrate pump + * data publication interval. + * @details Inputs: concentratePumpDataPublishInterval + * @details Outputs: none + * @return the current concentrate pump data publication interval (in ms). + *************************************************************************/ +static U32 getPublishConcentratePumpDataInterval( void ) +{ + U32 result = concentratePumpDataPublishInterval.data; + if ( OVERRIDE_KEY == concentratePumpDataPublishInterval.override ) + { + result = concentratePumpDataPublishInterval.ovData; + } + + return result; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ /*********************************************************************//** * @brief + * The testSetConcentratePumpDataPublishIntervalOverride function overrides the + * concentrate pump data publish interval. + * @details Inputs: none + * @details Outputs: concentratePumpDataPublishInterval + * @param value override concentrate pump data publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetConcentratePumpDataPublishIntervalOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + U32 intvl = value / TASK_GENERAL_INTERVAL; + + result = TRUE; + concentratePumpDataPublishInterval.ovData = intvl; + concentratePumpDataPublishInterval.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetConcentratePumpDataPublishIntervalOverride function resets the + * override of the concentrate pump data publish interval. + * @details Inputs: none + * @details Outputs: concentratePumpDataPublishInterval + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetConcentratePumpDataPublishIntervalOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + concentratePumpDataPublishInterval.override = OVERRIDE_RESET; + concentratePumpDataPublishInterval.ovData = concentratePumpDataPublishInterval.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief * The testSetConcentratePumpTargetSpeedOverride function overrides the target * speed value of given concentrate pump id. * @details Inputs: none Index: firmware/App/Controllers/ConcentratePumps.h =================================================================== diff -u -ra726311564521affd46cbbaf129bdffb22e1d58f -r7336ffd91e991f7156b01a7f15ed2afd85b62f80 --- firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision a726311564521affd46cbbaf129bdffb22e1d58f) +++ firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 7336ffd91e991f7156b01a7f15ed2afd85b62f80) @@ -58,6 +58,8 @@ void setConcentratePumpTargetSpeed( CONCENTRATE_PUMPS_T pumpId, F32 targetSpeed_ml_min ); +BOOL testSetConcentratePumpDataPublishIntervalOverride( U32 value ); +BOOL testResetConcentratePumpDataPublishIntervalOverride( void ); BOOL testSetConcentratePumpTargetSpeedOverride( U32 pumpId, F32 value ); BOOL testResetConcentratePumpTargetSpeedOverride( U32 pumpId ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rd110e0ed1d67e15d968a64da61c2535965ed1321 -r7336ffd91e991f7156b01a7f15ed2afd85b62f80 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d110e0ed1d67e15d968a64da61c2535965ed1321) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 7336ffd91e991f7156b01a7f15ed2afd85b62f80) @@ -1160,6 +1160,10 @@ handleConcentratePumpStateChangeRequest( message ); break; + case MSG_ID_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE: + handleConcentratePumpPublishIntervalOverride( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rd110e0ed1d67e15d968a64da61c2535965ed1321 -r7336ffd91e991f7156b01a7f15ed2afd85b62f80 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d110e0ed1d67e15d968a64da61c2535965ed1321) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 7336ffd91e991f7156b01a7f15ed2afd85b62f80) @@ -1993,4 +1993,36 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleConcentratePumpPublishIntervalOverride function handles a request + * to override a concentrate pump's publish interval value. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleConcentratePumpPublishIntervalOverride( MESSAGE_T *message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // verify payload length + if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) + { + result = testSetConcentratePumpDataPublishIntervalOverride( payload.state.u32 ); + } + else + { + result = testResetConcentratePumpDataPublishIntervalOverride(); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rd110e0ed1d67e15d968a64da61c2535965ed1321 -r7336ffd91e991f7156b01a7f15ed2afd85b62f80 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d110e0ed1d67e15d968a64da61c2535965ed1321) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 7336ffd91e991f7156b01a7f15ed2afd85b62f80) @@ -209,6 +209,9 @@ // MSG_ID_CONCENTRATE_PUMP_STATE_CHANGE_REQUEST void handleConcentratePumpStateChangeRequest( MESSAGE_T *message ); +// MSG_ID_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE +void handleConcentratePumpPublishIntervalOverride( MESSAGE_T *message ); + /**@}*/ #endif