Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r837e86dd59014bd075bc39839c8b4b6324288880 -rbc1ec8e71e5e5e7aef6d84775e07f5935653593f --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 837e86dd59014bd075bc39839c8b4b6324288880) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision bc1ec8e71e5e5e7aef6d84775e07f5935653593f) @@ -515,6 +515,35 @@ BOOL result = u32ArrayOverride( message, &valveStates[0], NUM_OF_VALVES - 1, 0, NUM_OF_VALVE_STATES - 1 ); return result; +} + +/*********************************************************************//** + * @brief + * The testBCValveStatesOverride function overrides the state of all + * balancing chamber valves with a given bits (corresponding to BC valve + * enumeration order). + * @details \b Inputs: none + * @details \b Outputs: valveStates[] + * @param message Override message from Dialin which includes the states + * to override the balancing chamber valves to. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testBCValveStatesOverride( MESSAGE_T *message ) +{ + DD_BC_VALVE_OVERRIDE_PAYLOAD_T payload; + VALVES_T valve; + BOOL result = FALSE; + + memcpy( (U08*)(&payload), message, sizeof( DD_BC_VALVE_OVERRIDE_PAYLOAD_T ) ); + for ( valve = FIRST_BC_VALVE; valve <= LAST_BC_VALVE; valve++ ) + { + U32 mask = 0x1 << (valve - FIRST_BC_VALVE); + VALVE_STATE_NAMES_T pos = ( ( ( payload.valveStatesBits & mask ) != 0 ) ? VALVE_STATE_OPEN : VALVE_STATE_CLOSED ); + + result = setValveState( valve, pos ); + } + + return result; } /*********************************************************************//** Index: firmware/App/Controllers/Valves.h =================================================================== diff -u -r88818319a9261c6adb3983b9219a0a05fef97c0b -rbc1ec8e71e5e5e7aef6d84775e07f5935653593f --- firmware/App/Controllers/Valves.h (.../Valves.h) (revision 88818319a9261c6adb3983b9219a0a05fef97c0b) +++ firmware/App/Controllers/Valves.h (.../Valves.h) (revision bc1ec8e71e5e5e7aef6d84775e07f5935653593f) @@ -86,6 +86,12 @@ U08 valvesUFStatus; ///< Ultrafiltration valves status. U08 valvesSensedState[ NUM_OF_VALVES ]; ///< DD valves sensed states. } DD_VALVES_DATA_T; + +/// Balancing chamber valve states override structure +typedef struct +{ + U32 valveStatesBits; ///< Bits indicating whether balancing chamber valve states should be open(1) or closed(0). +} DD_BC_VALVE_OVERRIDE_PAYLOAD_T; #pragma pack(pop) // ********** public function prototypes ********** @@ -101,8 +107,10 @@ BOOL testValvesStatesPublishIntervalOverride( MESSAGE_T *message ); BOOL testValveStateOverride( MESSAGE_T *message ); +BOOL testBCValveStatesOverride( MESSAGE_T *message ); BOOL testValveSensedStateOverride( MESSAGE_T *message ); BOOL testValveOpenCloseStateOverride( MESSAGE_T *message ); + /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r8116b493a8085f28f85e5a9e8ead7e18d0dc77a8 -rbc1ec8e71e5e5e7aef6d84775e07f5935653593f --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 8116b493a8085f28f85e5a9e8ead7e18d0dc77a8) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision bc1ec8e71e5e5e7aef6d84775e07f5935653593f) @@ -137,6 +137,7 @@ MSG_ID_DD_DIAL_DELIVERY_IN_PROGRESS_OVERRIDE_REQUEST, MSG_ID_DD_DIAL_DELIVERY_GOOD_TO_DELIVER_OVERRIDE_REQUEST, MSG_ID_DD_HEATERS_TARGET_TEMPERATURE_OVERRIDE_REQUEST, //55 + MSG_ID_DD_BC_VALVE_STATES_OVERRIDE_REQUEST }; /// Message handling function table @@ -196,6 +197,7 @@ &testDialDeliveryInProgressOverride, &testDialGoodToDeliverStatusOverride, &testHeaterTargetTemperatureOverride, //55 + &testBCValveStatesOverride }; #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLERS) / sizeof(MsgFuncPtr))