Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -37,7 +37,8 @@ /// Persistence period for illegal level sensors fault. static const U32 AIR_TRAP_ILLEGAL_LEVELS_PERSISTENCE = ( MS_PER_SECOND * 2 / TASK_PRIORITY_INTERVAL ); /// Volume (in mL) of venous portion of blood circuit line. TODO - get actual volume from Systems. -#define VENOUS_LINE_VOLUME_ML ( 200.0 ) +#define VENOUS_LINE_VOLUME_ML ( 200.0 ) +#define DATA_PUBLISH_COUNTER_START_COUNT 7 ///< Data publish counter start count. /// Defined states for the air trap controller state machine. typedef enum AirTrap_States @@ -52,7 +53,7 @@ // ********** private data ********** static AIR_TRAP_STATE_T airTrapControllerState; ///< Current state of air trap controller state machine. -static U32 airTrapDataPublicationTimerCounter = 0; ///< Used to schedule air trap data publication to CAN bus. +static U32 airTrapDataPublicationTimerCounter; ///< Used to schedule air trap data publication to CAN bus. /// Interval (in ms) at which to publish air trap data to CAN bus. static OVERRIDE_U32_T airTrapDataPublishInterval = { AIR_TRAP_DATA_PUB_INTERVAL, AIR_TRAP_DATA_PUB_INTERVAL, 0, 0 }; @@ -84,7 +85,7 @@ U32 i; resetAirTrap(); - airTrapIllegalLevelSensorsCtr = 0; + airTrapIllegalLevelSensorsCtr = DATA_PUBLISH_COUNTER_START_COUNT; for ( i = 0; i < NUM_OF_AIR_TRAP_LEVEL_SENSORS; i++ ) { Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r2acaf549519854f7e6de1511d541582267f4d1e8 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 2acaf549519854f7e6de1511d541582267f4d1e8) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -123,6 +123,7 @@ #define BP_FLOW_WEAR_A_TERM 0.000000001 ///< A term used for wear portion of alpha flow coefficient. #define BP_FLOW_WEAR_B_TERM 0.00055 ///< B term used for wear portion of alpha flow coefficient. #define BP_MAX_ROTOR_COUNT_FOR_WEAR 25000 ///< Maximum rotor count for determining wear of the cartridge (negligible affect beyond this threshold). +#define DATA_PUBLISH_COUNTER_START_COUNT 9 ///< Data publish counter start count. /// Enumeration of blood pump controller states. typedef enum BloodPump_States @@ -155,7 +156,7 @@ // ********** private data ********** static BLOOD_PUMP_STATE_T bloodPumpState = BLOOD_PUMP_OFF_STATE; ///< Current state of blood flow controller state machine -static U32 bloodFlowDataPublicationTimerCounter = 0; ///< Used to schedule blood flow data publication to CAN bus +static U32 bloodFlowDataPublicationTimerCounter; ///< Used to schedule blood flow data publication to CAN bus static BOOL isBloodPumpOn = FALSE; ///< Blood pump is currently running static F32 bloodPumpPWMDutyCyclePct = 0.0; ///< Initial blood pump PWM duty cycle static F32 bloodPumpPWMDutyCyclePctSet = 0.0; ///< Currently set blood pump PWM duty cycle @@ -220,12 +221,14 @@ * @brief * The initBloodFlow function initializes the BloodFlow module. * @details Inputs: none - * @details Outputs: BloodFlow module initialized. + * @details Outputs: bloodFlowDataPublicationTimerCounter * @return none *************************************************************************/ void initBloodFlow( void ) { U32 i; + + bloodFlowDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; signalBloodPumpHardStop(); setBloodPumpDirection( MOTOR_DIR_FORWARD ); Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r2acaf549519854f7e6de1511d541582267f4d1e8 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 2acaf549519854f7e6de1511d541582267f4d1e8) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -116,6 +116,8 @@ #define PUMP_DIR_ERROR_COUNT_MASK 0x3F ///< Bit mask for pump direction error counter. +#define DATA_PUBLISH_COUNTER_START_COUNT 5 ///< Data publish counter start count. + /// Enumeration of dialysate inlet pump states. typedef enum DialInPump_States { @@ -147,7 +149,7 @@ // ********** private data ********** static DIAL_IN_PUMP_STATE_T dialInPumpState = DIAL_IN_PUMP_OFF_STATE; ///< Current state of dialIn flow controller state machine -static U32 dialInFlowDataPublicationTimerCounter = 5; ///< Used to schedule dialIn flow data publication to CAN bus +static U32 dialInFlowDataPublicationTimerCounter; ///< Used to schedule dialIn flow data publication to CAN bus static BOOL isDialInPumpOn = FALSE; ///< DialIn pump is currently running static F32 dialInPumpPWMDutyCyclePct = 0.0; ///< Initial dialIn pump PWM duty cycle static F32 dialInPumpPWMDutyCyclePctSet = 0.0; ///< Currently set dialIn pump PWM duty cycle @@ -222,6 +224,8 @@ void initDialInFlow( void ) { U32 i; + + dialInFlowDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; signalDialInPumpHardStop(); setDialInPumpDirection( MOTOR_DIR_FORWARD ); Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -r2acaf549519854f7e6de1511d541582267f4d1e8 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 2acaf549519854f7e6de1511d541582267f4d1e8) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -109,6 +109,7 @@ #define DOP_PWM_TO_MOTOR_SPEED_RPM(pwm) ( ((pwm) - DOP_PWM_ZERO_OFFSET) * 4000.0 ) #define PUMP_DIR_ERROR_COUNT_MASK 0x3F ///< Bit mask for pump direction error counter. +#define DATA_PUBLISH_COUNTER_START_COUNT 6 ///< Data publish counter start count. /// Enumeration of dialysate outlet pump controller states. typedef enum DialOutPump_States @@ -140,7 +141,7 @@ // ********** private data ********** static DIAL_OUT_PUMP_STATE_T dialOutPumpState = DIAL_OUT_PUMP_OFF_STATE; ///< Current state of the dialysate outlet pump controller state machine. -static U32 dialOutFlowDataPublicationTimerCounter = 6; ///< Timer counter controlling when to publish dialysate outlet data. Set non-zero to phase data publication to CAN bus. +static U32 dialOutFlowDataPublicationTimerCounter; ///< Timer counter controlling when to publish dialysate outlet data. Set non-zero to phase data publication to CAN bus. static BOOL isDialOutPumpOn = FALSE; ///< Flag set to TRUE when dialysate outlet pump is running. static U32 lastGivenRate = 0; ///< Remembers the last given set point rate for the dialysate outlet pump. static F32 dialOutPumpPWMDutyCyclePct = 0.0; ///< Requested PWM duty cycle for dialysate outlet pump (based on given rate). @@ -216,13 +217,15 @@ * @brief * The initDialOutFlow function initializes the DialOutFlow module. * @details Inputs: none - * @details Outputs: DialOutFlow module initialized. + * @details Outputs: dialOutFlowDataPublicationTimerCounter * @return none *************************************************************************/ void initDialOutFlow( void ) { U32 i; + dialOutFlowDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + signalDialOutPumpHardStop(); setDialOutPumpDirection( MOTOR_DIR_FORWARD ); Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -54,6 +54,7 @@ #define FANS_MIN_ALLOWED_RPM 150 ///< Fans max allowed RPM value. #define FANS_MIN_RPM_OUT_OF_RANGE_TOL 0.25 ///< Fans min RPM out of range tolerance. #define FANS_MAX_RPM_OUT_OF_RANGE_TOL 0.5 ///< Fans max RPM out of range tolerance. +#define DATA_PUBLISH_COUNTER_START_COUNT 15 ///< Data publish counter start count. /// Fans exec states typedef enum fans_Exec_States @@ -74,7 +75,7 @@ static FAN_STATUS_T fansStatus; ///< Fans status. static FANS_EXEC_STATES_T fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; ///< Fans exec state. static U32 fansControlCounter = 0; ///< Fans control interval counter. -static U32 fansPublishCounter = 0; ///< Fans data publish interval counter. +static U32 fansPublishCounter; ///< Fans data publish interval counter. static BOOL isPOSTComplete = FALSE; ///< Flag that indicates whether POST is complete or not. static BOOL hasAlarmBeenRaised = FALSE; ///< Flag that indicates whether RPM out of range alarm has been raised once. static OVERRIDE_U32_T rpmAlarmStartTimeOffset = { 0, 0, 0, 0}; ///< RPM out of range alarm start time offset. @@ -116,7 +117,7 @@ // Initialize the variables fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; fansControlCounter = 0; - fansPublishCounter = 0; + fansPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; isPOSTComplete = FALSE; hasAlarmBeenRaised = FALSE; rpmAlarmStartTime = 0; @@ -431,7 +432,7 @@ for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) { rpm = getMeasuredFanRPM( fan ); - isFanRPMOutOfRange |= ( ( fabs( rpm - fansMinAllowedRPM ) < NEARLY_ZERO ) || ( fabs( rpm - fansMaxAllowedRPM ) < NEARLY_ZERO ) ? TRUE : FALSE ); + isFanRPMOutOfRange |= ( ( rpm < fansMinAllowedRPM ) || ( rpm > fansMaxAllowedRPM ) ? TRUE : FALSE ); } // Check if the alarm has not been raise yet, raise it then Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -ra940a0e8fac8a3f43af9eba55abc4d781d539504 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision a940a0e8fac8a3f43af9eba55abc4d781d539504) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -87,6 +87,8 @@ #define SIZE_OF_SHORT_ART_ROLLING_AVG ( ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) * 1 ) /// Measured venous pressure is filtered w/ 1 second moving average for inline pressure and unfiltered for occlusion detection. #define SIZE_OF_SHORT_VEN_ROLLING_AVG ( ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) * 1 ) + +#define DATA_PUBLISH_COUNTER_START_COUNT 5 ///< Data publish counter start count. /// Defined states for the pressure and occlusion monitor state machine. typedef enum PresOccl_States @@ -194,6 +196,7 @@ longFilteredArterialPressure = 0.0; shortFilteredArterialPressure = 0.0; shortFilteredVenousPressure = 0.0; + presOcclDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; #ifndef DISABLE_PRESSURE_CHECKS bloodPumpOcclusionAfterCartridgeInstall = 0; @@ -531,8 +534,7 @@ if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE, venPres > VENOUS_PRESSURE_MAX_MMHG ) || TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE, venPres < VENOUS_PRESSURE_MIN_MMHG ) ) { - venLowLimit = MIN_VENOUS_PRESSURE_FOR_RAMP_MMHG; - venHighLimit = (F32)getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE, venPres ); } // Check venous pressure during treatment mode @@ -544,7 +546,7 @@ // If BP is ramping up, extend range to outer limits as pressure may not yet have reached expected range. if ( isBloodPumpRampComplete() != TRUE ) { - venLowLimit = (F32)getS32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT ); + venLowLimit = MIN_VENOUS_PRESSURE_FOR_RAMP_MMHG; venHighLimit = (F32)getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ); } Index: firmware/App/Controllers/Switches.c =================================================================== diff -u -r24b2fe72608344e67ef37234085d15ad5e4fcc37 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/Switches.c (.../Switches.c) (revision 24b2fe72608344e67ef37234085d15ad5e4fcc37) +++ firmware/App/Controllers/Switches.c (.../Switches.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -30,6 +30,7 @@ #define SWITCHES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the switches data is published on the CAN bus. #define SWITCHES_DEBOUNCE_TIME_MS ( MS_PER_SECOND / 4 ) ///< Switches FPGA status check interval. +#define DATA_PUBLISH_COUNTER_START_COUNT 4 ///< Data publish counter start count. /// Switch status structure typedef struct @@ -61,7 +62,7 @@ { U08 i; - switchesDataPublicationCounter = 0; + switchesDataPublicationCounter = DATA_PUBLISH_COUNTER_START_COUNT; // Initialize all the switches for ( i = 0; i < NUM_OF_DOORS_AND_SWITCHES; i++ ) Index: firmware/App/Controllers/Temperatures.c =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/Temperatures.c (.../Temperatures.c) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/Controllers/Temperatures.c (.../Temperatures.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -46,6 +46,7 @@ #define MIN_ALLOWED_TEMPERATURE 0.0 ///< Thermistors/sensors minimum allowed temperature reading. #define MAX_ALLOWED_TEMPERATURE 80.0 ///< Thermistors/sensors maximum allowed temperature reading. #define MAX_ALLOWED_TEMP_OUT_OF_RANGE_PERIOD ( 5 * MS_PER_SECOND ) ///< Thermistors/sensors maximum allowed temperature out of range period. +#define DATA_PUBLISH_COUNTER_START_COUNT 6 ///< Data publish counter start count. /// Temperatures exec states typedef enum thermistors_Exec_States @@ -103,7 +104,7 @@ U08 i; temperaturesExecState = TEMPERATURES_EXEC_STATE_START_STATE; - dataPublishCounter = 0; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; for ( i = 0; i < NUM_OF_TEMPERATURES; i++ ) { @@ -300,7 +301,7 @@ if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_TEMPERATURES_OUT_OF_RANGE, isTempOutOfRange ) ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_TEMPERATURES_OUT_OF_RANGE, lastFaultSensor, faultSensorTemp ); + //SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_TEMPERATURES_OUT_OF_RANGE, lastFaultSensor, faultSensorTemp ); // DEBUG_DENALI } } Index: firmware/App/Controllers/Voltages.c =================================================================== diff -u -r24b2fe72608344e67ef37234085d15ad5e4fcc37 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Controllers/Voltages.c (.../Voltages.c) (revision 24b2fe72608344e67ef37234085d15ad5e4fcc37) +++ firmware/App/Controllers/Voltages.c (.../Voltages.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -31,7 +31,8 @@ // ********** private definitions ********** #define VOLTAGES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the voltages data is published on the CAN bus. -#define VOLTAGES_ALARM_PERSISTENCE ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Alarm persistence period for voltage monitor alarms. +#define VOLTAGES_ALARM_PERSISTENCE ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Alarm persistence period for voltage monitor alarms. +#define DATA_PUBLISH_COUNTER_START_COUNT 14 ///< Data publish counter start count. /// Defined states for the voltage monitor state machine. typedef enum Voltages_States @@ -75,7 +76,7 @@ // ********** private data ********** static VOLTAGES_STATE_T voltagesState; ///< Current state of voltages monitor state machine. -static U32 voltagesDataPublicationTimerCounter = 14; ///< Used to schedule voltages monitor data publication to CAN bus. +static U32 voltagesDataPublicationTimerCounter; ///< Used to schedule voltages monitor data publication to CAN bus. /// Interval (in ms) at which to publish voltages monitor data to CAN bus. static OVERRIDE_U32_T voltagesDataPublishInterval = { VOLTAGES_DATA_PUB_INTERVAL, VOLTAGES_DATA_PUB_INTERVAL, 0, 0 }; @@ -102,6 +103,7 @@ U32 i; voltagesState = VOLTAGES_INIT_STATE; + voltagesDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; for ( i = 0; i < (U32)NUM_OF_MONITORED_LINES; i++ ) { Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -r2892e3f528d76f45719b7124358e9d242bf27172 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision 2892e3f528d76f45719b7124358e9d242bf27172) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -134,7 +134,7 @@ batteryRelStateOfCharge_pct.data = (U32)relStateOfCharge_pct; if ( getBatteryRemainingPercent() < BATTERY_PACK_MIN_CHARGE_PCT ) { - //SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BATTERY_PACK_CHARGE_TOO_LOW, getBatteryRemainingPercent() ); // DEBUG_DENALI + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BATTERY_PACK_CHARGE_TOO_LOW, getBatteryRemainingPercent() ); } else { Index: firmware/App/HDCommon.h =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/HDCommon.h (.../HDCommon.h) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -38,7 +38,7 @@ // #define SIMULATE_UI 1 // Build w/o requirement that UI be there // #define TASK_TIMING_OUTPUT_ENABLED 1 // Re-purposes alarm lamp pins for task timing // TODO convert the new configuration way - #define DISABLE_ALARM_AUDIO 1 // Disable alarm audio +// #define DISABLE_ALARM_AUDIO 1 // Disable alarm audio // TODo sw config implemented // #define SKIP_POST 1 // Skip POST tests - all pass // #define DONT_SKIP_NV_POST 1 // Do not skip NV Data POST #define DISABLE_AIR_TRAP_LEVELING_ALARM 1 // Disable air trap level control alarms @@ -58,9 +58,9 @@ #define DISABLE_SYRINGE_PUMP 1 // Disable syringe pump functionality #define ALWAYS_ALLOW_SYRINGE_PUMP_CMDS 1 // Allow syringe pump commands at any time except when pump is busy #define DISABLE_PRESSURE_CHECKS 1 // Do not error on HD pressure checks - #define DISABLE_ARTERIAL_PRESSURE_CHECK 1 // Do not error on arterial pressure out of range // TODO sw config implemented - #define DISABLE_VENOUS_PRESSURE_CHECK 1 // Do not error on venous pressure out of range // TODO sw config implemented -// #define USE_PBO_AS_PBA 1 // PBo readings used for PBA, PBo replaced with fixed pressure (100 mmHg) +// #define DISABLE_ARTERIAL_PRESSURE_CHECK 1 // Do not error on arterial pressure out of range // TODO sw config implemented +// #define DISABLE_VENOUS_PRESSURE_CHECK 1 // Do not error on venous pressure out of range // TODO sw config implemented + #define USE_PBO_AS_PBA 1 // PBo readings used for PBA, PBo replaced with fixed pressure (100 mmHg) // #define DISABLE_UF_ALARMS 1 // Do not error on HD ultrafiltration checks #define DISABLE_DIALYSATE_TEMP_CHECK 1 // Disable dialysate temperature check @@ -86,16 +86,16 @@ #define DISABLE_WD_AND_SFTY_POST_TESTS 1 // Disable watchdog and safety shutdown POST tests #define DISABLE_ILLEGAL_AIR_TRAP_ALARM 1 // Disable illegal state for air trap alarm #define SKIP_RESERVOIR_ALARMS 1 // Skip reservoir management alarms -// #define IGNORE_BLOOD_LEAK_SELF_TEST 1 // Ignore blood leak self test // TODO New config implemented -// #define IGNORE_BLOOD_LEAK_ALARM 1 // Ignore blood leak alarm // TODO New config implemented +// #define IGNORE_BLOOD_LEAK_SELF_TEST 1 // Ignore blood leak self test // TODO New config implemented +// #define IGNORE_BLOOD_LEAK_ALARM 1 // Ignore blood leak alarm // TODO New config implemented // Skip Pre-Treatment and get to treatment as soon as possible - #define SKIP_UI_INTERACTION 1 // Skip UI interaction. // TODO New config implemented - #define SKIP_SAMPLE_WATER 1 // Skip pre-treatment sample water // TODO New config implemented - #define SKIP_CONSUMABLE_TESTS 1 // Skip pre-treatment consumable Self-tests // TODO New config implemented - #define SKIP_DRY_SELF_TESTS 1 // Skip pre-treatment dry self-tests - #define SKIP_PRIMING 1 // Skip Pre-treatment Prime - #define SKIP_WET_SELF_TESTS 1 // Skip Pre-treatment prime wet self-tests +// #define SKIP_UI_INTERACTION 1 // Skip UI interaction. // TODO New config implemented +// #define SKIP_SAMPLE_WATER 1 // Skip pre-treatment sample water // TODO New config implemented +// #define SKIP_CONSUMABLE_TESTS 1 // Skip pre-treatment consumable Self-tests // TODO New config implemented +// #define SKIP_DRY_SELF_TESTS 1 // Skip pre-treatment dry self-tests // TODO New config implemented +// #define SKIP_PRIMING 1 // Skip Pre-treatment Prime // TODO New config implemented +// #define SKIP_WET_SELF_TESTS 1 // Skip Pre-treatment prime wet self-tests // TODO New config implemented #include #include Index: firmware/App/Modes/ConsumableSelfTest.c =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -88,6 +88,10 @@ { consumableInstallConfirmed = FALSE; #ifndef SKIP_CONSUMABLE_TESTS + //currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_FILL_CMD_STATE; +#else + currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_COMPLETE_STATE; +#endif if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CONSUMABLES_TESTS ) != SW_CONFIG_ENABLE_VALUE ) { currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_FILL_CMD_STATE; @@ -96,9 +100,6 @@ { currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_COMPLETE_STATE; } -#else - currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_COMPLETE_STATE; -#endif } break; Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -224,7 +224,14 @@ case POST_STATE_ALARM_AUDIO: #ifndef DISABLE_ALARM_AUDIO - testStatus = execAlarmAudioSelfTest(); + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ALARM_AUDIO ) != SW_CONFIG_ENABLE_VALUE ) + { + testStatus = execAlarmAudioSelfTest(); + } + else + { + testStatus = SELF_TEST_STATUS_PASSED; + } #else testStatus = SELF_TEST_STATUS_PASSED; #endif Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -367,11 +367,13 @@ if ( STATE_CLOSED == getFPGADoorState() ) { #ifdef SKIP_UI_INTERACTION - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) == SW_CONFIG_ENABLE_VALUE ) + patientDisconnectionConfirmed = TRUE; +#endif + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) { patientDisconnectionConfirmed = TRUE; } -#endif + if ( TRUE == patientDisconnectionConfirmed ) { patientDisconnectionConfirmed = FALSE; @@ -413,11 +415,12 @@ HD_POST_TREATMENT_STATE_T state = HD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE; #ifdef SKIP_UI_INTERACTION - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) == SW_CONFIG_ENABLE_VALUE ) + disposableRemovalConfirmed = TRUE; +#endif + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) { disposableRemovalConfirmed = TRUE; } -#endif if ( TRUE == disposableRemovalConfirmed ) { Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -51,9 +51,9 @@ #define PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML 1300 ///< Fill reservoir one to this volume (in mL) during pre-treatment mode. #define PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML 700 ///< Fill reservoir two to this volume (in mL) during pre-treatment mode. #else -#define PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML FILL_RESERVOIR_TO_VOLUME_ML -#define PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML FILL_RESERVOIR_TO_VOLUME_ML -#define PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML FILL_RESERVOIR_TO_VOLUME_ML +//#define PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML FILL_RESERVOIR_TO_VOLUME_ML +//#define PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML FILL_RESERVOIR_TO_VOLUME_ML +//#define PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML FILL_RESERVOIR_TO_VOLUME_ML #endif /// States of the pre-treatment reservoir management state machine. @@ -196,11 +196,12 @@ { case HD_PRE_TREATMENT_START_STATE: #ifndef SKIP_SAMPLE_WATER + //transitionToSampleWater(); +#endif if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_SAMPLE_WATER ) != SW_CONFIG_ENABLE_VALUE ) { transitionToSampleWater(); } -#endif currentPreTreatmentState = HD_PRE_TREATMENT_WATER_SAMPLE_STATE; break; @@ -355,11 +356,13 @@ REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM; #ifdef SKIP_UI_INTERACTION - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) == SW_CONFIG_ENABLE_VALUE ) + patientConnectionConfirm = TRUE; +#endif + + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) { patientConnectionConfirm = TRUE; } -#endif if ( TRUE == patientConnectionConfirm ) { @@ -546,8 +549,8 @@ execSampleWater(); #ifndef SKIP_SAMPLE_WATER - if ( ( SAMPLE_WATER_COMPLETE_STATE == getSampleWaterState() ) /*|| - ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_SAMPLE_WATER ) != SW_CONFIG_ENABLE_VALUE )*/ ) // DEBUG_DENALI + if ( ( SAMPLE_WATER_COMPLETE_STATE == getSampleWaterState() ) || + ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_SAMPLE_WATER ) ) ) #endif { cmdDGSampleWater( SAMPLE_WATER_CMD_END ); @@ -652,11 +655,13 @@ HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_CART_INSTALL_STATE; #ifdef SKIP_UI_INTERACTION - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) != SW_CONFIG_ENABLE_VALUE ) + confirmInstallRequested = TRUE; +#endif + + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) { confirmInstallRequested = TRUE; } -#endif if ( TRUE == confirmInstallRequested ) { @@ -771,11 +776,13 @@ execPreTreatmentRecirc(); #ifdef SKIP_UI_INTERACTION - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) == SW_CONFIG_ENABLE_VALUE ) + continueToTreatmentRequested = TRUE; +#endif + + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) { continueToTreatmentRequested = TRUE; } -#endif if ( TRUE == continueToTreatmentRequested ) { @@ -965,16 +972,37 @@ { if ( DG_RESERVOIR_1 == getDGInactiveReservoir() ) { - cmdStartDGFill( PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + U32 volume = FILL_RESERVOIR_TO_VOLUME_ML; + + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) != SW_CONFIG_ENABLE_VALUE ) + { + volume = PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML; + } + + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); } else { - cmdStartDGFill( PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + U32 volume = FILL_RESERVOIR_TO_VOLUME_ML; + + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) != SW_CONFIG_ENABLE_VALUE ) + { + volume = PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML; + } + + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); } } else { - cmdStartDGFill( PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + U32 volume = FILL_RESERVOIR_TO_VOLUME_ML; + + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) != SW_CONFIG_ENABLE_VALUE ) + { + volume = PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML; + } + + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); } } @@ -1046,6 +1074,11 @@ if ( FALSE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) { #ifdef SKIP_PRIMING + //reservoirFilledStatus[ DG_RESERVOIR_1 ] = TRUE; +#else + //reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; + //cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); +#endif if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) { reservoirFilledStatus[ DG_RESERVOIR_1 ] = TRUE; @@ -1055,10 +1088,6 @@ reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); } -#else - reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); -#endif } else if ( ( TRUE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) && ( FALSE == reservoirFlushedStatus[ DG_RESERVOIR_2 ] ) ) { Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r24b2fe72608344e67ef37234085d15ad5e4fcc37 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 24b2fe72608344e67ef37234085d15ad5e4fcc37) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -37,16 +37,16 @@ // ********** private data ********** -/// HD operation mode broadcast interval (in task interval/sec). -#define BROADCAST_HD_OP_MODE_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) +#define BROADCAST_HD_OP_MODE_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< HD operation mode broadcast interval (in task interval/sec). +#define DATA_PUBLISH_COUNTER_START_COUNT 11 ///< Data publish counter start count. // ********** private data ********** static volatile BOOL modeRequest[ NUM_OF_MODES - 1 ]; ///< Pending operation mode change requests. static HD_OP_MODE_T lastMode = MODE_INIT; ///< Last operation mode prior to current mode. static HD_OP_MODE_T currentMode = MODE_INIT; ///< Current operation mode. static U32 currentSubMode = 0; ///< The currently active state of the active mode. -static U32 broadcastModeIntervalCtr = 11; ///< Interval counter used to determine when to broadcast operation mode. Initialize to 11 to stagger broadcast. +static U32 broadcastModeIntervalCtr; ///< Interval counter used to determine when to broadcast operation mode. Initialize to 11 to stagger broadcast. /// Interval (in task intervals) at which to publish operation mode data to CAN bus. static OVERRIDE_U32_T opModePublishInterval = { BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, 0 }; static U32 priorSubMode = 0; ///< The prior submode state. @@ -87,9 +87,11 @@ } // Start in init mode - currentMode = MODE_INIT; - currentSubMode = 0; - priorSubMode = 0; + currentMode = MODE_INIT; + currentSubMode = 0; + priorSubMode = 0; + broadcastModeIntervalCtr = DATA_PUBLISH_COUNTER_START_COUNT; + transitionToNewOperationMode( MODE_INIT ); // Call initializers for the individual modes Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -186,6 +186,14 @@ #else currentPrimeState = HD_PRIME_WAIT_FOR_USER_START_STATE; #endif + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) + { + currentPrimeState = HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; + } + else + { + currentPrimeState = HD_PRIME_WAIT_FOR_USER_START_STATE; + } break; case HD_PRIME_WAIT_FOR_USER_START_STATE: @@ -424,11 +432,14 @@ primeStartTime = getMSTimerCount(); #ifdef SKIP_UI_INTERACTION + primeStartRequested = TRUE; +#endif + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) { primeStartRequested = TRUE; } -#endif + if ( TRUE == primeStartRequested ) { primeStartRequested = FALSE; @@ -582,8 +593,16 @@ #ifdef SKIP_PRIMING state = HD_PRIME_WET_SELF_TESTS_STATE; #else - state = HD_PRIME_DIALYSATE_DIALYZER_STATE; + //state = HD_PRIME_DIALYSATE_DIALYZER_STATE; #endif + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) + { + state = HD_PRIME_WET_SELF_TESTS_STATE; + } + else + { + state = HD_PRIME_DIALYSATE_DIALYZER_STATE; + } } } @@ -828,11 +847,17 @@ } #ifndef SKIP_WET_SELF_TESTS - execWetSelfTests(); + //execWetSelfTests(); - if ( TRUE == isWetSelfTestsPassed() ) + //if ( TRUE == isWetSelfTestsPassed() ) #endif + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WET_SELF_TEST ) != SW_CONFIG_ENABLE_VALUE ) { + execWetSelfTests(); + } + + if ( ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_WET_SELF_TEST ) ) || ( TRUE == isWetSelfTestsPassed() ) ) + { state = HD_PRIME_COMPLETE; } Index: firmware/App/Modes/SampleWater.c =================================================================== diff -u -r40f46e196349e3dd730048a354df8bbb2e40407d -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 40f46e196349e3dd730048a354df8bbb2e40407d) +++ firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -130,11 +130,14 @@ SELF_TEST_STATUS_T result = SELF_TEST_STATUS_FAILED; #ifdef SKIP_SAMPLE_WATER - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_SAMPLE_WATER ) != SW_CONFIG_ENABLE_VALUE ) + sampleWaterResult = TRUE; +#endif + + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_SAMPLE_WATER ) ) { sampleWaterResult = TRUE; } -#endif + if ( TRUE == sampleWaterResult ) { result = SELF_TEST_STATUS_PASSED; Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rf013ac5e5de456c4fa4367884cda6515f2a51642 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision f013ac5e5de456c4fa4367884cda6515f2a51642) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -379,7 +379,12 @@ { case DRY_SELF_TESTS_START_STATE: #ifdef SKIP_DRY_SELF_TESTS - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_DRY_SELF_TESTS ) == SW_CONFIG_ENABLE_VALUE ) + // TODO: Remove once dry self-test is ready to use + currentDrySelfTestsState = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; +#else + //currentDrySelfTestsState = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; +#endif + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_DRY_SELF_TESTS ) ) { // TODO: Remove once dry self-test is ready to use currentDrySelfTestsState = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; @@ -388,11 +393,6 @@ { currentDrySelfTestsState = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; } -#else - { - currentDrySelfTestsState = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; - } -#endif break; case DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE: @@ -1041,6 +1041,10 @@ { selfTestsResumeRequested = FALSE; #ifndef SKIP_DRY_SELF_TESTS + //state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; +#else + state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; +#endif if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_DRY_SELF_TESTS ) != SW_CONFIG_ENABLE_VALUE ) { state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; @@ -1049,7 +1053,6 @@ { state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; } -#endif } return state; Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -915,9 +915,12 @@ if ( alarmStatus.alarmsState < NUM_OF_ALARM_PRIORITIES ) { #ifndef DISABLE_ALARM_AUDIO - setAlarmAudioState( alarmStatus.alarmsState, - ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], - ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ALARM_AUDIO ) != SW_CONFIG_ENABLE_VALUE ) + { + setAlarmAudioState( alarmStatus.alarmsState, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); + } #endif } else Index: firmware/App/Services/WatchdogMgmt.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -r9e85e7ace1390d48587174a5bc6eb11d5185cea4 --- firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 9e85e7ace1390d48587174a5bc6eb11d5185cea4) @@ -185,7 +185,8 @@ } #ifndef DISABLE_ALARM_AUDIO // Verify backup alarm audio is on when w.d. expired - else if ( audioCurrent < MIN_BACKUP_ALARM_CURRENT_MA ) + else if ( ( audioCurrent < MIN_BACKUP_ALARM_CURRENT_MA ) && + ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ALARM_AUDIO ) != SW_CONFIG_ENABLE_VALUE ) ) { SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_WATCHDOG_POST_TEST_FAILED, 3.0, audioCurrent ); watchdogSelfTestStatus = SELF_TEST_STATUS_FAILED; @@ -217,7 +218,8 @@ } #ifndef DISABLE_ALARM_AUDIO // Verify backup alarm audio is on when w.d. recovered - else if ( audioCurrent > MAX_BACKUP_ALARM_CURRENT_MA ) + else if ( ( audioCurrent > MAX_BACKUP_ALARM_CURRENT_MA ) && + ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ALARM_AUDIO ) != SW_CONFIG_ENABLE_VALUE ) { SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_WATCHDOG_POST_TEST_FAILED, 5.0, audioCurrent ); watchdogSelfTestStatus = SELF_TEST_STATUS_FAILED;