/************************************************************************** * * 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 Conductivity.c * * @author (last) Vinayakam Mani * @date (last) 10-Sep-2024 * * @author (original) Vinayakam Mani * @date (original) 10-Sep-2024 * ***************************************************************************/ #include // Used for calculating the polynomial calibration equation. #include // For memcpy #include "Conductivity.h" #include "MessageSupport.h" #include "Messaging.h" #include "OperationModes.h" #include "TaskPriority.h" #include "Utilities.h" /** * @addtogroup Conductivity * @{ */ // ********** private definitions ********** #define COND_SENSOR_REPORT_PERIOD ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Broadcast conductivity values message every second. #define DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. // ********** private data ********** static U32 conductivityPublishTimerCounter; static OVERRIDE_U32_T conductivityDataPublishInterval = { COND_SENSOR_REPORT_PERIOD, COND_SENSOR_REPORT_PERIOD, 0, 0 }; ///< Conductivity sensors publish time interval override. // ********** private function prototypes ********** static void publishConductivitySensorsData( void ); /*********************************************************************//** * @brief * The initConductivity function initializes the ConductivitySensors module. * @details \b Inputs: none * @details \b Outputs: Conductivity unit variables initialized * @return none *************************************************************************/ void initConductivity( void ) { conductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; initConductivitySensors(); } /*********************************************************************//** * @brief * The execConductivity function gets conductivity sensors' latest * readings from FPGA and publishes them over CAN. * @details \b Inputs: none * @details \b Outputs: Conductivity sensor latest reading is updated and * published. * @return none *************************************************************************/ void execConductivity( void ) { //read conductivity sensors raw value readConductivitySensors(); //control conductivity sensor // TODO : need more clarity on why and when to execute following control. #if 0 handleConductivitySensorsReset(); handleConductivitySensorsInitProcedure(); execConductivitySensorWrite(); execConductivitySensorRead(); #endif // publish conductivity sensors publishConductivitySensorsData(); } /*********************************************************************//** * @brief * The publishConductivitySensorsData function publishes DD conductivity data * at a set interval. * @details \b Inputs: conductivityPublishTimerCounter * @details \b Outputs: conductivityPublishTimerCounter * @details \b Message \b Sent: MSG_ID_DD_CONDUCTIVITY_DATA to publish conductivity data. * @return none *************************************************************************/ static void publishConductivitySensorsData( void ) { // publish pressure/occlusion data on interval if ( ++conductivityPublishTimerCounter >= getU32OverrideValue( &conductivityDataPublishInterval ) ) { CONDUCTIVITY_DATA_T data; data.d17Cond = getConductivityValue( D17_COND ); data.d27Cond = getConductivityValue( D27_COND ); data.d29Cond = getConductivityValue( D29_COND ); data.d43Cond = getConductivityValue( D43_COND ); data.d74Cond = getConductivityValue( D74_COND ); conductivityPublishTimerCounter = 0; broadcastData( MSG_ID_DD_CONDUCTIVITY_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( CONDUCTIVITY_DATA_T ) ); } } /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ /*********************************************************************//** * @brief * The testConductivitySensorDataPublishIntervalOverride function overrides the * conductivity sensor data publish interval. * @details \b Inputs: none * @details \b Outputs: conductivityDataPublishInterval * @param message Override message from Dialin which includes the value * that override valves states publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ) { BOOL result = u32BroadcastIntervalOverride( message, &conductivityDataPublishInterval, TASK_PRIORITY_INTERVAL ); return result; } /**@}*/