Index: firmware/App/Controllers/AirPump.c =================================================================== diff -u -r16f07c4783e5778c68629ce68ab4f15e66508156 -rc0b541a7a9843a41290a17a4bb16dd3430f6324c --- firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision 16f07c4783e5778c68629ce68ab4f15e66508156) +++ firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision c0b541a7a9843a41290a17a4bb16dd3430f6324c) @@ -17,7 +17,6 @@ #include "AirPump.h" #include "AlarmMgmtTD.h" -#include "FpgaTD.h" #include "GLXferPump.h" #include "Messaging.h" #include "OperationModes.h" @@ -95,12 +94,18 @@ BOOL setAirPumpState( AIR_PUMP_STATE_T state, F32 power ) { BOOL result = FALSE; + //There is a limitation on the TD circuit to be able to run the pump at the low speed. change planned in next version of the board. right now limiting the pump duty cycle below 24% + //BOOL validInput = ( power == AIR_PUMP_DUTY_CYCLE_MIN) || ( power >= AIR_PUMP_DUTY_CYCLE_LIMIT && power <= AIR_PUMP_DUTY_CYCLE_MAX); + BOOL validInput = ( ( ( power >= AIR_PUMP_DUTY_CYCLE_MIN ) && ( power <= AIR_PUMP_DUTY_CYCLE_MAX ) ) && ( FALSE == ( ( power > AIR_PUMP_DUTY_CYCLE_MIN ) && ( power < AIR_PUMP_DUTY_CYCLE_LIMIT ) ) ) ); + // need to pass the result immediately to user when user enter invalid range - if ( ( power < AIR_PUMP_DUTY_CYCLE_MIN ) && ( power > AIR_PUMP_DUTY_CYCLE_MAX ) ) + if ( FALSE == validInput ) { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_TD_AIR_PUMP_DUTY_CYCLE_OUT_OF_RANGE, power ) result = FALSE; } - else if ( state >= AIR_PUMP_STATE_INIT && state < NUM_OF_AIR_PUMP_STATES ) + // unsigned integer never be less than 0 + else if ( state < NUM_OF_AIR_PUMP_STATES ) { currentAirPumpState = state; // power level should be 0 (OFF) when pump state is not ON @@ -142,6 +147,7 @@ *************************************************************************/ void execAirPumpController( void ) { + // update the speed every tick currentAirPumpRPM = getAirPumpMotorRPM(); switch( currentAirPumpState ) @@ -240,7 +246,7 @@ data.h12Power = currentAirPumpPowerLevel; data.h12Rpm = (U32)currentAirPumpRPM; //TODO:remove after validating pump speed - data.fpgah12Rpm = getH12AirPumpMotorRPM(); + data.fpgah12Rpm = getAirPumpMotorFPGARPM(); //TODO:remove after validating pump speed data.scalarPower = getAirPumpMotorScalarPower(); @@ -284,6 +290,7 @@ BOOL testSetAirPump( MESSAGE_T *message ) { BOOL result = FALSE; + // Verify tester has logged in with TD and override type is valid if ( TRUE == isTestingActivated() ) { Index: firmware/App/Drivers/GLXferPump.h =================================================================== diff -u -r16f07c4783e5778c68629ce68ab4f15e66508156 -rc0b541a7a9843a41290a17a4bb16dd3430f6324c --- firmware/App/Drivers/GLXferPump.h (.../GLXferPump.h) (revision 16f07c4783e5778c68629ce68ab4f15e66508156) +++ firmware/App/Drivers/GLXferPump.h (.../GLXferPump.h) (revision c0b541a7a9843a41290a17a4bb16dd3430f6324c) @@ -36,6 +36,7 @@ #define AIR_PUMP_MOTOR_OFF 0.0F ///< Power level setting (PWM) for H12 air pump to turn pump off. #define AIR_PUMP_DUTY_CYCLE_MIN 0.0F ///< Air pump minimum duty cycle in percentage #define AIR_PUMP_DUTY_CYCLE_MAX 100.0F ///< Air pump maximum duty cycle in percentage +#define AIR_PUMP_DUTY_CYCLE_LIMIT 24.0F ///< Air pump limit duty cycle in percentage from 1- 23 as invalid #define AIR_PUMP_MAX_PWM 250 ///< Air pump maximum PWM, FPGA ignores 251-255 // ********** public function prototypes ********** @@ -46,7 +47,9 @@ F32 getAirPumpMotorPower( void ); U16 getAirPumpMotorRPM( void ); // TODO:remove after testing -F32 getAirPumpMotorScalarPower( void ); +U16 getAirPumpMotorFPGARPM( void ); +// TODO:remove after testing +U32 getAirPumpMotorScalarPower( void ); BOOL testSetAirPump( MESSAGE_T *message );