Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -rf6022e86136c821709ce24b61e11e8e2bdf0b11e -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision f6022e86136c821709ce24b61e11e8e2bdf0b11e) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -261,10 +261,10 @@ *************************************************************************/ static void calculateDegasPumpTargetPressure( void ) { - F32 pressureInmmHg = getFilteredPressure( BARO_PRES ); + //F32 pressureInmmHg = getFilteredPressure( BARO_PRES ); //Get the degassing target pressure - pumpTargetPressure[D12_PUMP].data = ( ( DEGAS_PUMP_SLOPE_FACTOR * pressureInmmHg ) + DEGAS_PUMP_INTERCEPT_FACTOR ) + DEGAS_PUMP_TARGET_PRES_ADJ_THRESHOLD; + //pumpTargetPressure[D12_PUMP].data = ( ( DEGAS_PUMP_SLOPE_FACTOR * pressureInmmHg ) + DEGAS_PUMP_INTERCEPT_FACTOR ) + DEGAS_PUMP_TARGET_PRES_ADJ_THRESHOLD; } /*********************************************************************//** Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -r9e6e86f604c8cce7c1704ae55d1e026de3422782 -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 9e6e86f604c8cce7c1704ae55d1e026de3422782) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -55,7 +55,7 @@ /// Conductivity Sensor Control group typedef struct { - BOOL resetRequested; ///< Flag indicates a reset command for the given conducitvity sensor. + BOOL resetRequested; ///< Flag indicates a reset command for the given conductivity sensor. BOOL initEnable; ///< Flag indicates a enables initialization procedure for the given conductivity sensor. BOOL writeEnable; ///< Flag indicates a enables write transaction for the given conductivity sensor. BOOL readEnable; ///< Flag indicates a enables read transaction for the given conductivity sensor. @@ -83,10 +83,10 @@ // ********** private function prototypes ********** static void checkConductivitySensors( void ); -static CONDUCTIVITY_READ_STATE_T handleConductivitySensorsReadInitiate( void ); -static CONDUCTIVITY_WRITE_STATE_T handleConductivitySensorsWriteComplete( void ); -static CONDUCTIVITY_WRITE_STATE_T handleConductivitySensorsWriteInitiate( void ); -static CONDUCTIVITY_READ_STATE_T handleConductivitySensorsReadComplete( void ); +static CONDUCTIVITY_READ_STATE_T handleConductivitySensorsReadInitiate( CONDUCTIVITY_SENSORS_T sensorID ); +static CONDUCTIVITY_WRITE_STATE_T handleConductivitySensorsWriteComplete( CONDUCTIVITY_SENSORS_T sensorID ); +static CONDUCTIVITY_WRITE_STATE_T handleConductivitySensorsWriteInitiate( CONDUCTIVITY_SENSORS_T sensorID ); +static CONDUCTIVITY_READ_STATE_T handleConductivitySensorsReadComplete( CONDUCTIVITY_SENSORS_T sensorID ); /*********************************************************************//** * @brief @@ -97,45 +97,45 @@ *************************************************************************/ void initConductivitySensors( void ) { - U08 i; + CONDUCTIVITY_SENSORS_T sensor; // Initialize override structures for each conductivity sensor - for ( i = 0; i < NUM_OF_CONDUCTIVITY_SENSORS; i++ ) + for ( sensor = FIRST_DD_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { - currentConductivityReadings[ i ].data = 0.0F; - currentConductivityReadings[ i ].ovData = 0.0F; - currentConductivityReadings[ i ].ovInitData = 0.0F; - currentConductivityReadings[ i ].override = OVERRIDE_RESET; + currentConductivityReadings[ sensor ].data = 0.0F; + currentConductivityReadings[ sensor ].ovData = 0.0F; + currentConductivityReadings[ sensor ].ovInitData = 0.0F; + currentConductivityReadings[ sensor ].override = OVERRIDE_RESET; - currentTemperatureReadings[ i ].data = 0.0F; - currentTemperatureReadings[ i ].ovData = 0.0F; - currentTemperatureReadings[ i ].ovInitData = 0.0F; - currentTemperatureReadings[ i ].override = OVERRIDE_RESET; + currentTemperatureReadings[ sensor ].data = 0.0F; + currentTemperatureReadings[ sensor ].ovData = 0.0F; + currentTemperatureReadings[ sensor ].ovInitData = 0.0F; + currentTemperatureReadings[ sensor ].override = OVERRIDE_RESET; - lastConductivityReadCounter[ i ].data = 0; - lastConductivityReadCounter[ i ].ovData = 0; - lastConductivityReadCounter[ i ].ovInitData = 0; - lastConductivityReadCounter[ i ].override = OVERRIDE_RESET; + lastConductivityReadCounter[ sensor ].data = 0; + lastConductivityReadCounter[ sensor ].ovData = 0; + lastConductivityReadCounter[ sensor ].ovInitData = 0; + lastConductivityReadCounter[ sensor ].override = OVERRIDE_RESET; - lastConductivityErrorCounter[ i ].data = 0; - lastConductivityErrorCounter[ i ].ovData = 0; - lastConductivityErrorCounter[ i ].ovInitData = 0; - lastConductivityErrorCounter[ i ].override = OVERRIDE_RESET; + lastConductivityErrorCounter[ sensor ].data = 0; + lastConductivityErrorCounter[ sensor ].ovData = 0; + lastConductivityErrorCounter[ sensor ].ovInitData = 0; + lastConductivityErrorCounter[ sensor ].override = OVERRIDE_RESET; - conductivitySensorControl[i].initEnable = FALSE; - conductivitySensorControl[i].readAddress = 0; - conductivitySensorControl[i].readComplete = FALSE; - conductivitySensorControl[i].readData = 0; - conductivitySensorControl[i].readEnable = FALSE; - conductivitySensorControl[i].readInProgress = FALSE; - conductivitySensorControl[i].resetRequested = FALSE; - 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; + conductivitySensorControl[ sensor ].initEnable = FALSE; + conductivitySensorControl[ sensor ].readAddress = 0; + conductivitySensorControl[ sensor ].readComplete = FALSE; + conductivitySensorControl[ sensor ].readData = 0; + conductivitySensorControl[ sensor ].readEnable = FALSE; + conductivitySensorControl[ sensor ].readInProgress = FALSE; + conductivitySensorControl[ sensor ].resetRequested = FALSE; + conductivitySensorControl[ sensor ].writeAddress = 0; + conductivitySensorControl[ sensor ].writeComplete = 0; + conductivitySensorControl[ sensor ].writeData = 0; + conductivitySensorControl[ sensor ].readExecState = CONDUCTIVITY_READ_INITIATE; + conductivitySensorControl[ sensor ].writeExecState = CONDUCTIVITY_WRITE_INITIATE; + conductivitySensorControl[ sensor ].writeEnable = FALSE; + conductivitySensorControl[ sensor ].writeInProgress = FALSE; } // Initialize the conductivity sensor FPGA alarms @@ -144,6 +144,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_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_P18_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); } /*********************************************************************//** @@ -167,26 +169,34 @@ currentConductivityReadings[ D29_COND ].data = (F32)getFPGAD29Cond(); currentConductivityReadings[ D43_COND ].data = (F32)getFPGAD43Cond(); currentConductivityReadings[ D74_COND ].data = (F32)getFPGAD74Cond(); + currentConductivityReadings[ P9_COND ].data = (F32)getFPGAP9Conductivity(); + currentConductivityReadings[ P18_COND ].data = (F32)getFPGAP18Conductivity(); // Read temperature associated to conductivity sensor currentTemperatureReadings[ D17_COND ].data = (F32)getFPGAD17CondTemp(); currentTemperatureReadings[ D27_COND ].data = (F32)getFPGAD27CondTemp(); currentTemperatureReadings[ D29_COND ].data = (F32)getFPGAD29CondTemp(); currentTemperatureReadings[ D43_COND ].data = (F32)getFPGAD43CondTemp(); currentTemperatureReadings[ D74_COND ].data = (F32)getFPGAD74CondTemp(); + currentTemperatureReadings[ P9_COND ].data = (F32)getFPGAP9Temperature(); + currentTemperatureReadings[ P18_COND ].data = (F32)getFPGAP18Temperature(); // Update read and error counters for each conductivity sensor lastConductivityReadCounter[ D17_COND ].data = (U32)getFPGAD17CondReadCount(); lastConductivityReadCounter[ D27_COND ].data = (U32)getFPGAD27CondReadCount(); lastConductivityReadCounter[ D29_COND ].data = (U32)getFPGAD29CondReadCount(); lastConductivityReadCounter[ D43_COND ].data = (U32)getFPGAD43CondReadCount(); lastConductivityReadCounter[ D74_COND ].data = (U32)getFPGAD74CondReadCount(); + lastConductivityReadCounter[ P9_COND ].data = (U32)getFPGAP9ReadCount(); + lastConductivityReadCounter[ P18_COND ].data = (U32)getFPGAP18ReadCount(); lastConductivityErrorCounter[ D17_COND ].data = (U32)getFPGAD17CondErrorCount(); lastConductivityErrorCounter[ D27_COND ].data = (U32)getFPGAD27CondErrorCount(); lastConductivityErrorCounter[ D29_COND ].data = (U32)getFPGAD29CondErrorCount(); lastConductivityErrorCounter[ D43_COND ].data = (U32)getFPGAD43CondErrorCount(); lastConductivityErrorCounter[ D74_COND ].data = (U32)getFPGAD74CondErrorCount(); + lastConductivityErrorCounter[ P9_COND ].data = (U32)getFPGAP9ErrorCount(); + lastConductivityErrorCounter[ P18_COND ].data = (U32)getFPGAP18ErrorCount(); #ifdef ENABLE_ALARM_1 // Monitor conductivity sensor health @@ -214,17 +224,21 @@ *************************************************************************/ static void checkConductivitySensors( void ) { - checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D17_COND_SENSOR, getConductivitySensorReadCount(D17_COND) ); - checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D27_COND_SENSOR, getConductivitySensorReadCount(D27_COND) ); - checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D29_COND_SENSOR, getConductivitySensorReadCount(D29_COND) ); - checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D43_COND_SENSOR, getConductivitySensorReadCount(D43_COND) ); - checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D74_COND_SENSOR, getConductivitySensorReadCount(D74_COND) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D17_COND_SENSOR, getConductivitySensorReadCount( D17_COND ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D27_COND_SENSOR, getConductivitySensorReadCount( D27_COND ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D29_COND_SENSOR, getConductivitySensorReadCount( D29_COND ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D43_COND_SENSOR, getConductivitySensorReadCount( D43_COND ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_D74_COND_SENSOR, getConductivitySensorReadCount( D74_COND ) ); + //checkFPGAPersistentAlarms( FPGA_PERS_ERROR_P9_COND_SENSOR, getConductivitySensorReadCount( P9_COND ) ); + //checkFPGAPersistentAlarms( FPGA_PERS_ERROR_P18_COND_SENSOR, getConductivitySensorReadCount( P18_COND ) ); checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_D17_COND_SENSOR, getConductivitySensorErrorCount( D17_COND ) ); checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_D27_COND_SENSOR, getConductivitySensorErrorCount( D27_COND ) ); checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_D29_COND_SENSOR, getConductivitySensorErrorCount( D29_COND ) ); checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_D43_COND_SENSOR, getConductivitySensorErrorCount( D43_COND ) ); checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_D74_COND_SENSOR, getConductivitySensorErrorCount( D74_COND ) ); + //checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_P9_COND_SENSOR, getConductivitySensorErrorCount( P9_COND ) ); + //checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_P18_COND_SENSOR, getConductivitySensorErrorCount( P18_COND ) ); } /*********************************************************************//** @@ -538,6 +552,30 @@ // clear D74 reset clearFPGAD74CondReset(); } + + if ( TRUE == conductivitySensorControl[ P9_COND ].resetRequested ) + { + // P9 reset + setFPGAP9Reset(); + conductivitySensorControl[ P9_COND ].resetRequested = FALSE; + } + else + { + // clear P9 reset + clearFPGAP9Reset(); + } + + if ( TRUE == conductivitySensorControl[ P18_COND ].resetRequested ) + { + // P18 reset + setFPGAP18Reset(); + conductivitySensorControl[ P18_COND ].resetRequested = FALSE; + } + else + { + // clear P18 reset + clearFPGAP18Reset(); + } } /*********************************************************************//** @@ -612,6 +650,30 @@ // clear D74 Init command clearFPGAD74CondInitEnable(); } + + if ( TRUE == conductivitySensorControl[ P9_COND ].initEnable ) + { + // P9 initialization + setFPGAP9InitEnable(); + conductivitySensorControl[ P9_COND ].initEnable = FALSE; + } + else + { + // clear P9 Init command + clearFPGAP9InitEnable(); + } + + if ( TRUE == conductivitySensorControl[ P18_COND ].initEnable ) + { + // P18 initialization + setFPGAP18InitEnable(); + conductivitySensorControl[ P18_COND ].initEnable = FALSE; + } + else + { + // clear P18 Init command + clearFPGAP18InitEnable(); + } } /*********************************************************************//** @@ -628,22 +690,22 @@ { CONDUCTIVITY_SENSORS_T sensor; - for ( sensor = FIRST_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) + for ( sensor = FIRST_DD_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { // write state machine - switch ( conductivitySensorControl[sensor].writeExecState ) + switch ( conductivitySensorControl[ sensor ].writeExecState ) { case CONDUCTIVITY_WRITE_INITIATE: - conductivitySensorControl[sensor].writeExecState = handleConductivitySensorsWriteInitiate(); + conductivitySensorControl[ sensor ].writeExecState = handleConductivitySensorsWriteInitiate( sensor ); break; case CONDUCTIVITY_WRITE_COMPLETE: - conductivitySensorControl[sensor].writeExecState = handleConductivitySensorsWriteComplete(); + conductivitySensorControl[ sensor ].writeExecState = handleConductivitySensorsWriteComplete( sensor ); 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; + 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; } } @@ -655,72 +717,65 @@ * transaction of given conducitviy sensors. * @details \b Inputs: conductivitySensorControl * @details \b Outputs: conductivitySensorControl + * @param sensorID ID of conductivity sensor to handle write initiate state for * @return CONDUCTIVITY_WRITE_STATE_T current state of write transaction *************************************************************************/ -static CONDUCTIVITY_WRITE_STATE_T handleConductivitySensorsWriteInitiate( void ) +static CONDUCTIVITY_WRITE_STATE_T handleConductivitySensorsWriteInitiate( CONDUCTIVITY_SENSORS_T sensorID ) { CONDUCTIVITY_WRITE_STATE_T state = CONDUCTIVITY_WRITE_INITIATE; - if ( TRUE == conductivitySensorControl[ D17_COND ].writeEnable && - FALSE == conductivitySensorControl[ D17_COND ].writeInProgress ) + if ( TRUE == conductivitySensorControl[ sensorID ].writeEnable && + FALSE == conductivitySensorControl[ sensorID ].writeInProgress ) { - // D17 write request - conductivitySensorControl[ D17_COND ].writeComplete = FALSE; - conductivitySensorControl[ D17_COND ].writeInProgress = TRUE; - setFPGACD12Address( conductivitySensorControl[ D17_COND ].writeAddress ); - setFPGACD12Data( conductivitySensorControl[ D17_COND ].writeData ); - setFPGAD17CondWriteEnable(); - state = CONDUCTIVITY_WRITE_COMPLETE; - } + conductivitySensorControl[ sensorID ].writeComplete = FALSE; + conductivitySensorControl[ sensorID ].writeInProgress = TRUE; - if ( TRUE == conductivitySensorControl[ D27_COND ].writeEnable && - FALSE == conductivitySensorControl[ D27_COND ].writeInProgress ) - { - // D27 write request - conductivitySensorControl[ D27_COND ].writeComplete = FALSE; - conductivitySensorControl[ D27_COND ].writeInProgress = TRUE; - setFPGACD12Address( conductivitySensorControl[ D27_COND ].writeAddress ); - setFPGACD12Data( conductivitySensorControl[ D27_COND ].writeData ); - setFPGAD27CondWriteEnable(); - state = CONDUCTIVITY_WRITE_COMPLETE; - } + if ( D17_COND == sensorID ) + { + setFPGACD12Address( conductivitySensorControl[ sensorID ].writeAddress ); + setFPGACD12Data( conductivitySensorControl[ sensorID ].writeData ); + setFPGAD17CondWriteEnable(); + } + else if ( D27_COND == sensorID ) + { + setFPGACD12Address( conductivitySensorControl[ sensorID ].writeAddress ); + setFPGACD12Data( conductivitySensorControl[ sensorID ].writeData ); + setFPGAD27CondWriteEnable(); + } + else if ( D29_COND == sensorID ) + { + setFPGACD34Address( conductivitySensorControl[ sensorID ].writeAddress ); + setFPGACD34Data( conductivitySensorControl[ sensorID ].writeData ); + setFPGAD29CondWriteEnable(); + } + else if ( D43_COND == sensorID ) + { + setFPGACD34Address( conductivitySensorControl[ sensorID ].writeAddress ); + setFPGACD34Data( conductivitySensorControl[ sensorID ].writeData ); + setFPGAD43CondWriteEnable(); + } + else if ( D74_COND == sensorID ) + { + setFPGACD5Address( conductivitySensorControl[ sensorID ].writeAddress ); + setFPGACD5Data( conductivitySensorControl[ sensorID ].writeData ); + setFPGAD74CondWriteEnable(); + } + else if ( P9_COND == sensorID ) + { + setFPGAP9Address( conductivitySensorControl[ sensorID ].writeAddress ); + setFPGAP9Data( conductivitySensorControl[ sensorID ].writeData ); + setFPGAP9WriteEnable(); + } + else if ( P18_COND == sensorID ) + { + setFPGAP18Address( conductivitySensorControl[ sensorID ].writeAddress ); + setFPGAP18Data( conductivitySensorControl[ sensorID ].writeData ); + setFPGAP18WriteEnable(); + } - if ( TRUE == conductivitySensorControl[ D29_COND ].writeEnable && - FALSE == conductivitySensorControl[ D29_COND ].writeInProgress ) - { - // D29 write request - conductivitySensorControl[ D29_COND ].writeComplete = FALSE; - conductivitySensorControl[ D29_COND ].writeInProgress = TRUE; - setFPGACD34Address( conductivitySensorControl[ D29_COND ].writeAddress ); - setFPGACD34Data( conductivitySensorControl[ D29_COND ].writeData ); - setFPGAD29CondWriteEnable(); state = CONDUCTIVITY_WRITE_COMPLETE; } - if ( TRUE == conductivitySensorControl[ D43_COND ].writeEnable && - FALSE == conductivitySensorControl[ D43_COND ].writeInProgress ) - { - // D43 write request - conductivitySensorControl[ D43_COND ].writeComplete = FALSE; - conductivitySensorControl[ D43_COND ].writeInProgress = TRUE; - setFPGACD34Address( conductivitySensorControl[ D43_COND ].writeAddress ); - setFPGACD34Data( conductivitySensorControl[ D43_COND ].writeData ); - setFPGAD43CondWriteEnable(); - state = CONDUCTIVITY_WRITE_COMPLETE; - } - - if ( TRUE == conductivitySensorControl[ D74_COND ].writeEnable && - FALSE == conductivitySensorControl[ D74_COND ].writeInProgress ) - { - // D74 write request - conductivitySensorControl[ D74_COND ].writeComplete = FALSE; - conductivitySensorControl[ D74_COND ].writeInProgress = TRUE; - setFPGACD5Address( conductivitySensorControl[ D74_COND ].writeAddress ); - setFPGACD5Data( conductivitySensorControl[ D74_COND ].writeData ); - setFPGAD74CondWriteEnable(); - state = CONDUCTIVITY_WRITE_COMPLETE; - } - return state; } @@ -730,51 +785,50 @@ * transaction completion of given conducitviy sensors. * @details \b Inputs: conductivitySensorControl * @details \b Outputs: conductivitySensorControl + * @param sensorID ID of conductivity sensor to handle write complete state for * @return CONDUCTIVITY_WRITE_STATE_T current state of write transaction *************************************************************************/ -static CONDUCTIVITY_WRITE_STATE_T handleConductivitySensorsWriteComplete( void ) +static CONDUCTIVITY_WRITE_STATE_T handleConductivitySensorsWriteComplete( CONDUCTIVITY_SENSORS_T sensorID ) { CONDUCTIVITY_WRITE_STATE_T state = CONDUCTIVITY_WRITE_COMPLETE; - if ( TRUE == conductivitySensorControl[ D17_COND ].writeInProgress ) + if ( TRUE == conductivitySensorControl[ sensorID ].writeInProgress ) { - conductivitySensorControl[ D17_COND ].writeComplete = TRUE; - conductivitySensorControl[ D17_COND ].writeEnable = FALSE; - clearFPGAD17CondWriteEnable(); - state = CONDUCTIVITY_WRITE_INITIATE; - } + conductivitySensorControl[ sensorID ].writeComplete = TRUE; + conductivitySensorControl[ sensorID ].writeEnable = FALSE; - if ( TRUE == conductivitySensorControl[ D27_COND ].writeInProgress ) - { - conductivitySensorControl[ D27_COND ].writeComplete = TRUE; - conductivitySensorControl[ D27_COND ].writeEnable = FALSE; - clearFPGAD27CondWriteEnable(); - state = CONDUCTIVITY_WRITE_INITIATE; - } + if ( D17_COND == sensorID ) + { + clearFPGAD17CondWriteEnable(); + } + else if ( D27_COND == sensorID ) + { + clearFPGAD27CondWriteEnable(); + } + else if ( D29_COND == sensorID ) + { + clearFPGAD29CondWriteEnable(); + } + else if ( D43_COND == sensorID ) + { + clearFPGAD43CondWriteEnable(); + } + else if ( D74_COND == sensorID ) + { + clearFPGAD74CondWriteEnable(); + } + else if ( P9_COND == sensorID ) + { + clearFPGAP9WriteEnable(); + } + else if ( P18_COND == sensorID ) + { + clearFPGAP18WriteEnable(); + } - if ( TRUE == conductivitySensorControl[ D29_COND ].writeInProgress ) - { - conductivitySensorControl[ D29_COND ].writeComplete = TRUE; - conductivitySensorControl[ D29_COND ].writeEnable = FALSE; - clearFPGAD29CondWriteEnable(); state = CONDUCTIVITY_WRITE_INITIATE; } - if ( TRUE == conductivitySensorControl[ D43_COND ].writeInProgress ) - { - conductivitySensorControl[ D43_COND ].writeComplete = TRUE; - conductivitySensorControl[ D43_COND ].writeEnable = FALSE; - clearFPGAD43CondWriteEnable(); - state = CONDUCTIVITY_WRITE_INITIATE; - } - - if ( TRUE == conductivitySensorControl[ D74_COND ].writeInProgress ) - { - conductivitySensorControl[ D74_COND ].writeComplete = TRUE; - conductivitySensorControl[ D74_COND ].writeEnable = FALSE; - clearFPGAD74CondWriteEnable(); - state = CONDUCTIVITY_WRITE_INITIATE; - } return state; } @@ -792,22 +846,22 @@ { CONDUCTIVITY_SENSORS_T sensor; - for ( sensor = FIRST_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) + for ( sensor = FIRST_DD_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { // Read state machine - switch ( conductivitySensorControl[sensor].readExecState ) + switch ( conductivitySensorControl[ sensor ].readExecState ) { case CONDUCTIVITY_READ_INITIATE: - conductivitySensorControl[sensor].readExecState = handleConductivitySensorsReadInitiate(); + conductivitySensorControl[ sensor ].readExecState = handleConductivitySensorsReadInitiate( sensor ); break; case CONDUCTIVITY_READ_COMPLETE: - conductivitySensorControl[sensor].readExecState = handleConductivitySensorsReadComplete(); + conductivitySensorControl[ sensor ].readExecState = handleConductivitySensorsReadComplete( sensor ); 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; + 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; } } @@ -819,67 +873,59 @@ * transaction of given conducitviy sensors. * @details \b Inputs: conductivitySensorControl * @details \b Outputs: conductivitySensorControl + * @param sensorID ID of conductivity sensor to handle read initiate state for * @return CONDUCTIVITY_READ_STATE_T current state of read transaction *************************************************************************/ -static CONDUCTIVITY_READ_STATE_T handleConductivitySensorsReadInitiate( void ) +static CONDUCTIVITY_READ_STATE_T handleConductivitySensorsReadInitiate( CONDUCTIVITY_SENSORS_T sensorID ) { CONDUCTIVITY_READ_STATE_T state = CONDUCTIVITY_READ_INITIATE; - if ( TRUE == conductivitySensorControl[ D17_COND ].readEnable && - FALSE == conductivitySensorControl[ D17_COND ].readInProgress ) + if ( TRUE == conductivitySensorControl[ sensorID ].readEnable && + FALSE == conductivitySensorControl[ sensorID ].readInProgress ) { // D17 read request - conductivitySensorControl[ D17_COND ].readComplete = FALSE; - conductivitySensorControl[ D17_COND ].readInProgress = TRUE; - setFPGACD12Address( conductivitySensorControl[ D17_COND ].readAddress ); - setFPGAD17CondReadEnable(); - state = CONDUCTIVITY_READ_COMPLETE; - } + conductivitySensorControl[ sensorID ].readComplete = FALSE; + conductivitySensorControl[ sensorID ].readInProgress = TRUE; - if ( TRUE == conductivitySensorControl[ D27_COND ].readEnable && - FALSE == conductivitySensorControl[ D27_COND ].readInProgress ) - { - // D27 read request - conductivitySensorControl[ D27_COND ].readComplete = FALSE; - conductivitySensorControl[ D27_COND ].readInProgress = TRUE; - setFPGACD12Address( conductivitySensorControl[ D27_COND ].readAddress ); - setFPGAD27CondReadEnable(); - state = CONDUCTIVITY_READ_COMPLETE; - } + if ( D17_COND == sensorID ) + { + setFPGACD12Address( conductivitySensorControl[ sensorID ].readAddress ); + setFPGAD17CondReadEnable(); + } + else if ( D27_COND == sensorID ) + { + setFPGACD12Address( conductivitySensorControl[ sensorID ].readAddress ); + setFPGAD27CondReadEnable(); + } + else if ( D29_COND == sensorID ) + { + setFPGACD34Address( conductivitySensorControl[ sensorID ].readAddress ); + setFPGAD29CondReadEnable(); + } + else if ( D43_COND == sensorID ) + { + setFPGACD34Address( conductivitySensorControl[ sensorID ].readAddress ); + setFPGAD43CondReadEnable(); + } + else if ( D74_COND == sensorID ) + { + setFPGACD5Address( conductivitySensorControl[ sensorID ].readAddress ); + setFPGAD74CondReadEnable(); + } + else if ( P9_COND == sensorID ) + { + setFPGAP9Address( conductivitySensorControl[ sensorID ].readAddress ); + setFPGAP9ReadEnable(); + } + else if ( P18_COND == sensorID ) + { + setFPGAP18Address( conductivitySensorControl[ sensorID ].readAddress ); + setFPGAP18ReadEnable(); + } - if ( TRUE == conductivitySensorControl[ D29_COND ].readEnable && - FALSE == conductivitySensorControl[ D29_COND ].readInProgress ) - { - // D29 read request - conductivitySensorControl[ D29_COND ].readComplete = FALSE; - conductivitySensorControl[ D29_COND ].readInProgress = TRUE; - setFPGACD34Address( conductivitySensorControl[ D29_COND ].readAddress ); - setFPGAD29CondReadEnable(); state = CONDUCTIVITY_READ_COMPLETE; } - if ( TRUE == conductivitySensorControl[ D43_COND ].readEnable && - FALSE == conductivitySensorControl[ D43_COND ].readInProgress ) - { - // D43 read request - conductivitySensorControl[ D43_COND ].readComplete = FALSE; - conductivitySensorControl[ D43_COND ].readInProgress = TRUE; - setFPGACD34Address( conductivitySensorControl[ D43_COND ].readAddress ); - setFPGAD43CondReadEnable(); - state = CONDUCTIVITY_READ_COMPLETE; - } - - if ( TRUE == conductivitySensorControl[ D74_COND ].readEnable && - FALSE == conductivitySensorControl[ D74_COND ].readInProgress ) - { - // D74 read request - conductivitySensorControl[ D74_COND ].readComplete = FALSE; - conductivitySensorControl[ D74_COND ].readInProgress = TRUE; - setFPGACD5Address( conductivitySensorControl[ D74_COND ].readAddress ); - setFPGAD74CondReadEnable(); - state = CONDUCTIVITY_READ_COMPLETE; - } - return state; } @@ -889,66 +935,162 @@ * request completion of given conducitviy sensors. * @details \b Inputs: conductivitySensorControl * @details \b Outputs: conductivitySensorControl + * @param sensorID ID of conductivity sensor to handle read complete state for * @return CONDUCTIVITY_READ_STATE_T current state of write transaction *************************************************************************/ -static CONDUCTIVITY_READ_STATE_T handleConductivitySensorsReadComplete( void ) +static CONDUCTIVITY_READ_STATE_T handleConductivitySensorsReadComplete( CONDUCTIVITY_SENSORS_T sensorID ) { CONDUCTIVITY_READ_STATE_T state = CONDUCTIVITY_READ_COMPLETE; - if ( TRUE == conductivitySensorControl[ D17_COND ].readInProgress ) + if ( TRUE == conductivitySensorControl[ sensorID ].readInProgress ) { - conductivitySensorControl[ D17_COND ].readData = getFPGAD17CondData(); - conductivitySensorControl[ D17_COND ].readComplete = TRUE; - conductivitySensorControl[ D17_COND ].readEnable = FALSE; - clearFPGAD17CondReadEnable(); - state = CONDUCTIVITY_READ_INITIATE; - } + conductivitySensorControl[ sensorID ].readComplete = TRUE; + conductivitySensorControl[ sensorID ].readEnable = FALSE; - if ( TRUE == conductivitySensorControl[ D27_COND ].readInProgress ) - { - conductivitySensorControl[ D27_COND ].readData = getFPGAD27CondData(); - conductivitySensorControl[ D27_COND ].readComplete = TRUE; - conductivitySensorControl[ D27_COND ].readEnable = FALSE; - clearFPGAD27CondReadEnable(); + if ( D17_COND == sensorID ) + { + conductivitySensorControl[ sensorID ].readData = getFPGAD17CondData(); + clearFPGAD17CondReadEnable(); + } + else if ( D27_COND == sensorID ) + { + conductivitySensorControl[ sensorID ].readData = getFPGAD27CondData(); + clearFPGAD27CondReadEnable(); + } + else if ( D29_COND == sensorID ) + { + conductivitySensorControl[ sensorID ].readData = getFPGAD29CondData(); + clearFPGAD29CondReadEnable(); + } + else if ( D43_COND == sensorID ) + { + conductivitySensorControl[ sensorID ].readData = getFPGAD43CondData(); + clearFPGAD43CondReadEnable(); + } + else if ( D74_COND == sensorID ) + { + conductivitySensorControl[ sensorID ].readData = getFPGAD74CondData(); + clearFPGAD74CondReadEnable(); + } + else if ( P9_COND == sensorID ) + { + conductivitySensorControl[ sensorID ].readData = getFPGAP9Data(); + clearFPGAP9ReadEnable(); + } + else if ( P18_COND == sensorID ) + { + conductivitySensorControl[ sensorID ].readData = getFPGAP18Data(); + clearFPGAP18ReadEnable(); + } + state = CONDUCTIVITY_READ_INITIATE; } - if ( TRUE == conductivitySensorControl[ D29_COND ].readInProgress ) + return state; +} + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testDDConductivitySensorReadingsOverride function overrides the value of the + * specified DD conductivity sensor with a given value. + * @details \b Inputs: none + * @details \b Outputs: currentConductivityReadings[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the conductivity sensor. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testDDConductivitySensorReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( payload.index <= LAST_DD_COND_SENSOR ) { - conductivitySensorControl[ D29_COND ].readData = getFPGAD29CondData(); - conductivitySensorControl[ D29_COND ].readComplete = TRUE; - conductivitySensorControl[ D29_COND ].readEnable = FALSE; - clearFPGAD29CondReadEnable(); - state = CONDUCTIVITY_READ_INITIATE; + result = f32ArrayOverride( message, ¤tConductivityReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 ); } - if ( TRUE == conductivitySensorControl[ D43_COND ].readInProgress ) + return result; +} + +/*********************************************************************//** + * @brief + * The testDDConductivitySensorTemperatureReadingsOverride function overrides + * the value of the specified DD conductivity sensor temperature with a given value. + * @details \b Inputs: none + * @details \b Outputs: currentPresTempReadings[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the conductivity sensor temperature. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testDDConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( payload.index <= LAST_DD_COND_SENSOR ) { - conductivitySensorControl[ D43_COND ].readData = getFPGAD43CondData(); - conductivitySensorControl[ D43_COND ].readComplete = TRUE; - conductivitySensorControl[ D43_COND ].readEnable = FALSE; - clearFPGAD43CondReadEnable(); - state = CONDUCTIVITY_READ_INITIATE; + result = f32ArrayOverride( message, ¤tTemperatureReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 ); } - if ( TRUE == conductivitySensorControl[ D74_COND ].readInProgress ) + return result; +} + +/*********************************************************************//** + * @brief + * The testDDConductivitySensorReadCounterOverride function overrides + * the value of the specified DD 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 testDDConductivitySensorReadCounterOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( payload.index <= LAST_DD_COND_SENSOR ) { - conductivitySensorControl[ D74_COND ].readData = getFPGAD74CondData(); - conductivitySensorControl[ D74_COND ].readComplete = TRUE; - conductivitySensorControl[ D74_COND ].readEnable = FALSE; - clearFPGAD74CondReadEnable(); - state = CONDUCTIVITY_READ_INITIATE; + result = u32ArrayOverride( message, &lastConductivityReadCounter[0], NUM_OF_CONDUCTIVITY_SENSORS - 1, 0, COND_SENSORS_READ_ERR_MAX_CNT ); } - return state; + return result; } - -/************************************************************************* - * TEST SUPPORT FUNCTIONS +/*********************************************************************//** + * @brief + * The testDDConductivitySensorErrorCounterOverride function overrides + * the value of the specified DD 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 testDDConductivitySensorErrorCounterOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + if ( payload.index <= LAST_DD_COND_SENSOR ) + { + result = u32ArrayOverride( message, &lastConductivityErrorCounter[0], NUM_OF_CONDUCTIVITY_SENSORS - 1, 0, COND_SENSORS_READ_ERR_MAX_CNT ); + } + return result; +} + /*********************************************************************//** * @brief * The testConductivitySensorReadingsOverride function overrides the value of the @@ -959,10 +1101,17 @@ * ID and override value of the conductivity sensor. * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testConductivitySensorReadingsOverride( MESSAGE_T *message ) +BOOL testFPConductivitySensorReadingsOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, ¤tConductivityReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 ); + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + if ( ( payload.index >= FIRST_FP_COND_SENSOR ) && ( payload.index <= LAST_FP_COND_SENSOR ) ) + { + result = f32ArrayOverride( message, ¤tConductivityReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 ); + } + return result; } @@ -976,10 +1125,17 @@ * ID and override value of the conductivity sensor temperature. * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ) +BOOL testFPConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, ¤tTemperatureReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 ); + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + if ( ( payload.index >= FIRST_FP_COND_SENSOR ) && ( payload.index <= LAST_FP_COND_SENSOR ) ) + { + result = f32ArrayOverride( message, ¤tTemperatureReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 ); + } + return result; } @@ -993,10 +1149,17 @@ * ID and override value of the conductivity sensor read counter. * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testConductivitySensorReadCounterOverride( MESSAGE_T *message ) +BOOL testFPConductivitySensorReadCounterOverride( MESSAGE_T *message ) { - BOOL result = u32ArrayOverride( message, &lastConductivityReadCounter[0], NUM_OF_CONDUCTIVITY_SENSORS - 1, 0, COND_SENSORS_READ_ERR_MAX_CNT ); + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + if ( ( payload.index >= FIRST_FP_COND_SENSOR ) && ( payload.index <= LAST_FP_COND_SENSOR ) ) + { + result = u32ArrayOverride( message, &lastConductivityReadCounter[0], NUM_OF_CONDUCTIVITY_SENSORS - 1, 0, COND_SENSORS_READ_ERR_MAX_CNT ); + } + return result; } @@ -1010,10 +1173,17 @@ * ID and override value of the conductivity sensor error counter. * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testConductivitySensorErrorCounterOverride( MESSAGE_T *message ) +BOOL testFPConductivitySensorErrorCounterOverride( MESSAGE_T *message ) { - BOOL result = u32ArrayOverride( message, &lastConductivityErrorCounter[0], NUM_OF_CONDUCTIVITY_SENSORS - 1, 0, COND_SENSORS_READ_ERR_MAX_CNT ); + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + if ( ( payload.index >= FIRST_FP_COND_SENSOR ) && ( payload.index <= LAST_FP_COND_SENSOR ) ) + { + result = u32ArrayOverride( message, &lastConductivityErrorCounter[0], NUM_OF_CONDUCTIVITY_SENSORS - 1, 0, COND_SENSORS_READ_ERR_MAX_CNT ); + } + return result; } Index: firmware/App/Drivers/ConductivitySensors.h =================================================================== diff -u -ra9983d3e6b07e7c927fab3d16e80b715594fe221 -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Drivers/ConductivitySensors.h (.../ConductivitySensors.h) (revision a9983d3e6b07e7c927fab3d16e80b715594fe221) +++ firmware/App/Drivers/ConductivitySensors.h (.../ConductivitySensors.h) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -24,7 +24,7 @@ * @defgroup ConductivitySensors ConductivitySensors * @brief Conductivity Sensors monitor module. Monitors and filters conductivity sensor readings. * The module uses AD5941 - high precision, low power analog front ends(AFEs) for conductivity measurement - * for CD1,CD2, CD3 and CD4. + * for D17,D27, D29, D43, D74, P9 and P18 * * Conductivity Sensor Module * Diality P/N: TBD @@ -40,12 +40,17 @@ /// Enumeration of conductivity sensors. typedef enum ConductivitySensors { - FIRST_COND_SENSOR = 0, ///< First conductivity sensor - D17_COND = FIRST_COND_SENSOR, ///< Bicarb only conductivity sensor - 1 + D17_COND = 0, ///< Bicarb only conductivity sensor - 1 + FIRST_DD_COND_SENSOR = D17_COND, ///< First conductivity sensor D27_COND, ///< Acid and Bicarb mix conductivity sensor - 1 D29_COND, ///< Acid and Bicarb mix conductivity sensor - 2 D43_COND, ///< Spent dialysate conductivity sensor D74_COND, ///< Bicarb only conductivity sensor - 2 + LAST_DD_COND_SENSOR = D74_COND, ///< Last conductivity sensor + P9_COND, ///< Inlet water conductivity sensor + FIRST_FP_COND_SENSOR = P9_COND, ///< First FP conductivity sensor + P18_COND, ///< RO outlet water conductivity sensor + LAST_FP_COND_SENSOR = P18_COND, ///< Last FP conductivity sensor NUM_OF_CONDUCTIVITY_SENSORS ///< Number of conductivity sensors } CONDUCTIVITY_SENSORS_T; @@ -70,10 +75,14 @@ void conductivitySensorReadRequest( CONDUCTIVITY_SENSORS_T sensor, U16 readAddr ); U32 conductivitySensorReadData( CONDUCTIVITY_SENSORS_T sensor ); -BOOL testConductivitySensorReadingsOverride( MESSAGE_T *message ); -BOOL testConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ); -BOOL testConductivitySensorReadCounterOverride( MESSAGE_T *message ); -BOOL testConductivitySensorErrorCounterOverride( MESSAGE_T *message ); +BOOL testDDConductivitySensorReadingsOverride( MESSAGE_T *message ); +BOOL testDDConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ); +BOOL testDDConductivitySensorReadCounterOverride( MESSAGE_T *message ); +BOOL testDDConductivitySensorErrorCounterOverride( MESSAGE_T *message ); +BOOL testFPConductivitySensorReadingsOverride( MESSAGE_T *message ); +BOOL testFPConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ); +BOOL testFPConductivitySensorReadCounterOverride( MESSAGE_T *message ); +BOOL testFPConductivitySensorErrorCounterOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Drivers/TemperatureSensors.c =================================================================== diff -u -r9e6e86f604c8cce7c1704ae55d1e026de3422782 -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 9e6e86f604c8cce7c1704ae55d1e026de3422782) +++ firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -266,11 +266,11 @@ // Make sure the baro sensor coefficients are not corrupted checkBaroSensorCRC(); #endif - baroConvConsts.refTemperature = getFPGABaroReferenceTemperature(); - baroConvConsts.temperatureCoeff = getFPGABaroTempCoeffOfTemperature(); - lastBaroTempReadCounter.data = (U32)getFPGABaroReadCount(); - - processTempSnsrsADCRead( BARO_TEMP, getFPGABaroTemperature() ); +// baroConvConsts.refTemperature = getFPGABaroReferenceTemperature(); +// baroConvConsts.temperatureCoeff = getFPGABaroTempCoeffOfTemperature(); +// lastBaroTempReadCounter.data = (U32)getFPGABaroReadCount(); +// +// processTempSnsrsADCRead( BARO_TEMP, getFPGABaroTemperature() ); } } @@ -504,38 +504,38 @@ *************************************************************************/ static void checkBaroSensorCRC( void ) { - U32 baroCRC = (U32)getFPGABaroCoeffsCRC(); - BOOL hasCRCChanged = ( baroCRC != getU32OverrideValue( &baroConvConsts.coeffsCRC ) ? TRUE : FALSE ); - - // Once FPGA is ready get the barometric sensor's temperature conversion constants - if ( TRUE == hasCRCChanged ) - { - U08 calculatedCRC; - BARO_SENSORS_COEFFS_T baroCoeffs; - - baroCoeffs.mfgInfo = getFPGABaroMfgInfo(); - baroCoeffs.pressSensitivity = getFPGABaroPressureSensitivity(); - baroCoeffs.pressOffset = getFPGABaroPressureOffset(); - baroCoeffs.tempCoeffOfPressSens = getFPGABaroTempCoeffOfPressSensitvity(); - baroCoeffs.tempCoeffPressOffset = getFPGABaroTempCoeffOfPressOffset(); - baroCoeffs.referenceTemp = getFPGABaroReferenceTemperature(); - baroCoeffs.tempCoeffOfTemp = getFPGABaroTempCoeffOfTemperature(); - baroCoeffs.crc = MASK_OFF_LSB & getFPGABaroCoeffsCRC(); - calculatedCRC = crc4( (U16*)&baroCoeffs, sizeof( baroCoeffs ) ); - baroConvConsts.coeffsCRC.data = baroCRC; - baroCRC = (U16)( baroCRC & MASK_OFF_MSB ) & MASK_OFF_NIBBLE_MSB; - baroConvConsts.hasCRCBeenChecked = TRUE; - - if ( calculatedCRC != baroCRC ) - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC, calculatedCRC, baroCoeffs.crc ); - } - } - else if ( ( TRUE == didTimeout( baroConvConsts.waitForCoeffStartTimeMS, BARO_SENSOR_WAIT_FOR_COEFF_TIME_OUT_MS ) ) && - ( FALSE == baroConvConsts.hasCRCBeenChecked ) ) - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC, 0, baroCRC ); - } +// U32 baroCRC = (U32)getFPGABaroCoeffsCRC(); +// BOOL hasCRCChanged = ( baroCRC != getU32OverrideValue( &baroConvConsts.coeffsCRC ) ? TRUE : FALSE ); +// +// // Once FPGA is ready get the barometric sensor's temperature conversion constants +// if ( TRUE == hasCRCChanged ) +// { +// U08 calculatedCRC; +// BARO_SENSORS_COEFFS_T baroCoeffs; +// +// baroCoeffs.mfgInfo = getFPGABaroMfgInfo(); +// baroCoeffs.pressSensitivity = getFPGABaroPressureSensitivity(); +// baroCoeffs.pressOffset = getFPGABaroPressureOffset(); +// baroCoeffs.tempCoeffOfPressSens = getFPGABaroTempCoeffOfPressSensitvity(); +// baroCoeffs.tempCoeffPressOffset = getFPGABaroTempCoeffOfPressOffset(); +// baroCoeffs.referenceTemp = getFPGABaroReferenceTemperature(); +// baroCoeffs.tempCoeffOfTemp = getFPGABaroTempCoeffOfTemperature(); +// baroCoeffs.crc = MASK_OFF_LSB & getFPGABaroCoeffsCRC(); +// calculatedCRC = crc4( (U16*)&baroCoeffs, sizeof( baroCoeffs ) ); +// baroConvConsts.coeffsCRC.data = baroCRC; +// baroCRC = (U16)( baroCRC & MASK_OFF_MSB ) & MASK_OFF_NIBBLE_MSB; +// baroConvConsts.hasCRCBeenChecked = TRUE; +// +// if ( calculatedCRC != baroCRC ) +// { +// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC, calculatedCRC, baroCoeffs.crc ); +// } +// } +// else if ( ( TRUE == didTimeout( baroConvConsts.waitForCoeffStartTimeMS, BARO_SENSOR_WAIT_FOR_COEFF_TIME_OUT_MS ) ) && +// ( FALSE == baroConvConsts.hasCRCBeenChecked ) ) +// { +// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC, 0, baroCRC ); +// } } /*********************************************************************//** Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -rdc3647b737971d298748796d2455b3e021325d8a -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision dc3647b737971d298748796d2455b3e021325d8a) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -31,18 +31,47 @@ // ********** private definitions ********** -#define COND_SENSOR_REPORT_PERIOD ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Broadcast conductivity values message every second. -#define DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. +#define COND_SENSOR_REPORT_PERIOD ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Broadcast conductivity values message every second. +#define DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. +#define CONDUCTIVITY_SAMPLE_FILTER_MS ( 500 ) ///< Filter conductivity data for given time +#define CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS ( 500 ) ///< Filter conductivity temperature data for given time +#define SIZE_OF_FLOW_ROLLING_AVG ( CONDUCTIVITY_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity moving average sample count. +#define SIZE_OF_FLOW_TEMP_ROLLING_AVG ( CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity temprature moving average sample count. -// ********** private data ********** +/// Filter conductivity readings record. +typedef struct +{ + F32 conductivityReadings[ SIZE_OF_FLOW_ROLLING_AVG ]; ///< Holds conductivity sample rolling average. + U32 conductivityReadingsIdx; ///< Index for next sample in rolling average array. + F32 conductivityReadingsTotal; ///< Rolling total - used to calc average. + U32 conductivityReadingsCount; ///< Number of samples in rolling average buffer +} FILTER_CONDUCTIVITY_READINGS_T; -static U32 conductivityPublishTimerCounter; -static OVERRIDE_U32_T conductivityDataPublishInterval = { COND_SENSOR_REPORT_PERIOD, - COND_SENSOR_REPORT_PERIOD, 0, 0 }; ///< Conductivity sensors publish time interval override. +/// Filter conductivity sensor temperature readings record. +typedef struct +{ + F32 conductivityTempReadings[ SIZE_OF_FLOW_ROLLING_AVG ]; ///< Holds conductivity sample rolling average. + U32 conductivityTempReadingsIdx; ///< Index for next sample in rolling average array. + F32 conductivityTempReadingsTotal; ///< Rolling total - used to calc average. + U32 conductivityTempReadingsCount; ///< Number of samples in rolling average buffer +} FILTER_CONDUCTIVITY_TEMPERATURE_READINGS_T; +// ********** private data ********** +static FILTER_CONDUCTIVITY_READINGS_T filteredConductivityReadings[NUM_OF_CONDUCTIVITY_SENSORS]; ///< Filtered conductivity reading for conductivity sensors. +static OVERRIDE_F32_T filteredcurrentConductivityReadings[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< filtered current conductivity sensor conductivity readings (overrideable). +static FILTER_CONDUCTIVITY_TEMPERATURE_READINGS_T filteredConductivityTemperatureReadings[NUM_OF_CONDUCTIVITY_SENSORS]; ///< Filtered temperature reading for conductivity sensors. +static OVERRIDE_F32_T filteredcurrentTemperatureReadings[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< filtered current conductivity sensor temperature readings (overrideable). +static U32 ddConductivityPublishTimerCounter; ///< DD Conductivity data publication counter. +static OVERRIDE_U32_T ddConductivityDataPublishInterval; ///< DD Conductivity sensors publish time interval override. +static U32 fpConductivityPublishTimerCounter; ///< FP Conductivity data publication counter. +static OVERRIDE_U32_T fpConductivityDataPublishInterval; ///< FP Conductivity sensors publish time interval override. + // ********** private function prototypes ********** static void publishConductivitySensorsData( void ); +static void filterConductivitySensors( void ); +static void filterConductivitySensorReadings( void ); +static void filterConductivitySensorTemperatureReadings( void ); /*********************************************************************//** * @brief @@ -53,9 +82,44 @@ *************************************************************************/ void initConductivity( void ) { - conductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + CONDUCTIVITY_SENSORS_T sensor; initConductivitySensors(); + + ddConductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + fpConductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + + // Initialize override structures for each conductivity sensor + for ( sensor = FIRST_DD_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) + { + filteredcurrentConductivityReadings[ sensor ].data = 0.0F; + filteredcurrentConductivityReadings[ sensor ].ovData = 0.0F; + filteredcurrentConductivityReadings[ sensor ].ovInitData = 0.0F; + filteredcurrentConductivityReadings[ sensor ].override = OVERRIDE_RESET; + + filteredConductivityReadings[ sensor ].conductivityReadingsIdx = 0; + filteredConductivityReadings[ sensor ].conductivityReadingsTotal = 0.0F; + filteredConductivityReadings[ sensor ].conductivityReadingsCount = 0; + + filteredcurrentTemperatureReadings[ sensor ].data = 0.0F; + filteredcurrentTemperatureReadings[ sensor ].ovData = 0.0F; + filteredcurrentTemperatureReadings[ sensor ].ovInitData = 0.0F; + filteredcurrentTemperatureReadings[ sensor ].override = OVERRIDE_RESET; + + filteredConductivityTemperatureReadings[ sensor ].conductivityTempReadingsIdx = 0; + filteredConductivityTemperatureReadings[ sensor ].conductivityTempReadingsTotal = 0.0F; + filteredConductivityTemperatureReadings[ sensor ].conductivityTempReadingsCount = 0; + } + + ddConductivityDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; + ddConductivityDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; + ddConductivityDataPublishInterval.ovInitData = 0; + ddConductivityDataPublishInterval.override = OVERRIDE_RESET; + + fpConductivityDataPublishInterval.data = COND_SENSOR_REPORT_PERIOD; + fpConductivityDataPublishInterval.ovData = COND_SENSOR_REPORT_PERIOD; + fpConductivityDataPublishInterval.ovInitData = 0; + fpConductivityDataPublishInterval.override = OVERRIDE_RESET; } /*********************************************************************//** @@ -80,35 +144,186 @@ execConductivitySensorWrite(); execConductivitySensorRead(); #endif + + filterConductivitySensors(); // publish conductivity sensors publishConductivitySensorsData(); } /*********************************************************************//** * @brief + * The filterConductivitySensors function gets averages the raw conductivity + * and temperature from the conductivity sensor. + * @details \b Inputs: conductivity readings from FPGA + * @details \b Outputs: filteredConductivityReadings[], filterConductivitySensorTemperatureReadings[] + * @return none + *************************************************************************/ +static void filterConductivitySensors( void ) +{ + //Filter conductivity sensor reading + filterConductivitySensorReadings(); + //Filter conductivity sensor temperature + filterConductivitySensorTemperatureReadings(); +} + +/*********************************************************************//** + * @brief + * The getFilteredConductivity function gets the filtered current conductivity (in uS/cm) + * for a given conductivity sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: filteredcurrentConductivityReadings[] + * @details \b Outputs: none + * @param sensor ID of conductivity sensor to get filtered conductivity reading for. + * @return The filtered current conductivity (in uS/cm) for the given conductivity sensor + *************************************************************************/ +F32 getFilteredConductivity( CONDUCTIVITY_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + result = filteredcurrentConductivityReadings[ sensor ].data; + if ( OVERRIDE_KEY == filteredcurrentConductivityReadings[ sensor ].override ) + { + result = filteredcurrentConductivityReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_FILTERED_CONDUCTIVITY_SENSOR_ID, (U32)sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The filterConductivitySensorReadings function filters the conductivity rates for + * defined interval to get average conductivity rates. + * @details \b Inputs: filteredConductivityReadings[] + * @details \b Outputs: filteredConductivityReadings[], filteredcurrentConductivityReadings[] + * @return none + *************************************************************************/ +static void filterConductivitySensorReadings( void ) +{ + CONDUCTIVITY_SENSORS_T sensor; + + for ( sensor = FIRST_DD_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) + { + F32 rawCond = (F32)getConductivityValue( sensor ); + + // TODO - calibrate + + if ( filteredConductivityReadings[ sensor ].conductivityReadingsCount >= SIZE_OF_FLOW_ROLLING_AVG ) + { + filteredConductivityReadings[ sensor ].conductivityReadingsTotal -= filteredConductivityReadings[ sensor ].conductivityReadings[ filteredConductivityReadings[ sensor ].conductivityReadingsIdx ]; + } + filteredConductivityReadings[ sensor ].conductivityReadings[ filteredConductivityReadings[ sensor ].conductivityReadingsIdx ] = rawCond; + filteredConductivityReadings[ sensor ].conductivityReadingsTotal += rawCond; + filteredConductivityReadings[ sensor ].conductivityReadingsIdx = INC_WRAP( filteredConductivityReadings[ sensor ].conductivityReadingsIdx, 0, SIZE_OF_FLOW_ROLLING_AVG - 1 ); + filteredConductivityReadings[ sensor ].conductivityReadingsCount = INC_CAP( filteredConductivityReadings[ sensor ].conductivityReadingsCount, SIZE_OF_FLOW_ROLLING_AVG ); + filteredcurrentConductivityReadings[ sensor ].data = filteredConductivityReadings[ sensor ].conductivityReadingsTotal / (F32)filteredConductivityReadings[ sensor ].conductivityReadingsCount; + } +} + +/*********************************************************************//** + * @brief + * The getFilteredConductivitySensorTemperature function gets the filtered + * temperature (in C) for a given conductivity sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: filteredConductivityTemperatureReadings[] + * @details \b Outputs: none + * @param sensor ID of conductivity sensor to get filtered conductivity reading for. + * @return The filtered current temperature (in C) for the given conductivity sensor + *************************************************************************/ +F32 getFilteredConductivitySensorTemperature( CONDUCTIVITY_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + result = filteredcurrentTemperatureReadings[ sensor ].data; + if ( OVERRIDE_KEY == filteredcurrentTemperatureReadings[ sensor ].override ) + { + result = filteredcurrentTemperatureReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_FILTERED_CONDUCTIVITY_SENSOR_ID, (U32)sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The filterConductivitySensorTemperatureReadings function filters the temperature + * rates for defined interval to get average conductivity rates. + * @details \b Inputs: filteredConductivityTemperatureReadings[] + * @details \b Outputs: filteredConductivityTemperatureReadings[], filteredcurrentTemperatureReadings[] + * @return none + *************************************************************************/ +static void filterConductivitySensorTemperatureReadings( void ) +{ + CONDUCTIVITY_SENSORS_T sensor; + + for ( sensor = FIRST_DD_COND_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) + { + F32 rawTemp = (F32)getConductivityTemperatureValue( sensor ); + + // TODO - calibrate + + if ( filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsCount >= SIZE_OF_FLOW_ROLLING_AVG ) + { + filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsTotal -= filteredConductivityTemperatureReadings[sensor].conductivityTempReadings[ filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsIdx ]; + } + filteredConductivityTemperatureReadings[sensor].conductivityTempReadings[ filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsIdx ] = rawTemp; + filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsTotal += rawTemp; + filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsIdx = INC_WRAP( filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsIdx, 0, SIZE_OF_FLOW_ROLLING_AVG - 1 ); + filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsCount = INC_CAP( filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsCount, SIZE_OF_FLOW_ROLLING_AVG ); + filteredcurrentTemperatureReadings[sensor].data = filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsTotal / (F32)filteredConductivityTemperatureReadings[sensor].conductivityTempReadingsCount; + } +} + +/*********************************************************************//** + * @brief * The publishConductivitySensorsData function publishes DD conductivity data * at a set interval. * @details \b Inputs: conductivityPublishTimerCounter * @details \b Outputs: conductivityPublishTimerCounter - * @details \b Message \b Sent: MSG_ID_DD_CONDUCTIVITY_DATA to publish conductivity data. + * @details \b Message \b Sent: MSG_ID_DD_CONDUCTIVITY_DATA to publish DD conductivity data. + * @details \b Message \b Sent: MSG_ID_FP_CONDUCTIVITY_DATA to publish FP conductivity data. * @return none *************************************************************************/ static void publishConductivitySensorsData( void ) { - // publish pressure/occlusion data on interval - if ( ++conductivityPublishTimerCounter >= getU32OverrideValue( &conductivityDataPublishInterval ) ) + // publish DD conductivity data on interval + if ( ++ddConductivityPublishTimerCounter >= getU32OverrideValue( &ddConductivityDataPublishInterval ) ) { - CONDUCTIVITY_DATA_T data; + DD_CONDUCTIVITY_DATA_T data; data.d17Cond = getConductivityValue( D17_COND ); data.d27Cond = getConductivityValue( D27_COND ); data.d29Cond = getConductivityValue( D29_COND ); data.d43Cond = getConductivityValue( D43_COND ); data.d74Cond = getConductivityValue( D74_COND ); - conductivityPublishTimerCounter = 0; + ddConductivityPublishTimerCounter = 0; - broadcastData( MSG_ID_DD_CONDUCTIVITY_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( CONDUCTIVITY_DATA_T ) ); + broadcastData( MSG_ID_DD_CONDUCTIVITY_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( DD_CONDUCTIVITY_DATA_T ) ); } + + // publish FP Conductivity data on interval + if ( ++fpConductivityPublishTimerCounter >= getU32OverrideValue( &fpConductivityDataPublishInterval ) ) + { + FP_CONDUCTIVITY_DATA_T data; + + data.p9Conductivity = getFilteredConductivity( P9_COND ); + data.p18Conductivity = getFilteredConductivity( P18_COND ); + fpConductivityPublishTimerCounter = 0; + + broadcastData( MSG_ID_FP_CONDUCTIVITY_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( FP_CONDUCTIVITY_DATA_T ) ); + } } @@ -127,11 +342,126 @@ * that override valves states publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ) +BOOL testDDConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ) { - BOOL result = u32BroadcastIntervalOverride( message, &conductivityDataPublishInterval, TASK_PRIORITY_INTERVAL ); + BOOL result = u32BroadcastIntervalOverride( message, &ddConductivityDataPublishInterval, TASK_PRIORITY_INTERVAL ); return result; } +/*********************************************************************//** + * @brief + * The testDDConductivitySensorFilteredReadingsOverride function overrides the + * filtered value of the specified DD conductivity sensor with a given value. + * @details \b Inputs: none + * @details \b Outputs: filteredcurrentConductivityReadings[] + * @param message Override message from Dialin which includes a sensor + * ID and override value of the conductivity rate for that sensor. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testDDConductivitySensorFilteredReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( payload.index <= LAST_DD_COND_SENSOR ) + { + result = f32ArrayOverride( message, &filteredcurrentConductivityReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 );; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testDDConductivitySensorFilteredTemperatureReadingsOverride function + * overrides the filtered value of the specified DD conductivity sensor + * with a given value. + * @details \b Inputs: none + * @details \b Outputs: filteredcurrentTemperatureReadings[] + * @param message Override message from Dialin which includes a sensor + * ID and override value of the conductivity rate for that sensor. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testDDConductivitySensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( payload.index <= LAST_DD_COND_SENSOR ) + { + result = f32ArrayOverride( message, &filteredcurrentTemperatureReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 );; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testConductivitySensorDataPublishIntervalOverride function overrides the + * conductivity sensor data publish interval. + * @details \b Inputs: none + * @details \b Outputs: conductivityDataPublishInterval + * @param message Override message from Dialin which includes the value + * that override valves states publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testFPConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &fpConductivityDataPublishInterval, TASK_PRIORITY_INTERVAL ); + + return result; +} + +/*********************************************************************//** + * @brief + * The testFPConductivitySensorFilteredReadingsOverride function overrides the + * filtered value of the specified FP conductivity sensor with a given value. + * @details \b Inputs: none + * @details \b Outputs: filteredcurrentConductivityReadings[] + * @param message Override message from Dialin which includes a sensor + * ID and override value of the conductivity rate for that sensor. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testFPConductivitySensorFilteredReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( ( payload.index >= FIRST_FP_COND_SENSOR ) && ( payload.index <= LAST_FP_COND_SENSOR ) ) + { + result = f32ArrayOverride( message, &filteredcurrentConductivityReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 );; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testFPConductivitySensorFilteredTemperatureReadingsOverride function + * overrides the filtered value of the specified FP conductivity sensor + * with a given value. + * @details \b Inputs: none + * @details \b Outputs: filteredcurrentTemperatureReadings[] + * @param message Override message from Dialin which includes a sensor + * ID and override value of the conductivity rate for that sensor. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testFPConductivitySensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( ( payload.index >= FIRST_FP_COND_SENSOR ) && ( payload.index <= LAST_FP_COND_SENSOR ) ) + { + result = f32ArrayOverride( message, &filteredcurrentTemperatureReadings[0], NUM_OF_CONDUCTIVITY_SENSORS - 1 );; + } + + return result; +} + /**@}*/ Index: firmware/App/Monitors/Conductivity.h =================================================================== diff -u -rdc3647b737971d298748796d2455b3e021325d8a -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Monitors/Conductivity.h (.../Conductivity.h) (revision dc3647b737971d298748796d2455b3e021325d8a) +++ firmware/App/Monitors/Conductivity.h (.../Conductivity.h) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -41,14 +41,28 @@ F32 d29Cond; ///< CD3 conductivity sensor value F32 d43Cond; ///< CD4 conductivity sensor value F32 d74Cond; ///< CD5 conductivity sensor value -} CONDUCTIVITY_DATA_T; +} DD_CONDUCTIVITY_DATA_T; +/// Conductivity data struct. +typedef struct +{ + F32 p9Conductivity; ///< (P9) conductivity sensor value + F32 p18Conductivity; ///< (P18) conductivity sensor value +} FP_CONDUCTIVITY_DATA_T; + // ********** public function prototypes ********** void initConductivity( void ); void execConductivity( void ); +F32 getFilteredConductivity( CONDUCTIVITY_SENSORS_T sensor ); +F32 getFilteredConductivitySensorTemperature( CONDUCTIVITY_SENSORS_T sensor ); -BOOL testConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ); +BOOL testDDConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ); +BOOL testDDConductivitySensorFilteredReadingsOverride( MESSAGE_T *message ); +BOOL testDDConductivitySensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ); +BOOL testFPConductivitySensorDataPublishIntervalOverride( MESSAGE_T *message ); +BOOL testFPConductivitySensorFilteredReadingsOverride( MESSAGE_T *message ); +BOOL testFPConductivitySensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r228773fa681489a62db5c47807a4794e5761d4f5 -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 228773fa681489a62db5c47807a4794e5761d4f5) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -143,6 +143,7 @@ SW_FAULT_ID_BLOOD_LEAK_EMBEDDED_MODE_INVALID_STATE = 112, SW_FAULT_ID_BLOOD_LEAK_ENQUEUE_FAILURE = 113, SW_FAULT_ID_BLOOD_LEAK_INVALID_EMB_MODE_CMD_SELECTED = 114, + SW_FAULT_ID_INVALID_FILTERED_CONDUCTIVITY_SENSOR_ID = 115, NUM_OF_SW_FAULT_IDS } DD_FAULT_ID_T; Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -r3ededfebdde73ae377aa81e6bae2a4e2148bc689 -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 3ededfebdde73ae377aa81e6bae2a4e2148bc689) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -2842,7 +2842,7 @@ * @details \b Outputs: fpgaSensorReadings.valveControlReadback * @return none *************************************************************************/ -U08 getFPGAValveStates( void ) +U08 getFPGAIOFPValveStates( void ) { return fpgaSensorReadings.valveControlReadback; } Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r0d45291a1e7fb3fbc67c9159766b99cf0ca6d57d -r89f18a07a6d5837bf9b4559a69046e2b06f32c35 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 0d45291a1e7fb3fbc67c9159766b99cf0ca6d57d) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 89f18a07a6d5837bf9b4559a69046e2b06f32c35) @@ -122,11 +122,11 @@ { MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDPressureSensorDataPublishIntervalOverride }, { MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testDDPressureSensorFilteredReadingsOverride }, { MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testDDPressureSensorFilteredTemperatureReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, &testConductivitySensorReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testConductivitySensorTemperatureReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testConductivitySensorReadCounterOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testConductivitySensorErrorCounterOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConductivitySensorDataPublishIntervalOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorTemperatureReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testDDConductivitySensorReadCounterOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testDDConductivitySensorErrorCounterOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDConductivitySensorDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConcentratePumpDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_TARGET_SPEED_OVERRIDE_REQUEST, &testConcentratePumpTargetSpeedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_MEASURED_SPEED_OVERRIDE_REQUEST, &testConcentratePumpMeasuredSpeedOverride }, @@ -188,6 +188,8 @@ { MSG_ID_DD_BLOOD_LEAK_INTENSITY_MOVING_AVERAGE_OVERRIDE_REQUEST, &testBloodLeakIntensityMovingAverageOverride }, { MSG_ID_DD_BLOOD_LEAK_ZEROING_INTERVAL_IN_MS_OVERRIDE_REQUEST, &testBloodLeakZeroingIntervalInMillisecondsOverride }, { MSG_ID_DD_BLOOD_LEAK_ZERO_REQUEST, &testBloodLeakZeroSequenceRequest }, + { MSG_ID_DD_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredReadingsOverride }, + { MSG_ID_DD_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredTemperatureReadingsOverride }, { MSG_ID_FP_TESTER_LOGIN_REQUEST, &handleTesterFPLogInRequest }, { MSG_ID_FP_SET_OPERATION_MODE_REQUEST, &testSetFPOperationMode }, { MSG_ID_FP_OPERATION_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testSetFPOpModePublishIntervalOverride }, @@ -221,7 +223,14 @@ { MSG_ID_FP_FILTERED_FLOW_RATE_OVERRIDE_REQUEST, &testFlowSensorFilteredReadingsOverride }, { MSG_ID_FP_FILTERED_FLOW_TEMP_OVERRIDE_REQUEST, &testFlowSensorFilteredTemperatureReadingsOverride }, { MSG_ID_FP_ALARM_STATE_OVERRIDE_REQUEST, &testAlarmStateOverride }, - { MSG_ID_FP_ALARM_CLEAR_ALL_ALARMS_REQUEST, &testFPClearAllAlarms } + { MSG_ID_FP_ALARM_CLEAR_ALL_ALARMS_REQUEST, &testFPClearAllAlarms }, + { MSG_ID_FP_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPConductivitySensorDataPublishIntervalOverride }, + { MSG_ID_FP_CONDUCTIVITY_OVERRIDE_REQUEST, &testFPConductivitySensorReadingsOverride }, + { MSG_ID_FP_CONDUCTIVITY_TEMP_OVERRIDE_REQUEST, &testFPConductivitySensorTemperatureReadingsOverride }, + { MSG_ID_FP_CONDUCTIVITY_READ_COUNT_OVERRIDE_REQUEST, &testFPConductivitySensorReadCounterOverride }, + { MSG_ID_FP_CONDUCTIVITY_ERROR_COUNT_OVERRIDE_REQUEST, &testFPConductivitySensorErrorCounterOverride }, + { MSG_ID_FP_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredReadingsOverride }, + { MSG_ID_FP_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredTemperatureReadingsOverride }, }; /// Calculation for number of entries in the incoming message function handler look-up table.