Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rf8531a3d3a626d68f6f4c5a01babadbdfa7dc1ab -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision f8531a3d3a626d68f6f4c5a01babadbdfa7dc1ab) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -246,18 +246,19 @@ // If treatment start is requested by user, initiate treatment workflow (transition to treatment params mode). if ( TRUE == treatStartReqReceived ) { -// PRESSURE_LIMIT_CHANGE_RESPONSE_T respRecord = { TRUE, REQUEST_REJECT_REASON_NONE, 0, 0, 0 }; + PRESSURE_LIMIT_CHANGE_RESPONSE_T respRecord = { TRUE, REQUEST_REJECT_REASON_NONE, 0, 0, 0 }; // Initialize treatment modes before starting a new treatment initPreTreatmentMode(); initTreatmentMode(); // initPostTreatmentMode(); resetAirTrap(); // Send UI default pressure settings since user is not asked to set them. -// respRecord.artPresLimitWindowmmHg = getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ); -// respRecord.venPresLimitWindowmmHg = getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ); -// respRecord.venPresLimitAsymmetricmmHg = getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ); -// sendPressureLimitsChangeResponse( &respRecord ); + respRecord.artPresLimitWindowmmHg = getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ); + respRecord.venPresLimitWindowmmHg = getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ); + respRecord.venPresLimitAsymmetricmmHg = getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ); + respRecord.tmpPresLimitWindowmmHg = getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_TMP_PRES_LIMIT_WINDOW ); + sendPressureLimitsChangeResponse( &respRecord ); // Start treatment workflow with pretreatment mode requestNewOperationMode( MODE_PRET ); treatStartReqReceived = FALSE; Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r7652af03a25dfbaa4af4a7aeb0a228a16dcf979f -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 7652af03a25dfbaa4af4a7aeb0a228a16dcf979f) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -29,6 +29,7 @@ #include "StateTxDialysis.h" #include "StateTxPaused.h" //#include "Switches.h" +#include "SystemCommTD.h" #include "TaskGeneral.h" #include "Timers.h" #include "TxParams.h" @@ -177,7 +178,7 @@ *************************************************************************/ U32 transitionToTreatmentMode( void ) { -// PRESSURE_LIMIT_CHANGE_RESPONSE_T respRecord; + PRESSURE_LIMIT_CHANGE_RESPONSE_T respRecord; // don't re-initialize treatment if tester is jumping to Tx mode // if ( getPreviousOperationMode() != MODE_PRET ) @@ -212,14 +213,17 @@ // Direct DD to generate dialysate and bypass while priming blood cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFRateLHr, getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), TRUE, - (ACID_CONCENTRATE_TYPE_T)getTreatmentParameterU32( TREATMENT_PARAM_ACID_CONCENTRATE ), - (BICARB_CONCENTRATE_TYPE_T)getTreatmentParameterU32( TREATMENT_PARAM_BICARB_CONCENTRATE ) ); + getTreatmentParameterF32( TREATMENT_PARAM_ACID_K_PLUS ), + getTreatmentParameterF32( TREATMENT_PARAM_ACID_CA2_PLUS ), + getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), + getTreatmentParameterU32( TREATMENT_PARAM_BICARBONATE ) ); // Read back limits for transmit to UI. -// respRecord.artPresLimitWindowmmHg = getTreatmentParameterU32( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ); -// respRecord.venPresLimitWindowmmHg = getTreatmentParameterU32( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ); -// respRecord.venPresLimitAsymmetricmmHg = getTreatmentParameterU32( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ); + respRecord.artPresLimitWindowmmHg = getTreatmentParameterU32( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ); + respRecord.venPresLimitWindowmmHg = getTreatmentParameterU32( TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ); + respRecord.venPresLimitAsymmetricmmHg = getTreatmentParameterU32( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ); + respRecord.tmpPresLimitWindowmmHg = getTreatmentParameterU32( TREATMENT_PARAM_TMP_PRES_LIMIT_WINDOW ); // Send response -// sendPressureLimitsChangeResponse( &respRecord ); + sendPressureLimitsChangeResponse( &respRecord ); return currentTreatmentState; } Index: firmware/App/Modes/ModeTreatment.h =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -85,6 +85,17 @@ U32 ufState; ///< Ultrafiltration state. } UF_DATA_PAYLOAD_T; +/// Payload record structure for the in-line pressure limits change response. +typedef struct +{ + BOOL accepted; ///< Accepted. + U32 rejReasonCode; ///< Rejection reason code number. + U32 artPresLimitWindowmmHg; ///< Arterial pressure limit window in mmHg. + U32 venPresLimitWindowmmHg; ///< Venous pressure limit window in mmHg. + U32 venPresLimitAsymmetricmmHg; ///< Venous pressure limit asymmetric in mmHg. + U32 tmpPresLimitWindowmmHg; ///< TMP pressure limit window in mmHg. +} PRESSURE_LIMIT_CHANGE_RESPONSE_T; + /// Maximum time in this mode before blood sitting alarm given (in general task intervals). #define MAX_TIME_BLOOD_SITTING ( ( 5 * SEC_PER_MIN * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) /// Maximum time in this mode before blood sitting warning given (in general task intervals). Index: firmware/App/Modes/StateTxDialysis.c =================================================================== diff -u -r6f02ff4686ec9dfc60247e9ed3fc9c5cc7771543 -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Modes/StateTxDialysis.c (.../StateTxDialysis.c) (revision 6f02ff4686ec9dfc60247e9ed3fc9c5cc7771543) +++ firmware/App/Modes/StateTxDialysis.c (.../StateTxDialysis.c) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -101,9 +101,11 @@ *************************************************************************/ void transitionToDialysis( void ) { - F32 dialTemp = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); - U32 acidType = getTreatmentParameterU32( TREATMENT_PARAM_ACID_CONCENTRATE ); - U32 bicbType = getTreatmentParameterU32( TREATMENT_PARAM_BICARB_CONCENTRATE ); + F32 dialTemp = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); + F32 acidKPlus = getTreatmentParameterF32( TREATMENT_PARAM_ACID_K_PLUS ); + F32 acidCa2Plus = getTreatmentParameterF32( TREATMENT_PARAM_ACID_CA2_PLUS ); + U32 sodium = getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ); + U32 bicarbonate = getTreatmentParameterU32( TREATMENT_PARAM_BICARBONATE ); doorClosedRequired( TRUE ); @@ -114,7 +116,7 @@ // Set actuators as appropriate for state cmdStartGenerateDialysate( setDialysateFlowRate, setUFRateLHr, dialTemp, FALSE, - (ACID_CONCENTRATE_TYPE_T)acidType, (BICARB_CONCENTRATE_TYPE_T)bicbType ); + acidKPlus, acidCa2Plus, sodium, bicarbonate ); transitionToDialysisState( currentDialysisState ); // Set substate for event Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -r6f02ff4686ec9dfc60247e9ed3fc9c5cc7771543 -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 6f02ff4686ec9dfc60247e9ed3fc9c5cc7771543) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -105,8 +105,10 @@ dialysateDeliveryCmdSet.ufRate = 0.0F; dialysateDeliveryCmdSet.dialTemp = 0.0F; dialysateDeliveryCmdSet.bypassDialyzer = TRUE; - dialysateDeliveryCmdSet.acidType = 0; - dialysateDeliveryCmdSet.bicarbType = 0; + dialysateDeliveryCmdSet.acidKPlus = 0.0F; + dialysateDeliveryCmdSet.acidCa2Plus = 0.0F; + dialysateDeliveryCmdSet.sodium = 0; + dialysateDeliveryCmdSet.bicarbonate = 0; } /**********************************************************************//** @@ -297,15 +299,17 @@ * @param bicarb Type of bicarbonate concentrate used. * @return none *************************************************************************/ -void cmdStartGenerateDialysate( F32 qd, F32 quf, F32 dialTemp, BOOL bypass, ACID_CONCENTRATE_TYPE_T acid, BICARB_CONCENTRATE_TYPE_T bicarb ) +void cmdStartGenerateDialysate( F32 qd, F32 quf, F32 dialTemp, BOOL bypass, F32 acidKPlus, F32 acidCa2Plus, U32 sodium, U32 bicarbonate ) { dialysateDeliveryCmdSet.start = TRUE; dialysateDeliveryCmdSet.dialRate = qd; dialysateDeliveryCmdSet.ufRate = quf; dialysateDeliveryCmdSet.dialTemp = dialTemp; dialysateDeliveryCmdSet.bypassDialyzer = bypass; - dialysateDeliveryCmdSet.acidType = (U32)acid; - dialysateDeliveryCmdSet.bicarbType = (U32)bicarb; + dialysateDeliveryCmdSet.acidKPlus = acidKPlus; + dialysateDeliveryCmdSet.acidCa2Plus = acidCa2Plus; + dialysateDeliveryCmdSet.sodium = sodium; + dialysateDeliveryCmdSet.bicarbonate = bicarbonate; #ifndef TEST_UI_ONLY sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); Index: firmware/App/Services/DDInterface.h =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -55,7 +55,7 @@ BOOL setDDOpMode( MESSAGE_T *message ); BOOL setDialysatePressure( MESSAGE_T *message ); -void cmdStartGenerateDialysate( F32 qd, F32 quf, F32 dialTemp, BOOL bypass, ACID_CONCENTRATE_TYPE_T acid, BICARB_CONCENTRATE_TYPE_T bicarb ); +void cmdStartGenerateDialysate( F32 qd, F32 quf, F32 dialTemp, BOOL bypass, F32 acidKPlus, F32 acidCa2Plus, U32 sodium, U32 bicarbonate ); void cmdChangeQd( F32 qd ); void cmdChangeQuf( F32 quf ); void cmdBypassDialyzer( BOOL bypass ); Index: firmware/App/Services/SystemCommTD.c =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Services/SystemCommTD.c (.../SystemCommTD.c) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Services/SystemCommTD.c (.../SystemCommTD.c) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -369,7 +369,35 @@ handleIncomingMessage( message ); } +/*********************************************************************//** + * @brief + * The sendPressureLimitsChangeResponse function constructs a change + * pressure limits response to the UI and queues the msg for transmit on the + * appropriate CAN channel. + * @details Inputs: none + * @details Outputs: Pressure limits change response msg constructed and queued. + * @param data response data record + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL sendPressureLimitsChangeResponse( PRESSURE_LIMIT_CHANGE_RESPONSE_T *data ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_TD_PRESSURE_LIMITS_CHANGE_RESPONSE; + msg.hdr.payloadLen = sizeof( PRESSURE_LIMIT_CHANGE_RESPONSE_T ); + + memcpy( payloadPtr, (U08*)data, sizeof( PRESSURE_LIMIT_CHANGE_RESPONSE_T ) ); + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_TD_2_UI, ACK_REQUIRED ); + + return result; +} + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Services/SystemCommTD.h =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Services/SystemCommTD.h (.../SystemCommTD.h) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Services/SystemCommTD.h (.../SystemCommTD.h) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -19,7 +19,8 @@ #define __SYSTEM_COMM_TD_H__ #include "TDCommon.h" -#include "CommBuffers.h" +#include "CommBuffers.h" +#include "ModeTreatment.h" #include "MsgQueues.h" #include "SystemComm.h" @@ -59,6 +60,9 @@ void setOnlyCANNode( BOOL only ); void clearCANXmitBuffers( void ); +// MSG_ID_TD_PRESSURE_LIMITS_CHANGE_RESPONSE +BOOL sendPressureLimitsChangeResponse( PRESSURE_LIMIT_CHANGE_RESPONSE_T *data ); + /**@}*/ #endif Index: firmware/App/Services/TxParams.c =================================================================== diff -u -raa97aa9a57c5cd5c2c0bf9a09dd14c6630882772 -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Services/TxParams.c (.../TxParams.c) (revision aa97aa9a57c5cd5c2c0bf9a09dd14c6630882772) +++ firmware/App/Services/TxParams.c (.../TxParams.c) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -350,6 +350,20 @@ /*********************************************************************//** * @brief + * The getTreatmentParameterU32DefaultValue function gets the defaultvalue + * of a given unsigned integer treatment parameter. + * @details Inputs: treatmentParameters[] + * @details Outputs: none + * @param param ID of treatment parameter to get unsigned integer default value for + * @return default value of given unsigned integer treatment parameter + *************************************************************************/ +U32 getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_T param ) +{ + return TREAT_PARAMS_PROPERTIES[ param ].def.uInt; +} + +/*********************************************************************//** + * @brief * The validateAndSetTreatmentParameters function validates received * treatment parameters. * @details \b Message \b Sent: MSG_ID_TD_RESP_TREATMENT_PARAMS_TO_VALIDATE @@ -563,15 +577,6 @@ result = FALSE; } } - else if ( param <= TREATMENT_PARAM_LAST_INT ) - { - if ( ( stagedParams[ param ].sInt < TREAT_PARAMS_PROPERTIES[ param ].min.sInt ) || - ( stagedParams[ param ].sInt > TREAT_PARAMS_PROPERTIES[ param ].max.sInt ) ) - { - reasons[ param ] = REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE; - result = FALSE; - } - } else { if ( ( stagedParams[ param ].sFlt < TREAT_PARAMS_PROPERTIES[ param ].min.sFlt ) || Index: firmware/App/Services/TxParams.h =================================================================== diff -u -r7652af03a25dfbaa4af4a7aeb0a228a16dcf979f -r11a668a2f4a0401eed544be570d9102d143b6f00 --- firmware/App/Services/TxParams.h (.../TxParams.h) (revision 7652af03a25dfbaa4af4a7aeb0a228a16dcf979f) +++ firmware/App/Services/TxParams.h (.../TxParams.h) (revision 11a668a2f4a0401eed544be570d9102d143b6f00) @@ -99,6 +99,7 @@ BOOL setTreatmentParameterF32( TREATMENT_PARAM_T param, F32 value ); // Set a specified floating point treatment parameter value U32 getTreatmentParameterU32( TREATMENT_PARAM_T param ); // Get a specified unsigned integer treatment parameter F32 getTreatmentParameterF32( TREATMENT_PARAM_T param ); // Get a specified floating point treatment parameter +U32 getTreatmentParameterU32DefaultValue( TREATMENT_PARAM_T param ); // Get the default value for a specified unsigned integer treatment parameter BOOL validateAndSetTreatmentParameters( MESSAGE_T *message ); // User provided treatment params to be set and validated BOOL validateAndSetUFVolume( MESSAGE_T *message ); // User provided ultrafiltration volume to be set and validated