/************************************************************************** * * 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 ConductivitySensors.h * * @author (last) Vinayakam Mani * @date (last) 10-Sep-2024 * * @author (original) Vinayakam Mani * @date (original) 10-Sep-2024 * ***************************************************************************/ #ifndef __CONDUCTIVITY_SENSORS_H__ #define __CONDUCTIVITY_SENSORS_H__ #include "DDCommon.h" /** * @defgroup ConductivitySensors ConductivitySensors * @brief Conductivity Sensors monitor module. Monitors and filters conductivity sensor readings. * The module uses AD5941 - high precision, low power analog front ends(AFEs) for conductivity measurement * for D17,D27, D29, D43, D74, P9 and P18 * * Conductivity Sensor Module * Diality P/N: TBD * Manufacturer: TBD * Manufacture P/N: TBD * * @addtogroup ConductivitySensors * @{ */ // ********** public definitions ********** #define DOUBLE_COUNT 8 ///< Number of double values in Teensy EEPROM data #define FLOAT_COUNT ((128 - (DOUBLE_COUNT * 8)) / 4) ///< Number of float values in Teensy EEPROM data #define MAX_CONDUCTIVITY_SENSOR 6 /// Enumeration of conductivity sensors. typedef enum ConductivitySensors { D17_COND = 0, ///< Bicarb only conductivity sensor - 1 FIRST_DD_COND_SENSOR = D17_COND, ///< First conductivity sensor D27_COND, ///< Acid and Bicarb mix conductivity sensor - 1 D29_COND, ///< Acid and Bicarb mix conductivity sensor - 2 D43_COND, ///< Spent dialysate conductivity sensor D74_COND, ///< Bicarb only conductivity sensor - 2 LAST_DD_COND_SENSOR = D74_COND, ///< Last conductivity sensor P9_COND, ///< Inlet water conductivity sensor FIRST_FP_COND_SENSOR = P9_COND, ///< First FP conductivity sensor P18_COND, ///< RO outlet water conductivity sensor LAST_FP_COND_SENSOR = P18_COND, ///< Last FP conductivity sensor NUM_OF_CONDUCTIVITY_SENSORS ///< Number of conductivity sensors } CONDUCTIVITY_SENSORS_T; /// Structure to receive Sensor Measurement data from Teensy #pragma pack(push, 1) typedef struct { U32 sensorNum; ///< Conductivity Sensor number i.e unit 1 to 6. F32 impFreq; ///< Impedance Frequency U32 impDataPoints; ///< Impedance Data Points. Hard coded to 1 F32 impRzMag; ///< Value of medianMag F32 impRzPhase; ///< Value of medianPhase F32 rtdFreq; ///< RTD Frequency. Hard coded to 0.0 U32 rtdDataPoints; ///< Impedance Data Points. Hard coded to 1 F32 rtdRzMag; ///< Value of rtd_resistance F32 rtdRzPhase; ///< RTD Rz Phase. Hard coded to 0.0 } CONDUCTIVITY_SENSOR_DATA_T; #pragma pack(pop) /// Structure to receive EEPROM data from Teensy. These are coefficient values to calculate conductivity and temperature. #pragma pack(push, 1) typedef struct { F64 doubleValue[DOUBLE_COUNT]; ///< Double Values stored in the EEPROM F32 floatValue[FLOAT_COUNT]; ///< Float Values stored in the EEPROM } CONDUCTIVITY_EEPROM_DATA_T; #pragma pack(pop) /// Structure to receive conductivity measurement settings from Teensy #pragma pack(push, 1) typedef struct { F32 SinFreq; F32 DacVoltPP; F32 BiasVolt; U32 HstiaRtiaSel; U32 AdcPgaGain; U32 DftNum; U32 ADCAvgNum; } CONDUCTIVITY_MEASUREMENT_SETTINGS_T; #pragma pack(pop) /// Initialization status of all the sensors connected to Teensy typedef enum Conductivity_Init_Status { CONDUCTIVITY_INIT_STATUS_UNITIALIZED = 0, ///< The initialization process has not started. CONDUCTIVITY_INIT_STATUS_IN_PROGRESS, ///< The initialization process has started. CONDUCTIVITY_INIT_STATUS_INITIALIZED, ///< Initialization process completed and all the sensors were initialized successfully. CONDUCTIVITY_INIT_STATUS_FAILED ///< Initialization process completed but one or more sensor was not initialized properly. }CONDUCTIVITY_INIT_STATUS_T; typedef enum Conductivity_Parse_Status { CONDUCTIVITY_PARSE_SUCCESS = 0, CONDUCTIVITY_PARSE_ERROR_NULL_BUFFER, CONDUCTIVITY_PARSE_ERROR_INVALID_LENGTH, CONDUCTIVITY_PARSE_ERROR_INVALID_SENSOR_NUM } CONDUCTIVITY_PARSE_STATUS; // ********** public function prototypes ********** void initConductivitySensors( void ); void readConductivitySensors( void ); F32 getConductivityValue( CONDUCTIVITY_SENSORS_T sensor ); F32 getConductivityTemperatureValue( CONDUCTIVITY_SENSORS_T sensor ); U32 getConductivitySensorReadCount( CONDUCTIVITY_SENSORS_T sensor ); U32 getConductivitySensorErrorCount( CONDUCTIVITY_SENSORS_T sensor ); void handleConductivitySensorsReset( void ); void handleConductivitySensorsInitProcedure( void ); void execConductivitySensorWrite( void ); void execConductivitySensorRead( void ); void requestConductivitySensorReset( CONDUCTIVITY_SENSORS_T sensor ); void setConductivitySensorInitEnable( CONDUCTIVITY_SENSORS_T sensor ); void conductivitySensorWriteRequest( CONDUCTIVITY_SENSORS_T sensor, U16 writeAddr, U32 data ); void conductivitySensorReadRequest( CONDUCTIVITY_SENSORS_T sensor, U16 readAddr ); U32 conductivitySensorReadData( CONDUCTIVITY_SENSORS_T sensor ); BOOL testDDConductivitySensorReadingsOverride( MESSAGE_T *message ); BOOL testDDConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ); BOOL testDDConductivitySensorReadCounterOverride( MESSAGE_T *message ); BOOL testDDConductivitySensorErrorCounterOverride( MESSAGE_T *message ); BOOL testFPConductivitySensorReadingsOverride( MESSAGE_T *message ); BOOL testFPConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ); BOOL testFPConductivitySensorReadCounterOverride( MESSAGE_T *message ); BOOL testFPConductivitySensorErrorCounterOverride( MESSAGE_T *message ); /**@}*/ #endif