Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -re7fe0454b5b2d39009dc784dc8c156856df8bc86 -rb6d20d9e5c704a9f7ebceea9bb12731dac61fc2a --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision e7fe0454b5b2d39009dc784dc8c156856df8bc86) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision b6d20d9e5c704a9f7ebceea9bb12731dac61fc2a) @@ -36,7 +36,7 @@ #define CONCENTRATE_PUMP_REVERSE_DIR 0x0 ///< Concentrate pump reverse direction configuration. #define CONCENTRATE_PUMP_SPEED_INCREMENT 2.0F ///< Speed increase (mL/min) when controlling concentrate pump to target step speed. -#define CONCENTRATE_PUMP_MIN_SPEED 3.0F ///< Minimum speed for concentrate pump in mL per min. +#define CONCENTRATE_PUMP_MIN_SPEED 0.1F ///< Minimum speed for concentrate pump in mL per min. #define CONCENTRATE_PUMP_SPD_OUT_OF_RANGE_TOL_WHEN_ON_PCT 0.02F ///< Concentrate pump speed out of range tolerance when on in percentage. #define CONCENTRATE_PUMP_SPD_OUT_OF_RANGE_TOL_WHEN_SLOW_MLPM 1.0F ///< Concentrate pump speed out of range tolerance when slow in mL/min. #define CONCENTRATE_PUMP_LOW_SPEED_THRESHOLD_MLPM 10.0F ///< Concentrate pump low speed threshold in mL/min. @@ -115,6 +115,14 @@ BOOL isConcPumpParkInProgress; ///< Concentrate pump park progress boolean flag (T/F). } CONCENTRATE_PUMP_T; +/// Payload record structure for concentrate pump start/stop request +typedef struct +{ + U32 pumpID; ///< Concentrate pump ID (0:Acid ,1:Bicarb) + U32 startStop; ///< Concentrate pump start:1,stop :0. + F32 speed; ///< Speed range from 0.1 ml/min to 48.0 ml/min. +} CONC_PUMP_START_STOP_CMD_PAYLOAD_T; + // ********** private data ********** static U32 concentratePumpMonitorTimerCounter; ///< Timer counter to perform monitor on concentrate pump. @@ -459,8 +467,8 @@ } /* - * If 3 <= speed <= 48 set it - * If speed < 3 set to 0 + * If 0.1 <= speed <= 48 set it + * If speed < 0.1 set to 0 * else speed > 48 set to 48 */ if ( ( CONCENTRATE_PUMP_MIN_SPEED <= targetSpeed_ml_min ) && ( targetSpeed_ml_min <= CONCENTRATE_PUMP_MAX_SPEED ) ) @@ -1140,6 +1148,54 @@ /*********************************************************************//** * @brief + * The testConcentratePumpStartStopOverride function starts a given concentrate pump + * at mentioned speed/flowrate ( ml/min) or stops the concentrate pump. + * @details \b Inputs: tester logged in + * @details \b Outputs: concentratePumps[] + * @param message set message from Dialin which includes the concentrate pump to set + * and the state to set the concentratet pump to. + * @return TRUE if set request is successful, FALSE if not + *************************************************************************/ +BOOL testConcentratePumpStartStopOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify tester has logged in with TD + if ( TRUE == isTestingActivated() ) + { + // Verify payload length is valid + if ( sizeof( CONC_PUMP_START_STOP_CMD_PAYLOAD_T ) == message->hdr.payloadLen ) + { + CONC_PUMP_START_STOP_CMD_PAYLOAD_T payload; + + memcpy( &payload, message->payload, sizeof(CONC_PUMP_START_STOP_CMD_PAYLOAD_T) ); + + if ( (CONCENTRATE_PUMPS_T)payload.pumpID < NUM_OF_CONCENTRATE_PUMPS ) + { + // Handle start command + if ( ( TRUE == payload.startStop ) && + ( ( payload.speed >= CONCENTRATE_PUMP_MIN_SPEED ) && ( payload.speed <= CONCENTRATE_PUMP_MAX_SPEED ) ) ) + { + setConcentratePumpTargetSpeed( (CONCENTRATE_PUMPS_T)payload.pumpID, payload.speed ); + requestConcentratePumpOn ( (CONCENTRATE_PUMPS_T)payload.pumpID ); + result = TRUE; + } + + //Handle stop command + if ( FALSE == payload.startStop ) + { + stopConcentratePump( (CONCENTRATE_PUMPS_T)payload.pumpID ); + result = TRUE; + } + } + } + } + + return result; +} + +/*********************************************************************//** + * @brief * The testConcentratePumpParkRequestOverride function overrides the given pump * to park request. * @details \b Inputs: concentratePumps