Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -ra4d76e86bb3d374373b531c5b794e1270c004167 -r164ae54cb5fe0d2ea90307c2570a84d5b39d0aec --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision a4d76e86bb3d374373b531c5b794e1270c004167) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 164ae54cb5fe0d2ea90307c2570a84d5b39d0aec) @@ -28,6 +28,7 @@ #include "NVDataMgmt.h" #include "OperationModes.h" #include "PersistentAlarm.h" +#include "PresOccl.h" #include "Reservoirs.h" #include "Rinseback.h" #include "RTC.h" @@ -761,6 +762,8 @@ sendTreatmentLogEventData( UF_START_RESUME_EVENT, 0.0, presUFRate ); } transitionToDialysis(); + // To update partial blood pump occlusion baseline - start of treatment + signalBloodPumpPressureOcclBaseline(); result = TREATMENT_DIALYSIS_STATE; } } Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -re316cf48cb5fd96494e970590f68ca503a93a71e -r164ae54cb5fe0d2ea90307c2570a84d5b39d0aec --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision e316cf48cb5fd96494e970590f68ca503a93a71e) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 164ae54cb5fe0d2ea90307c2570a84d5b39d0aec) @@ -260,6 +260,33 @@ /*********************************************************************//** * @brief + * The isACPowerLost function determines whether A/C power loss has + * been detected. This function sets the alarms blocked condition to + * allow smooth alarm recovery. + * + * @details Inputs: alarmStatus + * @details Outputs: alarmsBlockedTimer + * @return TRUE if A/C power loss alarm is in effect, FALSE if not + *************************************************************************/ +BOOL isACPowerLost( void ) +{ + BOOL result = TRUE; + + // Continue to block new alarms until the alarms are cleared. + if ( ( FALSE == isAlarmConditionDetected( ALARM_ID_HD_AC_POWER_LOST ) ) && + ( FALSE == isAlarmConditionDetected( ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT ) ) ) + { + result = FALSE; + } + else + { + alarmsBlockedTimer = ALARM_BLOCKED_COUNT_AFTER_AC_RETURN; + } + return result; +} + +/*********************************************************************//** + * @brief * The activateAlarm function activates a given alarm. * @details Inputs: none * @details Outputs: alarmIsActive[], alarmStartedAt[], alarmStatus is updated @@ -268,6 +295,11 @@ *************************************************************************/ static void activateAlarm( ALARM_ID_T alarm ) { + // Block new alarms, occuring during loss of AC power + if ( ( TRUE == getCPLDACPowerLossDetected() ) ) + { + alarmsBlockedTimer = ALARM_BLOCKED_COUNT_AFTER_AC_RETURN; + } // Verify valid alarm index if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rf10e393f3d4c017d7e6f252b6ee203042ea5ee67 -r164ae54cb5fe0d2ea90307c2570a84d5b39d0aec --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision f10e393f3d4c017d7e6f252b6ee203042ea5ee67) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 164ae54cb5fe0d2ea90307c2570a84d5b39d0aec) @@ -1213,6 +1213,10 @@ handleSendInstitutionalRecordToUI( message ); break; + case MSG_ID_UI_HD_RESET_IN_SERVICE_MODE_REQUEST: + handleUIHDResetInServiceModeRequest( message ); + break; + // NOTE: this always must be the last case case MSG_ID_TESTER_LOGIN_REQUEST: handleTesterLogInRequest( message ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -re316cf48cb5fd96494e970590f68ca503a93a71e -r164ae54cb5fe0d2ea90307c2570a84d5b39d0aec --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision e316cf48cb5fd96494e970590f68ca503a93a71e) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 164ae54cb5fe0d2ea90307c2570a84d5b39d0aec) @@ -4620,6 +4620,70 @@ /*********************************************************************//** * @brief + * The handleTestFilteredBloodPumpOcclusionOverrideRequest function handles a request to + * override the filtered blood pump occlusion sensor readings. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestFilteredBloodPumpOcclusionOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // Verify payload length + if ( sizeof(TEST_OVERRIDE_PAYLOAD_T) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_PAYLOAD_T) ); + if ( FALSE == payload.reset ) + { + result = testSetFilteredBloodPumpOcclusionOverride( payload.state.f32 ); + } + else + { + result = testResetFilteredBloodPumpOcclusionOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestBloodPumpOcclusionBaselineOverrideRequest function handles a request to + * override the blood pump occlusion baseline value. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestBloodPumpOcclusionBaselineOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // Verify payload length + if ( sizeof(TEST_OVERRIDE_PAYLOAD_T) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_PAYLOAD_T) ); + if ( FALSE == payload.reset ) + { + result = testSetBloodPumpPartialOcclusionBaselineOverride( payload.state.f32 ); + } + else + { + result = testResetBloodPumpPartialOcclusionBaselineOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief * The handleTestPresOcclBroadcastIntervalOverrideRequest function handles a request to * override the broadcast interval for pressure/occlusion data. * @details Inputs: none @@ -5689,6 +5753,7 @@ if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) { result = testSetBatteryRemainingCapacityOverride( payload.state.f32 ); Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -re316cf48cb5fd96494e970590f68ca503a93a71e -r164ae54cb5fe0d2ea90307c2570a84d5b39d0aec --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision e316cf48cb5fd96494e970590f68ca503a93a71e) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 164ae54cb5fe0d2ea90307c2570a84d5b39d0aec) @@ -647,7 +647,13 @@ void handleTestVenousPressureOverrideRequest( MESSAGE_T *message ); // MSG_ID_OCCLUSION_BLOOD_PUMP_OVERRIDE -void handleTestBloodPumpOcclusionOverrideRequest( MESSAGE_T *message ); +void handleTestBloodPumpOcclusionOverrideRequest( MESSAGE_T *message ); + +//MSG_ID_HD_PARTIAL_OCCLUSION_BLOOD_PUMP_OVERRIDE +void handleTestFilteredBloodPumpOcclusionOverrideRequest( MESSAGE_T *message ); + +//MSG_ID_HD_PARTIAL_OCCL_BLOOD_PUMP_BASELINE_OVERRIDE +void handleTestBloodPumpOcclusionBaselineOverrideRequest( MESSAGE_T *message ); // MSG_ID_PRES_OCCL_SEND_INTERVAL_OVERRIDE void handleTestPresOcclBroadcastIntervalOverrideRequest( MESSAGE_T *message ); @@ -943,9 +949,6 @@ // MSG_ID_HD_SEND_BLOOD_LEAK_EMB_MODE_RESPONSE BOOL sendBloodLeakEmbeddedModeCommandResponse( U08 cmd, U32 responseLen, U08* response ); -// MSG_ID_HD_SEND_ALARMS_COMMAND -void handleResendAllAlarmsCommand( MESSAGE_T* message ); - // MSG_ID_HD_BLOOD_PUMP_SET_PWM void handleTestBloodPumpSetPWM( MESSAGE_T* message );