/************************************************************************** * * Copyright (c) 2025-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 ConductivityTeensy.h * * @author (last) Arpita Srivastava * @date (last) 3-Nov-2025 * * @author (original) Arpita Srivastava * @date (original) 3-Nov-2025 * ***************************************************************************/ #ifndef _CONDUCTIVITY_TEENSY_H_ #define _CONDUCTIVITY_TEENSY_H_ #include "DDCommon.h" // ********** 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 typedef enum TeensySensorIndex { TEENSY_SENSOR_0 = 0, ///< Maps to D17_COND TEENSY_SENSOR_1, ///< Maps to D27_COND TEENSY_SENSOR_2, ///< Maps to D43_COND TEENSY_SENSOR_3, ///< Maps to D74_COND TEENSY_SENSOR_4, ///< Maps to P9_COND TEENSY_SENSOR_5, ///< Maps to P18_COND MAX_TEENSY_SENSOR ///< Total number of mapped sensors } TEENSY_SENSOR_INDEX_T; typedef enum TeensyCmdIndex { TEENSY_CMD_INIT_SENSOR = 0, ///< Maps to command "a" TEENSY_CMD_GET_INIT_STATUS, ///< Maps to command "l" TEENSY_CMD_UPDATE_EEPROM_DATA, ///< Maps to command "save" TEENSY_CMD_GET_EEPROM_DATA, ///< Maps to command "e" TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS, ///< Maps to command "cfg" TEENSY_CMD_GET_MEASUREMENT_SETTINGS, ///< Maps to command "k" TEENSY_CMD_GET_MEASUREMENT, ///< Maps to command "m" TEENSY_CMD_STOP_MEASUREMENT, ///< Maps to command "n" TEENSY_CMD_GET_ALL_MEASUREMENTS, ///< Maps to command "g" TEENSY_CMD_SELECT_SENSOR, ///< Maps to command "j" TEENSY_CMD_GET_SINGLE_MEASUREMENT, ///< Maps to command "h" MAX_NUM_OF_TEENSY_CMDS ///< Total number of commands } TEENSY_CMD_INDEX_T; /// 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_NONE = 0, CONDUCTIVITY_PARSE_ERROR_NULL_BUFFER, CONDUCTIVITY_PARSE_ERROR_INVALID_LENGTH, CONDUCTIVITY_PARSE_ERROR_INVALID_SENSOR_NUM, CONDUCTIVITY_PARSE_SUCCESS, } CONDUCTIVITY_PARSE_STATUS; /// Enumeration of Conductivity Communication states. typedef enum Conductivity_Comm_States { COND_COMM_STATE_IDLE = 0, COND_COMM_STATE_TX, COND_COMM_STATE_RX, COND_COMM_STATE_FAILED, NUM_OF_COND_COMM_STATES } CONDUCTIVITY_COMM_STATE_T; /// Update EEPROM status typedef enum Conductivity_Update_Eeprom_Status { COND_UPDATE_EEPROM_STATUS_UNITIALIZED = 0, ///< The initialization process has not started. COND_UPDATE_EEPROMSTATUS_IN_PROGRESS, ///< The initialization process has started. COND_UPDATE_EEPROM_STATUS_INITIALIZED, ///< Initialization process completed and all the sensors were initialized successfully. COND_UPDATE_EEPROM_STATUS_FAILED ///< Initialization process completed but one or more sensor was not initialized properly. }CONDUCTIVITY_UPDATE_EEPROM_STATUS_T; // Update Measurement Settings Status typedef enum Update_mst_Status { COND_MST_STATUS_ERR_UNRECOGNIZED_PARAM = 0, // Invalid parameter was passed with the command COND_MST_STATUS_ERR_UPDATED_TO_DEFAULT_TIA, // Invalid value of "rtia" was passed with the command. So it was updated to its default value. COND_MST_STATUS_ERR_UPDATED_TO_DEFAULT_PGA, // Invalid value of "pga" was passed with the command. So it was updated to its default value. COND_MST_STATUS_ERR_UPDATED_TO_DEFAULT_DFT_NUM, // Invalid value of "dftnum" was passed with the command. So it was updated to its default value. COND_MST_STATUS_ERR_UPDATED_TO_DEFAULT_AVG_NUM, // Invalid value of "avgnum" was passed with the command. So it was updated to its default value. COND_MST_STATUS_SUCCESS }CONDUCTIVITY_UPDATE_MST_STATUS_T;; typedef struct { F64 A0; F64 A1; F64 B0; F64 B1; F64 B2; F64 B3; }CONDUCTIVITY_COEFFICIENTS_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) typedef struct { F64 Conductivity; F64 Temperature; }CONDUCTIVITY_CALCULATED_MEASUREMENTS_T; typedef struct { TEENSY_CMD_INDEX_T cmdIdx; U08* teensyCMD; U32 rxSize; } CONDUCTIVITY_CMD_DATA_T; // ********** public function prototypes ********** void initCondTeensy( void ); void execConductivityTeensy( void ); void signalConductivityReceiptCompleted( void ); void signalConductivityTransmitCompleted( void ); void addToCmdQ(U08 teensyCmd); F64 getImpedanceValue( U32 sensorNum ); F64 getRTDValue( U32 sensorNum ); #endif /* _CONDUCTIVITY_TEENSY_H_ */