Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -r0f40091ff6b022d1afed0ed5b9d76b6bc46295b0 -r43ceadd4e906f44579de2a15d1201c5e7f7024ed --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 0f40091ff6b022d1afed0ed5b9d76b6bc46295b0) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 43ceadd4e906f44579de2a15d1201c5e7f7024ed) @@ -125,7 +125,7 @@ void initConductivitySensors( void ) { /// TODO: Revert back to init state. - currentConductivityState = CONDUCTIVITY_READ_DATA_STATE; + currentConductivityState = CONDUCTIVITY_INIT_STATE; CONDUCTIVITY_SENSORS_T sensor; // Initialize override structures for each conductivity sensor @@ -168,48 +168,19 @@ conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead = FALSE; memset( conductivitySensorStatus[ sensor ].hasCalSlotBeenRead, 0 ,sizeof( conductivitySensorStatus[ sensor ].hasCalSlotBeenRead ) ); - // TODO: Remove temp values. Sensors do not have calibrated values. - conductivitySensorCoefficients[ sensor ].K_high = 4.1F; - conductivitySensorCoefficients[ sensor ].alpha_high = 0.02F; - conductivitySensorCoefficients[ sensor ].eta_high = 1.0F; -// conductivitySensorCoefficients[ sensor ].zeta_high = 0.0F; - conductivitySensorCoefficients[ sensor ].K_low = 4.1F; - conductivitySensorCoefficients[ sensor ].alpha_low = 0.02F; - conductivitySensorCoefficients[ sensor ].eta_low = 1.0F; - conductivitySensorCoefficients[ sensor ].zeta_low = -76.4F; - conductivitySensorCoefficients[ sensor ].beta = 0.25F; - conductivitySensorCoefficients[ sensor ].delta = -250.0F; + conductivitySensorCoefficients[ sensor ].K_high = 0.0F; + conductivitySensorCoefficients[ sensor ].alpha_high = 0.0F; + conductivitySensorCoefficients[ sensor ].eta_high = 0.0F; + conductivitySensorCoefficients[ sensor ].zeta_high = 0.0F; + conductivitySensorCoefficients[ sensor ].K_low = 0.0F; + conductivitySensorCoefficients[ sensor ].alpha_low = 0.0F; + conductivitySensorCoefficients[ sensor ].eta_low = 0.0F; + conductivitySensorCoefficients[ sensor ].zeta_low = 0.0F; + conductivitySensorCoefficients[ sensor ].beta = 0.0F; + conductivitySensorCoefficients[ sensor ].delta = 0.0F; conductivitySensorCoefficients[ sensor ].reserved1 = 0.0F; conductivitySensorCoefficients[ sensor ].reserved2 = 0.0F; - // Beta 2 - Unit 04 -// if ( ( P9_COND == sensor ) || ( P18_COND == sensor ) || ( D74_COND == sensor ) ) -// { -// conductivitySensorCoefficients[ sensor ].zeta_high = -6.42F; -// } -// else if ( ( D17_COND == sensor ) || ( D27_COND == sensor ) || ( D29_COND == sensor ) ) -// { -// conductivitySensorCoefficients[ sensor ].zeta_high = -14.4F; -// } -// else -// { -// conductivitySensorCoefficients[ sensor ].zeta_high = -6.65F; -// } - - // Beta 2 - Unit 05 - if ( ( P9_COND == sensor ) || ( P18_COND == sensor ) || ( D74_COND == sensor ) ) - { - conductivitySensorCoefficients[ sensor ].zeta_high = -28.6F; - } - else if ( ( D17_COND == sensor ) || ( D27_COND == sensor ) || ( D29_COND == sensor ) ) - { - conductivitySensorCoefficients[ sensor ].zeta_high = -38.35F; - } - else - { - conductivitySensorCoefficients[ sensor ].zeta_high = -6.65F; - } - memset( conductivitySensorRevisions[ sensor ].swRev, 0, sizeof( U08 ) * CONDUCTIVITY_CAL_CHAR_LENGTH ); memset( conductivitySensorRevisions[ sensor ].hwRev, 0, sizeof( U08 ) * CONDUCTIVITY_CAL_CHAR_LENGTH ); memset( conductivitySensorRevisions[ sensor ].hwSerial, 0, sizeof( U08 ) * CONDUCTIVITY_CAL_CHAR_LENGTH ); @@ -222,6 +193,8 @@ initFPGAPersistentAlarm( FPGA_PERS_ERROR_D29_COND_SENSOR, ALARM_ID_DD_D29_COND_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); initFPGAPersistentAlarm( FPGA_PERS_ERROR_D43_COND_SENSOR, ALARM_ID_DD_D43_COND_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); initFPGAPersistentAlarm( FPGA_PERS_ERROR_D74_COND_SENSOR, ALARM_ID_DD_D74_COND_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); + initFPGAPersistentAlarm( FPGA_PERS_ERROR_P9_COND_SENSOR, ALARM_ID_FP_P9_COND_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); + initFPGAPersistentAlarm( FPGA_PERS_ERROR_P18_COND_SENSOR, ALARM_ID_FP_P18_COND_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); } /*********************************************************************//** @@ -383,57 +356,58 @@ // 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++ ) { - if ( FALSE == conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead ) + + if ( FALSE == conductivitySensorStatus[ sensor ].haveAllCalSlotsBeenRead ) { switch( conductivitySensorStatus[ sensor ].calMemCount ) { case CAL_DATA_1: - conductivitySensorCoefficients[ sensor ].K_high = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].K_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_1 ] = TRUE; break; case CAL_DATA_2: - conductivitySensorCoefficients[ sensor ].alpha_high = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].alpha_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_2 ] = TRUE; break; case CAL_DATA_3: - conductivitySensorCoefficients[ sensor ].eta_high = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].eta_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_3 ] = TRUE; break; case CAL_DATA_4: - conductivitySensorCoefficients[ sensor ].zeta_high = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].zeta_high, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_4 ] = TRUE; break; case CAL_DATA_5: - conductivitySensorCoefficients[ sensor ].K_low = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].K_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_5 ] = TRUE; break; case CAL_DATA_6: - conductivitySensorCoefficients[ sensor ].alpha_low = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].alpha_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_6 ] = TRUE; break; case CAL_DATA_7: - conductivitySensorCoefficients[ sensor ].eta_low = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].eta_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_7 ] = TRUE; break; case CAL_DATA_8: - conductivitySensorCoefficients[ sensor ].zeta_low = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].zeta_low, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_8 ] = TRUE; break; case CAL_DATA_9: - conductivitySensorCoefficients[ sensor ].beta = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].beta, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_9 ] = TRUE; break; case CAL_DATA_10: - conductivitySensorCoefficients[ sensor ].delta = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].delta, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_10 ] = TRUE; break; case CAL_DATA_11: - conductivitySensorCoefficients[ sensor ].reserved1 = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].reserved1, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_11 ] = TRUE; break; case CAL_DATA_12: - conductivitySensorCoefficients[ sensor ].reserved2 = (F32)conductivitySensorStatus[ sensor ].calData; + memcpy( &conductivitySensorCoefficients[ sensor ].reserved2, &conductivitySensorStatus[ sensor ].calData, sizeof(U32)); conductivitySensorStatus[ sensor ].hasCalSlotBeenRead[ CAL_DATA_12 ] = TRUE; break; case SW_REV_LOWER_WORD: @@ -472,6 +446,10 @@ 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 ); @@ -480,21 +458,35 @@ else { - if ( ( getTestConfigStatus( TEST_CONFIG_FP_DISABLE_CONDUCTIVITY_ALARMS ) == TRUE ) && - ( getTestConfigStatus( TEST_CONFIG_DD_DISABLE_CONDUCTIVITY_ALARMS ) == TRUE ) ) + if ( getTestConfigStatus( TEST_CONFIG_DD_FP_DISABLE_CONDUCTIVITY_SENSOR_CHECKS ) == TRUE ) { conductivitySensorStatus[ sensor ].calReadComplete = TRUE; } else { conductivitySensorStatus[ sensor ].calReadComplete = checkConductivityCoefficientRanges( sensor ); - } - if ( TRUE == conductivitySensorStatus[ sensor ].calReadComplete ) - { - calResult = 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 ].haveAllCalSlotsBeenRead = FALSE; + memset( conductivitySensorStatus[ sensor ].hasCalSlotBeenRead, 0 ,sizeof( conductivitySensorStatus[ sensor ].hasCalSlotBeenRead ) ); + } } } + + // 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 ) + { + calResult = TRUE; + } + else + { + calResult = FALSE; + } } if ( TRUE == calResult ) @@ -625,70 +617,70 @@ CONDUCTIVITY_CAL_IDX_T idx = CAL_DATA_1; // Check data for high and low ranges. - if( ( conductivitySensorCoefficients[ sensorId ].K_high <= CELL_COEFF_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].K_high >= CELL_COEFF_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].K_high > CELL_COEFF_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].K_high < CELL_COEFF_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_1; } - if( ( conductivitySensorCoefficients[ sensorId ].K_low <= CELL_COEFF_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].K_low >= CELL_COEFF_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].K_low > CELL_COEFF_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].K_low < CELL_COEFF_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_2; } - if( ( conductivitySensorCoefficients[ sensorId ].alpha_high <= TEMPERATURE_CORRECTION_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].alpha_high >= TEMPERATURE_CORRECTION_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].alpha_high > TEMPERATURE_CORRECTION_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].alpha_high < TEMPERATURE_CORRECTION_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_3; } - if( ( conductivitySensorCoefficients[ sensorId ].alpha_low <= TEMPERATURE_CORRECTION_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].alpha_low >= TEMPERATURE_CORRECTION_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].alpha_low > TEMPERATURE_CORRECTION_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].alpha_low < TEMPERATURE_CORRECTION_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_4; } - if( ( conductivitySensorCoefficients[ sensorId ].eta_high <= RESISTANCE_SCALE_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].eta_high >= RESISTANCE_SCALE_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].eta_high > RESISTANCE_SCALE_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].eta_high < RESISTANCE_SCALE_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_5; } - if( ( conductivitySensorCoefficients[ sensorId ].eta_low <= RESISTANCE_SCALE_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].eta_low >= RESISTANCE_SCALE_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].eta_low > RESISTANCE_SCALE_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].eta_low < RESISTANCE_SCALE_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_6; } - if( ( conductivitySensorCoefficients[ sensorId ].zeta_high <= RESISTANCE_OFFSET_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].zeta_high >= RESISTANCE_OFFSET_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].zeta_high > RESISTANCE_OFFSET_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].zeta_high < RESISTANCE_OFFSET_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_7; } - if( ( conductivitySensorCoefficients[ sensorId ].zeta_low <= RESISTANCE_OFFSET_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].zeta_low >= RESISTANCE_OFFSET_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].zeta_low > RESISTANCE_OFFSET_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].zeta_low < RESISTANCE_OFFSET_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_8; } - if( ( conductivitySensorCoefficients[ sensorId ].beta <= TEMPERATURE_SCALE_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].beta >= TEMPERATURE_SCALE_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].beta > TEMPERATURE_SCALE_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].beta < TEMPERATURE_SCALE_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_9; } - if( ( conductivitySensorCoefficients[ sensorId ].delta <= TEMPERATURE_OFFSET_HIGH_BOUNDS ) && - ( conductivitySensorCoefficients[ sensorId ].delta >= TEMPERATURE_OFFSET_LOW_BOUNDS ) ) + if( ( conductivitySensorCoefficients[ sensorId ].delta > TEMPERATURE_OFFSET_HIGH_BOUNDS ) || + ( conductivitySensorCoefficients[ sensorId ].delta < TEMPERATURE_OFFSET_LOW_BOUNDS ) ) { result = FALSE; idx = CAL_DATA_10; @@ -1050,5 +1042,48 @@ return result; } +/*********************************************************************//** + * @brief + * The testHandleConductivitySensorVersionRequest function sends + * the conductivity sensor version response + * @details \b Inputs: conductivitySensorRevisions[] + * @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 testHandleConductivitySensorVersionRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + U32 condSensorId = 0; + U32 msgId = 0; + U32 channelId = 0; + if ( message->hdr.payloadLen == sizeof( U32 ) ) + { + CONDUCTIVITY_REVISIONS_T CondVersionRecord; + + memcpy( &condSensorId, &message->payload, sizeof( U32 ) ); + + // Build conductivity version record + if ( condSensorId < 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 ) ); + + } + else + { + msgId = MSG_ID_FP_CONDUCTIVITY_SENSOR_VERSION_RESPONSE; + channelId = COMM_BUFFER_OUT_CAN_FP_BROADCAST; + memcpy( &CondVersionRecord, &conductivitySensorRevisions[ condSensorId ], sizeof( CONDUCTIVITY_REVISIONS_T ) ); + } + result = sendMessage( (MSG_ID_T)msgId, (COMM_BUFFER_T)channelId, (U08*)&CondVersionRecord, sizeof( CONDUCTIVITY_REVISIONS_T ) ); + + } + + return result; +} + /**@}*/