Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -re9e339870c5ed01230963f00d400331ab879c91f -rb87bac344f39b289e83d4794fba4e53cf3dac94a --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision e9e339870c5ed01230963f00d400331ab879c91f) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision b87bac344f39b289e83d4794fba4e53cf3dac94a) @@ -42,10 +42,12 @@ static F32 dialysatePressure; ///< Current dialysate pressure reported by DD. 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 isDialysateGoodtoDeliver; ///< Flag indicating whether dialysate is good to deliver. static BOOL ddOpModeDataFreshFlag; ///< Flag to signal the handleDDOpMode() to process fresh dd op mode data. static BOOL ddDialysatePressureFreshFlag; ///< Flag to signal +static PRE_GEN_DIALYSATE_REQ_PAYLOAD_T preGenDialysateCmdSet; ///< Set of pre-generate dialysate parameters to send to the DD static DIALYSATE_DELIVERY_REQ_PAYLOAD_T dialysateDeliveryCmdSet; ///< Set of dialysate delivery parameters to send to the DD during treatment. // DD command response @@ -70,6 +72,7 @@ ddCurrentOpMode = DD_MODE_INIT; ddSubMode = 0; dialysatePressure = 0.0F; + isDialysateGoodtoDeliver = FALSE; ddOpModeDataFreshFlag = FALSE; ddDialysatePressureFreshFlag = FALSE; @@ -100,6 +103,14 @@ ddStarted = FALSE; ddStartCommandSent = FALSE; + preGenDialysateCmdSet.start = FALSE; + preGenDialysateCmdSet.dialRate = 0.0F; + preGenDialysateCmdSet.dialTemp = 0.0F; + preGenDialysateCmdSet.acidConvFactor = 0.0F; + preGenDialysateCmdSet.bicarbConvFactor = 0.0F; + preGenDialysateCmdSet.sodium = 0; + preGenDialysateCmdSet.bicarbonate = 0; + dialysateDeliveryCmdSet.start = FALSE; dialysateDeliveryCmdSet.dialRate = 0.0F; dialysateDeliveryCmdSet.ufRate = 0.0F; @@ -236,6 +247,38 @@ /*********************************************************************//** * @brief + * The setDialysateData function sets the latest DD dialysate data reported by + * the DD (called by DD published message handler). + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if message is invalid. + * @details \b Inputs: none + * @details \b Outputs: isDialysateGoodtoDeliver + * @param message Pointer to the DD dialysate mode data broadcast message + * @return TRUE if message handled successfully, FALSE if not + *************************************************************************/ +BOOL setDialysateData( MESSAGE_T *message ) +{ + BOOL result = FALSE; + GEN_DIALYSATE_MODE_DATA_T payload; + + // parse message payload + memcpy( &payload, &message->payload[ 0 ], sizeof( GEN_DIALYSATE_MODE_DATA_T ) ); + + if ( message->hdr.payloadLen == sizeof( GEN_DIALYSATE_MODE_DATA_T ) ) + { + isDialysateGoodtoDeliver = payload.isDialysateGoodtoDeliver; + result = TRUE; + } + else + { +#ifndef TEST_UI_ONLY + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_DD_DIALYSATE_DATA, (U32)message->hdr.payloadLen ); +#endif + } + return result; +} + +/*********************************************************************//** + * @brief * The getDialysatePressure function gets the latest reported dialysate * pressure. * @details \b Inputs: dialysatePressure @@ -249,6 +292,20 @@ /*********************************************************************//** * @brief + * The getDialysateGoodToDeliverStatus function gets the status + * whether dialysate is good to deliver + * pressure. + * @details \b Inputs: isDialysateGoodtoDeliver + * @details \b Outputs: none + * @return Latest dialysate good to delivery status. + *************************************************************************/ +BOOL getDialysateGoodToDeliverStatus( void ) +{ + return isDialysateGoodtoDeliver; +} + +/*********************************************************************//** + * @brief * The setDialysatePressure function sets the latest dialysate pressure * reported by the DD sub-system. * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if message invalid. @@ -285,14 +342,45 @@ /*********************************************************************//** * @brief + * The cmdStartPreGenerateDialysate function sends a pre generate dialysate command + * to the DD with a given set of details. DD will transition to pre generate + * dialysate mode if it hasn't already. + * @details \b Inputs: none + * @details \b Outputs: preGenDialysateCmdSet + * @details \b Message \b Sent: Start/continue pre-generate dialysate command. + * @param qd Target dialysate flow rate (Qd). + * @param dialTemp Target dialysate temperature in deg C. + * @param acidConvFactor Conversion factor for the acid used. + * @param bicarbConvFactor Conversion factor for the bicarbonate used. + * @param sodium Level of sodium used in mEq/L. + * @param bicarbonate Level of bicarbonate used in mEq/L. + * @return none + *************************************************************************/ +void cmdStartPreGenerateDialysate( F32 qd, F32 dialTemp, F32 acidConvFactor, F32 bicarbConvFactor, U32 sodium, U32 bicarbonate ) +{ + preGenDialysateCmdSet.start = TRUE; + preGenDialysateCmdSet.dialRate = qd; + preGenDialysateCmdSet.dialTemp = dialTemp; + preGenDialysateCmdSet.acidConvFactor = acidConvFactor; + preGenDialysateCmdSet.bicarbConvFactor = bicarbConvFactor; + preGenDialysateCmdSet.sodium = sodium; + preGenDialysateCmdSet.bicarbonate = bicarbonate; + +#ifndef TEST_UI_ONLY + sendMessage( MSG_ID_DD_PRE_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&preGenDialysateCmdSet), sizeof( PRE_GEN_DIALYSATE_REQ_PAYLOAD_T ) ); +#endif +} + +/*********************************************************************//** + * @brief * The cmdStartGenerateDialysate function sends a generate dialysate command * 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: dialysateDeliveryCmdSet * @details \b Message \b Sent: Start/continue generate dialysate command. * @param qd Target dialysate flow rate (Qd). - * @param quf Target ultrafiltration rate (Quf). + * @param quf Target ultrafiltration rate (Quf) (in mL/min). * @param dialTemp Target dialysate temperature in deg C. * @param bypass Flag indicating whether dialyzer should be bypassed. * @param acidConvFactor Conversion factor for the acid used. @@ -351,7 +439,7 @@ * @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). + * @param quf Target ultrafiltration flow rate (in mL/min). * @return none *************************************************************************/ void cmdChangeQuf( F32 quf )