Index: firmware/App/Drivers/ConductivityTeensy.c =================================================================== diff -u -r290cac3c0557c978647cef2972800dfe137dd662 -re78ed64da7270eb6c814db811e98d7f91f01e2ad --- firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 290cac3c0557c978647cef2972800dfe137dd662) +++ firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision e78ed64da7270eb6c814db811e98d7f91f01e2ad) @@ -52,11 +52,11 @@ #define RX_SIZE_SELECT_SENSOR 1 ///< Expected response bytes length of select sensor cmd. #define RX_SIZE_GET_SINGLE_MEASUREMENT ( sizeof( COND_SENSOR_DATA_T ) ) ///< Expected response bytes length of get single sensor measurement cmd. -#define COND_INIT_TIMEOUT_MS ( 3 * MS_PER_SECOND ) ///< Timeout before which we should transition to idle state. +#define COND_INIT_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Timeout before which we should transition to idle state. #define COND_STATUS_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Timeout before which we should receive acknowledgment from teensy #define COND_DATA_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Timeout before which we should receive data from teensy #define COND_TEMP_OFFSET 25 ///< Temperature offset constant used in RTD calculations. -#define COND_CONVERSION_SM_TO_USCM 100000 ///< Conductivity conversion from siemens per meter to micro siemens per centimeter. +#define COND_CONVERSION_SM_TO_USCM 1000000.0F ///< Conductivity conversion from siemens per meter to micro siemens per centimeter. #define COND_INFINITE_R_VALUE 800000 ///< Resistance value for when the driver detects INF from the sensor. // ********** private data ********** @@ -69,8 +69,6 @@ static U32 condTransmitCounter; ///< Conductivity command transmit counter. static BOOL condAutomatedDataPolling; ///< Flag indicating automated conductivity measurements polling has started. static BOOL condWriteCommandInProgress; ///< Flag indicating an Conductivity write command is in progress. -static BOOL condReadCommandInProgress; ///< Flag indicating an Conductivity read command is in progress. -static BOOL condBulkWriteAndReadInProgress; ///< Flag indicating an Conductivity bulk write and read command are in progress. static BOOL condWriteCmdRspnsRcvd; ///< Flag indicating a response to an Conductivity write command has been received. // Conductivity comm buffers @@ -211,8 +209,6 @@ condTransmitCounter = 0; condAutomatedDataPolling = FALSE; condWriteCommandInProgress = FALSE; - condReadCommandInProgress = FALSE; - condBulkWriteAndReadInProgress = FALSE; condWriteCmdRspnsRcvd = FALSE; memset( &condWriteCmdBuffer, 0, COND_WRITE_CMD_BUFFER_LEN ); @@ -312,68 +308,6 @@ /*********************************************************************//** * @brief - * The initEEPROMdata function populates eePromDataTX structure and enqueues - * update EEPROM data command in the the command queue. - * @details \b Inputs: none - * @details \b Outputs: eePromDataTX : EEPROM data to be updated on Teensy. - * @return none - *************************************************************************/ -static void initEEPROMdata( void ) -{ - // TODO Update real values in eePromDataTX - eePromDataTX.doubleValue[ 0 ] = 0.0; - eePromDataTX.doubleValue[ 1 ] = 0.0; - eePromDataTX.doubleValue[ 2 ] = 0.0; - eePromDataTX.doubleValue[ 3 ] = 0.0; - eePromDataTX.doubleValue[ 4 ] = 0.0; - eePromDataTX.doubleValue[ 5 ] = 0.0; - eePromDataTX.doubleValue[ 6 ] = 0.0; - eePromDataTX.doubleValue[ 7 ] = 0.0; - - eePromDataTX.floatValue[ 0 ] = 0.0; - eePromDataTX.floatValue[ 1 ] = 0.0; - eePromDataTX.floatValue[ 2 ] = 0.0; - eePromDataTX.floatValue[ 3 ] = 0.0; - eePromDataTX.floatValue[ 4 ] = 0.0; - eePromDataTX.floatValue[ 5 ] = 0.0; - eePromDataTX.floatValue[ 6 ] = 0.0; - eePromDataTX.floatValue[ 7 ] = 0.0; - eePromDataTX.floatValue[ 8 ] = 0.0; - eePromDataTX.floatValue[ 8 ] = 0.0; - eePromDataTX.floatValue[ 10 ] = 0.0; - eePromDataTX.floatValue[ 11 ] = 0.0; - eePromDataTX.floatValue[ 12 ] = 0.0; - eePromDataTX.floatValue[ 13 ] = 0.0; - eePromDataTX.floatValue[ 14 ] = 0.0; - eePromDataTX.floatValue[ 15 ] = 0.0; - - enqueue( TEENSY_CMD_UPDATE_EEPROM_DATA ); -} - -/*********************************************************************//** - * @brief - * The initMeasurementSettings function populates measurementSettingsTX structure and enqueues - * update measurement settings command in the the command queue. - * @details \b Inputs:none - * @details \b Outputs:measurementSettingsTX - Measurement settings data to updated on Teensy. - * @return none - *************************************************************************/ -static void initMeasurementSettings( void ) -{ - // TODO Update real values in measurementSettingsTX - measurementSettingsTX.SinFreq = 11000.0; - measurementSettingsTX.DacVoltPP = 400.0; - measurementSettingsTX.BiasVolt = 200.0; - measurementSettingsTX.HstiaRtiaSel = 7; - measurementSettingsTX.AdcPgaGain = 2; - measurementSettingsTX.DftNum = 256; - measurementSettingsTX.ADCAvgNum = 16; - - enqueue( TEENSY_CMD_UPDATE_MEASUREMENT_SETTINGS ); -} - -/*********************************************************************//** - * @brief * The execConductivityTeensy function manages incoming data exchanges with * the Teensy board over UART. * @details \b Inputs: condCommState - Current state. @@ -425,6 +359,7 @@ if ( TRUE == didTimeout( condInitTime, COND_INIT_TIMEOUT_MS ) ) { state = COND_COMM_STATE_IDLE; + consumeUnexpectedConductivityData(); } return state; } @@ -1841,40 +1776,6 @@ /*********************************************************************//** * @brief - * The parseMeasurementSettings Reads measurement settings from buffer and - * stores in measurementSettingsRX. - * @details \b Inputs : none - * @details \b Outputs: measurementSettingsRX - Received Measurement Settings - * @param buffer - Data to be parsed and stored. - * len - Length of the input data. - * @return COND_PARSE_STATUS to tell if parsing was successful or not. - *************************************************************************/ -static COND_PARSE_STATUS parseMeasurementSettings( const U08 *buffer, U32 len ) -{ - COND_PARSE_STATUS parseStatus = COND_PARSE_NONE; - U32 expectedDataLength = sizeof( COND_MEASUREMENT_SETTINGS_T ); - - // Validate buffer - if ( buffer == NULL ) - { - parseStatus = COND_PARSE_ERROR_NULL_BUFFER; - } - else if ( len != expectedDataLength ) - { - parseStatus = COND_PARSE_ERROR_INVALID_LENGTH; - } - else - { - // Parse and store the data - memcpy(&measurementSettingsRX, buffer, expectedDataLength ); - parseStatus = COND_PARSE_SUCCESS; - } - - return parseStatus; -} - -/*********************************************************************//** - * @brief * The parseEEPROMdata Reads EEPROM data from buffer and * stores in eePromDataRX. * @details \b Inputs : none @@ -1943,7 +1844,7 @@ else { // Store Raw value in array index for position ( sensorNum - 1 ) - condRawMeasurement[ tempSensor.sensorNum - 1 ] = tempSensor; + memcpy( &condRawMeasurement[ tempSensor.sensorNum - 1 ], &tempSensor, sizeof( COND_SENSOR_DATA_T ) ); // Calculate and store Conductivity from raw values calculateConductivity( tempSensor.sensorNum - 1 ); @@ -2117,13 +2018,13 @@ *************************************************************************/ static void calculateConductivityAly( TEENSY_SENSOR_INDEX_T sensorNum, BOOL isFPSensor ) { - F64 calculatedConductivity = 0.0; + F32 calculatedConductivity = 0.0; F32 B3 = 0.0; F32 B2 = 0.0; F32 B1 = 0.0; F32 B0 = 0.0; - F64 R = condRawMeasurement[ sensorNum ].impRzMag; - F64 Z = condRawMeasurement[ sensorNum ].rtdRzMag; + F32 R = condRawMeasurement[ sensorNum ].impRzMag; + F32 Z = condRawMeasurement[ sensorNum ].rtdRzMag; // Aly sensors are known to send the driver INF in unfavorable conditions for impedance. e.g: open air // Change it to some high value that can be determined that we are reading INF. @@ -2154,7 +2055,7 @@ B0 ); - condCalculatedMeasurement[ sensorNum ].Conductivity.data = (F32)calculatedConductivity; + condCalculatedMeasurement[ sensorNum ].Conductivity.data = calculatedConductivity; } /*********************************************************************//** @@ -2169,7 +2070,7 @@ *************************************************************************/ static void calculateConductivityUpdatedStandard( TEENSY_SENSOR_INDEX_T sensorNum, BOOL isFPSensor ) { - F64 calculatedConductivity = 0.0; + F32 calculatedConductivity = 0.0; F64 alpha = 0.0; F64 k = 0.0; @@ -2188,7 +2089,7 @@ calculatedConductivity = ( ( k / getTeensyConductivityResistanceValue( sensorNum ) ) * ( 1 + alpha * ( COND_TEMP_OFFSET - getTeensyConductivityTemperatureValue( sensorNum ) ) ) ); - condCalculatedMeasurement[ sensorNum ].Conductivity.data = (F32)calculatedConductivity; + condCalculatedMeasurement[ sensorNum ].Conductivity.data = calculatedConductivity; } /*********************************************************************//** @@ -2203,10 +2104,10 @@ *************************************************************************/ static void calculateConductivityStandard( TEENSY_SENSOR_INDEX_T sensorNum, BOOL isFPSensor ) { - F64 calculatedConductivity = 0.0; + F32 calculatedConductivity = 0.0; F64 alpha = 0.0; F64 k = 0.0; - F64 R = condRawMeasurement[ sensorNum ].impRzMag; + F32 R = condRawMeasurement[ sensorNum ].impRzMag; // Aly sensors are known to send the driver INF in unfavorable conditions for impedance. e.g: open air // Change it to some high value that can be determined that we are reading INF. @@ -2232,7 +2133,7 @@ ( 1 + alpha * ( COND_TEMP_OFFSET - getTeensyConductivityTemperatureValue( sensorNum ) ) ) ); calculatedConductivity = calculatedConductivity * COND_CONVERSION_SM_TO_USCM; - condCalculatedMeasurement[ sensorNum ].Conductivity.data = (F32)calculatedConductivity; + condCalculatedMeasurement[ sensorNum ].Conductivity.data = calculatedConductivity; } /*********************************************************************//** @@ -2248,10 +2149,10 @@ static void calculateResistance( TEENSY_SENSOR_INDEX_T sensorNum, BOOL isFPSensor ) { - F64 calculatedResistance = 0.0; + F32 calculatedResistance = 0.0; F64 eta = 0.0; F64 zeta = 0.0; - F64 R = condRawMeasurement[ sensorNum ].impRzMag; + F32 R = condRawMeasurement[ sensorNum ].impRzMag; // Aly sensors are known to send the driver INF in unfavorable conditions. e.g: open air // Change it to some high value that can be determined that we are reading INF. @@ -2272,7 +2173,7 @@ zeta = condCoeff[ sensorNum ].zetaHighDDUS; } calculatedResistance = ( ( eta * R ) + zeta ); - condCalculatedMeasurement[ sensorNum ].Resistance.data = (F32)calculatedResistance; + condCalculatedMeasurement[ sensorNum ].Resistance.data = calculatedResistance; } /*********************************************************************//** @@ -2287,13 +2188,13 @@ static void calculateTemperature( TEENSY_SENSOR_INDEX_T sensorNum ) { - F64 calculatedTemperature = 0.0; + F32 calculatedTemperature = 0.0; F64 beta = condCoeff[ sensorNum ].beta; F64 gamma = condCoeff[ sensorNum ].gamma; - F64 Z = condRawMeasurement[ sensorNum ].rtdRzMag; + F32 Z = condRawMeasurement[ sensorNum ].rtdRzMag; calculatedTemperature = ( ( beta * Z ) + gamma ); - condCalculatedMeasurement[ sensorNum ].Temperature.data = (F32)calculatedTemperature; + condCalculatedMeasurement[ sensorNum ].Temperature.data = calculatedTemperature; } @@ -2318,7 +2219,7 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); - if ( ( payload.index >= FIRST_DD_COND_SENSOR ) && ( payload.index <= LAST_FP_COND_SENSOR ) ) + if ( payload.index <= LAST_FP_COND_SENSOR ) { // D74 is not connected to Teensy and does not have a data structure to override. if ( LAST_DD_COND_SENSOR != payload.index ) @@ -2357,7 +2258,7 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); - if ( ( payload.index >= FIRST_DD_COND_SENSOR ) && ( payload.index <= LAST_FP_COND_SENSOR ) ) + if ( payload.index <= LAST_FP_COND_SENSOR ) { // D74 is not connected to Teensy and does not have a data structure to override. if ( LAST_DD_COND_SENSOR != payload.index )