/************************************************************************** * * Copyright (c) 2024-2024 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) Sean Nash * @date (last) 09-Nov-2024 * * @author (original) Sean Nash * @date (original) 09-Nov-2024 * ***************************************************************************/ #include "Conductivity.h" #include "Flow.h" #include "Messaging.h" #include "MessageSupport.h" #include "Pressure.h" #include "Temperature.h" #include "TaskPriority.h" #include "Utilities.h" /** * @addtogroup Temperature * @{ */ // ********** private definitions ********** #define TEMP_SENSORS_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Temperature sensors publish data time interval. #define DATA_PUBLISH_COUNTER_START_COUNT 30 ///< Data publish counter start count. // ********** private data ********** static OVERRIDE_U32_T tempSensorsPublishInterval; ///< Temperature sensor data publication counter. static U32 dataPublicationTimerCounter; ///< Timer counter used to schedule temp sensor data publication to CAN bus. // ********** private function prototypes ********** static void publishTemperatureSensorsData( void ); /*********************************************************************//** * @brief * The initTemperature function initializes the temperature unit. * @details \b Inputs: none * @details \b Outputs: temperature unit variables initialized. * @return none *************************************************************************/ void initTemperature( void ) { dataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; tempSensorsPublishInterval.data = TEMP_SENSORS_DATA_PUBLISH_INTERVAL; tempSensorsPublishInterval.ovData = TEMP_SENSORS_DATA_PUBLISH_INTERVAL; tempSensorsPublishInterval.ovInitData = 0; tempSensorsPublishInterval.override = OVERRIDE_RESET; } /*********************************************************************//** * @brief * The execTemperatureSensors function executes the temperature sensors' * state machine. * @details \b Inputs: none * @details \b Outputs: none * @return none *************************************************************************/ void execTemperatureSensors( void ) { publishTemperatureSensorsData(); } /*********************************************************************//** * @brief * The publishTemperatureSensorsData function broadcasts the temperature * sensors data at the publication interval. * @details \b Inputs: dataPublicationTimerCounter, tempSensorsPublishInterval * @details \b Outputs: dataPublicationTimerCounter * @details \b Message \b Sent: MSG_ID_FP_TEMPERATURE_DATA publishes the temperature * data in a periodic interval. * @return none *************************************************************************/ static void publishTemperatureSensorsData( void ) { if ( ++dataPublicationTimerCounter >= getU32OverrideValue( &tempSensorsPublishInterval ) ) { TEMPERATURE_SENSORS_DATA_T data; data.p10Temp = getFilteredConductivitySensorTemperature( P9_COND ); data.p19Temp = getFilteredConductivitySensorTemperature( P18_COND ); data.m1Temp = getFilteredPressureSensorTemperature( M1_PRES ); data.m3Temp = getFilteredPressureSensorTemperature( M3_PRES ); data.p8Temp = getFilteredPressureSensorTemperature( P8_PRES ); data.p13Temp = getFilteredPressureSensorTemperature( P13_PRES ); data.p17Temp = getFilteredPressureSensorTemperature( P17_PRES ); data.x1Temp = getFilteredPressureSensorTemperature( X1_PRES ); data.x2Temp = getFilteredPressureSensorTemperature( X2_PRES ); data.x3Temp = getFilteredPressureSensorTemperature( X3_PRES ); data.x4Temp = getFilteredPressureSensorTemperature( X4_PRES ); data.p7Temp = getFilteredFlowSensorTemperature( P7_FLOW ); data.p16Temp = getFilteredFlowSensorTemperature( P16_FLOW ); broadcastData( MSG_ID_FP_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); dataPublicationTimerCounter = 0; } } /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ /*********************************************************************//** * @brief * The testTemperatureSensorsDataPublishIntervalOverride function overrides the * temperature sensors data publish interval. * @details \b Inputs: none * @details \b Outputs: tempSensorsPublishInterval * @param Override message from Dialin which includes the interval * (in ms) to override the temperature sensor data broadcast interval to. * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testTemperatureSensorsDataPublishIntervalOverride( MESSAGE_T *message ) { BOOL result = u32BroadcastIntervalOverride( message, &tempSensorsPublishInterval, TASK_PRIORITY_INTERVAL ); return result; } /**@}*/