Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -r5e77ff3ec89af3b613788694bacfcbd874682396 -rc9d4f6bec5d48263bb2678d75d29bfef45bc0950 --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 5e77ff3ec89af3b613788694bacfcbd874682396) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision c9d4f6bec5d48263bb2678d75d29bfef45bc0950) @@ -356,127 +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 )