Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -rd539db7e39e389c19cead52a49920b48a3280054 -rf487bb5f87d2e09a94f0a609552f1c93d1efb684 --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision d539db7e39e389c19cead52a49920b48a3280054) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision f487bb5f87d2e09a94f0a609552f1c93d1efb684) @@ -164,6 +164,7 @@ U32 intensityRunningSum; ///< Blood leak intensity running sum for moving average. U32 rawIntensityNextIndex; ///< Blood leak raw intensity next index for moving average. OVERRIDE_F32_T intensityMovingAverage; ///< Blood leak intensity moving average. + OVERRIDE_U32_T zeroingIntervalTimeMS; ///< Blood leak zeroing interval time in milliseconds. } BLOOD_LEAK_ZEROING_STATUS_T; // ********** private data ********** @@ -303,6 +304,11 @@ // Initialize the blood leak zeroing sequence status structure memset( &bloodLeakZeroingStatus, 0x0, sizeof( BLOOD_LEAK_ZEROING_STATUS_T ) ); + bloodLeakZeroingStatus.zeroingIntervalTimeMS.data = BLD_ZERO_MIN_INTERVAL_MS; + bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovInitData = BLD_ZERO_MIN_INTERVAL_MS; + bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovData = 0; + bloodLeakZeroingStatus.zeroingIntervalTimeMS.override = 0; + // Enqueue the commands to set the embedded mode and request the set point of the blood leak sensor enqueueEmbModeCmd( CS_EMB_MODE_CMD ); enqueueEmbModeCmd( D_EMB_MODE_CMD ); @@ -924,7 +930,8 @@ U32 setPoint = bloodLeakEmbModeCmd[ D_EMB_MODE_CMD ].commandResp; 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 ); + U32 zeroingIntervalMS = getU32OverrideValue( &bloodLeakZeroingStatus.zeroingIntervalTimeMS ); + BOOL isZeroingAllowed = didTimeout( bloodLeakZeroingStatus.lastZeroingStartTimeMS, zeroingIntervalMS ); F32 intensityMvgAvg = getF32OverrideValue( &bloodLeakZeroingStatus.intensityMovingAverage ); isZeroingNeeded &= ( intensityMvgAvg >= driftMinFromTop ? TRUE : FALSE ); @@ -2086,7 +2093,7 @@ /*********************************************************************//** * @brief - * The testResetBloodLeakIntensityMovingAverageOverride function reset the + * The testResetBloodLeakIntensityMovingAverageOverride function resets the * override of the blood leak intensity moving average. * @details Inputs: none * @details Outputs: bloodLeakZeroingStatus @@ -2106,4 +2113,49 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetBloodLeakZeroingIntervalInMinsOverride function overrides the + * blood leak zeroing interval in minutes. + * @details Inputs: none + * @details Outputs: bloodLeakZeroingStatus + * @param value zeroing interval in minutes + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetBloodLeakZeroingIntervalInMinsOverride( U32 valueMins ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovData = valueMins; + bloodLeakZeroingStatus.zeroingIntervalTimeMS.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBloodLeakZeroingIntervalInMinsOverride function resets the + * override of the blood leak zeroing interval + * @details Inputs: none + * @details Outputs: bloodLeakZeroingStatus + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testResetBloodLeakZeroingIntervalInMinsOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovData = bloodLeakZeroingStatus.zeroingIntervalTimeMS.ovInitData; + bloodLeakZeroingStatus.zeroingIntervalTimeMS.override = OVERRIDE_RESET; + } + + return result; +} + /**@}*/ Index: firmware/App/Controllers/BloodLeak.h =================================================================== diff -u -rd539db7e39e389c19cead52a49920b48a3280054 -rf487bb5f87d2e09a94f0a609552f1c93d1efb684 --- firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision d539db7e39e389c19cead52a49920b48a3280054) +++ firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision f487bb5f87d2e09a94f0a609552f1c93d1efb684) @@ -85,6 +85,9 @@ BOOL testSetBloodLeakIntensityMovingAverageOverride( F32 value ); BOOL testResetBloodLeakIntensityMovingAverageOverride( void ); +BOOL testSetBloodLeakZeroingIntervalInMinsOverride( U32 valueMins ); +BOOL testResetBloodLeakZeroingIntervalInMinsOverride( void ); + /**@}*/ #endif Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rd539db7e39e389c19cead52a49920b48a3280054 -rf487bb5f87d2e09a94f0a609552f1c93d1efb684 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d539db7e39e389c19cead52a49920b48a3280054) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision f487bb5f87d2e09a94f0a609552f1c93d1efb684) @@ -1852,6 +1852,10 @@ handleBloodLeakIntensityMovingAverageOverride( message ); break; + case MSG_ID_HD_BLOOD_LEAK_ZEROING_INTERVAL_IN_MINS_OVERRIDE: + handleBloodLeakZeroingIntervalInMinutesOverride( 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 -rd539db7e39e389c19cead52a49920b48a3280054 -rf487bb5f87d2e09a94f0a609552f1c93d1efb684 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d539db7e39e389c19cead52a49920b48a3280054) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision f487bb5f87d2e09a94f0a609552f1c93d1efb684) @@ -8959,4 +8959,36 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleBloodLeakZeroingIntervalInMinutesOverride function handles a + * request to override the blood leak zeroing interval in minutes. + * @details Inputs: none + * @details Outputs: message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleBloodLeakZeroingIntervalInMinutesOverride( 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 = testSetBloodLeakZeroingIntervalInMinsOverride( payload.state.u32 ); + } + else + { + result = testResetBloodLeakZeroingIntervalInMinsOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rd539db7e39e389c19cead52a49920b48a3280054 -rf487bb5f87d2e09a94f0a609552f1c93d1efb684 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d539db7e39e389c19cead52a49920b48a3280054) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision f487bb5f87d2e09a94f0a609552f1c93d1efb684) @@ -1039,6 +1039,9 @@ // MSG_ID_HD_BLOOD_LEAK_INTENSITY_MVG_AVERAGE_OVERRIDE void handleBloodLeakIntensityMovingAverageOverride( MESSAGE_T* message ); +// MSG_ID_HD_BLOOD_LEAK_ZEROING_INTERVAL_IN_MINS_OVERRIDE +void handleBloodLeakZeroingIntervalInMinutesOverride( MESSAGE_T* message ); + /**@}*/ #endif