Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -re15a3675797c4a4099aa9a12ca6811dc75568dd1 -r9fcde8f2f5e133f06bc564b44a2fa930132add17 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision e15a3675797c4a4099aa9a12ca6811dc75568dd1) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 9fcde8f2f5e133f06bc564b44a2fa930132add17) @@ -14,38 +14,38 @@ * @date (original) 15-Jan-2020 * ***************************************************************************/ - -#include "PresOccl.h" -#include "AlarmMgmt.h" + +#include "PresOccl.h" +#include "AlarmMgmt.h" #include "FPGA.h" #include "ModeTreatmentParams.h" -#include "NVDataMgmt.h" +#include "NVDataMgmt.h" #include "OperationModes.h" -#include "PersistentAlarm.h" +#include "PersistentAlarm.h" #include "SystemCommMessages.h" -#include "SelfTests.h" +#include "SelfTests.h" #include "TaskGeneral.h" -#include "Temperatures.h" +#include "Temperatures.h" #include "Timers.h" -#include "Valves.h" - -/** - * @addtogroup PressureOcclusion - * @{ - */ - -// ********** private definitions ********** - -/// Default publication interval for pressure and occlusion data. -#define PRES_OCCL_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the pressure/occlusion data is published on the CAN bus. +#include "Valves.h" -#define ARTERIAL_PRESSURE_CONVERSION_OFFSET 0x800000 ///< Arterial pressure conversion coefficient. -#define ARTERIAL_PRESSURE_V_BIAS ( 3.0F ) ///< Bias voltage for arterial pressure sensor. -#define ARTERIAL_PRESSURE_SENSITIVITY ( 0.000005F ) ///< Sensitivity for arterial pressure sensor is 5 uV / mmHg +/** + * @addtogroup PressureOcclusion + * @{ + */ + +// ********** private definitions ********** + +/// Default publication interval for pressure and occlusion data. +#define PRES_OCCL_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the pressure/occlusion data is published on the CAN bus. + +#define ARTERIAL_PRESSURE_CONVERSION_OFFSET 0x800000 ///< Arterial pressure conversion coefficient. +#define ARTERIAL_PRESSURE_V_BIAS ( 3.0F ) ///< Bias voltage for arterial pressure sensor. +#define ARTERIAL_PRESSURE_SENSITIVITY ( 0.000005F ) ///< Sensitivity for arterial pressure sensor is 5 uV / mmHg #define ARTERIAL_PRESSURE_V_PER_BIT ( ARTERIAL_PRESSURE_V_BIAS / \ - (F32)ARTERIAL_PRESSURE_CONVERSION_OFFSET ) ///< Volts per bit in 24-bit arterial pressure sensor reading. - -#define VENOUS_PRESSURE_OFFSET ( 1638 ) ///< Offset for 14-bit venous pressure sensor reading. + (F32)ARTERIAL_PRESSURE_CONVERSION_OFFSET ) ///< Volts per bit in 24-bit arterial pressure sensor reading. + +#define VENOUS_PRESSURE_OFFSET ( 1638 ) ///< Offset for 14-bit venous pressure sensor reading. #define VENOUS_PRESSURE_SCALE ( 14745 - VENOUS_PRESSURE_OFFSET ) ///< Scale for venous pressure sensor. #define VENOUS_PRESSURE_MIN_PSI ( -30.0F ) ///< Minimum of scale for venous pressure sensor reading (in PSI). #define VENOUS_PRESSURE_MAX_PSI ( 30.0F ) ///< Maximum of scale for venous pressure sensor reading (in PSI). @@ -95,7 +95,7 @@ static const U32 EMPTY_SALINE_BAG_PERSISTENCE = ( 250 / TASK_GENERAL_INTERVAL ); ///< Time that saline bag looks empty before saying it is empty. #define PRES_ALARM_PERSISTENCE ( 1 * MS_PER_SECOND ) ///< Alarm persistence period for pressure alarms. -#define VEN_OCCL_ALARM_PERSISTENCE 100 ///< Alarm persistence period for venous occlusion alarm. +#define VEN_OCCL_ALARM_PERSISTENCE 100 ///< Alarm persistence period for venous occlusion alarm. /// Measured arterial pressure is filtered w/ 10 second moving average for pressure compensation of flow. #define SIZE_OF_LONG_ART_ROLLING_AVG ( ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) * 10 ) @@ -106,47 +106,47 @@ #define DATA_PUBLISH_COUNTER_START_COUNT 5 ///< Data publish counter start count. #define SHIFT_14_BITS 14 ///< Shift 14 bits. - -/// Defined states for the pressure and occlusion monitor state machine. -typedef enum PresOccl_States -{ - PRESSURE_WAIT_FOR_POST_STATE = 0, ///< Wait for POST state. - PRESSURE_CONTINUOUS_READ_STATE, ///< Continuous read sensors state. - NUM_OF_PRESSURE_STATES ///< Number of pressure/occlusion monitor states. -} PRESSURE_STATE_T; - -/// Defined states for the pressure and occlusion self-test state machine. -typedef enum PresOccl_Self_Test_States -{ - PRESSURE_SELF_TEST_STATE_START = 0, ///< Self test start state. - PRESSURE_TEST_STATE_IN_PROGRESS, ///< Self test in progress state. - PRESSURE_TEST_STATE_COMPLETE, ///< Self test completed state. - NUM_OF_PRESSURE_SELF_TEST_STATES ///< Number of pressure/occlusion self-test states. -} PRESSURE_SELF_TEST_STATE_T; - -// ********** private data ********** - -static PRESSURE_STATE_T presOcclState; ///< Current state of pressure monitor state machine. -static U32 presOcclDataPublicationTimerCounter = 0; ///< Used to schedule pressure data publication to CAN bus. - + +/// Defined states for the pressure and occlusion monitor state machine. +typedef enum PresOccl_States +{ + PRESSURE_WAIT_FOR_POST_STATE = 0, ///< Wait for POST state. + PRESSURE_CONTINUOUS_READ_STATE, ///< Continuous read sensors state. + NUM_OF_PRESSURE_STATES ///< Number of pressure/occlusion monitor states. +} PRESSURE_STATE_T; + +/// Defined states for the pressure and occlusion self-test state machine. +typedef enum PresOccl_Self_Test_States +{ + PRESSURE_SELF_TEST_STATE_START = 0, ///< Self test start state. + PRESSURE_TEST_STATE_IN_PROGRESS, ///< Self test in progress state. + PRESSURE_TEST_STATE_COMPLETE, ///< Self test completed state. + NUM_OF_PRESSURE_SELF_TEST_STATES ///< Number of pressure/occlusion self-test states. +} PRESSURE_SELF_TEST_STATE_T; + +// ********** private data ********** + +static PRESSURE_STATE_T presOcclState; ///< Current state of pressure monitor state machine. +static U32 presOcclDataPublicationTimerCounter = 0; ///< Used to schedule pressure data publication to CAN bus. + /// Interval (in ms) at which to publish pressure/occlusion data to CAN bus. -static OVERRIDE_U32_T presOcclDataPublishInterval = { PRES_OCCL_DATA_PUB_INTERVAL, PRES_OCCL_DATA_PUB_INTERVAL, 0, 0 }; +static OVERRIDE_U32_T presOcclDataPublishInterval = { PRES_OCCL_DATA_PUB_INTERVAL, PRES_OCCL_DATA_PUB_INTERVAL, 0, 0 }; static OVERRIDE_F32_T arterialPressure = {0.0, 0.0, 0.0, 0 }; ///< Measured arterial pressure. -static OVERRIDE_F32_T venousPressure = {0.0, 0.0, 0.0, 0 }; ///< Measured venous pressure. -static OVERRIDE_U32_T bloodPumpOcclusion = {0, 0, 0, 0 }; ///< Measured blood pump occlusion pressure. +static OVERRIDE_F32_T venousPressure = {0.0, 0.0, 0.0, 0 }; ///< Measured venous pressure. +static OVERRIDE_U32_T bloodPumpOcclusion = {0, 0, 0, 0 }; ///< Measured blood pump occlusion pressure. static F32 longFilteredArterialPressure; ///< Measured arterial pressure after long (10 s) filter. static F32 shortFilteredArterialPressure; ///< Measured arterial pressure after short (1 s) filter. static F32 shortFilteredVenousPressure; ///< Measured venous pressure after short (1 s) filter. -static U32 bloodPumpOcclusionAfterCartridgeInstall; ///< Measured blood pump occlusion reading taken after cartridge install. +static U32 bloodPumpOcclusionAfterCartridgeInstall; ///< Measured blood pump occlusion reading taken after cartridge install. static U32 emptySalineBagCtr = 0; ///< Timer counter for empty bag detection. static U08 lastArterialPressureReadCtr; ///< Previous arterial pressure sensor read count. static U08 lastVenousPressureReadCtr; ///< Previous venous pressure sensor read count. static U08 lastBPOcclReadCtr; ///< Previous BP occlusion sensor read count. static U08 lastBPErrorCtr; ///< Previous BP error count. - + static F32 artPressureReadingsLong[ SIZE_OF_LONG_ART_ROLLING_AVG ]; ///< Holds flow samples for long arterial pressure rolling average. static U32 artPressureReadingsLongIdx = 0; ///< Index for next sample in rolling average array. static F32 artPressureReadingsLongTotal = 0.0; ///< Rolling total - used to calc average. @@ -165,27 +165,27 @@ static HD_PRESSURE_SENSORS_CAL_RECORD_T pressureSensorsCalRecord; ///< Pressure sensors calibration record. static HD_OCCLUSION_SENSORS_CAL_RECORD_T occlusionSensorsCalRecord; ///< Occlusion sensors calibration record. -// ********** private function prototypes ********** +// ********** private function prototypes ********** -static PRESSURE_STATE_T handlePresOcclWaitForPOSTState( void ); +static PRESSURE_STATE_T handlePresOcclWaitForPOSTState( void ); static PRESSURE_STATE_T handlePresOcclContReadState( void ); static void convertInlinePressures( void ); static void convertOcclusionPressures( void ); static void checkArterialPressureInRange( void ); -static void checkVenousPressureInRange( void ); -static void checkOcclusions( void ); -static void publishPresOcclData( void ); +static void checkVenousPressureInRange( void ); +static void checkOcclusions( void ); +static void publishPresOcclData( void ); static void filterInlinePressureReadings( F32 artPres, F32 venPres ); - -/*********************************************************************//** - * @brief - * The initPresOccl function initializes the PresOccl module. - * @details Inputs: none - * @details Outputs: PresOccl module initialized. - * @return none - *************************************************************************/ -void initPresOccl( void ) -{ + +/*********************************************************************//** + * @brief + * The initPresOccl function initializes the PresOccl module. + * @details Inputs: none + * @details Outputs: PresOccl module initialized. + * @return none + *************************************************************************/ +void initPresOccl( void ) +{ // Initialize persistent pressure alarms initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_VENOUS_PRESSURE_SENSOR_FAULT, 0, PRES_ALARM_PERSISTENCE ); @@ -226,8 +226,8 @@ { bloodPumpOcclusionAfterCartridgeInstall = 0; } -} - +} + /*********************************************************************//** * @brief * The isCartridgeLoaded function determines whether a cartridge has been @@ -312,33 +312,33 @@ } } -/*********************************************************************//** - * @brief - * The execPresOccl function executes the pressure and occlusion monitor. - * @details Inputs: presOcclState - * @details Outputs: presOcclState - * @return none - *************************************************************************/ -void execPresOccl( void ) -{ - // State machine - switch ( presOcclState ) - { - case PRESSURE_WAIT_FOR_POST_STATE: - presOcclState = handlePresOcclWaitForPOSTState(); - break; - - case PRESSURE_CONTINUOUS_READ_STATE: - presOcclState = handlePresOcclContReadState(); - break; - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_PRES_OCCL_INVALID_STATE, presOcclState ) - break; - } - - // Publish pressure/occlusion data on interval - publishPresOcclData(); +/*********************************************************************//** + * @brief + * The execPresOccl function executes the pressure and occlusion monitor. + * @details Inputs: presOcclState + * @details Outputs: presOcclState + * @return none + *************************************************************************/ +void execPresOccl( void ) +{ + // State machine + switch ( presOcclState ) + { + case PRESSURE_WAIT_FOR_POST_STATE: + presOcclState = handlePresOcclWaitForPOSTState(); + break; + + case PRESSURE_CONTINUOUS_READ_STATE: + presOcclState = handlePresOcclContReadState(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_PRES_OCCL_INVALID_STATE, presOcclState ) + break; + } + + // Publish pressure/occlusion data on interval + publishPresOcclData(); } /*********************************************************************//** @@ -359,18 +359,18 @@ } return result; -} - -/*********************************************************************//** - * @brief - * The handlePresOcclContReadState function handles the continuous read state - * of the pressure/occlusion monitor state machine. - * @details Inputs: FPGA pressure/occlusion readings - * @details Outputs: pressure sensor values updated - * @return next state - *************************************************************************/ -static PRESSURE_STATE_T handlePresOcclContReadState( void ) -{ +} + +/*********************************************************************//** + * @brief + * The handlePresOcclContReadState function handles the continuous read state + * of the pressure/occlusion monitor state machine. + * @details Inputs: FPGA pressure/occlusion readings + * @details Outputs: pressure sensor values updated + * @return next state + *************************************************************************/ +static PRESSURE_STATE_T handlePresOcclContReadState( void ) +{ PRESSURE_STATE_T result = PRESSURE_CONTINUOUS_READ_STATE; // Read latest in-line (arterial and venous) pressures @@ -381,13 +381,13 @@ // Check in-line pressures are in range checkArterialPressureInRange(); - checkVenousPressureInRange(); + checkVenousPressureInRange(); - // Check for occlusions + // Check for occlusions checkOcclusions(); - return result; -} + return result; +} /*********************************************************************//** * @brief @@ -400,7 +400,6 @@ static void convertInlinePressures( void ) { F32 rawArterialPres = 0.0; - U08 artPresAlarm = 0; U08 artPresStatus = 0; F32 venPresPSI = 0.0; U16 fpgaVenPres = getFPGAVenousPressure(); @@ -598,8 +597,7 @@ #endif { // Check venous pressure is in range - 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 ) ) + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE, ( venPres > VENOUS_PRESSURE_MAX_MMHG || venPres < VENOUS_PRESSURE_MIN_MMHG ) ) ) { SET_ALARM_WITH_1_F32_DATA( ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE, venPres ); } @@ -643,6 +641,7 @@ { SET_ALARM_WITH_2_F32_DATA( ALARM_ID_VENOUS_PRESSURE_HIGH, venPres, VENOUS_PRESSURE_ND_MAX_MMHG ); } + isPersistentAlarmTriggered( ALARM_ID_VENOUS_PRESSURE_LOW, FALSE ); } else { // Reset persistence if alarm is out of scope @@ -652,16 +651,16 @@ } } -/*********************************************************************//** - * @brief - * The checkPressureLimits function gets the pressure/occlusion data - * publication interval. - * @details Inputs: occlusion pressures for the pumps - * @details Outputs: Alarm if occlusion limit exceeded - * @return none - *************************************************************************/ -static void checkOcclusions( void ) -{ +/*********************************************************************//** + * @brief + * The checkPressureLimits function gets the pressure/occlusion data + * publication interval. + * @details Inputs: occlusion pressures for the pumps + * @details Outputs: Alarm if occlusion limit exceeded + * @return none + *************************************************************************/ +static void checkOcclusions( void ) +{ U32 bpOccl = getMeasuredBloodPumpOcclusion(); BOOL outOfRange = ( bpOccl < MIN_OCCLUSION_COUNTS || bpOccl > MAX_OCCLUSION_COUNTS ? TRUE : FALSE ); @@ -686,16 +685,16 @@ // and setOcclusionInstallLevel has been called. if( MODE_PRET == getCurrentOperationMode() ) { - // Check for BP occlusion - if ( bpOccl > ( OCCLUSION_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) + // Check for BP occlusion + if ( bpOccl > ( OCCLUSION_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) { if( getPreTreatmentSubState() > HD_PRE_TREATMENT_CART_INSTALL_STATE && getDrySelfTestsState() > DRY_SELF_TESTS_START_STATE ) { - // Check for occlusion - if ( bpOccl > ( OCCLUSION_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) + // Check for occlusion + if ( bpOccl > ( OCCLUSION_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) { - signalBloodPumpHardStop(); // Stop pump immediately - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_OCCLUSION_BLOOD_PUMP, bpOccl ) + signalBloodPumpHardStop(); // Stop pump immediately + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_OCCLUSION_BLOOD_PUMP, bpOccl ) } } } @@ -733,16 +732,16 @@ clearAlarmCondition( ALARM_ID_HD_VENOUS_LINE_OCCLUSION ); isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_LINE_OCCLUSION, FALSE ); } - } -} - -/*********************************************************************//** - * @brief - * The getMeasuredArterialPressure function gets the current arterial pressure. - * @details Inputs: arterialPressure - * @details Outputs: none - * @return the current arterial pressure (in mmHg). - *************************************************************************/ + } +} + +/*********************************************************************//** + * @brief + * The getMeasuredArterialPressure function gets the current arterial pressure. + * @details Inputs: arterialPressure + * @details Outputs: none + * @return the current arterial pressure (in mmHg). + *************************************************************************/ F32 getMeasuredArterialPressure( void ) { F32 result = arterialPressure.data; @@ -778,14 +777,14 @@ { return longFilteredArterialPressure; } - -/*********************************************************************//** - * @brief - * The getMeasuredVenousPressure function gets the measured venous pressure. - * @details Inputs: venousPressure - * @details Outputs: none - * @return the current venous pressure (in mmHg). - *************************************************************************/ + +/*********************************************************************//** + * @brief + * The getMeasuredVenousPressure function gets the measured venous pressure. + * @details Inputs: venousPressure + * @details Outputs: none + * @return the current venous pressure (in mmHg). + *************************************************************************/ F32 getMeasuredVenousPressure( void ) { F32 result = venousPressure.data; @@ -809,15 +808,15 @@ { return shortFilteredVenousPressure; } - -/*********************************************************************//** - * @brief - * The getMeasuredBloodPumpOcclusion function gets the measured blood pump - * occlusion pressure. - * @details Inputs: bloodPumpOcclusion - * @details Outputs: none - * @return the current blood pump occlusion pressure (in mmHg). - *************************************************************************/ + +/*********************************************************************//** + * @brief + * The getMeasuredBloodPumpOcclusion function gets the measured blood pump + * occlusion pressure. + * @details Inputs: bloodPumpOcclusion + * @details Outputs: none + * @return the current blood pump occlusion pressure (in mmHg). + *************************************************************************/ U32 getMeasuredBloodPumpOcclusion( void ) { U32 result = bloodPumpOcclusion.data; @@ -829,7 +828,7 @@ return result; } - + /*********************************************************************//** * @brief * The filterInlinePressureReadings function adds a new arterial and venous @@ -878,46 +877,46 @@ venPressureReadingsShortCount = INC_CAP( artPressureReadingsShortCount, SIZE_OF_SHORT_VEN_ROLLING_AVG ); shortFilteredVenousPressure = venPressureReadingsShortTotal / (F32)venPressureReadingsShortCount; } - -/*********************************************************************//** - * @brief - * The publishPresOcclData function publishes pressure/occlusion data at the - * set interval. - * @details Inputs: latest pressure and occlusion readings - * @details Outputs: Pressure/occlusion data are published to CAN bus. - * @return none - *************************************************************************/ -static void publishPresOcclData( void ) -{ - // Publish pressure/occlusion data on interval - if ( ++presOcclDataPublicationTimerCounter >= getU32OverrideValue( &presOcclDataPublishInterval ) ) + +/*********************************************************************//** + * @brief + * The publishPresOcclData function publishes pressure/occlusion data at the + * set interval. + * @details Inputs: latest pressure and occlusion readings + * @details Outputs: Pressure/occlusion data are published to CAN bus. + * @return none + *************************************************************************/ +static void publishPresOcclData( void ) +{ + // Publish pressure/occlusion data on interval + if ( ++presOcclDataPublicationTimerCounter >= getU32OverrideValue( &presOcclDataPublishInterval ) ) { PRESSURE_OCCLUSION_DATA_T data; - - data.arterialPressure = shortFilteredArterialPressure; - data.venousPressure = shortFilteredVenousPressure; - data.bldPumpOcclusion = getMeasuredBloodPumpOcclusion(); - data.diPumpOcclusion = 0; // TODO - remove unused fields - data.doPumpOcclusion = 0; - + + data.arterialPressure = shortFilteredArterialPressure; + data.venousPressure = shortFilteredVenousPressure; + data.bldPumpOcclusion = getMeasuredBloodPumpOcclusion(); + data.diPumpOcclusion = 0; // TODO - remove unused fields + data.doPumpOcclusion = 0; + broadcastData( MSG_ID_PRESSURE_OCCLUSION_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( PRESSURE_OCCLUSION_DATA_T ) ); - presOcclDataPublicationTimerCounter = 0; - } -} - -/*********************************************************************//** - * @brief - * The execPresOcclTest function executes the PresOccl self-test. - * @details Inputs: none - * @details Outputs: Triggers fault when test case fails - * @return none - *************************************************************************/ -void execPresOcclTest( void ) + presOcclDataPublicationTimerCounter = 0; + } +} + +/*********************************************************************//** + * @brief + * The execPresOcclTest function executes the PresOccl self-test. + * @details Inputs: none + * @details Outputs: Triggers fault when test case fails + * @return none + *************************************************************************/ +void execPresOcclTest( void ) { #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRESSURE_CHECKS ) != SW_CONFIG_ENABLE_VALUE ) #endif - { + { U32 const bpPressure = getMeasuredBloodPumpOcclusion(); F32 const arterialPressure = getFilteredArterialPressure(); F32 const venousPressure = getFilteredVenousPressure(); @@ -937,7 +936,7 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_VENOUS_PRESSURE_SELF_TEST_FAILURE, venousPressure ); } } -} +} /*********************************************************************//** * @brief @@ -997,193 +996,193 @@ } return result; -} - -/************************************************************************* - * TEST SUPPORT FUNCTIONS - *************************************************************************/ - - -/*********************************************************************//** - * @brief - * The testSetPresOcclDataPublishIntervalOverride function overrides the - * pressure and occlusion data publish interval. - * @details Inputs: none - * @details Outputs: presOcclDataPublishInterval - * @param value override pressure and occlusion data publish interval with (in ms) - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testSetPresOcclDataPublishIntervalOverride( U32 value ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - U32 intvl = value / TASK_GENERAL_INTERVAL; - - result = TRUE; - presOcclDataPublishInterval.ovData = intvl; - presOcclDataPublishInterval.override = OVERRIDE_KEY; - } - - return result; -} - -/*********************************************************************//** - * @brief - * The testResetPresOcclDataPublishIntervalOverride function resets the override - * of the pressure and occlusion data publish interval. - * @details Inputs: none - * @details Outputs: presOcclDataPublishInterval - * @return TRUE if override reset successful, FALSE if not - *************************************************************************/ -BOOL testResetPresOcclDataPublishIntervalOverride( void ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - presOcclDataPublishInterval.override = OVERRIDE_RESET; - presOcclDataPublishInterval.ovData = presOcclDataPublishInterval.ovInitData; - } - - return result; -} - -/*********************************************************************//** - * @brief - * The testSetArterialPressureOverride function overrides the measured arterial - * pressure. - * @details Inputs: none - * @details Outputs: arterialPressure - * @param value override arterial pressure (in mmHg) - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testSetArterialPressureOverride( F32 value ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - arterialPressure.ovData = value; - arterialPressure.override = OVERRIDE_KEY; - } - - return result; -} - -/*********************************************************************//** - * @brief - * The testResetArterialPressureOverride function resets the override of the - * arterial pressure. - * @details Inputs: none - * @details Outputs: arterialPressure - * @return TRUE if reset successful, FALSE if not - *************************************************************************/ -BOOL testResetArterialPressureOverride( void ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - arterialPressure.override = OVERRIDE_RESET; - arterialPressure.ovData = arterialPressure.ovInitData; - } - - return result; -} - -/*********************************************************************//** - * @brief - * The testSetVenousPressureOverride function overrides the measured venous - * pressure. - * @details Inputs: none - * @details Outputs: venousPressure - * @param value override measured venous pressure with (in mmHg) - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testSetVenousPressureOverride( F32 value ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - venousPressure.ovData = value; - venousPressure.override = OVERRIDE_KEY; - } - - return result; -} - -/*********************************************************************//** - * @brief - * The testResetVenousPressureOverride function resets the override of the - * venous pressure. - * @details Inputs: none - * @details Outputs: venousPressure - * @return TRUE if reset successful, FALSE if not - *************************************************************************/ -BOOL testResetVenousPressureOverride( void ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - venousPressure.override = OVERRIDE_RESET; - venousPressure.ovData = venousPressure.ovInitData; - } - - return result; -} - -/*********************************************************************//** - * @brief - * The testSetBloodPumpOcclusionOverride function overrides the measured - * blood pump occlusion pressure. - * @details Inputs: none - * @details Outputs: bloodPumpOcclusion - * @param value override measured blood pump occlusion pressure with - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testSetBloodPumpOcclusionOverride( U32 value ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - bloodPumpOcclusion.ovData = value; - bloodPumpOcclusion.override = OVERRIDE_KEY; - } - - return result; -} - -/*********************************************************************//** - * @brief - * The testResetBloodPumpOcclusionOverride function resets the override of the - * measured blood pump occlusion pressure. - * @details Inputs: none - * @details Outputs: bloodPumpOcclusion - * @return TRUE if reset successful, FALSE if not - *************************************************************************/ -BOOL testResetBloodPumpOcclusionOverride( void ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - bloodPumpOcclusion.override = OVERRIDE_RESET; - bloodPumpOcclusion.ovData = bloodPumpOcclusion.ovInitData; - } - - return result; } -/**@}*/ +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetPresOcclDataPublishIntervalOverride function overrides the + * pressure and occlusion data publish interval. + * @details Inputs: none + * @details Outputs: presOcclDataPublishInterval + * @param value override pressure and occlusion data publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetPresOcclDataPublishIntervalOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + U32 intvl = value / TASK_GENERAL_INTERVAL; + + result = TRUE; + presOcclDataPublishInterval.ovData = intvl; + presOcclDataPublishInterval.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetPresOcclDataPublishIntervalOverride function resets the override + * of the pressure and occlusion data publish interval. + * @details Inputs: none + * @details Outputs: presOcclDataPublishInterval + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetPresOcclDataPublishIntervalOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + presOcclDataPublishInterval.override = OVERRIDE_RESET; + presOcclDataPublishInterval.ovData = presOcclDataPublishInterval.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetArterialPressureOverride function overrides the measured arterial + * pressure. + * @details Inputs: none + * @details Outputs: arterialPressure + * @param value override arterial pressure (in mmHg) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetArterialPressureOverride( F32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + arterialPressure.ovData = value; + arterialPressure.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetArterialPressureOverride function resets the override of the + * arterial pressure. + * @details Inputs: none + * @details Outputs: arterialPressure + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetArterialPressureOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + arterialPressure.override = OVERRIDE_RESET; + arterialPressure.ovData = arterialPressure.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetVenousPressureOverride function overrides the measured venous + * pressure. + * @details Inputs: none + * @details Outputs: venousPressure + * @param value override measured venous pressure with (in mmHg) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetVenousPressureOverride( F32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + venousPressure.ovData = value; + venousPressure.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetVenousPressureOverride function resets the override of the + * venous pressure. + * @details Inputs: none + * @details Outputs: venousPressure + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetVenousPressureOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + venousPressure.override = OVERRIDE_RESET; + venousPressure.ovData = venousPressure.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetBloodPumpOcclusionOverride function overrides the measured + * blood pump occlusion pressure. + * @details Inputs: none + * @details Outputs: bloodPumpOcclusion + * @param value override measured blood pump occlusion pressure with + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetBloodPumpOcclusionOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + bloodPumpOcclusion.ovData = value; + bloodPumpOcclusion.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBloodPumpOcclusionOverride function resets the override of the + * measured blood pump occlusion pressure. + * @details Inputs: none + * @details Outputs: bloodPumpOcclusion + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetBloodPumpOcclusionOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + bloodPumpOcclusion.override = OVERRIDE_RESET; + bloodPumpOcclusion.ovData = bloodPumpOcclusion.ovInitData; + } + + return result; +} + +/**@}*/ Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r1efa1af5337b36f5022df5ce8cb7459352f13a8b -r9fcde8f2f5e133f06bc564b44a2fa930132add17 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 1efa1af5337b36f5022df5ce8cb7459352f13a8b) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 9fcde8f2f5e133f06bc564b44a2fa930132add17) @@ -87,7 +87,8 @@ #define HOMING_STEP_CHANGE_IN_COUNTS 1000 ///< Step change in counts during homing #define TRANSITION_STEP_CHANGE_IN_COUNTS 15000 ///< Step change in counts during normal operations -#define MAX_DEVIATION_FROM_TARGET_IN_COUNTS 150 ///< Maximum deviation from target in counts +#define MAX_DEVIATION_FROM_TARGET_IN_COUNTS 2500 ///< Maximum deviation from target in counts +#define MAX_DEVIATION_FROM_TGT_IN_TRAVEL_CNTS 150 ///< Maximum deviation from target in counts #define MAX_DEVIATION_FROM_TRAGET_IN_POS_B 1000 ///< Maximum allowed deviation from position B in counts #define MAX_ALLOWED_FAILED_HOMINGS 3U ///< Maximum allowed failed homings /// The time that the valve must be at the edge to be considered for edge detection @@ -663,7 +664,7 @@ S16 deltaPosition = targetPosition - currentPosition; // If there has not been any major travel for a certain period of time - if ( deltaPosition > MAX_DEVIATION_FROM_TARGET_IN_COUNTS ) + if ( deltaPosition > MAX_DEVIATION_FROM_TGT_IN_TRAVEL_CNTS ) { if ( valvesStatus[ valve ].homingEdgeDetectionCounter >= HOMING_EDGE_DETECTION_TIME_INTERVAL ) { @@ -709,7 +710,7 @@ S16 deltaPosition = currentPosition - targetPosition; // Still too far from intermediate target position? Either still more travel to go or stuck at end of travel - if ( deltaPosition > MAX_DEVIATION_FROM_TARGET_IN_COUNTS ) + if ( deltaPosition > MAX_DEVIATION_FROM_TGT_IN_TRAVEL_CNTS ) { // Are we stuck at end of travel? if ( valvesStatus[ valve ].homingEdgeDetectionCounter >= HOMING_EDGE_DETECTION_TIME_INTERVAL ) @@ -877,7 +878,7 @@ } } // Check if the valve is close to the temporary target position and if it is, assign the next target position - else if ( abs( currentPosition - targetPosition ) < MAX_DEVIATION_FROM_TARGET_IN_COUNTS ) + else if ( abs( currentPosition - targetPosition ) < MAX_DEVIATION_FROM_TGT_IN_TRAVEL_CNTS ) { setValveNextStep( valve, TRANSITION_STEP_CHANGE_IN_COUNTS ); } Index: firmware/App/Modes/TreatmentStop.c =================================================================== diff -u -r254faac62b851c393c5df753eade2dc880b83247 -r9fcde8f2f5e133f06bc564b44a2fa930132add17 --- firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision 254faac62b851c393c5df753eade2dc880b83247) +++ firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision 9fcde8f2f5e133f06bc564b44a2fa930132add17) @@ -256,8 +256,8 @@ static TREATMENT_STOP_STATE_T handleTreatmentStopAlarmsAndSignals( TREATMENT_STOP_STATE_T state ) { TREATMENT_STOP_STATE_T result = state; - bool bloodRecircBlocked = isBloodRecircBlocked(); - bool dialysateRecircBlocked = isDialysateRecircBlocked(); + BOOL bloodRecircBlocked = isBloodRecircBlocked(); + BOOL dialysateRecircBlocked = isDialysateRecircBlocked(); // Both unblocked and not in recirculate both state if ( (TREATMENT_STOP_RECIRC_STATE != state) && ( FALSE == dialysateRecircBlocked )