Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -rac72b3fa86015b2c60c7687a4597dd4ae5c24dc8 -r83bae6ae5f7f26a3511d1d6965310fd8ac9ad496 --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision ac72b3fa86015b2c60c7687a4597dd4ae5c24dc8) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 83bae6ae5f7f26a3511d1d6965310fd8ac9ad496) @@ -116,6 +116,9 @@ static CONDUCTIVITY_COEFFICIENTS_T conductivitySensorCoefficients[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity sensor calibration coefficient data. static CONDUCTIVITY_REVISIONS_T conductivitySensorRevisions[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity sensor revision and serial data. +static CONDUCTIVITY_COEFFICIENTS_T conductivityCalRecord[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity Calibration Data to be written on the sensor +static BOOL isWriteCalibrationRequested[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Request to write Calibration Data on sensor's flash memory + // ********** private function prototypes ********** static CONDUCTIVITY_STATE_T handleConductivityReadCalState( void ); static CONDUCTIVITY_STATE_T handleConductivityReadDataState( void ); @@ -131,6 +134,11 @@ static void calculateTemperature( CONDUCTIVITY_SENSORS_T sensorNum ); static void calculateResistance( CONDUCTIVITY_SENSORS_T sensorNum, BOOL isFPSensor ); +static void readConductivitySensorReadCounts( void ); +static void readConductivitySensorErrorCounts( void ); +static void readConductivitySensorCalData( void ); +static void writeConductivitySensorCalData( CONDUCTIVITY_SENSORS_T sensorId ); + /*********************************************************************//** * @brief * The initConductivitySensors function initializes the ConductivitySensors unit. @@ -201,6 +209,8 @@ conductivitySensorCoefficients[ sensor ].delta = 0.0F; conductivitySensorCoefficients[ sensor ].reserved1 = 0.0F; conductivitySensorCoefficients[ sensor ].reserved2 = 0.0F; + conductivitySensorCoefficients[ sensor ].calibrationTime = 0.0F; + conductivitySensorCoefficients[ sensor ].crc = 0.0F; memset( conductivitySensorRevisions[ sensor ].swRev, 0, sizeof( U08 ) * CONDUCTIVITY_CAL_CHAR_LENGTH ); memset( conductivitySensorRevisions[ sensor ].hwRev, 0, sizeof( U08 ) * CONDUCTIVITY_CAL_CHAR_LENGTH ); @@ -333,6 +343,50 @@ conductivitySensorStatus[ P18_COND ].calMemCount = getFPGAP18CalMemCounter(); } +static void writeConductivitySensorCalData( CONDUCTIVITY_SENSORS_T sensorId ) +{ + // Update cal data and counter for each conductivity sensor + U32 calData = conductivitySensorStatus[ sensorId ].calData; + U08 command; + + switch ( sensorId ) + { + case D17_COND: + setFPGAD17CondCalData( calData ); + break; + + case D27_COND: + setFPGAD27CondCalData( calData ); + break; + + case D29_COND: + setFPGAD29CondCalData( calData ); + break; + + case D43_COND: + setFPGAD43CondCalData( calData ); + break; + + case D74_COND: + setFPGAD74CondCalData( calData ); + break; + + case P9_COND: + setFPGAP9CondCalData( calData ); + break; + + case P18_COND: + setFPGAP18CondCalData( calData ); + break; + + default: + break; + } + + setFPGAConductivitySensorId( (U08)sensorId ); + setFPGAConductivitySensorCommand( (U08) command ); +} + /*********************************************************************//** * @brief * The execConductivitySensors function executes the conductivity sensors driver. @@ -444,6 +498,14 @@ memcpy( &conductivitySensorCoefficients[ sensor ].reserved2, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_12 ] = TRUE; break; + case CAL_DATA_13: + memcpy( &conductivitySensorCoefficients[ sensor ].calibrationTime, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_13 ] = TRUE; + break; + case CAL_DATA_14: + memcpy( &conductivitySensorCoefficients[ sensor ].crc, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_14 ] = TRUE; + break; case SW_REV_LOWER_WORD: memcpy( conductivitySensorRevisions[ sensor ].swRev, &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ SW_REV_LOWER_WORD ] = TRUE; @@ -565,7 +627,6 @@ return state; } - /*********************************************************************//** * @brief * The checkCondCounters function handles monitoring read and error counters @@ -921,21 +982,42 @@ return result; } -CONDUCTIVITY_COEFFICIENTS_T* getConductivityCalibrationData( void ) +CONDUCTIVITY_COEFFICIENTS_T getConductivityCalibrationData( CONDUCTIVITY_SENSORS_T sensorIdx ) { - // TODO: Return static variable - CONDUCTIVITY_COEFFICIENTS_T record; - return (&record); + CONDUCTIVITY_COEFFICIENTS_T record = { 0 }; + + if ( sensorIdx < NUM_OF_CONDUCTIVITY_SENSORS ) + { + record = conductivitySensorCoefficients[ sensorIdx ]; + } + else + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorIdx ); + } + + return record; } -void setConductivityCalibrationData( CONDUCTIVITY_COEFFICIENTS_T* record) +BOOL setConductivityCalibrationData( CONDUCTIVITY_SENSORS_T sensorIdx, + CONDUCTIVITY_COEFFICIENTS_T record) { - U32 i; + BOOL status = FALSE; - for ( i = 0; i < NUM_OF_CONDUCTIVITY_SENSORS; i++ ) + if ( sensorIdx < NUM_OF_CONDUCTIVITY_SENSORS ) { - //TODO: Call FPGA update function + conductivityCalRecord[ sensorIdx ] = record; + isWriteCalibrationRequested[ sensorIdx ] = TRUE; + + // TODO: Start a timer + + status = TRUE; } + else + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorIdx ); + } + + return status; } /*********************************************************************//** * @brief