Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -r1c478c1aff953528127767db1f4f747a7f7089c8 -r99e330b5b872f68fdf2d842bd0597e54044d9ba9 --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 1c478c1aff953528127767db1f4f747a7f7089c8) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 99e330b5b872f68fdf2d842bd0597e54044d9ba9) @@ -8,7 +8,7 @@ * @file ConductivitySensors.c * * @author (last) Michael Garthwaite -* @date (last) 20-Apr-2026 +* @date (last) 16-Jun-2026 * * @author (original) Vinayakam Mani * @date (original) 13-Sep-2024 @@ -356,126 +356,138 @@ // Check which counter, assign it, and assign read bool to TRUE per sensor for ( sensor = FIRST_DD_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { + // check if we have finished reading all values. + conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead = monitorCalDataReads( sensor ); + if ( FALSE == conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead ) { - - switch( conductivitySensorStatus[ sensor ].calMemCount ) + if ( getTestConfigStatus( TEST_CONFIG_DD_FP_DISABLE_CONDUCTIVITY_SENSOR_CHECKS ) == TRUE ) { - case CAL_DATA_1: - memcpy( &conductivitySensorCoefficients[ sensor ].K_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_1 ] = TRUE; - break; - case CAL_DATA_2: - memcpy( &conductivitySensorCoefficients[ sensor ].alpha_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_2 ] = TRUE; - break; - case CAL_DATA_3: - memcpy( &conductivitySensorCoefficients[ sensor ].eta_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_3 ] = TRUE; - break; - case CAL_DATA_4: - memcpy( &conductivitySensorCoefficients[ sensor ].zeta_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_4 ] = TRUE; - break; - case CAL_DATA_5: - memcpy( &conductivitySensorCoefficients[ sensor ].K_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_5 ] = TRUE; - break; - case CAL_DATA_6: - memcpy( &conductivitySensorCoefficients[ sensor ].alpha_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_6 ] = TRUE; - break; - case CAL_DATA_7: - memcpy( &conductivitySensorCoefficients[ sensor ].eta_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_7 ] = TRUE; - break; - case CAL_DATA_8: - memcpy( &conductivitySensorCoefficients[ sensor ].zeta_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_8 ] = TRUE; - break; - case CAL_DATA_9: - memcpy( &conductivitySensorCoefficients[ sensor ].beta, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_9 ] = TRUE; - break; - case CAL_DATA_10: - memcpy( &conductivitySensorCoefficients[ sensor ].delta, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_10 ] = TRUE; - break; - case CAL_DATA_11: - memcpy( &conductivitySensorCoefficients[ sensor ].reserved1, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_11 ] = TRUE; - break; - case CAL_DATA_12: - memcpy( &conductivitySensorCoefficients[ sensor ].reserved2, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_12 ] = TRUE; - break; - case SW_REV_LOWER_WORD: - memcpy( conductivitySensorRevisions[ sensor ].swRev, &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ SW_REV_LOWER_WORD ] = TRUE; - break; - case SW_REV_MID_WORD: - memcpy( ( conductivitySensorRevisions[ sensor ].swRev + LOWER_WORD_SIZE ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ SW_REV_MID_WORD ] = TRUE; - break; - case SW_REV_UPPER_WORD: - memcpy( ( conductivitySensorRevisions[ sensor ].swRev + ( LOWER_WORD_SIZE + MID_WORD_SIZE ) ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ SW_REV_UPPER_WORD ] = TRUE; - break; - case HW_REV_LOWER_WORD: - memcpy( conductivitySensorRevisions[ sensor ].hwRev, &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_REV_LOWER_WORD ] = TRUE; - break; - case HW_REV_MID_WORD: - memcpy( ( conductivitySensorRevisions[ sensor ].hwRev + LOWER_WORD_SIZE ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_REV_MID_WORD ] = TRUE; - break; - case HW_REV_UPPER_WORD: - memcpy( ( conductivitySensorRevisions[ sensor ].hwRev + ( LOWER_WORD_SIZE + MID_WORD_SIZE ) ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_REV_UPPER_WORD ] = TRUE; - break; - case HW_SERIAL_LOWER_WORD: - memcpy( conductivitySensorRevisions[ sensor ].hwSerial, &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_SERIAL_LOWER_WORD ] = TRUE; - break; - case HW_SERIAL_MID_WORD: - memcpy( ( conductivitySensorRevisions[ sensor ].hwSerial + LOWER_WORD_SIZE ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_SERIAL_MID_WORD ] = TRUE; - break; - case HW_SERIAL_UPPER_WORD: - memcpy( ( conductivitySensorRevisions[ sensor ].hwRev + ( LOWER_WORD_SIZE + MID_WORD_SIZE ) ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); - conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_SERIAL_UPPER_WORD ] = TRUE; - break; - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_SENSOR_CAL_CHECK, sensor ) - break; + // When test config is enabled, check first cal data. If we see a 0 there, + // then most likely not talking to a sensor while HW is in development ( cal data here should be non-zero. ) + if ( ( conductivitySensorStatus[ sensor ].calMemCount == 0 ) && + ( conductivitySensorStatus[ sensor ].calData == 0 ) ) + { + conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead = TRUE; + } + } + else + { + switch( conductivitySensorStatus[ sensor ].calMemCount ) + { + case CAL_DATA_1: + memcpy( &conductivitySensorCoefficients[ sensor ].K_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_1 ] = TRUE; + break; + case CAL_DATA_2: + memcpy( &conductivitySensorCoefficients[ sensor ].alpha_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_2 ] = TRUE; + break; + case CAL_DATA_3: + memcpy( &conductivitySensorCoefficients[ sensor ].eta_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_3 ] = TRUE; + break; + case CAL_DATA_4: + memcpy( &conductivitySensorCoefficients[ sensor ].zeta_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_4 ] = TRUE; + break; + case CAL_DATA_5: + memcpy( &conductivitySensorCoefficients[ sensor ].K_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_5 ] = TRUE; + break; + case CAL_DATA_6: + memcpy( &conductivitySensorCoefficients[ sensor ].alpha_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_6 ] = TRUE; + break; + case CAL_DATA_7: + memcpy( &conductivitySensorCoefficients[ sensor ].eta_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_7 ] = TRUE; + break; + case CAL_DATA_8: + memcpy( &conductivitySensorCoefficients[ sensor ].zeta_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_8 ] = TRUE; + break; + case CAL_DATA_9: + memcpy( &conductivitySensorCoefficients[ sensor ].beta, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_9 ] = TRUE; + break; + case CAL_DATA_10: + memcpy( &conductivitySensorCoefficients[ sensor ].delta, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_10 ] = TRUE; + break; + case CAL_DATA_11: + memcpy( &conductivitySensorCoefficients[ sensor ].reserved1, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_11 ] = TRUE; + break; + case CAL_DATA_12: + memcpy( &conductivitySensorCoefficients[ sensor ].reserved2, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_12 ] = TRUE; + break; + case SW_REV_LOWER_WORD: + memcpy( conductivitySensorRevisions[ sensor ].swRev, &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ SW_REV_LOWER_WORD ] = TRUE; + break; + case SW_REV_MID_WORD: + memcpy( ( conductivitySensorRevisions[ sensor ].swRev + LOWER_WORD_SIZE ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ SW_REV_MID_WORD ] = TRUE; + break; + case SW_REV_UPPER_WORD: + memcpy( ( conductivitySensorRevisions[ sensor ].swRev + ( LOWER_WORD_SIZE + MID_WORD_SIZE ) ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ SW_REV_UPPER_WORD ] = TRUE; + break; + case HW_REV_LOWER_WORD: + memcpy( conductivitySensorRevisions[ sensor ].hwRev, &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_REV_LOWER_WORD ] = TRUE; + break; + case HW_REV_MID_WORD: + memcpy( ( conductivitySensorRevisions[ sensor ].hwRev + LOWER_WORD_SIZE ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_REV_MID_WORD ] = TRUE; + break; + case HW_REV_UPPER_WORD: + memcpy( ( conductivitySensorRevisions[ sensor ].hwRev + ( LOWER_WORD_SIZE + MID_WORD_SIZE ) ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_REV_UPPER_WORD ] = TRUE; + break; + case HW_SERIAL_LOWER_WORD: + memcpy( conductivitySensorRevisions[ sensor ].hwSerial, &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_SERIAL_LOWER_WORD ] = TRUE; + break; + case HW_SERIAL_MID_WORD: + memcpy( ( conductivitySensorRevisions[ sensor ].hwSerial + LOWER_WORD_SIZE ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_SERIAL_MID_WORD ] = TRUE; + break; + case HW_SERIAL_UPPER_WORD: + memcpy( ( conductivitySensorRevisions[ sensor ].hwRev + ( LOWER_WORD_SIZE + MID_WORD_SIZE ) ), &conductivitySensorStatus[ sensor ].calData, sizeof( U32 ) ); + conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ HW_SERIAL_UPPER_WORD ] = TRUE; + break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_SENSOR_CAL_CHECK, sensor ) + break; + } } - // check if we have finished reading all values. - conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead = monitorCalDataReads( sensor ); } - // Read all cal values. Check ranges. + + // DD has read all cal values. Check ranges. else { + conductivitySensorStatus[ sensor ].calReadComplete = checkConductivityCoefficientRanges( sensor ); - if ( getTestConfigStatus( TEST_CONFIG_DD_FP_DISABLE_CONDUCTIVITY_SENSOR_CHECKS ) == TRUE ) + // TODO: this retry should be changed to an alarm or fault once we change the functionality of + // BETA 2.0 test config. This is meant to handle the in-between state of FPGA transitioning + // between 2.0 and non-2.0 data structures. + if ( FALSE == conductivitySensorStatus[ sensor ].calReadComplete ) { - conductivitySensorStatus[ sensor ].calReadComplete = TRUE; + conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead = FALSE; + memset( conductivitySensorStatus[ sensor ].hasCalSlotBeenRead, 0 ,sizeof( conductivitySensorStatus[ sensor ].hasCalSlotBeenRead ) ); } - else - { - conductivitySensorStatus[ sensor ].calReadComplete = checkConductivityCoefficientRanges( sensor ); - // TODO: this retry should be changed to an alarm or fault once we change the functionality of - // BETA 2.0 test config. This is meant to handle the in-between state of FPGA transitioning - // between 2.0 and non-2.0 data structures. - if ( FALSE == conductivitySensorStatus[ sensor ].calReadComplete ) - { - conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead = FALSE; - memset( conductivitySensorStatus[ sensor ].hasCalSlotBeenRead, 0 ,sizeof( conductivitySensorStatus[ sensor ].hasCalSlotBeenRead ) ); - } - } } + if ( getTestConfigStatus( TEST_CONFIG_DD_FP_DISABLE_CONDUCTIVITY_SENSOR_CHECKS ) == TRUE ) + { + conductivitySensorStatus[ sensor ].calReadComplete = TRUE; + } + // calResult determines if we are done reading calibration data from all sensors. // each sensor can re-assign it back to false if it is not completely done reading. if ( TRUE == conductivitySensorStatus[ sensor ].calReadComplete ) @@ -553,7 +565,10 @@ { if ( ++conductivitySensorStatus[ sensorId ].interalCondErrorCount > MAX_ALLOWED_UNCHANGED_CONDUCTIVITY_READS ) { -// SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorId ) + //TODO: restore once conductivity sensor are calibrated and working +#ifndef __CONDUCTIVITY_SENSOR_ALARMS_DISABLED__ + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorId ) +#endif } } @@ -566,15 +581,21 @@ { if ( ++conductivitySensorStatus[ sensorId ].interalTempErrorCount > MAX_ALLOWED_UNCHANGED_CONDUCTIVITY_READS ) { -// SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorId ) + //TODO: restore once conductivity sensor are calibrated and working +#ifndef __CONDUCTIVITY_SENSOR_ALARMS_DISABLED__ + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorId ) +#endif } } } else { if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_CONDUCTIVITY_SENSOR_ERROR ) ) { -// SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorId ) + //TODO: restore once conductivity sensor are calibrated and working +#ifndef __CONDUCTIVITY_SENSOR_ALARMS_DISABLED__ + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorId ) +#endif } } } @@ -691,7 +712,10 @@ // Alarm if any data is out of range. if ( FALSE == result ) { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorId, ( U32 )idx ) + //TODO: restore once conductivity sensor are calibrated and working +#ifndef __CONDUCTIVITY_SENSOR_ALARMS_DISABLED__ + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, sensorId, ( U32 )idx ) +#endif } return result; @@ -878,6 +902,58 @@ /*********************************************************************//** * @brief + * The getConductivityRawResistance function gets the raw conductivity resistance + * value for a given conductivity sensor id. + * @details \b Inputs: conductivitySensorStatus[] + * @details \b Outputs: none + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @param sensorId conductivity sensor id + * @return temperature value + *************************************************************************/ +F32 getConductivityRawResistance( CONDUCTIVITY_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + result = conductivitySensorStatus[ sensor ].rawResistance; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_CONDUCTIVITY_SENSOR_ID1, sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getConductivityRawRTD function gets the raw RTD resistance + * value for a given conductivity sensor id. + * @details \b Inputs: conductivitySensorStatus[] + * @details \b Outputs: none + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @param sensorId conductivity sensor id + * @return temperature value + *************************************************************************/ +F32 getConductivityRawRTD( CONDUCTIVITY_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + result = conductivitySensorStatus[ sensor ].rawTemperature; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_CONDUCTIVITY_SENSOR_ID1, sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief * The calculateConductivityUpdatedStandard function calculates the conductivity value. * @details \b Inputs: conductivitySensorCoefficients - Conductivity Coefficients * @details \b Inputs: conductivitySensorStatus - Raw measurement values @@ -1149,34 +1225,74 @@ BOOL testHandleConductivitySensorVersionRequest( MESSAGE_T *message ) { BOOL result = FALSE; - U32 condSensorId = 0; - U32 msgId = 0; - U32 channelId = 0; + U32 msgId = MSG_ID_DD_CONDUCTIVITY_SENSOR_VERSION_RESPONSE; + U32 channelId = COMM_BUFFER_OUT_CAN_DD_BROADCAST; if ( message->hdr.payloadLen == sizeof( U32 ) ) { - CONDUCTIVITY_REVISIONS_T CondVersionRecord; + CONDUCTIVITY_VERSION_RESPONSE_T CondVersionRecord; - memcpy( &condSensorId, &message->payload, sizeof( U32 ) ); + memcpy( &CondVersionRecord.sensorID, &message->payload, sizeof( U32 ) ); // Build conductivity version record - if ( condSensorId < LAST_DD_COND_SENSOR ) + if ( CondVersionRecord.sensorID < LAST_DD_COND_SENSOR ) { - msgId = MSG_ID_DD_CONDUCTIVITY_SENSOR_VERSION_RESPONSE; - channelId = COMM_BUFFER_OUT_CAN_DD_BROADCAST; - memcpy( &CondVersionRecord, &conductivitySensorRevisions[ condSensorId ], sizeof( CONDUCTIVITY_REVISIONS_T ) ); + memcpy( &CondVersionRecord.sensorVersion, &conductivitySensorRevisions[ CondVersionRecord.sensorID ], sizeof( CONDUCTIVITY_REVISIONS_T ) ); } - else + else if ( ( CondVersionRecord.sensorID > LAST_DD_COND_SENSOR ) && + ( CondVersionRecord.sensorID < NUM_OF_CONDUCTIVITY_SENSORS ) ) { msgId = MSG_ID_FP_CONDUCTIVITY_SENSOR_VERSION_RESPONSE; channelId = COMM_BUFFER_OUT_CAN_FP_BROADCAST; - memcpy( &CondVersionRecord, &conductivitySensorRevisions[ condSensorId ], sizeof( CONDUCTIVITY_REVISIONS_T ) ); + memcpy( &CondVersionRecord.sensorVersion, &conductivitySensorRevisions[ CondVersionRecord.sensorID ], sizeof( CONDUCTIVITY_REVISIONS_T ) ); } - result = sendMessage( (MSG_ID_T)msgId, (COMM_BUFFER_T)channelId, (U08*)&CondVersionRecord, sizeof( CONDUCTIVITY_REVISIONS_T ) ); + + result = sendMessage( (MSG_ID_T)msgId, (COMM_BUFFER_T)channelId, (U08*)&CondVersionRecord, sizeof( CONDUCTIVITY_VERSION_RESPONSE_T ) ); } return result; } +/*********************************************************************//** + * @brief + * The testHandleConductivitySensorCalRequest function sends + * the conductivity sensor calibration response + * @details \b Inputs: conductivitySensorCoefficients[] + * @details \b Outputs: none + * @param message Override message from Dialin which includes an sensor + * ID. + * @return TRUE if response is successful, FALSE if not + *************************************************************************/ +BOOL testHandleConductivitySensorCalRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + U32 msgId = MSG_ID_DD_CONDUCTIVITY_SENSOR_VERSION_RESPONSE; + U32 channelId = COMM_BUFFER_OUT_CAN_DD_BROADCAST; + if ( message->hdr.payloadLen == sizeof( U32 ) ) + { + CONDUCTIVITY_CAL_RESPONSE_T CondCalRecord; + + memcpy( &CondCalRecord.sensorID, &message->payload, sizeof( U32 ) ); + + // Build conductivity version record + if ( CondCalRecord.sensorID < LAST_DD_COND_SENSOR ) + { + memcpy( &CondCalRecord.sensorCal, &conductivitySensorCoefficients[ CondCalRecord.sensorID ], sizeof( CONDUCTIVITY_COEFFICIENTS_T ) ); + } + else if ( ( CondCalRecord.sensorID > LAST_DD_COND_SENSOR ) && + ( CondCalRecord.sensorID < NUM_OF_CONDUCTIVITY_SENSORS ) ) + { + msgId = MSG_ID_FP_CONDUCTIVITY_SENSOR_VERSION_RESPONSE; + channelId = COMM_BUFFER_OUT_CAN_FP_BROADCAST; + memcpy( &CondCalRecord.sensorCal, &conductivitySensorCoefficients[ CondCalRecord.sensorID ], sizeof( CONDUCTIVITY_COEFFICIENTS_T ) ); + } + + result = sendMessage( (MSG_ID_T)msgId, (COMM_BUFFER_T)channelId, (U08*)&CondCalRecord, sizeof( CONDUCTIVITY_CAL_RESPONSE_T ) ); + } + + return result; +} + + /**@}*/