Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -rce45405bd0094f54a599a1906e201622347fd15a -rd539db7e39e389c19cead52a49920b48a3280054 --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision ce45405bd0094f54a599a1906e201622347fd15a) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision d539db7e39e389c19cead52a49920b48a3280054) @@ -163,7 +163,7 @@ U32 rawIntensity[ BLD_ZERO_MVG_AVG_NUM_OF_SAMPLES ]; ///< Blood leak raw intensity array. U32 intensityRunningSum; ///< Blood leak intensity running sum for moving average. U32 rawIntensityNextIndex; ///< Blood leak raw intensity next index for moving average. - F32 intensityMovingAverage; ///< Blood leak intensity moving average. + OVERRIDE_F32_T intensityMovingAverage; ///< Blood leak intensity moving average. } BLOOD_LEAK_ZEROING_STATUS_T; // ********** private data ********** @@ -925,9 +925,10 @@ F32 driftMinFromTop = BLD_NOMINAL_INTENSITY - ( setPoint * BLD_MAX_INTENSITY_OUT_OF_RANGE ); F32 driftMaxFromTop = BLD_NOMINAL_INTENSITY - ( setPoint * BLD_MIN_INTENSITY_OUT_OF_RANGE ); BOOL isZeroingAllowed = didTimeout( bloodLeakZeroingStatus.lastZeroingStartTimeMS, BLD_ZERO_MIN_INTERVAL_MS ); + F32 intensityMvgAvg = getF32OverrideValue( &bloodLeakZeroingStatus.intensityMovingAverage ); - isZeroingNeeded &= ( bloodLeakZeroingStatus.intensityMovingAverage >= driftMinFromTop ? TRUE : FALSE ); - isZeroingNeeded &= ( bloodLeakZeroingStatus.intensityMovingAverage <= driftMaxFromTop ? TRUE : FALSE ); + isZeroingNeeded &= ( intensityMvgAvg >= driftMinFromTop ? TRUE : FALSE ); + isZeroingNeeded &= ( intensityMvgAvg <= driftMaxFromTop ? TRUE : FALSE ); if ( FALSE == isZeroingNeeded ) { @@ -1448,7 +1449,7 @@ data.bloodLeakSerialCommState = bloodLeakEmbModeSubstate; data.bloodLeakIntensity = getEmbModeInfoValue( I_EMB_MODE_CMD ); data.bloodLeakDetect = getEmbModeInfoValue( V_EMB_MODE_CMD ); - data.bloodLeakIntensityMovingAvg = bloodLeakZeroingStatus.intensityMovingAverage; + data.bloodLeakIntensityMovingAvg = getF32OverrideValue( &bloodLeakZeroingStatus.intensityMovingAverage ); bloodLeakDataPublicationCounter = 0; @@ -1765,10 +1766,10 @@ U32 indexValue = bloodLeakZeroingStatus.rawIntensity[ index ]; U32 newIntensity = getEmbModeInfoValue( I_EMB_MODE_CMD ); - bloodLeakZeroingStatus.rawIntensity[ index ] = newIntensity; - bloodLeakZeroingStatus.intensityRunningSum = bloodLeakZeroingStatus.intensityRunningSum - indexValue + newIntensity; - bloodLeakZeroingStatus.intensityMovingAverage = (F32)bloodLeakZeroingStatus.intensityRunningSum / (F32)BLD_ZERO_MVG_AVG_NUM_OF_SAMPLES; - bloodLeakZeroingStatus.rawIntensityNextIndex = INC_WRAP( index, 0, BLD_ZERO_MVG_AVG_NUM_OF_SAMPLES - 1 ); + bloodLeakZeroingStatus.rawIntensity[ index ] = newIntensity; + bloodLeakZeroingStatus.intensityRunningSum = bloodLeakZeroingStatus.intensityRunningSum - indexValue + newIntensity; + bloodLeakZeroingStatus.intensityMovingAverage.data = (F32)bloodLeakZeroingStatus.intensityRunningSum / (F32)BLD_ZERO_MVG_AVG_NUM_OF_SAMPLES; + bloodLeakZeroingStatus.rawIntensityNextIndex = INC_WRAP( index, 0, BLD_ZERO_MVG_AVG_NUM_OF_SAMPLES - 1 ); resetEmbModeCmdRespConsumedFlag( I_EMB_MODE_CMD ); } @@ -2029,7 +2030,6 @@ * @details Outputs: bloodLeakEmbModeIntensityOverride, * bloodLeakEmbModeDetectOverride * @param command the command to reset its override value - * @param value the value that the command's value override is reset * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testResetBloodLeakEmbeddedModeInfoOverride( U08 command ) @@ -2061,4 +2061,49 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetBloodLeakIntensityMovingAverageOverride function overrides the + * blood leak intensity moving average. + * @details Inputs: none + * @details Outputs: bloodLeakZeroingStatus + * @param value intensity moving average + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetBloodLeakIntensityMovingAverageOverride( F32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + bloodLeakZeroingStatus.intensityMovingAverage.ovData = value; + bloodLeakZeroingStatus.intensityMovingAverage.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBloodLeakIntensityMovingAverageOverride function reset the + * override of the blood leak intensity moving average. + * @details Inputs: none + * @details Outputs: bloodLeakZeroingStatus + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testResetBloodLeakIntensityMovingAverageOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + bloodLeakZeroingStatus.intensityMovingAverage.ovData = bloodLeakZeroingStatus.intensityMovingAverage.ovInitData; + bloodLeakZeroingStatus.intensityMovingAverage.override = OVERRIDE_RESET; + } + + return result; +} + /**@}*/ Index: firmware/App/Controllers/BloodLeak.h =================================================================== diff -u -rce45405bd0094f54a599a1906e201622347fd15a -rd539db7e39e389c19cead52a49920b48a3280054 --- firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision ce45405bd0094f54a599a1906e201622347fd15a) +++ firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision d539db7e39e389c19cead52a49920b48a3280054) @@ -82,6 +82,9 @@ BOOL testSetBloodLeakEmbeddedModeInfoOverride( U08 command, U32 value ); BOOL testResetBloodLeakEmbeddedModeInfoOverride( U08 command ); +BOOL testSetBloodLeakIntensityMovingAverageOverride( F32 value ); +BOOL testResetBloodLeakIntensityMovingAverageOverride( void ); + /**@}*/ #endif Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rce45405bd0094f54a599a1906e201622347fd15a -rd539db7e39e389c19cead52a49920b48a3280054 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision ce45405bd0094f54a599a1906e201622347fd15a) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d539db7e39e389c19cead52a49920b48a3280054) @@ -1848,6 +1848,10 @@ handleBloodLeakEmbModeInfoValuesOverride( message ); break; + case MSG_ID_HD_BLOOD_LEAK_INTENSITY_MVG_AVERAGE_OVERRIDE: + handleBloodLeakIntensityMovingAverageOverride( message ); + break; + // The default cannot be reached in VectorCAST since the cases are run in a for loop default: // Unrecognized message ID received - ignore Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rce45405bd0094f54a599a1906e201622347fd15a -rd539db7e39e389c19cead52a49920b48a3280054 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision ce45405bd0094f54a599a1906e201622347fd15a) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d539db7e39e389c19cead52a49920b48a3280054) @@ -8927,4 +8927,36 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleBloodLeakIntensityMovingAverageOverride function handles a + * request to override the blood leak intensity moving average. + * @details Inputs: none + * @details Outputs: message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleBloodLeakIntensityMovingAverageOverride( 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 = testSetBloodLeakIntensityMovingAverageOverride( payload.state.f32 ); + } + else + { + result = testResetBloodLeakIntensityMovingAverageOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rce45405bd0094f54a599a1906e201622347fd15a -rd539db7e39e389c19cead52a49920b48a3280054 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision ce45405bd0094f54a599a1906e201622347fd15a) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d539db7e39e389c19cead52a49920b48a3280054) @@ -1036,6 +1036,9 @@ // MSG_ID_HD_BLOOD_LEAK_EMB_MODE_INFO_VALUES_OVERRIDE void handleBloodLeakEmbModeInfoValuesOverride( MESSAGE_T* message ); +// MSG_ID_HD_BLOOD_LEAK_INTENSITY_MVG_AVERAGE_OVERRIDE +void handleBloodLeakIntensityMovingAverageOverride( MESSAGE_T* message ); + /**@}*/ #endif