Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -re5879a928e1ac6ed2e6960fd2f9a317ce166c699 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision e5879a928e1ac6ed2e6960fd2f9a317ce166c699) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -31,7 +31,6 @@ // ********** private definitions ********** -/// Default publication interval for pressure and occlusion data. #define AIR_TRAP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval (ms/task time) at which the air trap data is published on the CAN bus. /// Defined states for the air trap controller state machine. @@ -47,9 +46,9 @@ /// Defined states for the air trap self-test state machine. typedef enum AirTrap_Self_Test_States { - AIR_TRAP_SELF_TEST_STATE_START = 0, ///< Self test start state - AIR_TRAP_TEST_STATE_IN_PROGRESS, ///< Self test in progress state - AIR_TRAP_TEST_STATE_COMPLETE, ///< Self test completed state + AIR_TRAP_SELF_TEST_STATE_START = 0, ///< Self-test start state + AIR_TRAP_SELF_TEST_STATE_IN_PROGRESS, ///< Self-test in progress state + AIR_TRAP_SELF_TEST_STATE_COMPLETE, ///< Self-test completed state NUM_OF_AIR_TRAP_SELF_TEST_STATES ///< Number of air trap self-test states } AIR_TRAP_SELF_TEST_STATE_T; @@ -58,7 +57,8 @@ 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 OVERRIDE_U32_T airTrapDataPublishInterval = { AIR_TRAP_DATA_PUB_INTERVAL, AIR_TRAP_DATA_PUB_INTERVAL, 0, 0 }; ///< interval (in ms) at which to publish air trap data 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 }; static OVERRIDE_U32_T airTrapLevels[ NUM_OF_AIR_TRAP_LEVEL_SENSORS ]; ///< detected air trap level for each level sensor. static AIR_TRAP_SELF_TEST_STATE_T airTrapSelfTestState; ///< current air trap self-test state. @@ -134,6 +134,7 @@ if ( TRUE == isAirTrapControlling() ) { pendingStopAirTrapController = TRUE; + setValveAirTrap( STATE_CLOSED ); // always exit air trap valve control w/ valve closed. } } @@ -212,7 +213,7 @@ break; default: - // TODO - s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, (U32)SW_FAULT_ID_AIR_TRAP_INVALID_STATE, (U32)airTrapControllerState ) airTrapControllerState = AIR_TRAP_INIT_STATE; break; } @@ -238,6 +239,7 @@ if ( TRUE == pendingStartAirTrapController ) { pendingStartAirTrapController = FALSE; + setValveAirTrap( STATE_CLOSED ); result = AIR_TRAP_VALVE_CLOSED_STATE; } @@ -266,7 +268,7 @@ // transition to open valve state when air detected at lower level else if ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) { - // TODO - command air trap valve to open + setValveAirTrap( STATE_OPEN ); result = AIR_TRAP_VALVE_OPEN_STATE; } @@ -295,7 +297,7 @@ // transition to closed valve state when fluid detected at upper level else if ( AIR_TRAP_LEVEL_FLUID == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) { - // TODO - command air trap valve to close + setValveAirTrap( STATE_CLOSED ); result = AIR_TRAP_VALVE_CLOSED_STATE; } @@ -326,7 +328,7 @@ } else { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, 0, (U32)sensor ) // TODO - 1st param s/b a unique enum from AlarmMgmt.h + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, (U32)SW_FAULT_ID_AIR_TRAP_INVALID_LEVEL_SENSOR, (U32)sensor ) result = AIR_TRAP_LEVEL_AIR; } @@ -364,13 +366,13 @@ *************************************************************************/ static void publishAirTrapData( void ) { - // publish pressure/occlusion data on interval + // publish air trap data on interval if ( ++airTrapDataPublicationTimerCounter >= getPublishAirTrapDataInterval() ) { AIR_TRAP_LEVELS_T lowLevel = getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ); AIR_TRAP_LEVELS_T highLevel = getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ); -// broadcastAirTrapData( (U32)lowLevel, (U32)highLevel ); + broadcastAirTrapData( lowLevel, highLevel ); airTrapDataPublicationTimerCounter = 0; } } @@ -386,7 +388,7 @@ *************************************************************************/ SELF_TEST_STATUS_T execAirTrapTest( void ) { - SELF_TEST_STATUS_T status; + SELF_TEST_STATUS_T status = SELF_TEST_STATUS_PASSED; // TODO - implement POST @@ -406,7 +408,7 @@ * @details * Inputs : none * Outputs : airTrapDataPublishInterval - * @param value override pressure and occlusion data publish interval with (in ms) + * @param value override air trap data publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testSetAirTrapDataPublishIntervalOverride( U32 value ) @@ -415,8 +417,10 @@ if ( TRUE == isTestingActivated() ) { + U32 intvl = value / TASK_GENERAL_INTERVAL; + result = TRUE; - airTrapDataPublishInterval.ovData = value; + airTrapDataPublishInterval.ovData = intvl; airTrapDataPublishInterval.override = OVERRIDE_KEY; } @@ -448,7 +452,7 @@ /*********************************************************************//** * @brief - * The testSetArterialPressureOverride function overrides the measured level + * The testSetAirTrapLevelOverride function overrides the measured level * for a given level sensor. * @details * Inputs : none Index: firmware/App/Controllers/AirTrap.h =================================================================== diff -u -re5879a928e1ac6ed2e6960fd2f9a317ce166c699 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Controllers/AirTrap.h (.../AirTrap.h) (revision e5879a928e1ac6ed2e6960fd2f9a317ce166c699) +++ firmware/App/Controllers/AirTrap.h (.../AirTrap.h) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -22,8 +22,9 @@ /** * @defgroup AirTrap AirTrap - * @brief Pressure & Occlusion controller/monitor module. Monitors the - * blood line pressure sensors and pump occlusion sensors. + * @brief Air Trap valve controller / level sensor monitor module. Monitors the + * air trap level sensors. Controls the air trap valve when level controlling is + * turned on. * * @addtogroup AirTrap * @{ @@ -36,7 +37,7 @@ { AIR_TRAP_LEVEL_SENSOR_LOWER = 0, ///< lower air trap sensor AIR_TRAP_LEVEL_SENSOR_UPPER, ///< upper air trap sensor - NUM_OF_AIR_TRAP_LEVEL_SENSORS ///< Number of pressure sensors + NUM_OF_AIR_TRAP_LEVEL_SENSORS ///< Number of air trap sensors } AIR_TRAP_LEVEL_SENSORS_T; /// Enumeration of air trap level sensor levels. Index: firmware/App/Controllers/AlarmLamp.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -66,7 +66,8 @@ static OVERRIDE_U32_T currentLampPattern = { LAMP_PATTERN_MANUAL, LAMP_PATTERN_FAULT, LAMP_PATTERN_FAULT, 0 }; static LAMP_PATTERN_T pendingLampPattern = LAMP_PATTERN_MANUAL; ///< Pending alarm lamp pattern. static U32 currentLampPatternStep = 0; ///< Current alarm lamp pattern step. -static U32 lampPatternStepTimer = 0; ///< Timer counter for current alarm lamp pattern step. +static U32 lampPatternStepTimer = 0; ///< Timer counter for current alarm lamp pattern step. +static BOOL alarmLampOn = FALSE; ///< Flag indicates whether an any lamp is currently on. /// Two step alarm lamp patterns (repeating). const struct LampPatterns lampPatterns[ NUM_OF_LAMP_PATTERNS ] = { @@ -98,7 +99,8 @@ { pendingLampPattern = LAMP_PATTERN_MANUAL; currentLampPatternStep = 0; - lampPatternStepTimer = 0; + lampPatternStepTimer = 0; + alarmLampOn = FALSE; alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_START; alarmLampSelfTestStepTimerCount = 0; @@ -189,6 +191,19 @@ return result; } + +/*********************************************************************//** + * @brief + * The getAlarmLampOn function gets the current alarm lamp on flag. + * @details + * Inputs : alarmLampOn + * Outputs : none + * @return alarmLampOn + *************************************************************************/ +BOOL getAlarmLampOn( void ) +{ + return alarmLampOn; +} /*********************************************************************//** * @brief @@ -268,19 +283,23 @@ PIN_SIGNAL_STATE_T green = PIN_SIGNAL_LOW; PIN_SIGNAL_STATE_T blue = PIN_SIGNAL_LOW; PIN_SIGNAL_STATE_T red = PIN_SIGNAL_LOW; - + + alarmLampOn = FALSE; lampPatternStepTimer = 0; if ( lampPatterns[ getCurrentAlarmLampPattern() ].green[ currentLampPatternStep ] == LAMP_STATE_ON ) { green = PIN_SIGNAL_HIGH; + alarmLampOn = TRUE; } if ( lampPatterns[ getCurrentAlarmLampPattern() ].blue[ currentLampPatternStep ] == LAMP_STATE_ON ) { blue = PIN_SIGNAL_HIGH; + alarmLampOn = TRUE; } if ( lampPatterns[ getCurrentAlarmLampPattern() ].red[ currentLampPatternStep ] == LAMP_STATE_ON ) { red = PIN_SIGNAL_HIGH; + alarmLampOn = TRUE; } #ifndef TASK_TIMING_OUTPUT_ENABLED Index: firmware/App/Controllers/AlarmLamp.h =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Controllers/AlarmLamp.h (.../AlarmLamp.h) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Controllers/AlarmLamp.h (.../AlarmLamp.h) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -50,7 +50,8 @@ void requestAlarmLampPattern( LAMP_PATTERN_T lampPattern ); SELF_TEST_STATUS_T execAlarmLampTest( void ); -DATA_GET_PROTOTYPE( LAMP_PATTERN_T, getCurrentAlarmLampPattern ); +DATA_GET_PROTOTYPE( LAMP_PATTERN_T, getCurrentAlarmLampPattern ); +BOOL getAlarmLampOn( void ); BOOL testSetCurrentLampPatternOverride( U32 value ); BOOL testResetCurrentLampPatternOverride( void ); Index: firmware/App/Controllers/PresOccl.h =================================================================== diff -u -r6d044be7a5c4ef961c2d2569d88be95c9bd86be6 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision 6d044be7a5c4ef961c2d2569d88be95c9bd86be6) +++ firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -58,11 +58,11 @@ SELF_TEST_STATUS_T execPresOcclTest( void ); -DATA_GET_PROTOTYPE( F32, getMeasuredArterialPressure ); -DATA_GET_PROTOTYPE( F32, getMeasuredVenousPressure); -DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpOcclusion ); -DATA_GET_PROTOTYPE( F32, getMeasuredDialInPumpOcclusion ); -DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpOcclusion ); +F32 getMeasuredArterialPressure( void ); +F32 getMeasuredVenousPressure( void ); +F32 getMeasuredBloodPumpOcclusion( void ); +F32 getMeasuredDialInPumpOcclusion( void ); +F32 getMeasuredDialOutPumpOcclusion( void ); BOOL testSetPresOcclDataPublishIntervalOverride( U32 value ); BOOL testResetPresOcclDataPublishIntervalOverride( void ); Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r9725baecc8bf9720e4c27a4564b8aee3d62813e5 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 9725baecc8bf9720e4c27a4564b8aee3d62813e5) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -383,13 +383,8 @@ execMonitorValves(); - // TODO un-comment the for loop - //for ( valve = VDI; valve < NUM_OF_VALVES; valve++ ) + for ( valve = VDI; valve < NUM_OF_VALVES; valve++ ) { - //TODO FOR TESTING ONLY REMOVE - valve = VBA; - //TODO FOR TESTING ONLY REMOVE - switch ( valvesStatus[ valve ].execState ) { case VALVE_STATE_WAIT_FOR_POST: @@ -585,7 +580,7 @@ } else if ( deltaPosition < MAX_DEVIATION_FROM_TARGET_IN_COUNTS ) { - if ( valvesStatus[ valve ].restCounter >= 0 )//TODO add a #define for the rest time. Do we need the rest? + if ( valvesStatus[ valve ].restCounter >= 0 ) // TODO add a #define for the rest time. Do we need the rest? { valvesStatus[ valve ].homingEdgeDetectionCounter = 0; valvesStatus[ valve ].targetPositionInCounts = currentPosition + HOMING_STEP_CHANGE_IN_COUNTS; @@ -660,7 +655,7 @@ } else if ( abs(deltaPosition) < MAX_DEVIATION_FROM_TARGET_IN_COUNTS ) { - if ( valvesStatus[ valve ].restCounter >= 0 ) //TODO add a #define for the rest time. Do we need the rest? + if ( valvesStatus[ valve ].restCounter >= 0 ) // TODO add a #define for the rest time. Do we need the rest? { valvesStatus[ valve ].homingEdgeDetectionCounter = 0; valvesStatus[ valve ].targetPositionInCounts = currentPosition - HOMING_STEP_CHANGE_IN_COUNTS; @@ -852,12 +847,15 @@ *************************************************************************/ static void execMonitorValves( void ) { +#ifndef DISABLE_3WAY_VALVES // Check if the valves are still enabled areValvesFunctional(); +#endif // Get the current position of the valves in counts and store them getAndMonitorValvesCurrentPosition(); +#ifndef DISABLE_3WAY_VALVES // Get the current in ADC and convert them to amps // Check whether any of the valves are over current convertAndMonitorValvesCurrent(); @@ -867,6 +865,7 @@ #ifdef DEBUG_ENABLED getValvesCurrentPWM(); #endif +#endif } /*********************************************************************//** @@ -1050,6 +1049,7 @@ valvesStatus[ VBA ].currentPositionInCounts = getFPGAValveBloodArterialPosition(); valvesStatus[ VBV ].currentPositionInCounts = getFPGAValveBloodVenousPosition(); +#ifndef DISABLE_3WAY_VALVES // Check the position of each valve for ( valve = VDI; valve < NUM_OF_VALVES; valve++ ) { @@ -1079,6 +1079,7 @@ } } } +#endif } /*********************************************************************//** @@ -1133,13 +1134,6 @@ valvesStatus[ valve ].dataPublishCounter = 0; } - - // TODO REMOVE Fast 10ms publish - fastDataRemoveLater.currentPos = valvesStatus[ valve ].currentPositionInCounts; - fastDataRemoveLater.current = valvesStatus[ valve ].current; - fastDataRemoveLater.cmdPosition = valvesStatus[ valve ].targetPositionInCounts; - broadcastFastTempHDValves(); - // TODO REMOVE } /*********************************************************************//** Index: firmware/App/HDCommon.h =================================================================== diff -u -r0bfe6ac8e627f0390fbeb25a978d85e15f2cc09a -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/HDCommon.h (.../HDCommon.h) (revision 0bfe6ac8e627f0390fbeb25a978d85e15f2cc09a) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -30,15 +30,17 @@ // ********** development build switches ********** #ifndef _RELEASE_ -#define UF_TEST_ENABLED 1 // ultrafiltration test build (hard codes treatment params, re-purposes off/stop buttons) -#define UF_TEST_WITH_DG 1 // ultrafiltration test build (sets up DG in standby mode) +//#define UF_TEST_ENABLED 1 // ultrafiltration test build (hard codes treatment params, re-purposes off/stop buttons) +//#define UF_TEST_WITH_DG 1 // ultrafiltration test build (sets up DG in standby mode) #ifndef _VECTORCAST_ +// #define DISABLE_UI_TREATMENT_WORKFLOW 1 // disable UI treatment workflow // #define RM46_EVAL_BOARD_TARGET 1 // limited build runs on RM46 eval board // #define BREADBOARD_TARGET 1 // old breadboard system build - no longer used? // #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 #define SKIP_POST 1 // skip POST tests - all pass // #define LIMITED_NVDATA_CRC_CHECKS 1 // only perform POST CRC checks on nv-data records that are implemented so far + #define DISABLE_3WAY_VALVES 1 // disable 3-way valves #define DISABLE_ACCELS 1 // disable accelerometer POST and monitoring #define DISABLE_CRC_ERROR 1 // do not error on bad CRC for CAN messages #define DISABLE_ACK_ERRORS 1 // do not error on failure of other node(s) to ACK a message Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -17,6 +17,7 @@ #include +#include "AirTrap.h" #include "BloodFlow.h" #include "Buttons.h" #include "DGInterface.h" @@ -130,7 +131,7 @@ *************************************************************************/ void transitionToDialysis( void ) { - // TODO - anything needed here? + startAirTrapControl(); } /*********************************************************************//** Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -15,12 +15,14 @@ * ***************************************************************************/ +#include "AirTrap.h" #include "AlarmLamp.h" #include "BloodFlow.h" #include "DialInFlow.h" #include "DialOutFlow.h" #include "Buttons.h" #include "OperationModes.h" +#include "SystemCommMessages.h" #include "ModePreTreat.h" #ifdef RM46_EVAL_BOARD_TARGET #include "Timers.h" @@ -34,6 +36,8 @@ // ********** private data ********** +static BOOL treatStartReqReceived = FALSE; ///< Flag indicates user requests treatment begin. + // ********** private function prototypes ********** /*********************************************************************//** @@ -59,7 +63,9 @@ *************************************************************************/ void transitionToPreTreatmentMode( void ) { - // temporary test code. TODO - remove later + treatStartReqReceived = FALSE; + + // temporary test code. TODO - remove later #ifndef UF_TEST_ENABLED #ifndef RUN_PUMPS_OPEN_LOOP setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); @@ -88,12 +94,17 @@ { BOOL stop = isStopButtonPressed(); +#ifndef DISABLE_UI_TREATMENT_WORKFLOW + if ( TRUE == treatStartReqReceived ) +#else #ifndef UF_TEST_ENABLED if ( TRUE == stop ) #endif - { - requestNewOperationMode( MODE_TREA ); - } +#endif + { + startAirTrapControl(); // TODO - move to right after prime completes when prime is implemented + requestNewOperationMode( MODE_TREA ); + } #ifdef RM46_EVAL_BOARD_TARGET if ( TRUE == didTimeout( start, 5000U ) ) { @@ -104,4 +115,27 @@ return 0; // TODO - return current state } +/*********************************************************************//** + * @brief + * The signalUserBeginningTreatment function handles user start of a + * treatment. + * @details + * Inputs : none + * Outputs : requested mode transition to treatment mode + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserBeginningTreatment( void ) +{ + BOOL result = FALSE; + + if ( MODE_PRET == getCurrentOperationMode() ) + { + treatStartReqReceived = TRUE; + result = TRUE; + } + sendTreatmentStartResponseMsg( result, 0 ); // TODO - provide reason code if rejected + + return result; +} + /**@}*/ Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -rde5a0d43bdef611d963d11855bc958a8d8899a09 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision de5a0d43bdef611d963d11855bc958a8d8899a09) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -34,6 +34,7 @@ void initPreTreatmentMode( void ); // initialize this module void transitionToPreTreatmentMode( void ); // prepares for transition to pre-treatment mode U32 execPreTreatmentMode( void ); // execute the pre-treatment mode state machine (call from OperationModes) +BOOL signalUserBeginningTreatment( void ); // signal that user requests treatment begin /**@}*/ Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -15,6 +15,7 @@ * ***************************************************************************/ +#include "AirTrap.h" #include "AlarmLamp.h" #include "BloodFlow.h" #include "Buttons.h" @@ -77,6 +78,7 @@ // re-initialize when transitioning to standby mode initStandbyMode(); initDGInterface(); + resetAirTrap(); // pumps should be off setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); @@ -183,9 +185,14 @@ requestNewOperationMode( MODE_TPAR ); treatStartReqReceived = FALSE; } +#ifdef DISABLE_UI_TREATMENT_WORKFLOW // TODO - test code if ( TRUE == stop ) +#else + if ( TRUE == treatStartReqReceived ) +#endif { + treatStartReqReceived = FALSE; if ( DG_MODE_CIRC == dgOpMode ) { if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -15,6 +15,7 @@ * ***************************************************************************/ +#include "AirTrap.h" #include "AlarmLamp.h" #include "BloodFlow.h" #include "Buttons.h" @@ -205,6 +206,8 @@ { requestNewOperationMode( MODE_POST ); } + broadcastTreatmentTimeAndState(); + broadcastTreatmentSettingsRanges(); #else // treatment mode state machine switch ( currentTreatmentState ) @@ -251,6 +254,7 @@ case TREATMENT_END_STATE: // TODO - implement + endAirTrapControl(); // TODO - move to appropriate place requestNewOperationMode( MODE_POST ); // TODO - test code - remove later break; Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -250,8 +250,10 @@ } #ifdef UF_TEST_ENABLED +#ifdef DISABLE_UI_TREATMENT_WORKFLOW requestNewOperationMode( MODE_PRET ); #endif +#endif #ifdef RM46_EVAL_BOARD_TARGET if ( TRUE == didTimeout( start, 5000U ) ) { Index: firmware/App/Modes/ModeTreatmentParams.h =================================================================== diff -u -ra35d5e68aad457339f625848809207a9650ad019 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision a35d5e68aad457339f625848809207a9650ad019) +++ firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -67,7 +67,7 @@ F32 uFVolume_L; } ADJ_TREATMENT_PARAMS_T; -// ********** private function prototypes ********** +// ********** public function prototypes ********** void initTreatParamsMode( void ); // initialize this module void transitionToTreatParamsMode( void ); // prepares for transition to treatment parameters mode Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -54,7 +54,7 @@ /* SERV */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, /* INIT */{ MODE_FAUL, MODE_NLEG, MODE_INIT, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, /* STAN */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_STAN, MODE_TPAR, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, -/* TPAR */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_TPAR, MODE_PRET, MODE_NLEG, MODE_NLEG, }, +/* TPAR */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_TPAR, MODE_PRET, MODE_NLEG, MODE_NLEG, }, /* PRET */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_PRET, MODE_TREA, MODE_NLEG, }, /* TREA */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_TREA, MODE_POST, }, /* POST */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_POST, }, }; Index: firmware/App/Modes/TreatmentStop.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -15,6 +15,7 @@ * ***************************************************************************/ +#include "AirTrap.h" #include "Buttons.h" #include "ModeTreatment.h" #include "OperationModes.h" @@ -53,6 +54,7 @@ *************************************************************************/ void transitionToTreatmentStop( void ) { + endAirTrapControl(); } /*********************************************************************//** Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -rd91a24c730aeb5cd7e3eba9ef4eca78e442911f8 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision d91a24c730aeb5cd7e3eba9ef4eca78e442911f8) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -30,7 +30,7 @@ // ********** private definitions ********** -#define ALARM_STATUS_PUBLISH_INTERVAL (500/TASK_GENERAL_INTERVAL) ///< Default interval to publish alarm status data. +#define ALARM_STATUS_PUBLISH_INTERVAL (250/TASK_GENERAL_INTERVAL) ///< Default interval to publish alarm status data. #define ALARM_SILENCE_EXPIRES_IN_SECS (60) ///< Alarm silence expiration time in seconds. @@ -58,7 +58,7 @@ #pragma pack(pop) /// Table of alarms and their static properties. -const ALARM_T alarmTable[ NUM_OF_ALARM_IDS ] = +const ALARM_T alarmTable[] = { // Priority Escalate In Escalate To Fault Stops NoClr NoRes NoRin NoEnd NoNew Bypass { ALARM_PRIORITY_NONE, 0, ALARM_ID_NO_ALARM, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_NO_ALARM { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE }, // ALARM_ID_HD_SOFTWARE_FAULT @@ -139,8 +139,16 @@ { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE }, // ALARM_ID_DG_CRITICAL_DATA_ERROR { ALARM_PRIORITY_HIGH, ALM_ESC_4_MIN, ALARM_ID_BLOOD_SITTING_WARNING, FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE { ALARM_PRIORITY_HIGH, ALM_ESC_4_MIN, ALARM_ID_BLOOD_SITTING_WARNING, FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_INLET_WATER_PRESSURE_FAULT -}; - + { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE }, // ALARM_ID_HD_VALVE_HOMING_FAILED + { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE }, // ALARM_ID_HD_VALVE_TRANSITION_TIMEOUT + { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE }, // ALARM_ID_HD_VALVE_NOT_FUNCTIONAL + { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE }, // ALARM_ID_HD_VALVE_CURRENT_OUT_OF_RANGE + { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE }, // ALARM_ID_HD_VALVE_POSITION_OUT_OF_TARGET +}; + +// *** This declaration will cause a compiler error if alarmTable does not have same # of alarms as the Alarm_List enumeration. +U08 alarmTableSizeAssertion[ ( ( sizeof( alarmTable ) / sizeof( ALARM_T ) ) == NUM_OF_ALARM_IDS ? 1 : -1 ) ]; + /// A blank alarm data record for alarms that do not include alarm data when triggered. const ALARM_DATA_T blankAlarmData = { ALARM_DATA_TYPE_NONE, 0 }; @@ -570,7 +578,12 @@ requestAlarmLampPattern( LAMP_PATTERN_FAULT ); SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_LAMP_INVALID_ALARM_STATE, alarmStatus.alarmsState ) break; - } + } + alarmStatus.lampOn = getAlarmLampOn(); + } + else + { + alarmStatus.lampOn = FALSE; } if ( TRUE == alarmStatus.alarmsSilenced ) Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -ra35d5e68aad457339f625848809207a9650ad019 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision a35d5e68aad457339f625848809207a9650ad019) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -63,7 +63,8 @@ BOOL noRinseback; ///< rinseback may not be initiated at this time BOOL noEndTreatment; ///< ending the treatment is not an option at this time BOOL noNewTreatment; ///< no new treatments may be started even if current treatment is ended - BOOL bypassDialyzer; ///< the dialyzer should be bypassed at this time + BOOL bypassDialyzer; ///< the dialyzer should be bypassed at this time + BOOL lampOn; ///< the alarm lamp is on } COMP_ALARM_STATUS_T; /// Record structure for unsigned integer alarm data. @@ -195,6 +196,8 @@ SW_FAULT_ID_PERSISTENT_ALARM_INVALID_INDEX, SW_FAULT_ID_HD_VALVES_INVALID_SELF_TEST_STATE, SW_FAULT_ID_HD_VALVES_INVALID_EXEC_STATE, + SW_FAULT_ID_AIR_TRAP_INVALID_STATE, // 81 + SW_FAULT_ID_AIR_TRAP_INVALID_LEVEL_SENSOR, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -ra35d5e68aad457339f625848809207a9650ad019 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision a35d5e68aad457339f625848809207a9650ad019) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -1425,6 +1425,14 @@ handleSetHDValvePWMOverrideRequest( message ); break; + case MSG_ID_HD_AIR_TRAP_SEND_INTERVAL_OVERRIDE: + handleSetAirTrapBroadcastIntervalOverrideRequest( message ); + break; + + case MSG_ID_HD_AIR_TRAP_LEVEL_SENSOR_OVERRIDE: + handleSetAirTrapLevelSensorOverrideRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -ra35d5e68aad457339f625848809207a9650ad019 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision a35d5e68aad457339f625848809207a9650ad019) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -17,7 +17,7 @@ #include // for memcpy() -#include "Accel.h" +#include "Accel.h" #include "AlarmLamp.h" #include "BloodFlow.h" #include "Buttons.h" @@ -26,6 +26,7 @@ #include "Dialysis.h" #include "FPGA.h" #include "MessagePayloads.h" +#include "ModePreTreat.h" #include "ModeStandby.h" #include "ModeTreatment.h" #include "ModeTreatmentParams.h" @@ -738,7 +739,8 @@ payload.alarmsFlags |= ( almStatus.noNewTreatment ? BIT_BY_POS(6) : 0 ); payload.alarmsFlags |= ( almStatus.bypassDialyzer ? BIT_BY_POS(7) : 0 ); payload.alarmsFlags |= ( almStatus.alarmsToEscalate ? BIT_BY_POS(8) : 0 ); - payload.alarmsFlags |= ( almStatus.alarmsSilenced ? BIT_BY_POS(9) : 0 ); + payload.alarmsFlags |= ( almStatus.alarmsSilenced ? BIT_BY_POS(9) : 0 ); + payload.alarmsFlags |= ( almStatus.lampOn ? BIT_BY_POS(10) : 0 ); memcpy( payloadPtr, &payload, sizeof( ALARM_COMP_STATUS_PAYLOAD_T ) ); @@ -1158,26 +1160,38 @@ return result; } -// TODO remove this function -BOOL broadcastFastTempHDValves() +/***********************************************************************//** + * @brief + * The broadcastAirTrapData function constructs an HD air trap data msg to \n + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : air trap data msg constructed and queued + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastAirTrapData( AIR_TRAP_LEVELS_T lowerLevel, AIR_TRAP_LEVELS_T upperLevel ) { BOOL result; MESSAGE_T msg; U08 *payloadPtr = msg.payload; + U32 lower = (U32)lowerLevel; + U32 upper = (U32)upperLevel; // create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_TEMP_FAST_HD_VALVES_REMOVE_LATER; - msg.hdr.payloadLen = sizeof( HD_VALVE_FAST_DATA_T ); + msg.hdr.msgID = MSG_ID_HD_AIR_TRAP_DATA; + msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); - memcpy( payloadPtr, &fastDataRemoveLater, sizeof( HD_VALVE_FAST_DATA_T ) ); + memcpy( payloadPtr, &lower, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + memcpy( payloadPtr, &upper, sizeof( U32 ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED ); return result; -} - +} + #ifdef EMC_TEST_BUILD BOOL broadcastCANErrorCount( U32 count ) { @@ -1509,7 +1523,7 @@ } else if ( 2 == cmd ) // start treatment { - // TODO - handle when pre-treatment mode is ready for this + result = signalUserBeginningTreatment(); } } @@ -3349,6 +3363,7 @@ { BOOL result = FALSE; + // verify payload length if ( message->hdr.payloadLen == sizeof(ACCEL_CAL_PAYLOAD_T) ) { ACCEL_CAL_PAYLOAD_T payload; @@ -3375,6 +3390,7 @@ { BOOL result = FALSE; + // verify payload length if ( message->hdr.payloadLen == sizeof(LINEAR_F32_CAL_PAYLOAD_T) ) { LINEAR_F32_CAL_PAYLOAD_T payload; @@ -3401,6 +3417,7 @@ { BOOL result = FALSE; + // verify payload length if ( message->hdr.payloadLen == sizeof(LINEAR_F32_CAL_PAYLOAD_T) ) { LINEAR_F32_CAL_PAYLOAD_T payload; @@ -3427,6 +3444,7 @@ { BOOL result = FALSE; + // verify payload length if ( message->hdr.payloadLen == sizeof(CRITICAL_DATAS_T) + sizeof(CRITICAL_DATAS_T) ) { CRITICAL_DATAS_T payload[2]; @@ -3452,6 +3470,7 @@ { BOOL result = FALSE; + // verify payload length if ( message->hdr.payloadLen == sizeof(U32) ) { U32 valve; @@ -3481,7 +3500,7 @@ TEST_OVERRIDE_PAYLOAD_T payload; BOOL result = FALSE; - /* verify payload length */ + // verify payload length if ( sizeof(TEST_OVERRIDE_PAYLOAD_T) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_PAYLOAD_T) ); @@ -3495,7 +3514,7 @@ } } - /* respond to request */ + // respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } @@ -3540,12 +3559,13 @@ void handleSetHDValvePositionOverrideRequest( MESSAGE_T *message ) { TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; - BOOL result = 0; - /* verify payload length */ + BOOL result = FALSE; + + // verify payload length if ( sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) ); - if ( 0 == payload.reset ) + if ( FALSE == payload.reset ) { result = testSetValvesPositionOverride( payload.index, (BOOL)(payload.state.u32) ); } @@ -3554,7 +3574,8 @@ result = testResetValvesPositionOverride( payload.index ); } } - /* respond to request */ + + // respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } @@ -3571,12 +3592,13 @@ void handleSetHDValvePWMOverrideRequest( MESSAGE_T *message ) { OVERRIDE_VALVES_PWM_DIR_SET_PAYLOAD_T payload; - BOOL result = 0; - /* verify payload length */ + BOOL result = FALSE; + + // verify payload length if ( sizeof(OVERRIDE_VALVES_PWM_DIR_SET_PAYLOAD_T) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof(OVERRIDE_VALVES_PWM_DIR_SET_PAYLOAD_T) ); - if ( 0 == payload.reset ) + if ( FALSE == payload.reset ) { result = testSetValvePWMOverride( payload.valve, payload.pwm, payload.direction ); } @@ -3585,8 +3607,75 @@ result = testResetValvePWMOverride( payload.valve ); } } - /* respond to request */ + + // respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/************************************************************************* + * @brief + * The handleSetAirTrapBroadcastIntervalOverrideRequest function handles a + * request to override the air trap data broadcast interval. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSetAirTrapBroadcastIntervalOverrideRequest( 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 = testSetAirTrapDataPublishIntervalOverride( (U32)(payload.state.u32) ); + } + else + { + result = testResetAirTrapDataPublishIntervalOverride(); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/************************************************************************* + * @brief + * The handleSetAirTrapLevelSensorOverrideRequest function handles a request to + * override an air trap level sensor. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSetAirTrapLevelSensorOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + BOOL result = FALSE; + + // verify payload length + if ( sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) ); + if ( FALSE == payload.reset ) + { + result = testSetAirTrapLevelOverride( (AIR_TRAP_LEVEL_SENSORS_T)payload.index, (AIR_TRAP_LEVELS_T)(payload.state.u32) ); + } + else + { + result = testResetAirTrapLevelOverride( (AIR_TRAP_LEVEL_SENSORS_T)payload.index ); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -ra35d5e68aad457339f625848809207a9650ad019 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision a35d5e68aad457339f625848809207a9650ad019) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -18,10 +18,11 @@ #ifndef __SYSTEM_COMM_MESSAGES_H__ #define __SYSTEM_COMM_MESSAGES_H__ -#include "HDCommon.h" -#include "MsgQueues.h" -#include "DialOutFlow.h" +#include "HDCommon.h" +#include "AirTrap.h" #include "DGInterface.h" +#include "DialOutFlow.h" +#include "MsgQueues.h" #include "Valves.h" /** @@ -194,9 +195,9 @@ // MSG_ID_HD_VALVES_DATA BOOL broadcastHDValves( HD_VALVE_DATA_T *valveData ); -// MSG_ID_TEMP_FAST_HD_VALVES_REMOVE_LATER -BOOL broadcastFastTempHDValves(); //TODO remove this function - +// MSG_ID_HD_AIR_TRAP_DATA +BOOL broadcastAirTrapData( AIR_TRAP_LEVELS_T lowerLevel, AIR_TRAP_LEVELS_T upperLevel ); + #ifdef EMC_TEST_BUILD // MSG_ID_CAN_ERROR_COUNT BOOL broadcastCANErrorCount( U32 count ); @@ -365,6 +366,12 @@ // MSG_ID_HD_VALVES_SET_PWM_OVERRIDE void handleSetHDValvePWMOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_HD_AIR_TRAP_SEND_INTERVAL_OVERRIDE +void handleSetAirTrapBroadcastIntervalOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_HD_AIR_TRAP_LEVEL_SENSOR_OVERRIDE +void handleSetAirTrapLevelSensorOverrideRequest( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -ra35d5e68aad457339f625848809207a9650ad019 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision a35d5e68aad457339f625848809207a9650ad019) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -14,7 +14,8 @@ * @date (original) 05-Nov-2019 * ***************************************************************************/ - + +#include "AirTrap.h" #include "AlarmLamp.h" #include "BloodFlow.h" #include "CPLD.h" @@ -73,7 +74,10 @@ execPresOccl(); // run operation mode state machine - execOperationModes(); + execOperationModes(); + + // control air trap valve + execAirTrapController(); // control blood pump execBloodFlowController(); Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -ra35d5e68aad457339f625848809207a9650ad019 -rd9d085cdca67200ecddbdfbc75c489e704b23081 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision a35d5e68aad457339f625848809207a9650ad019) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision d9d085cdca67200ecddbdfbc75c489e704b23081) @@ -15,7 +15,8 @@ * ***************************************************************************/ -#include "Accel.h" +#include "Accel.h" +#include "AirTrap.h" #include "BloodFlow.h" #include "Buttons.h" #include "CPLD.h" @@ -62,7 +63,10 @@ execButtons(); // monitor internal ADC channels - execInternalADC(); + execInternalADC(); + + // monitor air trap level sensors + execAirTrapMonitor(); // monitor blood pump and flow execBloodFlowMonitor();