Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r1afb454d97cc2b73d61ea291205a6ed06d85577d -r933a18d740285e70be9d00696ed0f5a5381bc8e4 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 1afb454d97cc2b73d61ea291205a6ed06d85577d) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 933a18d740285e70be9d00696ed0f5a5381bc8e4) @@ -24,7 +24,6 @@ #include "Buttons.h" #include "DGInterface.h" #include "FPGA.h" -#include "MessagePayloads.h" #include "ModePreTreat.h" #include "ModeStandby.h" #include "ModeTreatment.h" @@ -400,8 +399,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 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_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 @@ -894,26 +922,19 @@ * @param doOccl Latest measured dialysate outlet pump occlusion pressure * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastPresOcclData( F32 artPres, F32 venPres, F32 bpOccl, F32 diOccl, F32 doOccl ) +BOOL broadcastPresOcclData( PRESSURE_OCCLUSION_DATA_T data ) { BOOL result; MESSAGE_T msg; U08 *payloadPtr = msg.payload; - PRESSURE_OCCLUSION_DATA_T payload; // create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_PRESSURE_OCCLUSION_DATA; msg.hdr.payloadLen = sizeof( PRESSURE_OCCLUSION_DATA_T ); - payload.arterialPressure = artPres; - payload.venousPressure = venPres; - payload.bldPumpOcclusion = bpOccl; - payload.diPumpOcclusion = diOccl; - payload.doPumpOcclusion = doOccl; + memcpy( payloadPtr, &data, sizeof( PRESSURE_OCCLUSION_DATA_T ) ); - memcpy( payloadPtr, &payload, sizeof( PRESSURE_OCCLUSION_DATA_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_BROADCAST, ACK_NOT_REQUIRED ); @@ -1793,6 +1814,31 @@ /*********************************************************************//** * @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 handleSalineBolusRequest function handles a saline bolus request * message from the UI. * @details Inputs: none @@ -2284,14 +2330,7 @@ if ( sizeof(OVERRIDE_PUMP_SET_PT_PAYLOAD_T) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof(OVERRIDE_PUMP_SET_PT_PAYLOAD_T) ); - if ( FALSE == payload.reset ) - { - result = testSetTargetBloodFlowRateOverride( payload.setPt, payload.ctrlMode ); - } - else - { - result = testResetTargetBloodFlowRateOverride(); - } + result = testSetTargetBloodFlowRateOverride( payload.setPt, payload.ctrlMode ); } // respond to request @@ -2540,14 +2579,7 @@ if ( sizeof(OVERRIDE_PUMP_SET_PT_PAYLOAD_T) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof(OVERRIDE_PUMP_SET_PT_PAYLOAD_T) ); - if ( FALSE == payload.reset ) - { - result = testSetTargetDialInFlowRateOverride( payload.setPt, payload.ctrlMode ); - } - else - { - result = testResetTargetDialInFlowRateOverride(); - } + result = testSetTargetDialInFlowRateOverride( payload.setPt, payload.ctrlMode ); } // respond to request @@ -2572,14 +2604,7 @@ if ( sizeof(OVERRIDE_PUMP_SET_PT_PAYLOAD_T) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof(OVERRIDE_PUMP_SET_PT_PAYLOAD_T) ); - if ( FALSE == payload.reset ) - { - result = testSetTargetDialOutFlowRateOverride( payload.setPt, payload.ctrlMode ); - } - else - { - result = testResetTargetDialOutFlowRateOverride(); - } + result = testSetTargetDialOutFlowRateOverride( payload.setPt, payload.ctrlMode ); } // respond to request @@ -3839,4 +3864,99 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleTestSuperClearAlarmsRequest function handles a request to clear + * all active alarms. + * @details + * Inputs : none + * Outputs : message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestSuperClearAlarmsRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 key; + + memcpy( &key, message->payload, sizeof(U32) ); + result = testClearAllAlarms( key ); + + result = TRUE; + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestHDCalibrationDataRequest function handles a request for + * HD calibration data. + * @details + * Inputs : none + * Outputs : message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestHDCalibrationDataRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( 0 == message->hdr.payloadLen ) + { + CALIBRATION_DATA_T cal; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // get calibration data + result = getCalibrationData( &cal ); + if ( TRUE == result ) + { + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_CALIBRATION_DATA; + msg.hdr.payloadLen = sizeof( CALIBRATION_DATA_T ); + + memcpy( payloadPtr, &cal, sizeof( CALIBRATION_DATA_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_BROADCAST, ACK_NOT_REQUIRED ); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestEraseHDCalibrationDataRequest function handles a request for + * HD calibration data erasure. + * @details + * Inputs : none + * Outputs : message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestEraseHDCalibrationDataRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 key; + + memcpy( &key, message->payload, sizeof(U32) ); + + result = testResetCalibrationData( key ); + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/