Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -rbcf9339af8a725054a8c936ae572bb95e2bcd3f0 -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision bcf9339af8a725054a8c936ae572bb95e2bcd3f0) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -62,11 +62,16 @@ #define COND_SENSOR_PERSISTENCE_PERIOD ( 5 * MS_PER_SECOND ) ///< Persistence period for conductivity sensor out of range error. #define RO_REJECTION_RATIO_PERSISTENCE_PERIOD ( 10 * MS_PER_SECOND ) ///< Persistence period for RO rejection ratio. -#define EMSTAT_PICO_MEASUREMENT_OFFSET 0x8000000 ///< Measurement offset for emstat pico measurement data. -#define EMSTAT_PICO_GOOD_STATUS 0x10 ///< Measurement good status. -#define EMSTAT_PICO_TIMING_NOT_MET_STATUS 0x11 ///< Measurement takes too long status. -#define EMSTAT_PICO_FIFO_EMPTY_MASK 0x8000 ///< Emstat Pico buffer empty indication bit. +#define EMSTAT_PICO_MEASUREMENT_OFFSET 0x8000000 ///< Emstat measurement offset. +// The below Emstat status values come from the MethodScript-v1_2-1.pdf. See page 10 table 4 for further information +// The first hex value is the status ID meaning that all of these are the status of the sensor. The second hex value is the content. +#define EMSTAT_PICO_STATUS_OK 0x10 ///< Emstat measurement good status. +#define EMSTAT_PICO_STATUS_TIMING_NOT_MET 0x11 ///< Emstat measurement takes too long status. +#define EMSTAT_PICO_STATUS_95_PCT_OF_MAX_ADC 0x12 ///< Emstat measurement overload, >95% of max ADC value status. +#define EMSTAT_PICO_STATUS_2_PCT_OF_MAX_ADC 0x14 ///< Emstat measurement underload, <2% of max ADC value status. +#define EMSTAT_PICO_STATUS_80_PCT_OF_MAX_ADC 0x18 ///< Emstat measurement overload warning, >80% of max ADC value status. +#define EMSTAT_PICO_FIFO_EMPTY_MASK 0x8000 ///< Emstat buffer empty indication bit. #define EMSTAT_NUM_OF_SENSORS_PER_BOARD 2 ///< Emstat Pico number of sensors per board. #define EMSTAT_CPI_OR_CD1_INDEX 0 ///< Emstat board CPi index number. #define EMSTAT_CPO_OR_CD2_INDEX 1 ///< Emstat board CPo index number. @@ -228,7 +233,6 @@ if ( ++condDataPublishCounter >= getU32OverrideValue( &conductivityDataPublishInterval ) ) { CONDUCTIVITY_DATA_T data; - calcRORejectionRatio(); data.roRejectionRatio = roRejectionRatio; data.cpi = getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ); @@ -573,6 +577,7 @@ break; } +#ifndef DISABLE_FPGA_ALARMS_UNTIL_THE_NEW_PERSISTENT // Only process the FPGA error and count values if the DG Software is not in the POST mode if ( getCurrentOperationMode() != DG_MODE_INIT ) { @@ -592,6 +597,7 @@ } } } +#endif } /*********************************************************************//** @@ -609,7 +615,7 @@ { CONDUCTIVITY_SENSORS_T sensorId = readPackage->sensors[ boardSensorIndex ].condSnsr; condSensorStatus[ sensorId ].sensorStatus = hexStrToDec( (U08*)&receivedPackets->status, sizeof( receivedPackets->status ) ); - BOOL isSensorStatusBad = ( EMSTAT_PICO_GOOD_STATUS != condSensorStatus[ sensorId ].sensorStatus ? TRUE : FALSE ); + BOOL isSensorStatusBad = ( EMSTAT_PICO_STATUS_TIMING_NOT_MET == condSensorStatus[ sensorId ].sensorStatus ? TRUE : FALSE ); if ( FALSE == isSensorStatusBad ) { @@ -625,9 +631,10 @@ } // Check the conductivity sensors bad status alarm - //checkPersistentAlarm( ALARM_ID_DG_CONDUCTIVITY_SENSOR_BAD_STATUS, isSensorStatusBad, condSensorStatus[ sensorId ].sensorStatus, EMSTAT_PICO_GOOD_STATUS ); // TODO DVT is reporting bad status check it + checkPersistentAlarm( ALARM_ID_DG_CONDUCTIVITY_SENSOR_BAD_STATUS, isSensorStatusBad, condSensorStatus[ sensorId ].sensorStatus, + EMSTAT_PICO_STATUS_TIMING_NOT_MET ); - if ( EMSTAT_PICO_TIMING_NOT_MET_STATUS == condSensorStatus[ sensorId ].sensorStatus ) + if ( EMSTAT_PICO_STATUS_TIMING_NOT_MET == condSensorStatus[ sensorId ].sensorStatus ) { if ( ++condSensorStatus[ sensorId ].internalErrorCount > MAX_CONDUCTIVITY_SENSOR_FAILURES ) { Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -rbcf9339af8a725054a8c936ae572bb95e2bcd3f0 -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision bcf9339af8a725054a8c936ae572bb95e2bcd3f0) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -68,7 +68,7 @@ #define FLOW_SAMPLES_TO_AVERAGE ( 250 / TASK_PRIORITY_INTERVAL ) ///< Averaging flow data over 250 ms intervals. #define FLOW_AVERAGE_MULTIPLIER ( 1.0F / (F32)FLOW_SAMPLES_TO_AVERAGE ) ///< Optimization - multiplying is faster than dividing. -#define RO_FLOW_ADC_TO_LPM_FACTOR 300.0F ///< Conversion factor from ADC counts to LPM (liters/min) for RO flow rate (multiply this by inverse of FPGA reading). +#define RO_FLOW_ADC_TO_LPM_FACTOR 272.72F ///< Conversion factor from ADC counts to LPM (liters/min) for RO flow rate (multiply this by inverse of FPGA reading). #define ROP_FLOW_TO_PWM_SLOPE 0.1F ///< Slope of flow to PWM line equation. #define ROP_FLOW_TO_PWM_INTERCEPT 0.0F ///< Intercept of flow to PWM line equation. Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -rbcf9339af8a725054a8c936ae572bb95e2bcd3f0 -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision bcf9339af8a725054a8c936ae572bb95e2bcd3f0) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -19,6 +19,7 @@ #include "FPGA.h" #include "MessageSupport.h" +#include "NVDataMgmt.h" #include "OperationModes.h" #include "PersistentAlarm.h" #include "SystemCommMessages.h" @@ -36,15 +37,15 @@ // ********** private definitions ********** #define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 8U ///< Primary heater external temperature sensors gain. -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 19600U // 20000 for dvt ///< Primary heater external temperature sensors reference resistance. +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 20000 //19600U // 20000 for dvt ///< Primary heater external temperature sensors reference resistance. #define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater external temperature sensors zero degree resistance. #define COND_SENSORS_TEMP_SENSOR_GAIN 8U ///< Temperature sensor for conductivity gain. -#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U // 20000 for dvt ///< Temperature sensor for conductivity reference resistance. +#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 20000 //19600U // 20000 for dvt ///< Temperature sensor for conductivity reference resistance. #define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U ///< Temperature sensor for conductivity zero degree resistance. #define TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN 32U ///< Trimmer heater external temperature sensors gain. -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U ///< Trimmer heater external temperature sensors reference resistance. +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 4990U ///< Trimmer heater external temperature sensors reference resistance. #define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< Trimmer heater external temperature sensors zero degree resistance. #define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits. @@ -138,7 +139,7 @@ static OVERRIDE_U32_T tempSensorsPublishInterval = { TEMP_SENSORS_DATA_PUBLISH_INTERVAL, TEMP_SENSORS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Temperature sensors publish time interval override. static DG_TEMP_SENSORS_CAL_RECORD_T tempSensorCalRecord; ///< Temperature sensors calibration record. - +static BOOL hasTempSensorsRefRBeenSet; ///< Temperature sensors reference resistance been set. static const F32 POSITIVE_TC_EXP_A0 = 0.118597600000E0; ///< K TC positive temperature exponent coefficient A0. static const F32 POSITIVE_TC_EXP_A1 = -0.118343200000E-3; ///< K TC positive temperature exponent coefficient A1. static const F32 POSITIVE_TC_EXP_A2 = 0.126968600000E3; ///< K TC positive temperature exponent coefficient A2. @@ -169,7 +170,6 @@ static F32 getADC2TempConversion( F32 avgADC, U32 gain, U32 refResistance, U32 zeroDegResistance, F32 adcConversionCoeff ); static void getHeaterInternalTemp( U32 TCIndex, U32 CJIndex ); - static void processTempSnsrsADCRead( U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount, BOOL fpgaCheck ); static void processHtrsTempSnsrsADCRead( U32 sensorIndex, U16 adc, U32 fpgaError, U32 fpgaCount ); static BOOL isADCReadValid( U32 sensorIndex, U32 fpgaError, U32 fpgaCount ); @@ -183,7 +183,7 @@ * @details Inputs: none * @details Outputs: tempSensorsSelfTestState, tempSensorsExecState, * elapsedTime, internalHeatersConversionTimer, dataPublicationTimerCounter, - * tempSensors, fpgaRawADCReadInterval + * tempSensors, fpgaRawADCReadInterval, hasTempSensorsRefRBeenSet * @return none *************************************************************************/ void initTemperatureSensors( void ) @@ -195,6 +195,7 @@ internalHeatersConversionTimer = 0; dataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; fpgaRawADCReadInterval = 0; + hasTempSensorsRefRBeenSet = FALSE; /* NOTE: The temperature sensors do not have conversion coefficient. * The conversion coefficients are used for the heaters internal temperature sensors and @@ -210,12 +211,17 @@ benignPolynomialCalRecord( &tempSensorCalRecord.tempSensors[ i ] ); } - // Initialize TPi and TPo constants + // Initialize TPi, THd, and TPo constants tempSensors[ TEMPSENSORS_INLET_PRIMARY_HEATER ].gain = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; tempSensors[ TEMPSENSORS_INLET_PRIMARY_HEATER ].refResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; tempSensors[ TEMPSENSORS_INLET_PRIMARY_HEATER ].zeroDegreeResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; tempSensors[ TEMPSENSORS_INLET_PRIMARY_HEATER ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ TEMPSENSORS_HEAT_DISINFECT ].gain = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensors[ TEMPSENSORS_HEAT_DISINFECT ].refResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ TEMPSENSORS_HEAT_DISINFECT ].zeroDegreeResistance = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ TEMPSENSORS_HEAT_DISINFECT ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].gain = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].refResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].zeroDegreeResistance = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; @@ -335,6 +341,21 @@ *************************************************************************/ void execTemperatureSensors( void ) { + if ( ( getCurrentOperationMode() != DG_MODE_INIT ) && ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_V3_SYSTEM ) ) && + ( FALSE == hasTempSensorsRefRBeenSet ) ) + { + U32 primaryAndCondSensorsRefResistance = 19600; + U32 externalTempSesnorsRefResitance = 5110; + hasTempSensorsRefRBeenSet = TRUE; + tempSensors[ TEMPSENSORS_INLET_PRIMARY_HEATER ].refResistance = primaryAndCondSensorsRefResistance; + tempSensors[ TEMPSENSORS_OUTLET_PRIMARY_HEATER ].refResistance = primaryAndCondSensorsRefResistance; + tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].refResistance = primaryAndCondSensorsRefResistance; + tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].refResistance = primaryAndCondSensorsRefResistance; + tempSensors[ TEMPSENSORS_HEAT_DISINFECT ].refResistance = externalTempSesnorsRefResitance; + tempSensors[ TEMPSENSORS_OUTLET_REDUNDANT ].refResistance = externalTempSesnorsRefResitance; + tempSensors[ TEMPSENSORS_INLET_DIALYSATE ].refResistance = externalTempSesnorsRefResitance; + } + // Read the sensors all the time switch ( tempSensorsExecState ) { @@ -414,10 +435,14 @@ if ( sensorIndex < NUM_OF_TEMPERATURE_SENSORS ) { + //temperature = tempSensors[ sensorIndex ].temperatureValues.data; + if ( OVERRIDE_KEY == tempSensors[ sensorIndex ].temperatureValues.override ) { temperature = tempSensors[ sensorIndex ].temperatureValues.ovData; } + //else if ( ) + else { #ifdef THD_USING_TRO_CONNECTOR @@ -587,6 +612,8 @@ case TEMPSENSORS_INTERNAL_TRO_RTD: // 307 case TEMPSENSORS_INLET_DIALYSATE: // 311 case TEMPSENSORS_INTERNAL_TDI_RTD: // 315 + case TEMPSENSORS_HEAT_DISINFECT: + case TEMPSENSORS_INTERNAL_THD_RTD: { U08 i; // Shift bits by 31 to right to check the error bit status @@ -602,6 +629,7 @@ isTemperatureNotValid |= ( tempSensors[ i ].sensorErrorBitStatus > 0 ? TRUE : FALSE ); } +#ifndef DISABLE_FPGA_ALARMS_UNTIL_THE_NEW_PERSISTENT // TODO for debugging only remove if ( TRUE == isTemperatureNotValid ) { @@ -610,6 +638,7 @@ // TODO remove for debugging only checkPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSOR_ERROR_BIT_FAULT, isTemperatureNotValid, sensorIndex, TEMP_SENSORS_ERROR_BIT_TIMEOUT_MS ); +#endif } break; @@ -687,10 +716,13 @@ // Loop through all the sensors and read their FPGA error status isTemperatureNotValid |= tempSensors[ sensorIndex ].fpgaErrorStatus; } - +#ifndef DISABLE_FPGA_ALARMS_UNTIL_THE_NEW_PERSISTENT checkPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSORS_FPGA_FAULT, isTemperatureNotValid, sensorIndex, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS ); return isADCValid; +#else + return TRUE; +#endif } /*********************************************************************//** @@ -727,8 +759,9 @@ // Loop through the ADC errors isADCNotValid |= tempSensors[ sensorIndex ].adcErrorStatus; } - +#ifndef DISABLE_FPGA_ALARMS_UNTIL_THE_NEW_PERSISTENT checkPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSORS_ADC_FAULT, isADCNotValid, sensorIndex, avgADCReads ); +#endif // Different sensors have different ADC to temperature conversion methods switch( sensorIndex ) @@ -743,6 +776,7 @@ case TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE: case TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION: case TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION: + case TEMPSENSORS_HEAT_DISINFECT: temperature = getADC2TempConversion( avgADCReads, (U32)tempSensors [ sensorIndex ].gain, (U32)tempSensors [ sensorIndex ].refResistance, (U32)tempSensors [ sensorIndex ].zeroDegreeResistance, tempSensors [ sensorIndex ].conversionCoeff ); break; @@ -757,6 +791,7 @@ case TEMPSENSORS_LOAD_CELL_A2_B2: case TEMPSENSORS_INTERNAL_TRO_RTD: case TEMPSENSORS_INTERNAL_TDI_RTD: + case TEMPSENSORS_INTERNAL_THD_RTD: case TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR: // Temperature(C) = ((ADC - 0x800000)/13584) - 272.5 // The value 1/13584 has been calculated and stored in the conversion coefficient variable of the structure @@ -834,6 +869,11 @@ processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1, getFPGACD1Temp(), errorCount, readCount, FALSE ); processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2, getFPGACD2Temp(), errorCount, readCount, FALSE ); + /*errorCount = (U32)getFPGATHdErrorCount(); + readCount = (U32)getFPGATHdReadCount(); + processTempSnsrsADCRead( TEMPSENSORS_HEAT_DISINFECT, getFPGATHdTemp(), errorCount, readCount, TRUE ); + processTempSnsrsADCRead( TEMPSENSORS_INTERNAL_THD_RTD, getFPGATHdInternalTemp(), errorCount, readCount, FALSE );*/ + errorCount = (U32)getFPGATRoErrorCount(); readCount = (U32)getFPGATRoReadCount(); processTempSnsrsADCRead( TEMPSENSORS_OUTLET_REDUNDANT, getFPGATRoTemp(), errorCount, readCount, TRUE ); @@ -939,7 +979,6 @@ #endif { F32 temperature = getTemperatureValue( sensorIndex ); - // Check both temperature and to be in range if ( ( ( temperature < TEMP_SENSORS_MIN_ALLOWED_DEGREE_C ) || ( temperature > tempSensors[ sensorIndex ].maxAllowedTemp ) ) && ( getCurrentOperationMode() != DG_MODE_INIT ) ) Index: firmware/App/Controllers/TemperatureSensors.h =================================================================== diff -u -rf91baac9704a90ab0fea1dd05e11833ffc5a5a4e -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision f91baac9704a90ab0fea1dd05e11833ffc5a5a4e) +++ firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -53,6 +53,7 @@ TEMPSENSORS_LOAD_CELL_A2_B2, ///< Load cell A2/B2 temperature sensor TEMPSENSORS_INTERNAL_TRO_RTD, ///< TRo RTD internal temperature sensor TEMPSENSORS_INTERNAL_TDI_RTD, ///< TDi RTD internal temperature sensor + TEMPSENSORS_INTERNAL_THD_RTD, ///< THd RTD internal temperature sensor TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR, ///< Conductivity sensor temperature sensor TEMPSENSORS_BAROMETRIC_TEMP_SENSOR, ///< Barometric temperature sensor NUM_OF_TEMPERATURE_SENSORS ///< Number of temperature sensors Index: firmware/App/DGCommon.h =================================================================== diff -u -rbcf9339af8a725054a8c936ae572bb95e2bcd3f0 -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision bcf9339af8a725054a8c936ae572bb95e2bcd3f0) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -38,7 +38,7 @@ #define THD_USING_TRO_CONNECTOR 1 // Build switch // #define EMC_TEST_BUILD 1 // Build switch -// #define ENABLE_DVT_BOARD 1 // TODo can we make this a sw config? TODO remove + #define DISABLE_FPGA_ALARMS_UNTIL_THE_NEW_PERSISTENT #include #include Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -19,8 +19,10 @@ #include "DrainPump.h" #include "Heaters.h" #include "ModeFault.h" +#include "NVDataMgmt.h" #include "OperationModes.h" #include "ROPump.h" +#include "RTC.h" #include "SystemCommMessages.h" #include "UVReactors.h" #include "Valves.h" @@ -36,10 +38,14 @@ // ********** private data ********** -static DG_FAULT_STATE_T faultState = DG_FAULT_STATE_START; ///< Currently active fault state. +static DG_FAULT_STATE_T faultState; ///< Currently active fault state. +static DG_POST_STATE_T faultPOSTState; ///< Fault POST state. +static SELF_TEST_STATUS_T faultPOSTSelfTestResult; ///< Fault POST self test result. // ********** private function prototypes ********** +static DG_FAULT_STATE_T handleRunNVPOSTsState( void ); + /*********************************************************************//** * @brief * The initFaultMode function initializes the Fault Mode module. @@ -49,7 +55,9 @@ *************************************************************************/ void initFaultMode( void ) { - faultState = DG_FAULT_STATE_START; + faultState = DG_FAULT_STATE_START; + faultPOSTState = DG_POST_STATE_RTC; + faultPOSTSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; } /*********************************************************************//** @@ -72,6 +80,11 @@ sendPOSTFinalResult( FALSE ); } + // Reset the RTC and NV data management POST states so + // the POSTs can be redone again + resetNVDataMgmtPostState(); + resetRTCPostState(); + return faultState; } @@ -90,11 +103,19 @@ switch ( faultState ) { case DG_FAULT_STATE_START: + faultState = DG_FAULT_STATE_RUN_NV_POSTS; break; + case DG_FAULT_STATE_RUN_NV_POSTS: + faultState = handleRunNVPOSTsState(); + break; + + case DG_FAULT_STATE_COMPLETE: + // Do nothing + break; + default: - // TODO - s/w fault - faultState = DG_FAULT_STATE_START; + faultState = DG_FAULT_STATE_COMPLETE; break; } @@ -149,4 +170,42 @@ stopHeater( DG_TRIMMER_HEATER ); } +/*********************************************************************//** + * @brief + * The handleRunNVPOSTsState function handles running the RTC and non-volatile + * data management POSTs. + * @details Inputs: faultPOSTState, faultPOSTSelfTestResult + * @details Outputs: faultPOSTState, faultPOSTSelfTestResult + * @return next state + *************************************************************************/ +static DG_FAULT_STATE_T handleRunNVPOSTsState( void ) +{ + DG_FAULT_STATE_T state = DG_FAULT_STATE_RUN_NV_POSTS; + + switch ( faultPOSTState ) + { + case DG_POST_STATE_RTC: + faultPOSTSelfTestResult = execRTCSelfTest(); + if ( SELF_TEST_STATUS_PASSED == faultPOSTSelfTestResult ) + { + faultPOSTState = DG_POST_STATE_NVDATAMGMT; + } + else if ( SELF_TEST_STATUS_FAILED == faultPOSTSelfTestResult ) + { + state = DG_FAULT_STATE_COMPLETE; + } + break; + + case DG_POST_STATE_NVDATAMGMT: + faultPOSTSelfTestResult = execNVDataMgmtSelfTest(); + if ( ( SELF_TEST_STATUS_PASSED == faultPOSTSelfTestResult ) || ( SELF_TEST_STATUS_FAILED == faultPOSTSelfTestResult ) ) + { + state = DG_FAULT_STATE_COMPLETE; + } + break; + } + + return state; +} + /**@}*/ Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rbcf9339af8a725054a8c936ae572bb95e2bcd3f0 -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision bcf9339af8a725054a8c936ae572bb95e2bcd3f0) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -210,10 +210,10 @@ U16 fpgaBaroPROMCRC; ///< Reg 440. Barometric sensor PROM CRC U32 fpgaBaroPressure; ///< Reg 442. Barometric sensor pressure value U32 fpgaBaroTemperature; ///< Reg 446. Barometric sensor temperature sensor - U08 fpgaTHDRTDReadCount; ///< Reg 450. THD RTD read count - U08 fpgaTHDRTDErrorCount; ///< Reg 451. THD RTD error count - U32 fpgaTHDReadData0; ///< Reg 452. THD channel 0 read data - U32 fpgaTHDReadData1; ///< Reg 456. THD channel 1 read data + U08 fpgaTHdRTDReadCount; ///< Reg 450. THD RTD read count + U08 fpgaTHdRTDErrorCount; ///< Reg 451. THD RTD error count + U32 fpgaTHdTemp; ///< Reg 452. THD channel 0 read data - temperature sensor + U32 fpgaTHdInternalTemp; ///< Reg 456. THD channel 1 read data - ADC internal temperature sensor U08 fpgaCPiCPoEmstatOutByte; ///< Reg 460. CPi/CPo Emstat out byte U08 fpgaCPiCPoEmstatRxErrCount; ///< Reg 461. CPi/CPo Emstat Rx error count U16 fpgaCPiCPoEmstatTxFIFOCount; ///< Reg 462. CPi/CPo Emstat Tx FIFO count @@ -2210,4 +2210,24 @@ return fpgaSensorReadings.fpgaCPiCPoEmstatRxErrCount; } +U32 getFPGATHdTemp( void ) +{ + return fpgaSensorReadings.fpgaTHdTemp; +} + +U32 getFPGATHdInternalTemp( void ) +{ + return fpgaSensorReadings.fpgaTHdInternalTemp; +} + +U08 getFPGATHdReadCount( void ) +{ + return fpgaSensorReadings.fpgaTHdRTDReadCount; +} + +U08 getFPGATHdErrorCount( void ) +{ + return fpgaSensorReadings.fpgaTHdRTDErrorCount; +} + /**@}*/ Index: firmware/App/Services/FPGA.h =================================================================== diff -u -r0d94694b64f936805dd6c2f71fde1840bc9c1311 -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision 0d94694b64f936805dd6c2f71fde1840bc9c1311) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -50,11 +50,6 @@ void setFPGAAcidPumpSetStepSpeed( U16 stepSpeed ); void setFPGABicarbSetStepSpeed( U16 stepSpeed ); -// DVT set functions -void setFPGAAcidPumpControl( U08 control ); -void setFPGABicarbPumpControl( U08 control ); -// DVT set functions - void getFPGAVersions( U08 *Id, U08 *Maj, U08 *Min, U08 *Lab ); U16 getFPGAValveStates( void ); U16 getFPGAROPumpFlowRate( void ); @@ -75,22 +70,18 @@ U08 getFPGARTDReadCount( void ); U32 getFPGATRoTemp( void ); - U08 getFPGATRoErrorCount( void ); U08 getFPGATRoReadCount( void ); U32 getFPGATDiTemp( void ); - U08 getFPGATDiErrorCount( void ); U08 getFPGATDiReadCount( void ); U16 getFPGAPrimaryHeaterTemp( void ); - U08 getFPGAPrimaryHeaterFlags( void ); U08 getFPGAPrimaryHeaterReadCount( void ); U16 getFPGATrimmerHeaterTemp( void ); - U08 getFPGATrimmerHeaterFlags( void ); U08 getFPGATrimmerHeaterReadCount( void ); @@ -147,6 +138,10 @@ U08 getFPGADialysateCapStatus( void ); U08 getFPGAConcentrateCapStatus( void ); +//***************** DVT Functions ***************************/ +void setFPGAAcidPumpControl( U08 control ); +void setFPGABicarbPumpControl( U08 control ); + U08 getFPGABaroReadCount( void ); U08 getFPGABaroErrorCount( void ); U16 getFPGABaroPressureSensitivity( void ); @@ -162,6 +157,11 @@ U16 getFPGAEmstatCPiCPoRxFifoCount( void ); U08 getFPGAEmstatCPiCPoRxErrCount( void ); +U32 getFPGATHdTemp( void ); +U32 getFPGATHdInternalTemp( void ); +U08 getFPGATHdReadCount( void ); +U08 getFPGATHdErrorCount( void ); + /**@}*/ #endif Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r224b86c0847207c168d38fa1713a1e9116642267 -rf639bbc47806ddcefdbdce78a377cd87050872e5 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 224b86c0847207c168d38fa1713a1e9116642267) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision f639bbc47806ddcefdbdce78a377cd87050872e5) @@ -655,9 +655,6 @@ if ( TRUE == didTimeout( timeOfLastHDCheckIn, HD_COMM_TIMEOUT_IN_MS ) ) { hdCommunicationStatus.data = FALSE; -#ifndef BOARD_WITH_NO_HARDWARE - activateAlarmNoData( ALARM_ID_HD_COMM_TIMEOUT ); -#endif } }