Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -rf401094683b7f3b082c41493f1a217c28a331e5c -rb549c9d87eb01cf1afee74e9fc1e41b3731bdca4 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision f401094683b7f3b082c41493f1a217c28a331e5c) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision b549c9d87eb01cf1afee74e9fc1e41b3731bdca4) @@ -41,7 +41,6 @@ #define MAX_FILL_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///> Maximum fill volume in mL. #define DEFAULT_DRAIN_VOLUME_ML 100 ///> Default drain volume in mL. #define MAX_DRAIN_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///> Maximum drain volume in mL. -#define MIN_DRAIN_VOLUME_ML 0 ///> Minimum drain volume in mL. #define MAX_RESERVOIR_WEIGHT 10000 ///> Maximum reservoir weight in grams. @@ -120,8 +119,11 @@ *************************************************************************/ void setActiveReservoirCmd( RESERVOIR_ID_T resID ) { - BOOL rejected = TRUE; - CMD_REQUEST_REJECT_REASON_CODE_T rejectCode = CMD_REQUEST_REJECT_REASON_NONE; + DG_CMD_RESPONSE_T cmdResponse; + + cmdResponse.commandID = DG_CMD_SWITCH_RESERVOIR; + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; // switch reservoir command only valid in re-circulate mode if ( DG_MODE_CIRC == getCurrentOperationMode() ) @@ -130,7 +132,7 @@ { case RESERVOIR_1: activeReservoir.data = (U32)resID; - rejected = FALSE; + cmdResponse.rejected = FALSE; setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); setValveState( VRD, VALVE_STATE_R2_C_TO_NO ); setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); @@ -139,7 +141,7 @@ case RESERVOIR_2: activeReservoir.data = (U32)resID; - rejected = FALSE; + cmdResponse.rejected = FALSE; setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); // TODO - valve states are reversed for the two reservoirs for now - revert back when load cells are fixed. setValveState( VRD, VALVE_STATE_R1_C_TO_NC ); setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); @@ -148,16 +150,16 @@ default: // invalid reservoir given - cmd will be NAK'd w/ false result. - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; break; } } else { - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_MODE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE; } - sendCommandResponseMsg( rejected, rejectCode ); + sendCommandResponseMsg( &cmdResponse ); } /*********************************************************************//** @@ -170,8 +172,11 @@ *************************************************************************/ void startFillCmd( U32 fillToVolMl ) { - BOOL rejected = TRUE; - CMD_REQUEST_REJECT_REASON_CODE_T rejectCode = CMD_REQUEST_REJECT_REASON_NONE; + DG_CMD_RESPONSE_T cmdResponse; + + cmdResponse.commandID = DG_CMD_START_FILL; + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; // fill command only valid in re-circulate mode if ( ( DG_MODE_CIRC == getCurrentOperationMode() ) && @@ -182,19 +187,19 @@ { fillVolumeTargetMl.data = fillToVolMl; requestNewOperationMode( DG_MODE_FILL ); - rejected = FALSE; + cmdResponse.rejected = FALSE; } else { - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; } } else { - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_MODE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE; } - sendCommandResponseMsg( rejected, rejectCode ); + sendCommandResponseMsg( &cmdResponse ); } /*********************************************************************//** @@ -206,22 +211,25 @@ *************************************************************************/ void stopFillCmd( void ) { - BOOL rejected = TRUE; - CMD_REQUEST_REJECT_REASON_CODE_T rejectCode = CMD_REQUEST_REJECT_REASON_NONE; + DG_CMD_RESPONSE_T cmdResponse; + + cmdResponse.commandID = DG_CMD_STOP_FILL; + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; // stop fill command only valid in fill mode if ( DG_MODE_FILL == getCurrentOperationMode() ) { fillVolumeTargetMl.data = 0; requestNewOperationMode( DG_MODE_CIRC ); - rejected = FALSE; + cmdResponse.rejected = FALSE; } else { - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_MODE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE; } - sendCommandResponseMsg( rejected, rejectCode ); + sendCommandResponseMsg( &cmdResponse ); } /*********************************************************************//** @@ -234,31 +242,34 @@ *************************************************************************/ void startDrainCmd( DRAIN_CMD_T drainCmd ) { - BOOL rejected = TRUE; - CMD_REQUEST_REJECT_REASON_CODE_T rejectCode = CMD_REQUEST_REJECT_REASON_NONE; + DG_CMD_RESPONSE_T cmdResponse; + + cmdResponse.commandID = DG_CMD_START_DRAIN; + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; // drain command only valid in re-circulate mode if ( DG_MODE_CIRC == getCurrentOperationMode() ) { // validate parameters - if ( ( drainCmd.targetVolume >= MIN_DRAIN_VOLUME_ML ) && ( drainCmd.targetVolume <= MAX_DRAIN_VOLUME_ML ) ) + if ( drainCmd.targetVolume <= MAX_DRAIN_VOLUME_ML ) { drainVolumeTargetMl.data = drainCmd.targetVolume; tareLoadCellRequest = drainCmd.tareLoadCell; requestNewOperationMode( DG_MODE_DRAI ); - rejected = FALSE; + cmdResponse.rejected = FALSE; } else { - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; } } else { - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_MODE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE; } - sendCommandResponseMsg( rejected, rejectCode ); + sendCommandResponseMsg( &cmdResponse ); } /*********************************************************************//** @@ -270,22 +281,25 @@ *************************************************************************/ void stopDrainCmd( void ) { - BOOL rejected = TRUE; - CMD_REQUEST_REJECT_REASON_CODE_T rejectCode = CMD_REQUEST_REJECT_REASON_NONE; + DG_CMD_RESPONSE_T cmdResponse; + + cmdResponse.commandID = DG_CMD_STOP_DRAIN; + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; // stop drain command only valid in drain mode if ( DG_MODE_DRAI == getCurrentOperationMode() ) { drainVolumeTargetMl.data = 0; requestNewOperationMode( DG_MODE_CIRC ); - rejected = FALSE; + cmdResponse.rejected = FALSE; } else { - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_MODE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE; } - sendCommandResponseMsg( rejected, rejectCode ); + sendCommandResponseMsg( &cmdResponse ); } /*********************************************************************//** @@ -298,19 +312,22 @@ *************************************************************************/ void startTrimmerHeaterCmd( void ) { - BOOL rejected = TRUE; - CMD_REQUEST_REJECT_REASON_CODE_T rejectCode = CMD_REQUEST_REJECT_REASON_NONE; + DG_CMD_RESPONSE_T cmdResponse; + cmdResponse.commandID = DG_CMD_START_TRIMMER_HEATER; + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; + if ( TRUE == startTrimmerHeater() ) { - rejected == FALSE; + cmdResponse.rejected = FALSE; } else { - rejectCode = CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; } - sendCommandResponseMsg( rejected, rejectCode ); + sendCommandResponseMsg( &cmdResponse ); } /*********************************************************************//** @@ -323,12 +340,15 @@ *************************************************************************/ void stopTrimmerHeaterCmd( void ) { - BOOL rejected = FALSE; - CMD_REQUEST_REJECT_REASON_CODE_T rejectCode = CMD_REQUEST_REJECT_REASON_NONE; + DG_CMD_RESPONSE_T cmdResponse; + + cmdResponse.commandID = DG_CMD_STOP_TRIMMER_HEATER; + cmdResponse.rejected = FALSE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; stopTrimmerHeater(); - sendCommandResponseMsg( rejected, rejectCode ); + sendCommandResponseMsg( &cmdResponse ); } /*********************************************************************//** Index: firmware/App/Services/Reservoirs.h =================================================================== diff -u -rf401094683b7f3b082c41493f1a217c28a331e5c -rb549c9d87eb01cf1afee74e9fc1e41b3731bdca4 --- firmware/App/Services/Reservoirs.h (.../Reservoirs.h) (revision f401094683b7f3b082c41493f1a217c28a331e5c) +++ firmware/App/Services/Reservoirs.h (.../Reservoirs.h) (revision b549c9d87eb01cf1afee74e9fc1e41b3731bdca4) @@ -39,12 +39,22 @@ } RESERVOIR_ID_T; #pragma pack(push,1) -/// Enumeration of drain command. + +/// Drain command data structure. typedef struct { U32 targetVolume; ///< Target volume to drain to (in mL) BOOL tareLoadCell; ///< Flag to tare load call } DRAIN_CMD_T; + +/// DG command response data record. +typedef struct +{ + U32 commandID; ///< The command DG is responding to + BOOL rejected; ///< Flag indicates if the command has been rejected + U32 rejectCode; ///< Reason code for rejecting the command +} DG_CMD_RESPONSE_T; + #pragma pack(pop) // ********** public function prototypes ********** Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rf401094683b7f3b082c41493f1a217c28a331e5c -rb549c9d87eb01cf1afee74e9fc1e41b3731bdca4 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision f401094683b7f3b082c41493f1a217c28a331e5c) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b549c9d87eb01cf1afee74e9fc1e41b3731bdca4) @@ -888,23 +888,19 @@ * and queues the msg for transmit on the appropriate CAN channel. * @details Inputs: none * @details Outputs: Command response msg constructed and queued. - * @param rejected T/F - is command rejected? - * @param rejectReason reason command was rejected (if not accepted) + * @param cmdResponsePtr pointer to command response data record * @return none *************************************************************************/ -void sendCommandResponseMsg( BOOL rejected, U32 rejectReason ) +void sendCommandResponseMsg( DG_CMD_RESPONSE_T *cmdResponsePtr ) { MESSAGE_T msg; - U08 *payloadPtr = msg.payload; // Create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_DG_COMMAND_RESPONSE; - msg.hdr.payloadLen = sizeof( BOOL ) + sizeof( U32 ); + msg.hdr.payloadLen = sizeof( DG_CMD_RESPONSE_T ); - memcpy( payloadPtr, &rejected, sizeof( BOOL ) ); - payloadPtr += sizeof( BOOL ); - memcpy( payloadPtr, &rejectReason, sizeof( U32 ) ); + memcpy( msg.payload, cmdResponsePtr, sizeof( DG_CMD_RESPONSE_T ) ); // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_2_HD, ACK_REQUIRED ); Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rf401094683b7f3b082c41493f1a217c28a331e5c -rb549c9d87eb01cf1afee74e9fc1e41b3731bdca4 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision f401094683b7f3b082c41493f1a217c28a331e5c) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision b549c9d87eb01cf1afee74e9fc1e41b3731bdca4) @@ -22,6 +22,7 @@ #include "DrainPump.h" #include "Fans.h" #include "MsgQueues.h" +#include "Reservoirs.h" #include "ROPump.h" #include "Thermistors.h" #include "UVReactors.h" @@ -99,7 +100,7 @@ BOOL broadcastUVReactorsData( UV_REACTORS_DATA_T *uvReactorsData ); // MSG_ID_DG_COMMAND_RESPONSE -void sendCommandResponseMsg( BOOL rejected, U32 rejectReason ); +void sendCommandResponseMsg( DG_CMD_RESPONSE_T *cmdResponsePtr ); // MSG_ID_POWER_OFF_WARNING void handlePowerOffWarning( MESSAGE_T *message );