Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r55425a4c5370a6fa1faad61dc24fcd76b854d3ed -r6145c5d1a645646587fb077df3c61eef2354f744 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 55425a4c5370a6fa1faad61dc24fcd76b854d3ed) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 6145c5d1a645646587fb077df3c61eef2354f744) @@ -160,6 +160,54 @@ sendCommandResponseMsg( &cmdResponse ); } + +/*********************************************************************//** + * @brief + * The changeValveSettingCmd function changes valve settings according to + * the given setting ID. + * @details Inputs: none + * @details Outputs: Specified valve settings has been setup. + * @param valveSettingID ID of valve setting to change valves to + * @return none + *************************************************************************/ +void changeValveSettingCmd( VALVE_SETTING_ID_T valveSettingID ) +{ + DG_CMD_RESPONSE_T cmdResponse; + + cmdResponse.commandID = DG_CMD_VALVE_SETTING; + cmdResponse.rejected = TRUE; + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; + + // valve setting command only valid in re-circulate mode + if ( DG_MODE_CIRC == getCurrentOperationMode() ) + { + switch ( valveSettingID ) + { + case VALVE_SETTING_R1_TO_R2: + cmdResponse.rejected = FALSE; + setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); + break; + + case VALVE_SETTING_R2_TO_R1: + cmdResponse.rejected = FALSE; + setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); + setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); + break; + + default: + // invalid reservoir given - cmd will be NAK'd w/ false result. + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; + break; + } + } + else + { + cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE; + } + + sendCommandResponseMsg( &cmdResponse ); +} /*********************************************************************//** * @brief Index: firmware/App/Services/Reservoirs.h =================================================================== diff -u -r8059b3b67364c3593091a23266f33186430ffe26 -r6145c5d1a645646587fb077df3c61eef2354f744 --- firmware/App/Services/Reservoirs.h (.../Reservoirs.h) (revision 8059b3b67364c3593091a23266f33186430ffe26) +++ firmware/App/Services/Reservoirs.h (.../Reservoirs.h) (revision 6145c5d1a645646587fb077df3c61eef2354f744) @@ -38,6 +38,14 @@ NUM_OF_RESERVOIRS ///< Number of reservoirs } RESERVOIR_ID_T; +/// Enumeration of valve settings. +typedef enum Valve_Setting +{ + VALVE_SETTING_R1_TO_R2 = 0, ///< Valve setting for displacement from reservoir 1 to reservoir 2 + VALVE_SETTING_R2_TO_R1, ///< Valve setting for displacement from reservoir 2 to reservoir 1 + NUM_OF_VALVE_SETTTINGS ///< Number of valve settings +} VALVE_SETTING_ID_T; + #pragma pack(push,1) /// Drain command data structure. @@ -61,13 +69,14 @@ void initReservoirs( void ); void execReservoirs( void ); + +void setActiveReservoirCmd( RESERVOIR_ID_T resID ); // handle switch reservoirs command from HD +void changeValveSettingCmd( VALVE_SETTING_ID_T valveSettingID ); // handle valve setting change command from HD +void startFillCmd( U32 fillToVolMl ); // handle fill command from HD +void stopFillCmd( void ); // handle stop fill command from HD +void startDrainCmd( DRAIN_CMD_T drainCmd ); // handle drain command from HD +void stopDrainCmd( void ); // handle stop drain command from HD -void setActiveReservoirCmd( RESERVOIR_ID_T resID ); // handle switch reservoirs command from HD -void startFillCmd( U32 fillToVolMl ); // handle fill command from HD -void stopFillCmd( void ); // handle stop fill command from HD -void startDrainCmd( DRAIN_CMD_T drainCmd ); // handle drain command from HD -void stopDrainCmd( void ); // handle stop drain command from HD - RESERVOIR_ID_T getInactiveReservoir( void ); BOOL hasTargetFillVolumeBeenReached( RESERVOIR_ID_T reservoirId ); BOOL hasTargetDrainVolumeBeenReached( RESERVOIR_ID_T reservoirId , U32 timeout ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r88f28230d288947ba84840b967e95b32e3deffaa -r6145c5d1a645646587fb077df3c61eef2354f744 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 88f28230d288947ba84840b967e95b32e3deffaa) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6145c5d1a645646587fb077df3c61eef2354f744) @@ -1011,6 +1011,10 @@ handleSwitchReservoirCmd( message ); break; + case MSG_ID_DG_CHANGE_VALVE_SETTING_CMD: + handleChangeValveSettingCmd( message ); + break; + case MSG_ID_DG_FILL_CMD: handleFillCmd( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r853d846a60d61d1c6f8987d9cdcfc2bc32913840 -r6145c5d1a645646587fb077df3c61eef2354f744 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 853d846a60d61d1c6f8987d9cdcfc2bc32913840) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6145c5d1a645646587fb077df3c61eef2354f744) @@ -937,8 +937,34 @@ sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); } + /*********************************************************************//** * @brief + * The handleChangeValveSettingCmd function handles a switch reservoirs command + * from the HD. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleChangeValveSettingCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof( U32 ) ) + { + VALVE_SETTING_ID_T valveSettingID; + + result = TRUE; + memcpy( &valveSettingID, message->payload, sizeof( U32 ) ); + changeValveSettingCmd( valveSettingID ); + } + + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/*********************************************************************//** + * @brief * The handleFillCmd function handles a fill command from the HD. * @details Inputs: none * @details Outputs: message handled Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rb549c9d87eb01cf1afee74e9fc1e41b3731bdca4 -r6145c5d1a645646587fb077df3c61eef2354f744 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision b549c9d87eb01cf1afee74e9fc1e41b3731bdca4) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6145c5d1a645646587fb077df3c61eef2354f744) @@ -111,13 +111,16 @@ // MSG_ID_REQUEST_FW_VERSIONS void handleFWVersionCmd( MESSAGE_T *message ); -// MSG_ID_DG_SWITCH_RESERVOIR +// MSG_ID_DG_SWITCH_RESERVOIR_CMD void handleSwitchReservoirCmd( MESSAGE_T *message ); -// MSG_ID_DG_FILL +// MSG_ID_DG_CHANGE_VALVE_SETTING_CMD +void handleChangeValveSettingCmd( MESSAGE_T *message ); + +// MSG_ID_DG_FILL_CMD void handleFillCmd( MESSAGE_T *message ); -// MSG_ID_DG_DRAIN +// MSG_ID_DG_DRAIN_CMD void handleDrainCmd( MESSAGE_T *message ); // MSG_ID_STARTING_STOPPING_TREATMENT