Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -r387ea33c2e45705550905bc1a97e13db1cc95bf8 -rf37bfe2eaf910104d6edfcf46a9771871fbfbc69 --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 387ea33c2e45705550905bc1a97e13db1cc95bf8) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision f37bfe2eaf910104d6edfcf46a9771871fbfbc69) @@ -1,26 +1,28 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-2026 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Temperature.c * * @author (last) Vinayakam Mani -* @date (last) 23-Sep-2024 +* @date (last) 14-Apr-2026 * * @author (original) Vinayakam Mani -* @date (original) 23-Sep-2024 +* @date (original) 25-Sep-2024 * ***************************************************************************/ #include "BalancingChamber.h" -#include "ConductivitySensors.h" +#include "Conductivity.h" +#include "Flow.h" #include "Messaging.h" #include "MessageSupport.h" #include "OperationModes.h" #include "PersistentAlarm.h" +#include "Pressure.h" #include "Temperature.h" #include "Timers.h" #include "TaskPriority.h" @@ -33,12 +35,12 @@ */ // ********** private definitions ********** + #define ADC_FPGA_READ_DELAY 30U ///< Delay in ms before reading the ADC values from FPGA. #define TEMP_SENSORS_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Temperature sensors publish data time interval. #define TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Temperature sensors FPGA error timeout in milliseconds. -#define D4_TEMP_MOVING_AVG_NUM_OF_SAMPLES 50 ///< D4 temperature sensor moving average number of samples. -#define D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES 25 ///< D50 temperature sensor moving average number of samples ( 250ms filter ). +#define TEMP_MOVING_AVG_NUM_OF_SAMPLES 50 ///< temperature sensor moving average number of samples. #define DATA_PUBLISH_COUNTER_START_COUNT 30 ///< Data publish counter start count. #define DIAL_TEMP_MOVING_AVG_NUM_OF_SAMPLES 30 ///< Dialysate temperature sensors moving average number of samples. #define D28_D30_DATA_COLLECTION_TIME_MS ( 1 * MS_PER_SECOND ) ///< Dialysate temperature sensors data collection time in milliseconds. @@ -63,6 +65,15 @@ NUM_OF_TEMPSENSORS_EXEC_STATES, ///< Total number of exec states } TEMPSENSORS_EXEC_STATES_T; +/// Filter temperature readings record. +typedef struct +{ + F32 temperatureReadings[ TEMP_MOVING_AVG_NUM_OF_SAMPLES ]; ///< Holds temperature sample rolling average. + U32 temperatureReadingsIdx; ///< Index for next sample in rolling average array. + F32 temperatureReadingsTotal; ///< Rolling total - used to calc average. + U32 temperatureReadingsCount; ///< Number of samples in rolling average buffer +} FILTER_TEMPERATURE_READINGS_T; + /// Dialysate temperature moving average structure typedef struct { @@ -81,24 +92,16 @@ static BOOL tempDriftEventCheck; ///< Temperature sensor drift event boolean. static DIAL_TEMP_MOVING_AVG_DATA_T dialTempMovingAvgData[ NUM_OF_DIAL_TEMPS ]; ///< Dialysate temperature moving average data. -static F32 d4TempAvgC; ///< D4 temperature average in C. -static F32 d4TempRunningSumC; ///< D4 temperature running sum in C. -static F32 d4TempSamplesC[ D4_TEMP_MOVING_AVG_NUM_OF_SAMPLES ]; ///< D4 temperature samples array in C. -static U32 d4TempSamplesNextIndex; ///< D4 temperature sample next index number. -static U32 d4TempCount; ///< D4 Number of samples in average buffer. -static U32 tempDataColTimeInterval; ///< Temperature data collection time interval in milliseconds. -static U32 d4TempSampleIntervalCounter; ///< D4 temperature sensor sample collection timer counter. +static FILTER_TEMPERATURE_READINGS_T filteredTemperatureReadings[NUM_OF_TEMPERATURE_SENSORS]; ///< Filtered temperature reading for temperature sensors. +static OVERRIDE_F32_T filteredcurrentTemperatureReadings[ NUM_OF_TEMPERATURE_SENSORS ]; ///< filtered current temperature sensor temperature readings (overrideable). +static U32 tempDataCollectionTimeInterval; ///< Temperature data collection time interval in milliseconds. +static U32 TempSampleIntervalCounter; ///< temperature sensor sample collection timer counter. -static F32 d50TempAvgC; ///< D50 temperature average in C. -static F32 d50TempRunningSumC; ///< D50 temperature running sum in C. -static F32 d50TempSamplesC[ D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES ]; ///< D50 temperature samples array in C. -static U32 d50TempSamplesNextIndex; ///< D50 temperature sample next index number. -static U32 d50TempCount; ///< D50 Number of samples in average buffer. +static U32 ddTempDataPublicationTimerCounter; ///< DD Temperature sensors data publish timer counter. +static U32 fpTempDataPublicationTimerCounter; ///< FP Temperature sensors data publish timer counter. +static OVERRIDE_U32_T ddTempSensorsPublishInterval; ///< DD Temperature sensors publish time interval override. +static OVERRIDE_U32_T fpTempSensorsPublishInterval; ///< FP Temperature sensors publish time interval override. -static U32 dataPublicationTimerCounter; ///< Temperature sensors data publish timer counter. -static OVERRIDE_U32_T tempSensorsPublishInterval = { TEMP_SENSORS_DATA_PUBLISH_INTERVAL, - TEMP_SENSORS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Temperature sensors publish time interval override. - // ********** private function prototypes ********** static TEMPSENSORS_EXEC_STATES_T handleExecStart( void ); @@ -117,24 +120,42 @@ *************************************************************************/ void initTemperature( void ) { - startTime = 0; - tempSensorsExecState = TEMPSENSORS_EXEC_STATE_START; - dataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; - d4TempRunningSumC = 0.0F; - d4TempAvgC = 0.0F; - d4TempSamplesNextIndex = 0; - d4TempCount = 0; - d50TempRunningSumC = 0.0F; - d50TempAvgC = 0.0F; - d50TempSamplesNextIndex = 0; - d50TempCount = 0; - d4TempSampleIntervalCounter = 0; - tempDataColTimeInterval = 0; - tempDriftEventCheck = FALSE; + TEMPERATURE_SENSORS_T sensor; + startTime = 0; + tempSensorsExecState = TEMPSENSORS_EXEC_STATE_START; + ddTempDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + fpTempDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + + TempSampleIntervalCounter = 0; + tempDataCollectionTimeInterval = 0; + tempDriftEventCheck = FALSE; + + // Initialize override structures for each temperature sensor + for ( sensor = TEMPSENSORS_FIRST; sensor < NUM_OF_TEMPERATURE_SENSORS; sensor++ ) + { + filteredcurrentTemperatureReadings[ sensor ].data = 0.0F; + filteredcurrentTemperatureReadings[ sensor ].ovData = 0.0F; + filteredcurrentTemperatureReadings[ sensor ].ovInitData = 0.0F; + filteredcurrentTemperatureReadings[ sensor ].override = OVERRIDE_RESET; + + filteredTemperatureReadings[ sensor ].temperatureReadingsIdx = 0; + filteredTemperatureReadings[ sensor ].temperatureReadingsTotal = 0.0F; + filteredTemperatureReadings[ sensor ].temperatureReadingsCount = 0; + } + dialTempMovingAvgData[ DIAL_TEMP_D28 ].dialTempColHasTimerBeenSet = FALSE; dialTempMovingAvgData[ DIAL_TEMP_D30 ].dialTempColHasTimerBeenSet = FALSE; + ddTempSensorsPublishInterval.data = TEMP_SENSORS_DATA_PUBLISH_INTERVAL; + ddTempSensorsPublishInterval.ovData = TEMP_SENSORS_DATA_PUBLISH_INTERVAL; + ddTempSensorsPublishInterval.ovInitData = 0; + ddTempSensorsPublishInterval.override = OVERRIDE_RESET; + + fpTempSensorsPublishInterval.data = TEMP_SENSORS_DATA_PUBLISH_INTERVAL; + fpTempSensorsPublishInterval.ovData = TEMP_SENSORS_DATA_PUBLISH_INTERVAL; + fpTempSensorsPublishInterval.ovInitData = 0; + fpTempSensorsPublishInterval.override = OVERRIDE_RESET; // Initialize the temperature sensors initTemperatureSensors(); @@ -154,6 +175,7 @@ { SELF_TEST_STATUS_T result = SELF_TEST_STATUS_IN_PROGRESS; + //TODO: Uncomment below once Non volatile record is implemented. //BOOL calStatus = getNVRecord2Driver( GET_CAL_TEMP_SENSORS, (U08*)&tempSensorCalRecord, sizeof( DD_TEMP_SENSORS_CAL_RECORD_T ), // NUM_OF_CAL_DATA_TEMP_SENSORS, ALARM_ID_DD_TEMPERATURE_SENSORS_INVALID_CAL_RECORD ); BOOL calStatus = TRUE; @@ -224,7 +246,7 @@ * The handleExecStart function waits for a period of time and switches to * the state that reads the ADC values from FPGA. * @details \b Inputs: startTime - * @details \b Outputs: startTime, baroCoeffsWaitToRcvStartTime + * @details \b Outputs: startTime * @return the next state of the state machine *************************************************************************/ static TEMPSENSORS_EXEC_STATES_T handleExecStart( void ) @@ -239,7 +261,6 @@ else if ( TRUE == didTimeout( startTime, ADC_FPGA_READ_DELAY ) ) { startTime = 0; - setBaroSensorCoefficientReadStartTime(); state = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; } @@ -267,45 +288,37 @@ * @brief * The filterTemperatureReadings function adds a new temperature sensor * sample to the filters. - * @details \b Inputs: D4 and D50 Temperature + * @details \b Inputs: D4, D50,D78 and D99 Temperature * @details \b Outputs: d4TempSamplesC[], d4TempSamplesNextIndex, d4TempRunningSumC, * d4TempCount, d4TempAvgC, d50TempSamplesC, d50TempRunningSumC, d50TempSamplesNextIndex, - * d50TempCount, d50TempAvgC + * d50TempCount, d50TempAvgC, d99TempSamplesC, d99TempRunningSumC, d99TempSamplesNextIndex, + * d99TempCount, d99TempAvgC, * @return none *************************************************************************/ static void filterTemperatureReadings( void ) { - // Moving average sample collection interval varies based on the dialysate flow rate - if ( ++d4TempSampleIntervalCounter >= tempDataColTimeInterval ) + TEMPERATURE_SENSORS_T sensor; + F32 rawTemp = 0.0F; + + if ( ++TempSampleIntervalCounter >= tempDataCollectionTimeInterval ) { - // Filter D4 Temperature for AC heater - if ( d4TempCount >= D4_TEMP_MOVING_AVG_NUM_OF_SAMPLES ) + for ( sensor = TEMPSENSORS_FIRST; sensor < NUM_OF_TEMPERATURE_SENSORS; sensor++ ) { - d4TempRunningSumC -= d4TempSamplesC[ d4TempSamplesNextIndex ]; - } + rawTemp = getTemperatureValue ( sensor ); - F32 d4Temp = getTemperatureValue( D4_TEMP ); - d4TempSamplesC[ d4TempSamplesNextIndex ] = d4Temp; - d4TempRunningSumC += d4Temp; - d4TempSamplesNextIndex = INC_WRAP( d4TempSamplesNextIndex, 0, D4_TEMP_MOVING_AVG_NUM_OF_SAMPLES - 1 ); - d4TempCount = INC_CAP( d4TempCount, D4_TEMP_MOVING_AVG_NUM_OF_SAMPLES ); - d4TempAvgC = d4TempRunningSumC / (F32)d4TempCount; - d4TempSampleIntervalCounter = 0; + if ( filteredTemperatureReadings[ sensor ].temperatureReadingsCount >= TEMP_MOVING_AVG_NUM_OF_SAMPLES ) + { + filteredTemperatureReadings[ sensor ].temperatureReadingsTotal -= filteredTemperatureReadings[ sensor ].temperatureReadings[ filteredTemperatureReadings[ sensor ].temperatureReadingsIdx ]; + } + filteredTemperatureReadings[ sensor ].temperatureReadings[ filteredTemperatureReadings[ sensor ].temperatureReadingsIdx ] = rawTemp; + filteredTemperatureReadings[ sensor ].temperatureReadingsTotal += rawTemp; + filteredTemperatureReadings[ sensor ].temperatureReadingsIdx = INC_WRAP( filteredTemperatureReadings[ sensor ].temperatureReadingsIdx, 0, TEMP_MOVING_AVG_NUM_OF_SAMPLES - 1 ); + filteredTemperatureReadings[ sensor ].temperatureReadingsCount = INC_CAP( filteredTemperatureReadings[ sensor ].temperatureReadingsCount, TEMP_MOVING_AVG_NUM_OF_SAMPLES ); + filteredcurrentTemperatureReadings[ sensor ].data = filteredTemperatureReadings[ sensor ].temperatureReadingsTotal / (F32)filteredTemperatureReadings[ sensor ].temperatureReadingsCount; + } + TempSampleIntervalCounter = 0; } - // Filter D50 Temperature ( 250 ms filter ) for trimmer heater - if ( d50TempCount >= D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES ) - { - d50TempRunningSumC -= d50TempSamplesC[ d50TempSamplesNextIndex ]; - } - - F32 d50Temp = getTemperatureValue( D50_TEMP ); - d50TempSamplesC[ d50TempSamplesNextIndex ] = d50Temp; - d50TempRunningSumC += d50Temp; - d50TempSamplesNextIndex = INC_WRAP( d50TempSamplesNextIndex, 0, D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES - 1 ); - d50TempCount = INC_CAP( d50TempCount, D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES ); - d50TempAvgC = d50TempRunningSumC / (F32)d50TempCount; - // dailysate temperature moving average filterDialTemperatureReadings(); } @@ -321,6 +334,9 @@ static void filterDialTemperatureReadings( void ) { DIAL_TEMPERATURE_SENSORS_T i; + F32 temperatureC = 0.0F; + U32 currentIndex = 0; + F32 prevSampleToRemoveC = 0.0f; for ( i = DIAL_TEMP_FIRST; i < NUM_OF_DIAL_TEMPS; i++ ) { @@ -332,10 +348,19 @@ else if ( TRUE == didTimeout( dialTempMovingAvgData[ i ].dialTempDataColStartTimeMS, D28_D30_DATA_COLLECTION_TIME_MS ) ) { CONDUCTIVITY_SENSORS_T sensor = ( DIAL_TEMP_D28 == i ? D27_COND : D29_COND ); - F32 temperatureC = getConductivityTemperatureValue( sensor ); - U32 currentIndex = dialTempMovingAvgData[ i ].dialTempSamplesNextIndex; - F32 prevSampleToRemoveC = dialTempMovingAvgData[ i ].dialTempSamplesC[ currentIndex ]; + if ( getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_9_HW ) != TRUE ) + { + temperatureC = getConductivityTemperature( sensor ); + } + else + { + temperatureC = getTeensyConductivityTemperatureValue( sensor ); + } + + currentIndex = dialTempMovingAvgData[ i ].dialTempSamplesNextIndex; + prevSampleToRemoveC = dialTempMovingAvgData[ i ].dialTempSamplesC[ currentIndex ]; + dialTempMovingAvgData[ i ].dialTempDataColStartTimeMS = getMSTimerCount(); dialTempMovingAvgData[ i ].dialTempColHasTimerBeenSet = TRUE; dialTempMovingAvgData[ i ].dialTempSamplesC[ currentIndex ] = temperatureC; @@ -384,28 +409,29 @@ /*********************************************************************//** * @brief - * The getD4AverageTemperature function returns the average temperature - * for D4 temp sensor. - * @details \b Inputs: none + * The getFilteredTemperatureValue function gets the filtered current + * Temperature sensor temperature (in deg C) for a given sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: filteredcurrentTemperatureReadings * @details \b Outputs: none - * @return the D4 average temperature + * @param sensor ID of temperature sensor to get temperature reading for. + * @return The filtered current temperature sensor temperature (in deg C) of + * the given sensor. *************************************************************************/ -F32 getD4AverageTemperature( void ) +F32 getFilteredTemperatureValue( TEMPERATURE_SENSORS_T sensor ) { - return d4TempAvgC; -} + F32 temperature = 0.0F; -/*********************************************************************//** - * @brief - * The getD50AverageTemperature function returns the average temperature - * for D50 temp sensor. - * @details \b Inputs: none - * @details \b Outputs: none - * @return the D50 average temperature - *************************************************************************/ -F32 getD50AverageTemperature( void ) -{ - return d50TempAvgC; + if ( sensor < NUM_OF_TEMPERATURE_SENSORS ) + { + temperature = getF32OverrideValue( &filteredcurrentTemperatureReadings[ sensor ] ); + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_TEMPERATURE_SENSOR_SELECTED3, sensor ) + } + + return temperature; } /*********************************************************************//** @@ -421,46 +447,89 @@ { F32 period = (F32)SEC_PER_MIN / ( getTDDialysateFlowrate() / BAL_CHAMBER_FILL_VOLUME_ML ) ; - U32 sampleInterval = (U32)( ( period / (F32)D4_TEMP_MOVING_AVG_NUM_OF_SAMPLES ) * MS_PER_SECOND ); + U32 sampleInterval = (U32)( ( period / (F32)TEMP_MOVING_AVG_NUM_OF_SAMPLES ) * MS_PER_SECOND ); - tempDataColTimeInterval = (U32) ( sampleInterval / TASK_PRIORITY_INTERVAL ); + tempDataCollectionTimeInterval = (U32) ( sampleInterval / TASK_PRIORITY_INTERVAL ); } /*********************************************************************//** * @brief - * The publishTemperatureSensorsData function broadcasts the temperature - * sensors data at the publication interval. - * @details \b Inputs: dataPublicationTimerCounter and publish interval time. - * @details \b Outputs: dataPublicationTimerCounter - * @details \b Message \b Sent: MSG_ID_DD_TEMPERATURE_DATA publishes the temperature - * data in a periodic interval. + * The publishTemperatureSensorsData function broadcasts the + * temperature sensors data at the publication interval. + * @details \b Inputs: ddTempDataPublicationTimerCounter + * fpTempDataPublicationTimerCounter and publish interval time. + * @details \b Outputs: ddTempDataPublicationTimerCounter, fpTempDataPublicationTimerCounter + * @details \b Message \b Sent: MSG_ID_DD_TEMPERATURE_DATA, MSG_ID_FP_TEMPERATURE_DATA + * publishes the temperature data in a periodic interval. * @return none *************************************************************************/ static void publishTemperatureSensorsData( void ) { - if ( ++dataPublicationTimerCounter >= getU32OverrideValue( &tempSensorsPublishInterval ) ) + // publish DD temperature data on interval + if ( ++ddTempDataPublicationTimerCounter >= getU32OverrideValue( &ddTempSensorsPublishInterval ) ) { - TEMPERATURE_SENSORS_DATA_T data; + TEMPERATURE_SENSORS_DD_DATA_T data; data.d1Temp = getTemperatureValue( D1_TEMP ); - data.x6Temp = getTemperatureValue( X6_TEMP ); + data.d78Temp = getTemperatureValue( D78_TEMP ); data.d4Temp = getTemperatureValue( D4_TEMP ); data.d50Temp = getTemperatureValue( D50_TEMP ); + data.d99Temp = getTemperatureValue( D99_TEMP ); data.boardTemp = getTemperatureValue( BRD_TEMP ); - data.baroTemp = getTemperatureValue( BARO_TEMP ); - data.d16CondTemp = getConductivityTemperatureValue( D17_COND ); - data.d28CondTemp = getConductivityTemperatureValue( D27_COND ); - data.d30CondTemp = getConductivityTemperatureValue( D29_COND ); - data.d44CondTemp = getConductivityTemperatureValue( D43_COND ); - data.d75CondTemp = getConductivityTemperatureValue( D74_COND ); - data.d4AvgTemp = getD4AverageTemperature(); - data.d50AvgTemp = getD50AverageTemperature(); + + if ( getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_1_9_HW ) != TRUE ) + { + data.d16CondTemp = getConductivityTemperature( D17_COND ); + data.d28CondTemp = getConductivityTemperature( D27_COND ); + data.d30CondTemp = getConductivityTemperature( D29_COND ); + data.d44CondTemp = getConductivityTemperature( D43_COND ); + data.d75CondTemp = getConductivityTemperature( D74_COND ); + } + else + { + data.d16CondTemp = getTeensyConductivityTemperatureValue( D17_COND ); + data.d28CondTemp = getTeensyConductivityTemperatureValue( D27_COND ); + data.d30CondTemp = getTeensyConductivityTemperatureValue( D29_COND ); + data.d44CondTemp = getTeensyConductivityTemperatureValue( D43_COND ); + data.d75CondTemp = getConductivityTemperature( D74_COND ); + } + + data.d4AvgTemp = getFilteredTemperatureValue( D4_TEMP ); + data.d50AvgTemp = getFilteredTemperatureValue( D50_TEMP ); + data.d99AvgTemp = getFilteredTemperatureValue( D99_TEMP ); data.d28AvgTemp = dialTempMovingAvgData[ DIAL_TEMP_D28 ].dialTempAvgC; data.d30AvgTemp = dialTempMovingAvgData[ DIAL_TEMP_D30 ].dialTempAvgC; + data.d78AvgTemp = getFilteredTemperatureValue( D78_TEMP ); + data.d9PresTemp = getFilteredPressureSensorTemperature( D9_PRES ); + data.d66PresTemp = getFilteredPressureSensorTemperature( D66_PRES ); + data.d51PresTemp = getFilteredPressureSensorTemperature( D51_PRES ); + data.d18PresTemp = getFilteredPressureSensorTemperature( D18_PRES ); + data.d41PresTemp = getFilteredPressureSensorTemperature( D41_PRES ); + data.d87PresTemp = getFilteredPressureSensorTemperature( D87_PRES ); - broadcastData( MSG_ID_DD_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); - dataPublicationTimerCounter = 0; + broadcastData( MSG_ID_DD_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_DD_DATA_T ) ); + ddTempDataPublicationTimerCounter = 0; } + // publish FP temperature data on interval + if ( ++fpTempDataPublicationTimerCounter >= getU32OverrideValue( &fpTempSensorsPublishInterval ) ) + { + TEMPERATURE_SENSORS_FP_DATA_T data; + + data.m3Temp = getFilteredPressureSensorTemperature( M3_PRES ); + data.p8Temp = getFilteredPressureSensorTemperature( P8_PRES ); + data.p13Temp = getFilteredPressureSensorTemperature( P13_PRES ); + data.p17Temp = getFilteredPressureSensorTemperature( P17_PRES ); + data.p46Temp = getFilteredPressureSensorTemperature( P46_PRES ); + data.p10Temp = getFilteredConductivitySensorTemperature( P9_COND ); + data.p19Temp = getFilteredConductivitySensorTemperature( P18_COND ); + data.p7Temp = getFilteredFlowSensorTemperature( P7_FLOW ); + data.p16Temp = getFilteredFlowSensorTemperature( P16_FLOW ); + data.p7InternalTemp = getFlowInternalTemperature( P7_FLOW ); + data.p16InternalTemp = getFlowInternalTemperature( P16_FLOW ); + + broadcastData( MSG_ID_FP_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_FP_DATA_T ) ); + fpTempDataPublicationTimerCounter = 0; + } } @@ -471,20 +540,60 @@ /*********************************************************************//** * @brief - * The testTemperatureSensorsDataPublishIntervalOverride function overrides the - * temperature sensor data publish interval. + * The testDDTemperatureSensorsDataPublishIntervalOverride function + * overrides the DD temperature sensor data publish interval. * @details \b Inputs: none - * @details \b Outputs: tempSensorsPublishInterval + * @details \b Outputs: ddTempSensorsPublishInterval * @param Override message from Dialin which includes the interval - * (in ms) to override the temperature sensor data broadcast interval to. + * (in ms) to override the DD temperature sensor data broadcast interval to. * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testTemperatureSensorsDataPublishIntervalOverride( MESSAGE_T *message ) +BOOL testDDTemperatureSensorsDataPublishIntervalOverride( MESSAGE_T *message ) { - BOOL result = u32BroadcastIntervalOverride( message, &tempSensorsPublishInterval, TASK_PRIORITY_INTERVAL ); + BOOL result = u32BroadcastIntervalOverride( message, &ddTempSensorsPublishInterval, TASK_PRIORITY_INTERVAL ); return result; } +/*********************************************************************//** + * @brief + * The testDDTemperatureSensorFilteredReadingsOverride function overrides the + * filtered value of the specified DD temperature sensor with a given value. + * @details \b Inputs: none + * @details \b Outputs: filteredcurrentTemperatureReadings[] + * @param message Override message from Dialin which includes a sensor + * ID and override value of the temperature value for that sensor. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testDDTemperatureSensorFilteredReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + if ( payload.index <= NUM_OF_TEMPERATURE_SENSORS ) + { + result = f32ArrayOverride( message, &filteredcurrentTemperatureReadings[0], NUM_OF_TEMPERATURE_SENSORS - 1 ); + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testIOFPTemperatureSensorsDataPublishIntervalOverride function + * overrides the IOFP temperature sensors data publish interval. + * @details \b Inputs: none + * @details \b Outputs: fpTempSensorsPublishInterval + * @param Override message from Dialin which includes the interval + * (in ms) to override the IOFP temperature sensor data broadcast interval to. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testIOFPTemperatureSensorsDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &fpTempSensorsPublishInterval, TASK_PRIORITY_INTERVAL ); + + return result; +} + /**@}*/