Index: firmware/App/Controllers/AirPump.c =================================================================== diff -u -rf3a26c402a2ec88f5ee7dbb8eb7127ab5b4692aa -r552a7de419344b43a3307c61141c99bfbbee7345 --- firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision f3a26c402a2ec88f5ee7dbb8eb7127ab5b4692aa) +++ firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision 552a7de419344b43a3307c61141c99bfbbee7345) @@ -36,6 +36,7 @@ // ********** private data ********** static AIR_PUMP_STATE_T currentAirPumpState; ///< Current air pump control state. +static U08 currentAirPumpPowerLevel; ///< Current air pump power level setting. static U32 airPumpDataPublicationTimerCounter; ///< Air pump data broadcast timer counter. static OVERRIDE_U32_T airPumpDataPublishInterval; ///< Air pump data broadcast interval (in ms). @@ -61,6 +62,7 @@ // Initialize controller variables airPumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; currentAirPumpState = AIR_PUMP_STATE_INIT; + currentAirPumpPowerLevel = AIR_PUMP_MOTOR_OFF; airPumpDataPublishInterval.data = AIR_PUMP_DATA_PUB_INTERVAL; airPumpDataPublishInterval.ovData = AIR_PUMP_DATA_PUB_INTERVAL; airPumpDataPublishInterval.ovInitData = AIR_PUMP_DATA_PUB_INTERVAL; @@ -74,13 +76,20 @@ * @details \b Inputs: currentAirPumpState * @details \b Outputs: currentAirPumpState * @param state Air pump state to set + * @param power Power level to set air pump to * @return none *************************************************************************/ -void setAirPumpState( AIR_PUMP_STATE_T state ) +void setAirPumpState( AIR_PUMP_STATE_T state, U08 power ) { if ( state < NUM_OF_AIR_PUMP_STATES ) { currentAirPumpState = state; + // power level should be 0 (OFF) when pump state is not ON + if ( state != AIR_PUMP_STATE_ON ) + { + power = AIR_PUMP_MOTOR_OFF; + } + currentAirPumpPowerLevel = power; } else { @@ -157,7 +166,11 @@ { AIR_PUMP_STATE_T state = AIR_PUMP_STATE_OFF; - setAirPumpMotorState( AIR_PUMP_MOTOR_OFF ); + if ( getAirPumpMotorPower() != 0 ) + { + currentAirPumpPowerLevel = 0; + setAirPumpMotorPower( currentAirPumpPowerLevel ); + } return state; } @@ -173,7 +186,10 @@ { AIR_PUMP_STATE_T state = AIR_PUMP_STATE_ON; - setAirPumpMotorState( AIR_PUMP_MOTOR_ON ); + if ( getAirPumpMotorPower() != currentAirPumpPowerLevel ) + { + setAirPumpMotorPower( currentAirPumpPowerLevel ); + } return state; } @@ -189,11 +205,14 @@ *************************************************************************/ static void publishAirPumpData( void ) { + currentAirPumpPowerLevel = getAirPumpMotorPower(); // update local power setting from driver + if ( ++airPumpDataPublicationTimerCounter >= getU32OverrideValue( &airPumpDataPublishInterval ) ) { AIR_PUMP_PAYLOAD_T data; data.h12State = getAirPumpState(); + data.h12Power = (U32)currentAirPumpPowerLevel; broadcastData( MSG_ID_TD_AIR_PUMP_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( AIR_PUMP_PAYLOAD_T ) ); airPumpDataPublicationTimerCounter = 0;