Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r6c8d2046582b6d2c4d0a8b4a97c51b89f80ecf7b -rac02394a849d3f96a71f493f34ad8ff607ae3e1e --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 6c8d2046582b6d2c4d0a8b4a97c51b89f80ecf7b) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision ac02394a849d3f96a71f493f34ad8ff607ae3e1e) @@ -7,8 +7,8 @@ * * @file PresOccl.c * -* @author (last) Sean Nash -* @date (last) 15-Aug-2023 +* @author (last) Darren Cox +* @date (last) 24-Aug-2023 * * @author (original) Sean * @date (original) 15-Jan-2020 @@ -43,6 +43,7 @@ #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 PRES_LIMIT_STABILIZATION_TIME_MS ( 60 * MS_PER_SECOND ) ///< Duration of pressure limit stabilization period (in ms). +#define PRES_LIMIT_SHORT_STABILIZE_TIME_MS ( 5 * MS_PER_SECOND ) ///< Duration of pressure limit short stabilization period (in ms). #define PRES_LIMIT_RESTABILIZE_TIME_MS ( 30 * SEC_PER_MIN * MS_PER_SECOND ) ///< Duration of pressure limit re-stabilize period (in ms). #define ARTERIAL_PRESSURE_CONVERSION_OFFSET 0x800000 ///< Arterial pressure conversion coefficient. @@ -171,6 +172,7 @@ static OVERRIDE_F32_T shortFilteredArterialPressure = { 0.0, 0.0, 0.0, 0 }; ///< Measured arterial pressure after short (1 s) filter. static F32 longFilteredVenousPressure; ///< Measured venous pressure after long (10 s) filter. static OVERRIDE_F32_T shortFilteredVenousPressure = { 0.0, 0.0, 0.0, 0 }; ///< Measured venous pressure after short (1 s) filter. +static BOOL useShortStabilizeTime; ///< Flag to use short stabilize time. static U32 bloodPumpOcclusionAfterCartridgeInstall; ///< Measured blood pump occlusion reading taken after cartridge install. @@ -258,6 +260,7 @@ presOcclState = PRESSURE_WAIT_FOR_POST_STATE; presOcclPostState = PRESSURE_SELF_TEST_STATE_START; bloodPumpOcclusionAfterCartridgeInstall = 0; + useShortStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; } /*********************************************************************//** @@ -402,17 +405,30 @@ * will be in effect immediately (next monitor pass). If treatment paused, * resume will start a new stabilization period ending in another set of * stable pressures before windowed limits recalculated. - * @details Inputs: none + * @details Inputs: useShortStabilizeTime * @details Outputs: stableArterialPressure, stableVenousPressure * @return none *************************************************************************/ void updatePressureLimitWindows( void ) { - F32 filtArt = getLongFilteredArterialPressure(); - F32 filtVen = getLongFilteredVenousPressure(); - S32 curArtPres = FLOAT_TO_INT_WITH_ROUND( filtArt ); - S32 curVenPres = FLOAT_TO_INT_WITH_ROUND( filtVen ); + F32 filtArt; + F32 filtVen; + S32 curArtPres; + S32 curVenPres; + if ( USE_SHORT_STABILIZATION_PERIOD == useShortStabilizeTime ) + { + filtArt = getFilteredArterialPressure(); + filtVen = getFilteredVenousPressure(); + } + else + { + F32 filtArt = getLongFilteredArterialPressure(); + F32 filtVen = getLongFilteredVenousPressure(); + } + + curArtPres = FLOAT_TO_INT_WITH_ROUND( filtArt ); + curVenPres = FLOAT_TO_INT_WITH_ROUND( filtVen ); stableArterialPressure = curArtPres; stableVenousPressure = curVenPres; @@ -425,12 +441,17 @@ * The signalInitiatePressureStabilization function signals that user has * changed the blood and/or dialysate flow rate. If pressure limits state * was stable, a rate change will kick us back to stabilization state. - * @details Inputs: none - * @details Outputs: currPresLimitsState, stabilizationStartTimeMs + * Else reset stabilize counter. + * @details Inputs: currPresLimitsState + * @details Outputs: currPresLimitsState, stabilizationStartTimeMs, useShortStabilizeTime + * @param useShort Flag to use short stabilization period. Use defines: + * USE_NORMAL_STABILIZATION_PERIOD, USE_SHORT_STABILIZATION_PERIOD * @return none *************************************************************************/ -void signalInitiatePressureStabilization( void ) +void signalInitiatePressureStabilization( BOOL useShort ) { + useShortStabilizeTime = useShort; + // User update of blood/dialysate flow rate or UF rate or initiates/resets a stabilization period (if we were in stabilization or stable state) if ( PRESSURE_LIMITS_STATE_STABILIZATION == currPresLimitsState ) { @@ -574,6 +595,7 @@ BOOL bpRampComplete = isBloodPumpRampComplete(); HD_OP_MODE_T currMode = getCurrentOperationMode(); TREATMENT_STATE_T currTxState = getTreatmentState(); + U32 stabilizeTime = PRES_LIMIT_STABILIZATION_TIME_MS; if ( currMode != MODE_TREA ) { @@ -583,7 +605,7 @@ switch ( currPresLimitsState ) { case PRESSURE_LIMITS_STATE_OFF: - if ( MODE_TREA == currMode ) + if ( ( MODE_TREA == currMode ) && ( currTxState != TREATMENT_RECIRC_STATE ) ) { // Tx mode starts in blood prime - want wide limits in that state currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } @@ -604,11 +626,25 @@ else if ( ( TREATMENT_DIALYSIS_STATE == currTxState ) || ( TREATMENT_STOP_STATE == currTxState ) ) { stabilizationStartTimeMs = getMSTimerCount(); + useShortStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; currPresLimitsState = PRESSURE_LIMITS_STATE_STABILIZATION; } + else if ( currTxState == TREATMENT_RECIRC_STATE ) + { + currPresLimitsState = PRESSURE_LIMITS_STATE_OFF; + } break; case PRESSURE_LIMITS_STATE_STABILIZATION: + if ( USE_SHORT_STABILIZATION_PERIOD == useShortStabilizeTime ) + { + stabilizeTime = PRES_LIMIT_SHORT_STABILIZE_TIME_MS; + } + else + { + stabilizeTime = PRES_LIMIT_STABILIZATION_TIME_MS; + } + if ( bpRunning != TRUE ) { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; @@ -617,10 +653,11 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } - else if ( TRUE == didTimeout( stabilizationStartTimeMs, PRES_LIMIT_STABILIZATION_TIME_MS ) ) + else if ( TRUE == didTimeout( stabilizationStartTimeMs, stabilizeTime ) ) { updatePressureLimitWindows(); stabilizationStartTimeMs = getMSTimerCount(); + useShortStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; currPresLimitsState = PRESSURE_LIMITS_STATE_STABLE; } break; @@ -637,6 +674,7 @@ else if ( TRUE == didTimeout( stabilizationStartTimeMs, PRES_LIMIT_RESTABILIZE_TIME_MS ) ) { stabilizationStartTimeMs = getMSTimerCount(); + useShortStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; currPresLimitsState = PRESSURE_LIMITS_STATE_STABILIZATION; } break; Index: firmware/App/Controllers/PresOccl.h =================================================================== diff -u -r6c8d2046582b6d2c4d0a8b4a97c51b89f80ecf7b -rac02394a849d3f96a71f493f34ad8ff607ae3e1e --- firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision 6c8d2046582b6d2c4d0a8b4a97c51b89f80ecf7b) +++ firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision ac02394a849d3f96a71f493f34ad8ff607ae3e1e) @@ -7,8 +7,8 @@ * * @file PresOccl.h * -* @author (last) Sean Nash -* @date (last) 20-Jul-2023 +* @author (last) Darren Cox +* @date (last) 23-Aug-2023 * * @author (original) Sean * @date (original) 15-Jan-2020 @@ -31,6 +31,8 @@ */ // ********** public definitions ********** +#define USE_NORMAL_STABILIZATION_PERIOD FALSE +#define USE_SHORT_STABILIZATION_PERIOD TRUE /// Enumeration of pressure sensors monitored by this module. typedef enum PressureSensors @@ -86,7 +88,7 @@ void setPressureLimitsToOuterBounds( void ); void updatePressureLimitWindows( void ); -void signalInitiatePressureStabilization( void ); +void signalInitiatePressureStabilization( BOOL useShort ); void resetArtVenPressureOffsets( void ); void setArtVenPressureOffsets( void ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r6c8d2046582b6d2c4d0a8b4a97c51b89f80ecf7b -rac02394a849d3f96a71f493f34ad8ff607ae3e1e --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6c8d2046582b6d2c4d0a8b4a97c51b89f80ecf7b) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision ac02394a849d3f96a71f493f34ad8ff607ae3e1e) @@ -7,8 +7,8 @@ * * @file SystemCommMessages.c * -* @author (last) Bill Bracken -* @date (last) 22-Aug-2023 +* @author (last) Sean Nash +* @date (last) 24-Aug-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -2091,25 +2091,22 @@ *************************************************************************/ void handleAlarmTriggered( MESSAGE_T *message ) { - if ( message->hdr.payloadLen == ( sizeof( U32 ) + sizeof( U32 ) * 2 * 2 ) ) // 2 data records w/ 2 U32s each + if ( message->hdr.payloadLen == sizeof( ALARM_TRIGGERED_PAYLOAD_T ) ) { + ALARM_TRIGGERED_PAYLOAD_T payload; U08 *payloadPtr = message->payload; - U32 alarmID; - ALARM_DATA_T alm1, alm2; - memcpy( &alarmID, payloadPtr, sizeof( U32 ) ); - payloadPtr += sizeof( U32 ); - memcpy( &alm1.dataType, payloadPtr, sizeof( U32 ) ); - payloadPtr += sizeof( U32 ); - memcpy( &alm1.data, payloadPtr, sizeof( U32 ) ); - payloadPtr += sizeof( U32 ); - memcpy( &alm2.dataType, payloadPtr, sizeof( U32 ) ); - payloadPtr += sizeof( U32 ); - memcpy( &alm2.data, payloadPtr, sizeof( U32 ) ); + memcpy( &payload, payloadPtr, sizeof( ALARM_TRIGGERED_PAYLOAD_T ) ); - if ( (ALARM_ID_T)alarmID < NUM_OF_ALARM_IDS ) + if ( (ALARM_ID_T)(payload.alarm) < NUM_OF_ALARM_IDS ) { - activateAlarm2Data( (ALARM_ID_T)alarmID, alm1, alm2 ); + ALARM_DATA_T alm1, alm2; + + alm1.dataType = (ALARM_DATA_TYPES_T)(payload.almDataType1); + alm1.data.uInt.data = payload.almData1; + alm2.dataType = (ALARM_DATA_TYPES_T)(payload.almDataType2); + alm2.data.uInt.data = payload.almData2; + activateAlarm2Data( (ALARM_ID_T)(payload.alarm), alm1, alm2, TRUE ); } } } @@ -8331,11 +8328,8 @@ *************************************************************************/ void handleTestHDDialinCheckIn( MESSAGE_T* message ) { - BOOL status = FALSE; - if ( 0 == message->hdr.payloadLen ) { - status = TRUE; setDialinCheckInTimeStamp(); } }