Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r11b0015549d4371fa2ad4314c17567712a36a564 -r88868fb5e8f2fcc82f50a952be700863f3cbe19c --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 11b0015549d4371fa2ad4314c17567712a36a564) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 88868fb5e8f2fcc82f50a952be700863f3cbe19c) @@ -19,7 +19,8 @@ #include "can.h" #include "etpwm.h" - + +#include "Battery.h" #include "BloodFlow.h" #include "FPGA.h" #include "InternalADC.h" @@ -1248,7 +1249,7 @@ BOOL const isRunningMCCurrentBad = ( ( BLOOD_PUMP_OFF_STATE != bloodPumpState ) && ( bpCurr > BP_MAX_CURR_WHEN_RUNNING_MA ) ? TRUE : FALSE ); if ( ( TRUE == isPersistentAlarmTriggered( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, isOffMCCurrentBad || isRunningMCCurrentBad ) ) && - ( FALSE == isAlarmActive( ALARM_ID_HD_AC_POWER_LOST ) ) && ( FALSE == isAlarmActive( ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT ) ) ) + ( FALSE == isACPowerLost() ) ) { #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_MOTOR_CURRNT_CHECKS ) != SW_CONFIG_ENABLE_VALUE ) Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r11b0015549d4371fa2ad4314c17567712a36a564 -r88868fb5e8f2fcc82f50a952be700863f3cbe19c --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 11b0015549d4371fa2ad4314c17567712a36a564) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 88868fb5e8f2fcc82f50a952be700863f3cbe19c) @@ -20,7 +20,8 @@ #include "etpwm.h" #include "gio.h" #include "mibspi.h" - + +#include "Battery.h" #include "DialInFlow.h" #include "FPGA.h" #include "InternalADC.h" @@ -1432,7 +1433,8 @@ { F32 dipCurr; - if ( ( FALSE == isAlarmActive( ALARM_ID_HD_AC_POWER_LOST ) ) && ( FALSE == isAlarmActive( ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT ) ) ) + // only check current when we have A/C power + if ( FALSE == isACPowerLost() ) { // DialIn pump should be off if ( DIAL_IN_PUMP_OFF_STATE == dialInPumpState ) Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -r11b0015549d4371fa2ad4314c17567712a36a564 -r88868fb5e8f2fcc82f50a952be700863f3cbe19c --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 11b0015549d4371fa2ad4314c17567712a36a564) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 88868fb5e8f2fcc82f50a952be700863f3cbe19c) @@ -21,6 +21,7 @@ #include "gio.h" #include "mibspi.h" +#include "Battery.h" #include "DialOutFlow.h" #include "FPGA.h" #include "InternalADC.h" @@ -1134,7 +1135,8 @@ { F32 dopCurr; - if ( ( FALSE == isAlarmActive( ALARM_ID_HD_AC_POWER_LOST ) ) && ( FALSE == isAlarmActive( ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT ) ) ) + // only check current when we have A/C power + if ( FALSE == isACPowerLost() ) { // DialOut pump should be off if ( DIAL_OUT_PUMP_OFF_STATE == dialOutPumpState ) Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -re8ca208215236d28f5db7c2deb5500facb0cc481 -r88868fb5e8f2fcc82f50a952be700863f3cbe19c --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision e8ca208215236d28f5db7c2deb5500facb0cc481) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision 88868fb5e8f2fcc82f50a952be700863f3cbe19c) @@ -212,6 +212,27 @@ /*********************************************************************//** * @brief + * The isACPowerLost function determines whether A/C power loss has been + * detected. + * @details Inputs: none + * @details Outputs: none + * @return TRUE if A/C power loss condition is in effect, FALSE if not + *************************************************************************/ +BOOL isACPowerLost( void ) +{ + BOOL result = TRUE; + + if ( ( FALSE == isAlarmConditionDetected( ALARM_ID_HD_AC_POWER_LOST ) ) && + ( FALSE == isAlarmConditionDetected( ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT ) ) ) + { + result = FALSE; + } + + return result; +} + +/*********************************************************************//** + * @brief * The getBatteryRemainingCapacity_mWh function returns the latest battery * remaining capacity (in mWh). * @details Inputs: batteryRemCapacity_mWh Index: firmware/App/Drivers/Battery.h =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r88868fb5e8f2fcc82f50a952be700863f3cbe19c --- firmware/App/Drivers/Battery.h (.../Battery.h) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Drivers/Battery.h (.../Battery.h) (revision 88868fb5e8f2fcc82f50a952be700863f3cbe19c) @@ -77,6 +77,7 @@ void execBatteryMonitor( void ); BOOL isBatteryCharged( void ); +BOOL isACPowerLost( void ); BOOL testSetBatteryRemainingPercentOverride( F32 value ); BOOL testResetSetBatteryRemainingPercentOverride( void ); Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r949b386b5f58ab8bc534bd7e913ecb9f2c084c17 -r88868fb5e8f2fcc82f50a952be700863f3cbe19c --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 949b386b5f58ab8bc534bd7e913ecb9f2c084c17) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 88868fb5e8f2fcc82f50a952be700863f3cbe19c) @@ -546,13 +546,50 @@ *************************************************************************/ BOOL isAlarmActive( ALARM_ID_T alarm ) { - BOOL result = alarmIsActive[ alarm ]; + BOOL result = FALSE; + + if ( alarm < NUM_OF_ALARM_IDS ) + { + result = alarmIsActive[ alarm ]; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_ALARM_ID_REFERENCED, (U32)alarm ); + } return result; } /*********************************************************************//** * @brief + * The isAlarmConditionDetected function determines whether a given alarm + * condition is currently detected. + * @details Inputs: alarmIsDetected[] + * @details Outputs: none + * @param alarm ID of alarm to check + * @return TRUE if given alarm is active, FALSE if not + *************************************************************************/ +BOOL isAlarmConditionDetected( ALARM_ID_T alarm ) +{ + BOOL result = FALSE; + + if ( alarm < NUM_OF_ALARM_IDS ) + { + if ( ( TRUE == alarmIsActive[ alarm ] ) && ( TRUE == alarmIsDetected[ alarm ] ) ) + { + result = TRUE; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_ALARM_ID_REFERENCED, (U32)alarm ); + } + + return result; +} + +/*********************************************************************//** + * @brief * The isAnyAlarmActive function determines whether any alarm is currently * active. * @details Inputs: alarmStatus Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r88868fb5e8f2fcc82f50a952be700863f3cbe19c --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 88868fb5e8f2fcc82f50a952be700863f3cbe19c) @@ -193,6 +193,7 @@ void signalAlarmSilence( ALARM_SILENCE_CMD_T cmd ); void signalAlarmUserActionInitiated( ALARM_USER_ACTION_T action ); BOOL isAlarmActive( ALARM_ID_T alarm ); +BOOL isAlarmConditionDetected( ALARM_ID_T alarm ); BOOL isAnyAlarmActive( void ); BOOL isBloodRecircBlocked( void ); BOOL isDialysateRecircBlocked( void ); Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -ra57994f752662abc0aaa8c2cf5c3af47ec2c5a20 -r88868fb5e8f2fcc82f50a952be700863f3cbe19c --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision a57994f752662abc0aaa8c2cf5c3af47ec2c5a20) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 88868fb5e8f2fcc82f50a952be700863f3cbe19c) @@ -181,6 +181,7 @@ SW_FAULT_ID_NVDATA_MANAGEMENT_OPS_TIMEOUT, // 150 SW_FAULT_ID_NVDATA_RTC_RAM_OPS_FAILURE, SW_FAULT_ID_HD_INVALID_ALARM_AUDIO_STATE, + SW_FAULT_ID_INVALID_ALARM_ID_REFERENCED, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T;