Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -re228885d4b066320c69bbec2553b5e7fc62ec2cb -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision e228885d4b066320c69bbec2553b5e7fc62ec2cb) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -35,6 +35,22 @@ #define SIEMENS_TO_MICROSIEMENS_CONVERSION 1000000 ///< Siemens to microSiemens conversion factor. #define COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Conductivity sensors FPGA error timeout in milliseconds. +/// Defined states for the conductivity write transaction. +typedef enum Conductvity_write_tx_states +{ + CONDUCTIVITY_WRITE_INITIATE = 0, ///< Conductivity sensor write initiate state. + CONDUCTIVITY_WRITE_COMPLETE, ///< Conductivity sensor write complete state. + NUM_OF_CONDUCTIVITY_WR_STATES ///< Number of conductivity write states. +} CONDUCTIVITY_WRITE_STATE_T; + +/// Defined states for the conductivity read transaction. +typedef enum Conductvity_read_tx_states +{ + CONDUCTIVITY_READ_INITIATE = 0, ///< Conductivity sensor read initiate state. + CONDUCTIVITY_READ_COMPLETE, ///< Conductivity sensor read complete state. + NUM_OF_CONDUCTIVITY_RD_STATES ///< Number of conductivity read states. +} CONDUCTIVITY_READ_STATE_T; + /// Conductivity Sensor Control group typedef struct { @@ -48,36 +64,20 @@ BOOL readComplete; ///< Flag indicates read transaction complete state. U32 writeData; ///< Data to write for the given conductivity sensor. U32 readData; ///< Read data from the given conductivity sensor. + CONDUCTIVITY_READ_STATE_T readExecState; ///< Read executive state from the given conductivity sensor. + CONDUCTIVITY_WRITE_STATE_T writeExecState; ///< Write executive state from the given conductivity sensor. U16 writeAddress; ///< Write address where the data needs to be written. U16 readAddress; ///< Read address to read the data. } CONDUCTIVITY_SENSOR_CONTROL_T; -/// Defined states for the conductivity write transaction. -typedef enum Conductvity_write_tx_states -{ - CONDUCTIVITY_WRITE_INITIATE = 0, ///< Conductivity sensor write initiate state. - CONDUCTIVITY_WRITE_COMPLETE, ///< Conductivity sensor write complete state. - NUM_OF_CONDUCTIVITY_WR_STATES ///< Number of conductivity write states. -} CONDUCTIVITY_WRITE_STATE_T; - -/// Defined states for the conductivity read transaction. -typedef enum Conductvity_read_tx_states -{ - CONDUCTIVITY_READ_INITIATE = 0, ///< Conductivity sensor read initiate state. - CONDUCTIVITY_READ_COMPLETE, ///< Conductivity sensor read complete state. - NUM_OF_CONDUCTIVITY_RD_STATES ///< Number of conductivity write states. -} CONDUCTIVITY_READ_STATE_T; - // ********** private data ********** static OVERRIDE_F32_T currentConductivityReadings[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Current conductivity sensor conductivity readings (overrideable). static OVERRIDE_F32_T currentTemperatureReadings[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Current conductivity sensor temperature readings (overrideable). static OVERRIDE_U32_T lastConductivityReadCounter[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Last conductivity sensor read count (Overrideable). static OVERRIDE_U32_T lastConductivityErrorCounter[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Last conductivity sensor error count (Overrideable). -static CONDUCTIVITY_SENSOR_CONTROL_T conductivitySensorControl[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity sensor Control -static CONDUCTIVITY_WRITE_STATE_T conductivitySensorWriteState; ///< Conductivity sensor write state machine -static CONDUCTIVITY_READ_STATE_T conductivitySensorReadState; ///< Conductivity sensor read state machine +static CONDUCTIVITY_SENSOR_CONTROL_T conductivitySensorControl[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity sensor Control for reset, init, read and write operations. // ********** private function prototypes ********** @@ -89,7 +89,7 @@ /*********************************************************************//** * @brief - * The initConductivitySensors function initializes the ConductivitySensors module. + * The initConductivitySensors function initializes the ConductivitySensors unit. * @details \b Inputs: none * @details \b Outputs: ConductivitySensors unit variables initialized * @return none @@ -131,14 +131,12 @@ conductivitySensorControl[i].writeAddress = 0; conductivitySensorControl[i].writeComplete = 0; conductivitySensorControl[i].writeData = 0; + conductivitySensorControl[i].readExecState = CONDUCTIVITY_READ_INITIATE; + conductivitySensorControl[i].writeExecState = CONDUCTIVITY_WRITE_INITIATE; conductivitySensorControl[i].writeEnable = FALSE; conductivitySensorControl[i].writeInProgress = FALSE; } - //Initialize the conductivity sensor read and write state - conductivitySensorWriteState = CONDUCTIVITY_WRITE_INITIATE; - conductivitySensorReadState = CONDUCTIVITY_READ_INITIATE; - // Initialize the conductivity sensor FPGA alarms initFPGAPersistentAlarm( FPGA_PERS_ERROR_CD1_COND_SENSOR, ALARM_ID_DD_CD1_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); initFPGAPersistentAlarm( FPGA_PERS_ERROR_CD2_COND_SENSOR, ALARM_ID_DD_CD2_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); @@ -592,21 +590,26 @@ *************************************************************************/ void execConductivitySensorWrite( void ) { - // state machine - switch ( conductivitySensorWriteState ) + CONDUCTIVITY_SENSORS_T sensor; + + for ( sensor = CONDUCTIVITYSENSORS_CD1_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { - case CONDUCTIVITY_WRITE_INITIATE: - conductivitySensorWriteState = handleConductivitySensorsWriteInitiate(); - break; + // write state machine + switch ( conductivitySensorControl[sensor].writeExecState ) + { + case CONDUCTIVITY_WRITE_INITIATE: + conductivitySensorControl[sensor].writeExecState = handleConductivitySensorsWriteInitiate(); + break; - case CONDUCTIVITY_WRITE_COMPLETE: - conductivitySensorWriteState = handleConductivitySensorsWriteComplete(); - break; + case CONDUCTIVITY_WRITE_COMPLETE: + conductivitySensorControl[sensor].writeExecState = handleConductivitySensorsWriteComplete(); + break; - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_WR_INVALID_EXEC_STATE, conductivitySensorWriteState ) - conductivitySensorWriteState = CONDUCTIVITY_WRITE_INITIATE; - break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_WR_INVALID_EXEC_STATE, conductivitySensorControl[sensor].writeExecState ) + conductivitySensorControl[sensor].writeExecState = CONDUCTIVITY_WRITE_INITIATE; + break; + } } } @@ -732,21 +735,26 @@ *************************************************************************/ void execConductivitySensorRead( void ) { - // state machine - switch ( conductivitySensorReadState ) + CONDUCTIVITY_SENSORS_T sensor; + + for ( sensor = CONDUCTIVITYSENSORS_CD1_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { - case CONDUCTIVITY_READ_INITIATE: - conductivitySensorReadState = handleConductivitySensorsReadInitiate(); - break; + // Read state machine + switch ( conductivitySensorControl[sensor].readExecState ) + { + case CONDUCTIVITY_READ_INITIATE: + conductivitySensorControl[sensor].readExecState = handleConductivitySensorsReadInitiate(); + break; - case CONDUCTIVITY_READ_COMPLETE: - conductivitySensorReadState = handleConductivitySensorsReadComplete(); - break; + case CONDUCTIVITY_READ_COMPLETE: + conductivitySensorControl[sensor].readExecState = handleConductivitySensorsReadComplete(); + break; - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_RD_INVALID_EXEC_STATE, conductivitySensorReadState ) - conductivitySensorReadState = CONDUCTIVITY_READ_INITIATE; - break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_RD_INVALID_EXEC_STATE, conductivitySensorControl[sensor].readExecState ) + conductivitySensorControl[sensor].readExecState = CONDUCTIVITY_READ_INITIATE; + break; + } } } @@ -882,12 +890,12 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T override; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); - // Verify tester has logged in with TD and override type is valid + // Verify tester has logged in with DD and override type is valid if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { U32 sensor = override.index; - // Verify bubble detector index of override + // Verify conductivity sensor index of override if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) { if ( OVERRIDE_OVERRIDE == ovType ) @@ -896,14 +904,14 @@ currentConductivityReadings[ sensor ].ovData = value; currentConductivityReadings[ sensor ].override = OVERRIDE_KEY; - result = TRUE; } else { currentConductivityReadings[ sensor ].override = OVERRIDE_RESET; currentConductivityReadings[ sensor ].ovData = currentConductivityReadings[ sensor ].ovInitData; - result = TRUE; } + + result = TRUE; } } @@ -926,12 +934,12 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T override; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); - // Verify tester has logged in with TD and override type is valid + // Verify tester has logged in with DD and override type is valid if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { U32 sensor = override.index; - // Verify bubble detector index of override + // Verify conductivity sensor index of override if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) { if ( OVERRIDE_OVERRIDE == ovType ) @@ -940,18 +948,106 @@ currentTemperatureReadings[ sensor ].ovData = value; currentTemperatureReadings[ sensor ].override = OVERRIDE_KEY; - result = TRUE; } else { currentTemperatureReadings[ sensor ].override = OVERRIDE_RESET; currentTemperatureReadings[ sensor ].ovData = currentTemperatureReadings[ sensor ].ovInitData; - result = TRUE; } + + result = TRUE; } } return result; } +/*********************************************************************//** + * @brief + * The testConductivitySensorReadCounterOverride function overrides + * the value of the specified conductivity sensor read counter with a given value. + * @details \b Inputs: none + * @details \b Outputs: lastConductivityReadCounter[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the conductivity sensor read counter. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testConductivitySensorReadCounterOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + + // Verify tester has logged in with DD and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) + { + U32 sensor = override.index; + + // Verify conductivity sensor index of override + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + U32 value = override.state.u32; + + lastConductivityReadCounter[ sensor ].ovData = value; + lastConductivityReadCounter[ sensor ].override = OVERRIDE_KEY; + } + else + { + lastConductivityReadCounter[ sensor ].override = OVERRIDE_RESET; + lastConductivityReadCounter[ sensor ].ovData = lastConductivityReadCounter[ sensor ].ovInitData; + } + + result = TRUE; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testConductivitySensorErrorCounterOverride function overrides + * the value of the specified conductivity sensor error counter with a given value. + * @details \b Inputs: none + * @details \b Outputs: lastConductivityErrorCounter[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the conductivity sensor error counter. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testConductivitySensorErrorCounterOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + + // Verify tester has logged in with DD and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) + { + U32 sensor = override.index; + + // Verify conductivity sensor index of override + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + U32 value = override.state.u32; + + lastConductivityErrorCounter[ sensor ].ovData = value; + lastConductivityErrorCounter[ sensor ].override = OVERRIDE_KEY; + } + else + { + lastConductivityErrorCounter[ sensor ].override = OVERRIDE_RESET; + lastConductivityErrorCounter[ sensor ].ovData = lastConductivityErrorCounter[ sensor ].ovInitData; + } + + result = TRUE; + } + } + + return result; +} + /**@}*/