Index: firmware/App/Controllers/FluidLeak.c =================================================================== diff -u -r9d924ec76ce770eb2a94088bfe37bfb0e30981a8 -r04717003bb672ca3ed507a924156e141db2d5855 --- firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 9d924ec76ce770eb2a94088bfe37bfb0e30981a8) +++ firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 04717003bb672ca3ed507a924156e141db2d5855) @@ -19,6 +19,7 @@ #include "FluidLeak.h" #include "FPGA.h" #include "OperationModes.h" +#include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "TaskPriority.h" #include "Timers.h" @@ -33,6 +34,9 @@ #define FLUID_LEAK_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the fluid leak data is published on the CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 50 ///< Data publish counter start count. +/// Persist time (in ms) for fluid leak error condition. +static const U32 FLUID_LEAK_ERROR_PERSIST_MS = 250; + // ********** private data ********** static U32 fluidLeakStatePublicationTimerCounter; ///< Timer counter used to schedule fluid leak publication to CAN bus. @@ -59,6 +63,8 @@ fluidLeakState.ovData = FLUID_LEAK_STATE_DRY; fluidLeakState.override = OVERRIDE_RESET; fluidLeakStatePublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + + initPersistentAlarm( ALARM_ID_HD_FLUID_LEAK_DETECTED, 0, FLUID_LEAK_ERROR_PERSIST_MS ); } /*********************************************************************//** @@ -87,10 +93,14 @@ // Check state reading and act upon if ( FLUID_LEAK_STATE_WET == getFluidLeakState() ) { - activateAlarmNoData( ALARM_ID_HD_FLUID_LEAK_DETECTED ); + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_FLUID_LEAK_DETECTED, TRUE ) ) + { + activateAlarmNoData( ALARM_ID_HD_FLUID_LEAK_DETECTED ); + } } else // FLUID_LEAK_STATE_DRY == getFluidLeakState() { + isPersistentAlarmTriggered( ALARM_ID_HD_FLUID_LEAK_DETECTED, FALSE ); clearAlarmCondition( ALARM_ID_HD_FLUID_LEAK_DETECTED ); } } Index: firmware/App/Modes/ModeTreatmentParams.h =================================================================== diff -u -r99ec83eff4683ad69a249f935d74cb9226984d21 -r04717003bb672ca3ed507a924156e141db2d5855 --- firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision 99ec83eff4683ad69a249f935d74cb9226984d21) +++ firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision 04717003bb672ca3ed507a924156e141db2d5855) @@ -34,7 +34,7 @@ #define MIN_PRESSURE_ALARM_LIMIT_DELTA_MMHG ( 30 ) ///< Minimum pressure alarm limit delta (in mmHg) #define MAX_UF_RATE_ML_MIN ( 2500.01F / (F32)MIN_PER_HOUR ) ///< Maximum ultrafiltration rate (in mL/min). Added small decimal to prevent float round off issues. -#define MIN_UF_RATE_ML_MIN ( 100.0F / (F32)MIN_PER_HOUR ) ///< Minimum ultrafiltration rate (in mL/min). +#define MIN_UF_RATE_ML_MIN ( 0.0F ) ///< Minimum ultrafiltration rate (in mL/min). #define MAX_UF_VOLUME_ML ( 8 * ML_PER_LITER ) ///< Maximum ultrafiltration volume (in mL). /// Record structure for a treatment parameters payload. Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rbb43bcd42a48f6e754d1a6b0f346e9a876d6dcf6 -r04717003bb672ca3ed507a924156e141db2d5855 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision bb43bcd42a48f6e754d1a6b0f346e9a876d6dcf6) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 04717003bb672ca3ed507a924156e141db2d5855) @@ -53,7 +53,7 @@ #define MSG_NOT_ACKED_TIMEOUT_MS 150 ///< Maximum time for a Denali message that requires ACK to be ACK'd -#define MSG_NOT_ACKED_MAX_RETRIES 8 ///< Maximum number of times a message that requires ACK that was not ACK'd can be re-sent before alarm +#define MSG_NOT_ACKED_MAX_RETRIES 10 ///< Maximum number of times a message that requires ACK that was not ACK'd can be re-sent before alarm #define PENDING_ACK_LIST_SIZE 25 ///< Maximum number of Denali messages that can be pending ACK at any given time #define MAX_FPGA_CLOCK_SPEED_ERRORS 3 ///< maximum number of FPGA clock speed errors within window period before alarm @@ -596,6 +596,7 @@ // If message from UI channel, mark UI communication so HD can begin transmitting if ( ( COMM_BUFFER_IN_CAN_UI_2_HD == MSG_IN_BUFFERS[ i ] ) || ( COMM_BUFFER_IN_CAN_UI_BROADCAST == MSG_IN_BUFFERS[ i ] ) ) { + timeOfLastUICheckIn = getMSTimerCount(); uiDidCommunicate = TRUE; } } Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r14d740bbb065f043daaa348bcda5f447e1c16a32 -r04717003bb672ca3ed507a924156e141db2d5855 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 14d740bbb065f043daaa348bcda5f447e1c16a32) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 04717003bb672ca3ed507a924156e141db2d5855) @@ -2063,16 +2063,7 @@ *************************************************************************/ void handleUICheckIn( MESSAGE_T *message ) { - - if ( message->hdr.payloadLen == sizeof( U32 ) ) - { - checkInFromUI(); - } - - else - { - sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, FALSE ); - } + checkInFromUI(); } /*********************************************************************//**