Index: firmware/App/Drivers/ConductivityTeensy.h =================================================================== diff -u --- firmware/App/Drivers/ConductivityTeensy.h (revision 0) +++ firmware/App/Drivers/ConductivityTeensy.h (revision 011ea36116a350c145cea26774fba1966c365430) @@ -0,0 +1,142 @@ +/************************************************************************** +* +* 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; + +/// 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_START = 0, + COND_COMM_STATE_SEND_CMD, + COND_COMM_STATE_RCV_RSPNS, + COND_COMM_STATE_SEND_CMD_INIT_SENSOR, + COND_COMM_STATE_RCV_RSPNS_INIT_SENSOR, + COND_COMM_STATE_SEND_CMD_GET_INIT_STATUS, + COND_COMM_STATE_RCV_RSPNS_GET_INIT_STATUS, + COND_COMM_STATE_SEND_CMD_UPDATE_EEPROM_DATA, + COND_COMM_STATE_RCV_RSPNS_UPDATE_EEPROM_DATA, + COND_COMM_STATE_SEND_CMD_GET_EEPROM_DATA, + COND_COMM_STATE_RCV_RSPNS_GET_EEPROM_DATA, + COND_COMM_STATE_SEND_CMD_UPDATE_MEASUREMENT_SETTINGS, + COND_COMM_STATE_RCV_RSPNS_UPDATE_MEASUREMENT_SETTINGS, + COND_COMM_STATE_SEND_CMD_GET_MEASUREMENT_SETTINGS, + COND_COMM_STATE_RCV_RSPNS_GET_MEASUREMENT_SETTINGS, + COND_COMM_STATE_SEND_CMD_GET_MEASUREMENT, + COND_COMM_STATE_RCV_RSPNS_GET_MEASUREMENT, + COND_COMM_STATE_FAILED, + NUM_OF_COND_COMM_STATES +} CONDUCTIVITY_COMM_STATE_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 initConductivityDMAchannels( void ); +void execConductivityCommunication( void ); +F64 getImpedanceValue( U32 sensorNum ); +F64 getRTDValue( U32 sensorNum ); + +#endif /* _CONDUCTIVITY_TEENSY_H_ */