/************************************************************************** * * 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_SUCCESS = 0, CONDUCTIVITY_PARSE_ERROR_NULL_BUFFER, CONDUCTIVITY_PARSE_ERROR_INVALID_LENGTH, CONDUCTIVITY_PARSE_ERROR_INVALID_SENSOR_NUM } CONDUCTIVITY_PARSE_STATUS; /// Enumeration of FPGA states. typedef enum Conductivity_Comm_States { COND_COMM_STATE_IDLE = 0, COND_COMM_STATE_SEND_CMD, COND_COMM_STATE_RCV_RSPNS, NUM_OF_COND_COMM_STATES } CONDUCTIVITY_COMM_STATE_T; typedef enum Conductivity_TX_States { COND_COMM_STATE_SEND_CMD_INIT_SENSOR = 0, COND_COMM_STATE_SEND_CMD_GET_INIT_STATUS, COND_COMM_STATE_SEND_CMD_UPDATE_EEPROM_DATA, COND_COMM_STATE_SEND_CMD_GET_EEPROM_DATA, COND_COMM_STATE_SEND_CMD_UPDATE_MEASUREMENT_SETTINGS, COND_COMM_STATE_SEND_CMD_GET_MEASUREMENT_SETTINGS, COND_COMM_STATE_SEND_CMD_GET_MEASUREMENT, COND_COMM_STATE_SEND_CMD_STOP_MEASUREMENT, COND_COMM_STATE_SEND_CMD_GET_ALL_MEASUREMENTS, COND_COMM_STATE_SEND_CMD_SELECT_SENSOR, COND_COMM_STATE_SEND_CMD_GET_SINGLE_MEASUREMENT, NUM_OF_COND_COMM_TX_STATES } CONDUCTIVITY_TX_STATE_T; typedef enum Conductivity_RX_States { COND_COMM_STATE_RCV_RSPNS_INIT_SENSOR = 0, COND_COMM_STATE_RCV_RSPNS_GET_INIT_STATUS, COND_COMM_STATE_RCV_RSPNS_UPDATE_EEPROM_DATA, COND_COMM_STATE_RCV_RSPNS_GET_EEPROM_DATA, COND_COMM_STATE_RCV_RSPNS_UPDATE_MEASUREMENT_SETTINGS, COND_COMM_STATE_RCV_RSPNS_GET_MEASUREMENT_SETTINGS, COND_COMM_STATE_RCV_RSPNS_GET_MEASUREMENT, COND_COMM_STATE_RCV_RSPNS_CMD_STOP_MEASUREMENT, COND_COMM_STATE_RCV_RSPNS_GET_ALL_MEASUREMENTS, COND_COMM_STATE_RCV_RSPNS_SELECT_SENSOR, COND_COMM_STATE_RCV_RSPNS_GET_SINGLE_MEASUREMENT, NUM_OF_COND_COMM_RX_STATES } CONDUCTIVITY_RX_STATE_T; static const U08* teensyCmd[] = { "a", ///< COND_COMM_STATE_SEND_CMD_INIT_SENSOR "l", ///< COND_COMM_STATE_SEND_CMD_GET_INIT_STATUS "save", ///< COND_COMM_STATE_SEND_CMD_UPDATE_EEPROM_DATA, "e", ///< COND_COMM_STATE_SEND_CMD_GET_EEPROM_DATA, "cfg", ///< COND_COMM_STATE_SEND_CMD_UPDATE_MEASUREMENT_SETTINGS, "k", ///< COND_COMM_STATE_SEND_CMD_GET_MEASUREMENT_SETTINGS, "m", ///< COND_COMM_STATE_SEND_CMD_GET_MEASUREMENT, "n", ///< Stop getting measurements "g", ///< Get measurements of all the sensors "j", ///< Select a sensor. ex : "j 1" selects sensor number 1 "h" ///< Get that of selected sensor. (First Execute command "j".) }; typedef struct { TEENSY_CMD_INDEX_T cmdIdx; U08* teensyCMD; } CONDUCTIVITY_CMD_DATA_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; // ********** 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_ */