Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -rf6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision f6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -43,9 +43,11 @@ static BOOL ddStartCommandSent; ///< Flag indicates command to start DD has been sent. static BOOL ddStarted; ///< Flag indicates whether we have commanded the DD to start or stop. -static BOOL ddOpModeDataFreshFlag; ///< Flag to signal the handleDDOpMode() to process fresh dd op mode data +static BOOL ddOpModeDataFreshFlag; ///< Flag to signal the handleDDOpMode() to process fresh dd op mode data. static BOOL ddDialysatePressureFreshFlag; ///< Flag to signal +static DIALYSATE_DELIVERY_REQ_PAYLOAD_T dialysateDeliveryCmdSet; ///< Set of dialysate delivery parameters to send to the DD during treatment. + // DG command response static DD_CMD_RESPONSE_T ddCmdResp[ NUM_OF_DD_COMMANDS ]; ///< Keep the latest DD command response for each command. @@ -66,15 +68,23 @@ U32 i; // NOTE: the active reservoir is set to reservoir 1 since DG will send active reservoir 1 as active on power up - ddStarted = FALSE; - ddCurrentOpMode = DD_MODE_INIT; - ddSubMode = 0; - dialysatePressure = 0.0F; - ddStartCommandSent = FALSE; + ddStarted = FALSE; + ddCurrentOpMode = DD_MODE_INIT; + ddSubMode = 0; + dialysatePressure = 0.0F; + ddStartCommandSent = FALSE; - ddOpModeDataFreshFlag = FALSE; - ddDialysatePressureFreshFlag = FALSE; + ddOpModeDataFreshFlag = FALSE; + ddDialysatePressureFreshFlag = FALSE; + dialysateDeliveryCmdSet.start = FALSE; + dialysateDeliveryCmdSet.dialRate = 0.0F; + dialysateDeliveryCmdSet.ufRate = 0.0F; + dialysateDeliveryCmdSet.dialTemp = 0.0F; + dialysateDeliveryCmdSet.bypassDialyzer = TRUE; + dialysateDeliveryCmdSet.acidType = 0; + dialysateDeliveryCmdSet.bicarbType = 0; + // initialize DD command response for ( i = 0; i < NUM_OF_DD_COMMANDS; i++ ) { @@ -262,7 +272,7 @@ * to the DD with a given set of details. DD will transition to dialysate * delivery mode if it hasn't already. * @details \b Inputs: none - * @details \b Outputs: none + * @details \b Outputs: dialysateDeliveryCmdSet * @details \b Message \b Sent: Start/continue generate dialysate command. * @param qd Target dialysate flow rate (Qd). * @param quf Target ultrafiltration rate (Quf). @@ -274,36 +284,102 @@ *************************************************************************/ void cmdStartGenerateDialysate( F32 qd, F32 quf, F32 dialTemp, BOOL bypass, ACID_CONCENTRATE_TYPE_T acid, BICARB_CONCENTRATE_TYPE_T bicarb ) { - DIALYSATE_DELIVERY_REQ_PAYLOAD_T payload; + dialysateDeliveryCmdSet.start = TRUE; + dialysateDeliveryCmdSet.dialRate = qd; + dialysateDeliveryCmdSet.ufRate = quf; + dialysateDeliveryCmdSet.dialTemp = dialTemp; + dialysateDeliveryCmdSet.bypassDialyzer = bypass; + dialysateDeliveryCmdSet.acidType = (U32)acid; + dialysateDeliveryCmdSet.bicarbType = (U32)bicarb; - payload.start = TRUE; - payload.dialRate = qd; - payload.ufRate = quf; - payload.dialTemp = dialTemp; - payload.bypassDialyzer = bypass; - payload.acidType = (U32)acid; - payload.bicarbType = (U32)bicarb; + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); +} - sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&payload), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); +/*********************************************************************//** + * @brief + * The cmdChangeQd function sends a generate dialysate command to the DD + * with a given new dialysate rate. + * @details \b Inputs: none + * @details \b Outputs: dialysateDeliveryCmdSet + * @details \b Message \b Sent: Continue generate dialysate command w/ new Qd. + * @param qd Target dialysate flow rate (Qd). + * @return none + *************************************************************************/ +void cmdChangeQd( F32 qd ) +{ + if ( TRUE == dialysateDeliveryCmdSet.start ) + { + dialysateDeliveryCmdSet.dialRate = qd; + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + } + else + { + // TODO - s/w fault? + } } /*********************************************************************//** * @brief + * The cmdChangeQuf function sends a generate dialysate command to the DD + * with a given new ultrafiltration rate. + * @details \b Inputs: none + * @details \b Outputs: dialysateDeliveryCmdSet + * @details \b Message \b Sent: Continue generate dialysate command w/ new Quf. + * @param quf Target ultrafiltration flow rate (in L/hr). + * @return none + *************************************************************************/ +void cmdChangeQuf( F32 quf ) +{ + if ( TRUE == dialysateDeliveryCmdSet.start ) + { + dialysateDeliveryCmdSet.ufRate = quf; + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + } + else + { + // TODO - s/w fault? + } +} + +/*********************************************************************//** + * @brief + * The cmdBypassDialyzer function sends a generate dialysate command to the DD + * with a given flag indicating whether dialyzer should be bypassed. + * @details \b Inputs: none + * @details \b Outputs: dialysateDeliveryCmdSet + * @details \b Message \b Sent: Continue generate dialysate command w/ new + * dialyzer bypass flag. + * @param bypass Flag indicating whether dialyzer should be bypassed. + * @return none + *************************************************************************/ +void cmdBypassDialyzer( BOOL bypass ) +{ + if ( TRUE == dialysateDeliveryCmdSet.start ) + { + dialysateDeliveryCmdSet.bypassDialyzer = bypass; + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + } + else + { + // TODO - s/w fault? + } +} + +/*********************************************************************//** + * @brief * The cmdStopGenerateDialysate function sends a stop generate dialysate command * to the DD. DD will transition back to standby mode. * @details \b Inputs: none - * @details \b Outputs: none + * @details \b Outputs: dialysateDeliveryCmdSet * @details \b Message \b Sent: Stop generate dialysate command. * @return none *************************************************************************/ void cmdStopGenerateDialysate( void ) { - DIALYSATE_DELIVERY_REQ_PAYLOAD_T payload; + memset( &dialysateDeliveryCmdSet, 0, sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + dialysateDeliveryCmdSet.start = FALSE; - memset( &payload, 0, sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); - payload.start = FALSE; - - sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&payload), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); } /**********************************************************************//**