Index: firmware/App/Controllers/Buttons.h =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Controllers/Buttons.h (.../Buttons.h) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Controllers/Buttons.h (.../Buttons.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -38,6 +38,14 @@ NUM_OF_BUTTON_STATES ///< Number of button states } BUTTON_STATE_T; +#pragma pack(push,1) +/// Payload record structure for an off button confirmation message from the UI. +typedef struct +{ + U08 confirmed; ///< 1 = confirmed, 0 = rejected/timed out +} OFF_BUTTON_MESSAGE_FROM_UI_PAYLOAD_T; +#pragma pack(pop) + // ********** public function prototypes ********** void initButtons( void ); Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -rde5a0d43bdef611d963d11855bc958a8d8899a09 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision de5a0d43bdef611d963d11855bc958a8d8899a09) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -53,6 +53,55 @@ NUM_OF_DG_PRESSURE_SENSORS ///< Number of pressure sensors. } DG_PRESSURE_SENSORS_T; +/// Payload record structure for an RO pump data message. +typedef struct +{ + U32 setPtPSI; + F32 measFlowRateMlMin; + F32 setPWM; +} DG_RO_PUMP_DATA_PAYLOAD_T; + +/// Payload record structure for a drain pump data message. +typedef struct +{ + U32 setPtRPM; + F32 setPWM; +} DG_DRAIN_PUMP_DATA_PAYLOAD_T; + +/// Payload record structure for a DG pressures data message. +typedef struct +{ + F32 roInPSI; + F32 roOutPSI; + F32 drainInPSI; + F32 drainOutPSI; +} DG_PRESSURES_DATA_PAYLOAD_T; + +/// Payload record structure for a reservoirs data message. +typedef struct +{ + U32 resID; + U32 setFillToVolumeMl; + U32 setDrainToVolumeMl; +} DG_RESERVOIRS_DATA_PAYLOAD_T; + +/// Payload record structure for DG temperature sensors data message. +typedef struct +{ + F32 TPi; + F32 TPo; + F32 TD1; + F32 TD2; + F32 TRo; + F32 TDi; + F32 HtrPrimThermo; + F32 HtrTrimThermo; + F32 HtrPrimColdJunc; + F32 HtrTrimColdJunc; + F32 HtrPrimInternal; + F32 HtrTrimInternal; +} DG_TEMPERATURES_T; + // ********** public function prototypes ********** void initDGInterface( void ); Index: firmware/App/Controllers/DialOutFlow.h =================================================================== diff -u -r7218f3c5a0afef9ebbf47655a00f37fc2eefd0f9 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Controllers/DialOutFlow.h (.../DialOutFlow.h) (revision 7218f3c5a0afef9ebbf47655a00f37fc2eefd0f9) +++ firmware/App/Controllers/DialOutFlow.h (.../DialOutFlow.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -43,6 +43,7 @@ } LOAD_CELL_T; #pragma pack(push, 1) + /// Dialysate outlet pump broadcast record typedef struct DialOutBroadcastingRecord { @@ -54,6 +55,16 @@ F32 measMCCurrmA; ///< Latest measured motor controller current for dialysate outlet pump in mA. F32 setPWMpct; ///< Latest PWM duty cycle for dialysate outlet pump in % (0..100). } DIAL_OUT_FLOW_DATA_T; + +/// Payload record structure for a load cell data message. +typedef struct +{ + F32 res1PrimaryLoadCell; + F32 res1BackupLoadCell; + F32 res2PrimaryLoadCell; + F32 res2BackupLoadCell; +} LOAD_CELL_READINGS_PAYLOAD_T; + #pragma pack(pop) // ********** public function prototypes ********** Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -rc64c652726610fb021dbc122694a0d962c9d2018 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision c64c652726610fb021dbc122694a0d962c9d2018) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -309,7 +309,7 @@ *************************************************************************/ static void checkArterialPressureInRange( void ) { - F32 artPres = getMeasuredArterialPressure(); + F32 artPres = getMeasuredArterialPressure(); // check arterial pressure during treatment mode if ( MODE_TREA == getCurrentOperationMode() ) @@ -350,7 +350,7 @@ *************************************************************************/ static void checkVenousPressureInRange( void ) { - F32 venPres = getMeasuredVenousPressure(); + F32 venPres = getMeasuredVenousPressure(); // check arterial pressure during treatment mode if ( MODE_TREA == getCurrentOperationMode() ) Index: firmware/App/Controllers/PresOccl.h =================================================================== diff -u -rb34eab65955f1681758069584bf6d1cda7fee846 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision b34eab65955f1681758069584bf6d1cda7fee846) +++ firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -71,8 +71,8 @@ U32 getMeasuredDialInPumpOcclusion( void ); U32 getMeasuredDialOutPumpOcclusion( void ); -BOOL isCartridgeLoaded( void ); - +BOOL isCartridgeLoaded( void ); + BOOL testSetPresOcclDataPublishIntervalOverride( U32 value ); BOOL testResetPresOcclDataPublishIntervalOverride( void ); BOOL testSetArterialPressureOverride( F32 value ); Index: firmware/App/HDCommon.h =================================================================== diff -u -r5e77f78c5dee9dfb441bd5d2053f7f4ac50dc619 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/HDCommon.h (.../HDCommon.h) (revision 5e77f78c5dee9dfb441bd5d2053f7f4ac50dc619) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -72,6 +72,43 @@ // **** Common Definitions **** +#pragma pack(push,1) + +/// Payload record structure for an HD versions message. +typedef struct +{ + U08 major; + U08 minor; + U08 micro; + U16 build; + U08 fpgaId; + U08 fpgaMajor; + U08 fpgaMinor; + U08 fpgaLab; +} HD_VERSIONS_T; + +/// Payload record structure for a peristaltic pump data message. +typedef struct +{ + U32 setPoint; + F32 measFlow; + F32 measRotorSpd; + F32 measPumpSpd; + F32 measMCSpd; + F32 measMCCurr; + F32 pwmDC; +} PERISTALTIC_PUMP_STATUS_PAYLOAD_T; + +/// Payload record structure for a pump set point override message. +typedef struct +{ + BOOL reset; + S32 setPt; + U32 ctrlMode; +} OVERRIDE_PUMP_SET_PT_PAYLOAD_T; + +#pragma pack(pop) + // **** Common Macros **** /**@}*/ Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -22,12 +22,14 @@ #include "DialInFlow.h" #include "DialOutFlow.h" #include "Dialysis.h" -#include "TaskGeneral.h" +#include "ModeTreatment.h" +#include "ModeTreatmentParams.h" #include "OperationModes.h" #include "SystemCommMessages.h" +#include "TaskGeneral.h" #include "Timers.h" #include "TreatmentStop.h" -#include "ModeTreatment.h" +#include "Utilities.h" #ifdef RM46_EVAL_BOARD_TARGET #include "Timers.h" static U32 start; @@ -712,6 +714,92 @@ /*********************************************************************//** * @brief + * The verifyPressureLimitsChange function verifies a user change request + * for in-line pressure alarm limits. If valid, new limits are accepted + * and set. + * @details Inputs: none + * @details Outputs: new pressure limits set, response sent + * @return TRUE if new pressure limits accepted, FALSE if not. + *************************************************************************/ +BOOL verifyPressureLimitsChange( PRESSURE_LIMIT_CHANGE_REQUEST_T *data ) +{ + BOOL result = TRUE; + CRITICAL_DATAS_T proposedNewArtLowLimit, proposedNewArtHighLimit; + CRITICAL_DATAS_T proposedNewVenLowLimit, proposedNewVenHighLimit; + PRESSURE_LIMIT_CHANGE_RESPONSE_T respRecord = { FALSE, 0, 0, 0, 0, 0 }; + + proposedNewArtLowLimit.sInt = data->artLowLimit; + proposedNewArtHighLimit.sInt = data->artHighLimit; + proposedNewVenLowLimit.sInt = data->venLowLimit; + proposedNewVenHighLimit.sInt = data->venHighLimit; + + // check ranges for changed limits + if ( FALSE == isTreatmentParamInRange( TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT, proposedNewArtLowLimit ) ) + { + respRecord.rejReasonCode = REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE; + result = FALSE; + } + if ( FALSE == isTreatmentParamInRange( TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT, proposedNewArtHighLimit ) ) + { + respRecord.rejReasonCode = REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE; + result = FALSE; + } + if ( FALSE == isTreatmentParamInRange( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT, proposedNewVenLowLimit ) ) + { + respRecord.rejReasonCode = REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE; + result = FALSE; + } + if ( FALSE == isTreatmentParamInRange( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT, proposedNewVenHighLimit ) ) + { + respRecord.rejReasonCode = REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE; + result = FALSE; + } + + // if ranges ok, check separation between low/high limits + if ( TRUE == result ) + { + S32 arterialPresLimitDelta = data->artHighLimit - data->artLowLimit; + S32 venousPresLimitDelta = data->venHighLimit - data->venLowLimit; + + // check arterial alarm limits dependency + if ( arterialPresLimitDelta < MIN_PRESSURE_ALARM_LIMIT_DELTA_MMHG ) + { + respRecord.rejReasonCode = REQUEST_REJECT_REASON_ARTERIAL_PRESSURE_LOW_VS_HIGH; + result = FALSE; + } + + // check venous alarm limits dependency + if ( venousPresLimitDelta < MIN_PRESSURE_ALARM_LIMIT_DELTA_MMHG ) + { + respRecord.rejReasonCode = REQUEST_REJECT_REASON_VENOUS_PRESSURE_LOW_VS_HIGH; + result = FALSE; + } + } + + // set overall result - are changes accepted? + respRecord.accepted = result; + + // if changes accepted, set new pressure limits and read back for transmit to UI. + if ( TRUE == result ) + { + setTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT, data->artLowLimit ); + setTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT, data->artHighLimit ); + setTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT, data->venLowLimit ); + setTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT, data->venHighLimit ); + respRecord.artLowLimit = getTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT ); + respRecord.artHighLimit = getTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT ); + respRecord.venLowLimit = getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT ); + respRecord.venHighLimit = getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ); + } + + // send response + sendChangePressureLimitsChangeResponse( &respRecord ); + + return result; +} + +/*********************************************************************//** + * @brief * The broadcastTreatmentTimeAndState function broadcasts treatment time and * state data during treatment. * @details Index: firmware/App/Modes/ModeTreatment.h =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -32,6 +32,49 @@ // ********** public definitions ********** +/// Payload record structure for a treatment time status message. +typedef struct +{ + U32 treatmentTimePrescribedinSec; + U32 treatmentTimeElapsedinSec; + U32 treatmentTimeRemaininginSec; +} TREATMENT_TIME_DATA_T; + +/// Payload record structure for a treatment state message. +typedef struct +{ + U32 treatmentSubMode; + U32 uFState; + U32 salineBolusState; +} TREATMENT_STATE_DATA_T; + +/// Payload record structure for an ultrafiltration volume change confirmation message. +typedef struct +{ + F32 volume_mL; + U32 adjustType; +} UF_SETTINGS_CHANGE_CONFIRMATION_PAYLOAD_T; + +/// Payload record structure for the in-line pressure limits change request. +typedef struct +{ + S32 artLowLimit; + S32 artHighLimit; + S32 venLowLimit; + S32 venHighLimit; +} PRESSURE_LIMIT_CHANGE_REQUEST_T; + +/// Payload record structure for the in-line pressure limits change response. +typedef struct +{ + BOOL accepted; + U32 rejReasonCode; + S32 artLowLimit; + S32 artHighLimit; + S32 venLowLimit; + S32 venHighLimit; +} PRESSURE_LIMIT_CHANGE_RESPONSE_T; + // ********** private function prototypes ********** void initTreatmentMode( void ); // initialize this module @@ -46,6 +89,7 @@ BOOL verifyUFSettingsChange( F32 uFVolume ); BOOL verifyUFSettingsConfirmation( F32 uFVolume, U32 adjustment ); BOOL verifyBloodAndDialysateRateSettingsChange( U32 bloodRate, U32 dialRate ); +BOOL verifyPressureLimitsChange( PRESSURE_LIMIT_CHANGE_REQUEST_T *data ); /**@}*/ Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -38,7 +38,6 @@ // ********** private definitions ********** #define MAX_DIALYSATE_VOLUME_ML ( 150 * ML_PER_LITER ) ///< Maximum dialysate volume (in mL) -#define MIN_PRESSURE_ALARM_LIMIT_DELTA_MMHG ( 25 ) ///< Minimum pressure alarm limit delta (in mmHg) /// Record for range and default of treatment parameters. typedef struct @@ -94,7 +93,6 @@ static HD_TREATMENT_PARAMS_MODE_STATE_T handleWaitForUI2ConfirmState( void ); static BOOL checkTreatmentParamsInRange( U32 *reasons ); static BOOL checkTreatmentParamsDependencies( U32 *reasons ); -static BOOL isTreatmentParamInRange( TREATMENT_PARAM_T param, CRITICAL_DATAS_T value ); static void extractTreatmentParamsFromPayload( TREATMENT_PARAMS_DATA_PAYLOAD_T payload ); static void sendTreatmentParamsResponse( BOOL valid, U32 *reasons ); @@ -477,7 +475,7 @@ * @param value value of parameter to check range for * @return TRUE if given treatment parameter is in range, FALSE if not *************************************************************************/ -static BOOL isTreatmentParamInRange( TREATMENT_PARAM_T param, CRITICAL_DATAS_T value ) +BOOL isTreatmentParamInRange( TREATMENT_PARAM_T param, CRITICAL_DATAS_T value ) { BOOL result = FALSE; Index: firmware/App/Modes/ModeTreatmentParams.h =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -32,6 +32,8 @@ // ********** public definitions ********** +#define MIN_PRESSURE_ALARM_LIMIT_DELTA_MMHG ( 25 ) ///< Minimum pressure alarm limit delta (in mmHg) + /// Record structure for a treatment parameters payload. typedef struct { @@ -69,20 +71,21 @@ // ********** public function prototypes ********** -void initTreatParamsMode( void ); // initialize this module -void transitionToTreatParamsMode( void ); // prepares for transition to treatment parameters mode -U32 execTreatParamsMode( void ); // execute the treatment parameters mode state machine (call from OperationModes) +void initTreatParamsMode( void ); // initialize this module +void transitionToTreatParamsMode( void ); // prepares for transition to treatment parameters mode +U32 execTreatParamsMode( void ); // execute the treatment parameters mode state machine (call from OperationModes) -BOOL validateAndSetTreatmentParameters( TREATMENT_PARAMS_DATA_PAYLOAD_T params ); // user provided treatment params to be set and validated -BOOL signalUserConfirmationOfTreatmentParameters( void ); // User has confirmed treatment parameters -BOOL signalUserCancelTreatment( void ); // User has cancelled treatment +BOOL validateAndSetTreatmentParameters( TREATMENT_PARAMS_DATA_PAYLOAD_T params ); // user provided treatment params to be set and validated +BOOL signalUserConfirmationOfTreatmentParameters( void ); // User has confirmed treatment parameters +BOOL signalUserCancelTreatment( void ); // User has cancelled treatment -BOOL setTreatmentParameterU32( TREATMENT_PARAM_T param, U32 value ); // Set a specified unsigned integer treatment parameter value -BOOL setTreatmentParameterS32( TREATMENT_PARAM_T param, S32 value ); // Set a specified signed integer treatment parameter value -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 -S32 getTreatmentParameterS32( TREATMENT_PARAM_T param ); // Get a specified signed integer treatment parameter -F32 getTreatmentParameterF32( TREATMENT_PARAM_T param ); // Get a specified floating point treatment parameter +BOOL setTreatmentParameterU32( TREATMENT_PARAM_T param, U32 value ); // Set a specified unsigned integer treatment parameter value +BOOL setTreatmentParameterS32( TREATMENT_PARAM_T param, S32 value ); // Set a specified signed integer treatment parameter value +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 +S32 getTreatmentParameterS32( TREATMENT_PARAM_T param ); // Get a specified signed integer treatment parameter +F32 getTreatmentParameterF32( TREATMENT_PARAM_T param ); // Get a specified floating point treatment parameter +BOOL isTreatmentParamInRange( TREATMENT_PARAM_T param, CRITICAL_DATAS_T value ); // Check range for a proposed treatment parameter value BOOL testSetTreatmentParameter( TREATMENT_PARAM_T param, CRITICAL_DATAS_T value ); // Set a specific treatment parameter value Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r34e43586567b8b43f713d28f1ce36fe781710649 -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 34e43586567b8b43f713d28f1ce36fe781710649) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -105,6 +105,16 @@ ALARM_DATA_TYPES_T dataType; ///< The type of alarm data provided. ALARM_DATAS_T data; ///< The alarm data of specified type. } ALARM_DATA_T; + +/// Payload record structure for an alarm status message. +typedef struct +{ + U32 alarmState; ///< Alarm state: 0 = no alarms, 1 = low priority, 2 = medium priority, 3 = high priority + U32 alarmTop; ///< ID of top active alarm + U32 escalatesIn; ///< Top active alarm escalates in this many seconds + U32 silenceExpiresIn; ///< Silencing of alarms expires in this many seconds + U16 alarmsFlags; ///< bit flags: 1 = true, 0 = false for each bit flag +} ALARM_COMP_STATUS_PAYLOAD_T; #pragma pack(pop) /// Listing of specific software faults for logging purposes. Fisheye: Tag f3b83f75a19b975ad1abead662c8151a2907ac00 refers to a dead (removed) revision in file `firmware/App/Services/MessagePayloads.h'. Fisheye: No comparison available. Pass `N' to diff? Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r0295b0641d2f7eb2f61bf1d7901134cf9b893afb -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 0295b0641d2f7eb2f61bf1d7901134cf9b893afb) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -1220,6 +1220,10 @@ handleUIUserEndTreatmentRequest( message ); break; + case MSG_ID_UI_PRESSURE_LIMITS_CHANGE_REQUEST: + handleChangePressureLimitsRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r0295b0641d2f7eb2f61bf1d7901134cf9b893afb -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 0295b0641d2f7eb2f61bf1d7901134cf9b893afb) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -25,7 +25,6 @@ #include "DialInFlow.h" #include "Dialysis.h" #include "FPGA.h" -#include "MessagePayloads.h" #include "ModeStandby.h" #include "ModeTreatment.h" #include "ModeTreatmentParams.h" @@ -407,8 +406,37 @@ result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_REQUIRED ); return result; -} - +} + +/*********************************************************************//** + * @brief + * The sendChangePressureLimitsChangeResponse 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 sendChangePressureLimitsChangeResponse( 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_HD_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_HD_2_UI, ACK_REQUIRED ); + + return result; +} + /*********************************************************************//** * @brief * The sendTreatmentParamsRangesToUI function constructs a treatment parameter @@ -1733,8 +1761,33 @@ { sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, FALSE ); } -} - +} + +/*********************************************************************//** + * @brief + * The handleChangePressureLimitsRequest function handles a pressure limits + * change message from the UI. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleChangePressureLimitsRequest( MESSAGE_T *message ) +{ + if ( sizeof( PRESSURE_LIMIT_CHANGE_REQUEST_T ) == message->hdr.payloadLen ) + { + PRESSURE_LIMIT_CHANGE_REQUEST_T data; + + memcpy( &data, &message->payload[0], sizeof(PRESSURE_LIMIT_CHANGE_REQUEST_T) ); + + verifyPressureLimitsChange( &data ); + } + else + { + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, FALSE ); + } +} + /*********************************************************************//** * @brief * The handleDGOpMode function handles a DG broadcast of it's current mode. Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r0295b0641d2f7eb2f61bf1d7901134cf9b893afb -rf3b83f75a19b975ad1abead662c8151a2907ac00 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 0295b0641d2f7eb2f61bf1d7901134cf9b893afb) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision f3b83f75a19b975ad1abead662c8151a2907ac00) @@ -19,11 +19,12 @@ #define __SYSTEM_COMM_MESSAGES_H__ #include "HDCommon.h" +#include "DGInterface.h" +#include "DialOutFlow.h" +#include "ModeTreatment.h" #include "MsgQueues.h" #include "NVDataMgmt.h" -#include "DialOutFlow.h" -#include "DGInterface.h" -#include "PresOccl.h" +#include "PresOccl.h" /** * @defgroup SystemCommMessages SystemCommMessages @@ -129,6 +130,12 @@ // MSG_ID_USER_BLOOD_DIAL_RATE_CHANGE_RESPONSE BOOL sendChangeBloodDialysateRateChangeResponse( BOOL accepted, U32 reason, U32 bloodRate, U32 dialRate ); +// MSG_ID_UI_PRESSURE_LIMITS_CHANGE_REQUEST +void handleChangePressureLimitsRequest( MESSAGE_T *message ); + +// MSG_ID_HD_PRESSURE_LIMITS_CHANGE_RESPONSE +BOOL sendChangePressureLimitsChangeResponse( PRESSURE_LIMIT_CHANGE_RESPONSE_T *data ); + // MSG_ID_SET_DG_DIALYSATE_TEMP_TARGETS BOOL sendDialysateTempTargetsToDG( F32 primary, F32 trimmer );