Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r3d413ac026e89a1324c4b0e99516735ec382fed8 -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 3d413ac026e89a1324c4b0e99516735ec382fed8) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) @@ -65,8 +65,8 @@ /*************************DVT Definitions********************************************/ #define CONCENTRATE_PUMP_CONTROL_EIGHTH_STEP 0x07 ///< Concentrate pump control 1/8th step. -#define CONCENTRATE_PUMP_CONTROL_REVERSE_DIR 0x08 ///< Concentrate pump control reverse direction. -#define CONCENTRATE_PUMP_CONTROL_FORWARD_DIR 0x00 ///< Concentrate pump control forward direction. +#define CONCENTRATE_PUMP_CONTROL_REVERSE_DIR 0x00 //0x08 ///< Concentrate pump control reverse direction. +#define CONCENTRATE_PUMP_CONTROL_FORWARD_DIR 0x08 //0x00 ///< Concentrate pump control forward direction. #define CONCENTRATE_PUMP_CONTROL_ENABLE 0x00 ///< Concentrate pump control enable pump. #define CONCENTRATE_PUMP_CONTROL_NOT_RESET 0x20 ///< Concentrate pump control not reset. #define CONCENTRATE_PUMP_CONTROL_SLEEP_OFF 0x40 ///< Concentrate pump control sleep off. Index: firmware/App/Controllers/FlowSensors.c =================================================================== diff -u -r5c53288436774f0cf6a24132ace29a64a66d619d -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e --- firmware/App/Controllers/FlowSensors.c (.../FlowSensors.c) (revision 5c53288436774f0cf6a24132ace29a64a66d619d) +++ firmware/App/Controllers/FlowSensors.c (.../FlowSensors.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) @@ -18,8 +18,6 @@ // ********** private definitions ********** #define FLOW_SENSORS_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the Dialysate flow data is published on the CAN bus. - -#define FLOW_SENSORS_ZERO_READING 0xFFFF // TODO remove ///< Flow sensor reading indicates zero flow (or flow lower than can be detected by sensor). #define FLOW_SENSORS_EDGES_BUFFER_LENGTH 100 #define FLOW_SENSORS_PULSES_PER_LITER 110000 // TODO calibration record @@ -126,13 +124,15 @@ flowSensorStatus[ i ].measuredFlowLPM.data = flowSensorStatus[ i ].measuredROFlowWithCPsLPM.data - ( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ) / ML_PER_LITER ) - ( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2_BICARB ) / ML_PER_LITER ); + flowSensorStatus[ i ].measuredFlowLPM.data = MAX( flowSensorStatus[ i ].measuredFlowLPM.data, 0.0 ); break; case DIALYSATE_FLOW_SENSOR: flowSensorStatus[ i ].edgeCountsBuffer[ countsIndex ] = getFPGADialysateFlowSensorEdgeCount(); oldest2CurrentEdgeDiff = u16DiffWithWrap( oldestEdgeCount, flowSensorStatus[ i ].edgeCountsBuffer[ countsIndex ] ); flowBeforeCalibrationLPM = oldest2CurrentEdgeDiff * FLOW_SENSORS_LITERS_PER_PULSES * SEC_PER_MIN; flowSensorStatus[ i ].measuredFlowLPM.data = getCalibrationAppliedFlowLPM( i, flowBeforeCalibrationLPM ); + flowSensorStatus[ i ].measuredFlowLPM.data = MAX( flowSensorStatus[ i ].measuredFlowLPM.data, 0.0 ); break; #ifndef _VECTORCAST_ Index: firmware/App/Controllers/FlowSensors.h =================================================================== diff -u -r5c53288436774f0cf6a24132ace29a64a66d619d -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e --- firmware/App/Controllers/FlowSensors.h (.../FlowSensors.h) (revision 5c53288436774f0cf6a24132ace29a64a66d619d) +++ firmware/App/Controllers/FlowSensors.h (.../FlowSensors.h) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) @@ -15,8 +15,8 @@ */ // ********** public definitions ********** -#define MAX_FLOWRATE_LPM 2.00F ///< Maximum target flow rate in L/min. -#define MIN_FLOWRATE_LPM 0.05F ///< Minimum target flow rate in L/min. +#define MAX_DIALYSATE_FLOWRATE_LPM 2.00F ///< Maximum target flow rate in L/min. +#define MIN_DIALYSATE_FLOWRATE_LPM 0.05F ///< Minimum target flow rate in L/min. /// Flow meters name typedef enum Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r3d413ac026e89a1324c4b0e99516735ec382fed8 -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 3d413ac026e89a1324c4b0e99516735ec382fed8) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) @@ -164,7 +164,8 @@ initPersistentAlarm( ALARM_ID_DG_TRIMMER_HEATER_VOLTAGE_OUT_OF_RANGE, HEATERS_VOLTAGE_OUT_OF_RANGE_TIMEOUT_MS, HEATERS_VOLTAGE_OUT_OF_RANGE_TIMEOUT_MS ); - initPersistentAlarm( ALARM_ID_DG_FLOW_TOO_LOW_WHILE_HEATER_ON, HEATERS_ON_NO_FLOW_TIMEOUT_MS, HEATERS_ON_NO_FLOW_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_RO_FLOW_TOO_LOW_WHILE_PRIMARY_HEATER_IS_ON, HEATERS_ON_NO_FLOW_TIMEOUT_MS, HEATERS_ON_NO_FLOW_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_DIALYSATE_FLOW_TOO_LOW_WHILE_TRIMMER_HEATER_IS_ON, HEATERS_ON_NO_FLOW_TIMEOUT_MS, HEATERS_ON_NO_FLOW_TIMEOUT_MS ); } /*********************************************************************//** @@ -333,17 +334,32 @@ // Check if the heater is on and if it is, check the flow sensor's status if ( TRUE == heatersStatus[ heater ].isHeaterOn ) { - // TODO add the function that gets the flow of the new flow sensor for DG. For now it is assumed that trimmer heater flow sensor - // is not 0 so the heater can run if needed - F32 measFlow = ( DG_PRIMARY_HEATER == heater ? getMeasuredFlowRateLPM( RO_FLOW_SENSOR ) /*getMeasuredROFlowRateLPM()*/ : 50.0 ); - F32 minFlow = ( DG_PRIMARY_HEATER == heater ? MIN_RO_FLOWRATE_LPM : MIN_RO_FLOWRATE_LPM ); - BOOL isFlowLow = ( measFlow < minFlow ? TRUE : FALSE ); + ALARM_ID_T alarm; + F32 measFlow; + F32 minFlow; + BOOL isFlowLow; - checkPersistentAlarm( ALARM_ID_DG_FLOW_TOO_LOW_WHILE_HEATER_ON, isFlowLow, measFlow, minFlow ); + if ( DG_PRIMARY_HEATER == heater ) + { + alarm = ALARM_ID_RO_FLOW_TOO_LOW_WHILE_PRIMARY_HEATER_IS_ON; + measFlow = getMeasuredFlowRateLPM( RO_FLOW_SENSOR ); + minFlow = MIN_RO_FLOWRATE_LPM; + } + else + { + alarm = ALARM_ID_DIALYSATE_FLOW_TOO_LOW_WHILE_TRIMMER_HEATER_IS_ON; + measFlow = getMeasuredFlowRateLPM( DIALYSATE_FLOW_SENSOR ); + minFlow = MIN_DIALYSATE_FLOWRATE_LPM; + } + + isFlowLow = ( measFlow < minFlow ? TRUE : FALSE ); + + checkPersistentAlarm( alarm, isFlowLow, measFlow, minFlow ); } else { - checkPersistentAlarm( ALARM_ID_DG_FLOW_TOO_LOW_WHILE_HEATER_ON, FALSE, 0.0, 0.0 ); + checkPersistentAlarm( ALARM_ID_RO_FLOW_TOO_LOW_WHILE_PRIMARY_HEATER_IS_ON, FALSE, 0.0, 0.0 ); + checkPersistentAlarm( ALARM_ID_DIALYSATE_FLOW_TOO_LOW_WHILE_TRIMMER_HEATER_IS_ON, FALSE, 0.0, 0.0 ); } } @@ -626,7 +642,7 @@ F32 targetFlowLPM = heatersStatus[ DG_TRIMMER_HEATER ].targetFlow; F32 dutyCycle = calculateTrimmerHeaterDutyCycle( targetTemperature, outletRedundantTemperature, targetFlowLPM, TRUE ); trimmerHeaterControlCounter = 0; - setHeaterDutyCycle( DG_TRIMMER_HEATER, dutyCycle ); + setHeaterDutyCycle( DG_TRIMMER_HEATER, ( heatersStatus[ DG_TRIMMER_HEATER ].dutycycle + dutyCycle ) ); } return state; Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r3dd12fb9d032f85126db82ca48812a4652a5b75f -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 3dd12fb9d032f85126db82ca48812a4652a5b75f) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) @@ -256,12 +256,8 @@ break; case PRESSURE_TEST_STATE_IN_PROGRESS: - baroConvConsts.pressureSensitivity = getFPGABaroPressureSensitivity(); - baroConvConsts.pressureSensitivityTempCoeff = getFPGABaroTempCoeffOfPressSensitvity(); - baroConvConsts.pressureOffset = getFPGABaroPressureOffset(); - baroConvConsts.pressureOffsetTempCoeff = getFPGABaroTempCoeffOfPressOffset(); - pressuresSelfTestResult = handleSelfTestADCCheck(); - pressuresSelfTestState = PRESSURE_TEST_STATE_COMPLETE; + pressuresSelfTestResult = handleSelfTestADCCheck(); + pressuresSelfTestState = PRESSURE_TEST_STATE_COMPLETE; break; @@ -343,9 +339,13 @@ break; case PRESSURE_SENSOR_BAROMETRIC: - pressureBeforeCal = calculateBaroPressure( (U32)adcSum ); - pressures[ sensorId ].data = getCalibrationAppliedPressure( sensorId, pressureBeforeCal ); - msrdPressureSum[ sensorId ] = 0; + baroConvConsts.pressureSensitivity = getFPGABaroPressureSensitivity(); + baroConvConsts.pressureSensitivityTempCoeff = getFPGABaroTempCoeffOfPressSensitvity(); + baroConvConsts.pressureOffset = getFPGABaroPressureOffset(); + baroConvConsts.pressureOffsetTempCoeff = getFPGABaroTempCoeffOfPressOffset(); + pressureBeforeCal = calculateBaroPressure( (U32)adcSum ); + pressures[ sensorId ].data = getCalibrationAppliedPressure( sensorId, pressureBeforeCal ); + msrdPressureSum[ sensorId ] = 0; break; } } Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r5c53288436774f0cf6a24132ace29a64a66d619d -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 5c53288436774f0cf6a24132ace29a64a66d619d) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) @@ -316,7 +316,7 @@ void signalROPumpHardStop( void ) { stopROPump(); - targetROPumpFlowRateLPM = 0; + targetROPumpFlowRateLPM = 0; roPumpState = RO_PUMP_OFF_STATE; roPumpPWMDutyCyclePct = 0.0; roPumpOpenLoopTargetDutyCycle = 0.0; @@ -931,6 +931,14 @@ { result = setROPumpTargetFlowRateLPM( flow, MAX_ALLOWED_PRESSURE_PSI ); } + + // If the flow is less than a very small number, it means 0 LPM flow rate has been requested + // and this is coming from Dialin so the user requested the pump to stop + if ( fabs( flow ) < NEARLY_ZERO ) + { + signalROPumpHardStop(); + result = TRUE; + } } return result; Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r5c53288436774f0cf6a24132ace29a64a66d619d -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 5c53288436774f0cf6a24132ace29a64a66d619d) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) @@ -176,6 +176,9 @@ static const U32 TWO_TO_POWER_OF_8 = ( 1 << 8 ); ///< 2^8. static const U32 TWO_TO_POWER_OF_23 = ( 1 << 23 ); ///< 2^23. +static U32 temporaryTODORemove[2][ 300 ]; +static U32 temporaryIdx = 0; + // ********** private function prototypes ********** static TEMPSENSORS_EXEC_STATES_T handleExecStart( void ); @@ -325,6 +328,8 @@ // When the FPGA read count does not increment for a period of time, it is considered as an internal error of the temperature sensors // driver. This is internal because FPGA does not error out if the FPGA read count does not increment. initPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSORS_FPGA_FAULT, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS ); + + initFPGAPersistentAlarm( TWO_WIRE_ADC_TEMP_SENSORS, ALARM_ID_DG_TEMPERATURE_SENSORS_FPGA_FAULT, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS); } /*********************************************************************//** @@ -631,15 +636,15 @@ // Shift bits by 31 to right to check the error bit status tempSensors[ sensorIndex ].sensorErrorBitStatus = adc >> SHIFT_BITS_BY_31; - for ( i = 0; i < NUM_OF_TEMPERATURE_SENSORS; i++ ) + /*for ( i = 0; i < NUM_OF_TEMPERATURE_SENSORS; i++ ) { // If that bit is a 1, there is either CRC error or Status error that are ored on top of each other // NOTE: only a few sensors have the error bit available but for simplicity, all the sensors are looped. // This variable is zeroed in the init function and the sensors that do not use this bit are never checked ( and set) to // any other values so those sensors will never trigger this fault. // If any of the sensors have this bit to be 1, set the error occurred be 1 isTemperatureNotValid |= ( tempSensors[ i ].sensorErrorBitStatus > 0 ? TRUE : FALSE ); - } + }*/ #ifndef DISABLE_FPGA_ALARMS_UNTIL_THE_NEW_PERSISTENT // TODO for debugging only remove @@ -728,6 +733,7 @@ // 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 ); @@ -851,9 +857,6 @@ // A delay to let FPGA to boot up else if ( TRUE == didTimeout( elapsedTime, ADC_FPGA_READ_DELAY ) ) { - // Once FPGA is ready get the barometric sensor's temperature conversion constants - baroConvConsts.refTemperature = getFPGABaroReferenceTemperature(); - baroConvConsts.temperatureCoeff = getFPGABaroTempCoeffOfTemperature(); elapsedTime = 0; state = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; } @@ -875,12 +878,19 @@ U32 errorCount = 0; U32 readCount = 0; + // TODO remove + //temporaryTODORemove[0][temporaryIdx] = (U32)getFPGARTDErrorCount(); + //temporaryTODORemove[1][temporaryIdx] = (U32)getFPGARTDReadCount(); + //temporaryIdx = INC_WRAP(temporaryIdx, 0, 300); + // TODO remove + // Look at the error counter and the specific error flag to make sure the error is a temperature sensor // Add a byte array to have bits for each sensor to find out exactly what sensor failed - if ( ++fpgaRawADCReadInterval >= FPGA_RAW_ADC_READ_INTERVAL_COUNT ) + //if ( ++fpgaRawADCReadInterval >= FPGA_RAW_ADC_READ_INTERVAL_COUNT ) { errorCount = (U32)getFPGARTDErrorCount(); readCount = (U32)getFPGARTDReadCount(); + //checkFPGAPersistentAlarms( TWO_WIRE_ADC_TEMP_SENSORS, errorCount, readCount, TEMPSENSORS_INLET_PRIMARY_HEATER ); processTempSnsrsADCRead( TEMPSENSORS_INLET_PRIMARY_HEATER, getFPGATPiTemp(), errorCount, readCount, TRUE ); processTempSnsrsADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER, getFPGATPoTemp(), errorCount, readCount, FALSE ); processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1, getFPGACD1Temp(), errorCount, readCount, FALSE ); @@ -895,6 +905,9 @@ processTempSnsrsADCRead( TEMPSENSORS_HEAT_DISINFECT, getFPGATHdTemp(), errorCount, readCount, TRUE ); processTempSnsrsADCRead( TEMPSENSORS_INTERNAL_THD_RTD, getFPGATHdInternalTemp(), errorCount, readCount, FALSE ); + // Once FPGA is ready get the barometric sensor's temperature conversion constants + baroConvConsts.refTemperature = getFPGABaroReferenceTemperature(); + baroConvConsts.temperatureCoeff = getFPGABaroTempCoeffOfTemperature(); errorCount = getFPGABaroErrorCount(); readCount = getFPGABaroReadCount(); processTempSnsrsADCRead( TEMPSENSORS_BAROMETRIC_TEMP_SENSOR, getFPGABaroTemperature(), errorCount, readCount, TRUE ); Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rf43eb0d0f168ea14b846d0c24f0ad0cb30784d3f -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision f43eb0d0f168ea14b846d0c24f0ad0cb30784d3f) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) @@ -82,14 +82,14 @@ #define DRAIN_PUMP_DAC_SHIFT_BITS 4 ///< Drain pump DAC shift bits. #define FPGA_FLUIDLEAK_STATE_MASK 0x0004 ///< Bit mask for fluid leak detector. - +#define FPGA_ENABLE_VALVES_CONTROL 0x015F ///< FPGA enable valves control #define CONCENTRATE_CAP_SWITCH_MASK 0x10 ///< Concentrate cap switch bit mask. #define DIALYSATE_CAP_SWITCH_MASK 0x20 ///< Dialysate cap switch bit mask. #define FPGA_THD_CONTROL_COMMAND 0X01 ///< FPGA THd control command. #define FPGA_POWER_OUT_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< FPGA power out timeout in milliseconds. #define FPGA_GPIO_POWER_STATUS_PIN 7 ///< FPGA GPIO power status pin. #define FPGA_READ_V3_START_BYTE_NUM 256 ///< FPGA V3 read sensors start byte number. -#define FPGA_READ_V3_END_BYTE_NUM 418 ///< FPGA V3 read sensors end byte number. +#define FPGA_READ_V3_END_BYTE_NUM 430 ///< FPGA V3 read sensors end byte number. /// FPGA size of V3 read bytes. #define FPGA_SIZE_OF_V3_READ_BYTES ( FPGA_READ_V3_END_BYTE_NUM - FPGA_READ_V3_START_BYTE_NUM ) @@ -199,37 +199,42 @@ U16 fpgaDialysateFlowRate; ///< Reg 412. Dialysate flow rate measurement U16 fpgaROFlowSensorEdgeCount; ///< Reg 414. RO flow sensor edge count U16 fpgaDialysateFlowSensorEdgeCount; ///< Reg 416. Dialysate flow sensor edge count + U16 fpgaCompatibilityRev; ///< Reg 418. Compatibility revision + U16 fpgaFMPNoisePulse; ///< Reg 420. FMP noise pulse count + U16 fpgaFMDNoisePulse; ///< Reg 422. FMD noise pulse count + U16 fpgaPlaceHolder1; ///< Reg 424. V3 place holder 1 + U16 fpgaPlaceHolder2; ///< Reg 426. V3 place holder 2 + U16 fpgaPlaceHolder3; ///< Reg 428. V3 place holder 3 // DVT changes - U16 fpgaDrainPumpSpeedFeedback; ///< Reg 418. Drain pump speed feedback - U16 fpgaDrainPumpCurrentFeedback; ///< Reg 420. Drain pump current feedback - U08 fpgaBaroReadCount; ///< Reg 422. Barometric sensor read count - U08 fpgaBaroErrorCount; ///< Reg 423. Barometric sensor error count - U16 fpgaBaroManufacInfo; ///< Reg 424. Barometric sensor manufacturing information - U16 fpgaBaroPROMCoeff1; ///< Reg 426. Barometric sensor PROM coefficient 1 - U16 fpgaBaroPROMCoeff2; ///< Reg 428. Barometric sensor PROM coefficient 2 - U16 fpgaBaroPROMCoeff3; ///< Reg 430. Barometric sensor PROM coefficient 3 - U16 fpgaBaroPROMCoeff4; ///< Reg 432. Barometric sensor PROM coefficient 4 - U16 fpgaBaroPROMCoeff5; ///< Reg 434. Barometric sensor PROM coefficient 5 - U16 fpgaBaroPROMCoeff6; ///< Reg 436. Barometric sensor PROM coefficient 6 - U16 fpgaBaroPROMCRC; ///< Reg 438. Barometric sensor PROM CRC - U32 fpgaBaroPressure; ///< Reg 440. Barometric sensor pressure value - U32 fpgaBaroTemperature; ///< Reg 444. Barometric sensor temperature sensor - U08 fpgaTHdRTDReadCount; ///< Reg 448. THD RTD read count - U08 fpgaTHdRTDErrorCount; ///< Reg 449. THD RTD error count - U32 fpgaTHdTemp; ///< Reg 450. THD channel 0 read data - temperature sensor - U32 fpgaTHdInternalTemp; ///< Reg 454. THD channel 1 read data - ADC internal temperature sensor - U08 fpgaCPiCPoEmstatOutByte; ///< Reg 458. CPi/CPo Emstat out byte - U08 fpgaCPiCPoEmstatRxErrCount; ///< Reg 459. CPi/CPo Emstat Rx error count - U16 fpgaCPiCPoEmstatTxFIFOCount; ///< Reg 460. CPi/CPo Emstat Tx FIFO count - U16 fpgaCPiCPoEmstatRxFIFOCount; ///< Reg 462. CPi/CPo Emstat Rx FIFO count - U16 fpgaHeaterGateADC; ///< Reg 464. Heater gate ADC - U16 fpgaHeaterGNDADC; ///< Reg 466. Heater ground ADC - U08 fpgaHeater1ADCReadCount; ///< Reg 468. Heater 1 ADC read count - U08 fpgaHeater1ADCErrorCount; ///< Reg 469. Heater 1 ADC error count - U16 fpgaPowerSupply2; ///< Reg 470. Power supply 2 count - U16 fpgaOnBoardThermistor; ///< Reg 472. Onboard thermistor - U16 fpgaCompatibilityRev; ///< Reg 474. Compatibility revision + U16 fpgaDrainPumpSpeedFeedback; ///< Reg 430. Drain pump speed feedback + U16 fpgaDrainPumpCurrentFeedback; ///< Reg 432. Drain pump current feedback + U08 fpgaBaroReadCount; ///< Reg 434. Barometric sensor read count + U08 fpgaBaroErrorCount; ///< Reg 435. Barometric sensor error count + U16 fpgaBaroManufacInfo; ///< Reg 436. Barometric sensor manufacturing information + U16 fpgaBaroPROMCoeff1; ///< Reg 438. Barometric sensor PROM coefficient 1 + U16 fpgaBaroPROMCoeff2; ///< Reg 440. Barometric sensor PROM coefficient 2 + U16 fpgaBaroPROMCoeff3; ///< Reg 442. Barometric sensor PROM coefficient 3 + U16 fpgaBaroPROMCoeff4; ///< Reg 444. Barometric sensor PROM coefficient 4 + U16 fpgaBaroPROMCoeff5; ///< Reg 446. Barometric sensor PROM coefficient 5 + U16 fpgaBaroPROMCoeff6; ///< Reg 448. Barometric sensor PROM coefficient 6 + U16 fpgaBaroPROMCRC; ///< Reg 450. Barometric sensor PROM CRC + U32 fpgaBaroPressure; ///< Reg 452. Barometric sensor pressure value + U32 fpgaBaroTemperature; ///< Reg 456. Barometric sensor temperature sensor + U08 fpgaTHdRTDReadCount; ///< Reg 460. THD RTD read count + U08 fpgaTHdRTDErrorCount; ///< Reg 461. THD RTD error count + U32 fpgaTHdTemp; ///< Reg 462. THD channel 0 read data - temperature sensor + U32 fpgaTHdInternalTemp; ///< Reg 466. THD channel 1 read data - ADC internal temperature sensor + U08 fpgaCPiCPoEmstatOutByte; ///< Reg 470. CPi/CPo Emstat out byte + U08 fpgaCPiCPoEmstatRxErrCount; ///< Reg 471. CPi/CPo Emstat Rx error count + U16 fpgaCPiCPoEmstatTxFIFOCount; ///< Reg 472. CPi/CPo Emstat Tx FIFO count + U16 fpgaCPiCPoEmstatRxFIFOCount; ///< Reg 474. CPi/CPo Emstat Rx FIFO count + U16 fpgaHeaterGateADC; ///< Reg 476. Heater gate ADC + U16 fpgaHeaterGNDADC; ///< Reg 478. Heater ground ADC + U08 fpgaHeater1ADCReadCount; ///< Reg 480. Heater 1 ADC read count + U08 fpgaHeater1ADCErrorCount; ///< Reg 481. Heater 1 ADC error count + U16 fpgaPowerSupply2; ///< Reg 482. Power supply 2 count + U16 fpgaOnBoardThermistor; ///< Reg 484. Onboard thermistor } DG_FPGA_SENSORS_T; typedef struct @@ -365,18 +370,14 @@ void initFPGA( void ) { // initialize fpga data structures - memset( &fpgaHeader, 0, sizeof(FPGA_HEADER_T) ); - memset( &fpgaSensorReadings, 0, sizeof(DG_FPGA_SENSORS_T) ); - memset( &fpgaActuatorSetPoints, 0, sizeof(FPGA_ACTUATORS_T) ); + memset( &fpgaHeader, 0, sizeof( FPGA_HEADER_T ) ); + memset( &fpgaSensorReadings, 0, sizeof( DG_FPGA_SENSORS_T ) ); + memset( &fpgaActuatorSetPoints, 0, sizeof( FPGA_ACTUATORS_T ) ); // Set the THd control register to 0x1 to make sure its ADC is running fpgaActuatorSetPoints.fpgaTHdControlReg = FPGA_THD_CONTROL_COMMAND; + fpgaActuatorSetPoints.fpgaValveStates = FPGA_ENABLE_VALVES_CONTROL; - // TODO Remove the below line - // Initialize the valves - fpgaActuatorSetPoints.fpgaValveStates = 0x015F; - // TODO Remove the above line - // initialize fpga comm buffers memset( &fpgaWriteCmdBuffer, 0, FPGA_WRITE_CMD_BUFFER_LEN ); memset( &fpgaReadCmdBuffer, 0, FPGA_READ_CMD_BUFFER_LEN ); @@ -865,23 +866,23 @@ if ( FPGA_EXPECTED_ID == fpgaHeader.fpgaId ) { // Check FPGA compatibility w/ firmware - /*if ( DG_FPGA_COMPATIBILITY_REV == fpgaSensorReadings.fpgaCompatibilityRev ) + if ( DG_FPGA_COMPATIBILITY_REV == fpgaSensorReadings.fpgaCompatibilityRev ) { result = SELF_TEST_STATUS_PASSED; } else { result = SELF_TEST_STATUS_FAILED; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_FPGA_POST_TEST_FAILED, (U32)DG_FPGA_COMPATIBILITY_REV, (U32)fpgaSensorReadings.fpgaCompatibilityRev ) - }*/ + } } else { result = SELF_TEST_STATUS_FAILED; SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_FPGA_POST_TEST_FAILED, (U32)fpgaHeader.fpgaId ) } - return SELF_TEST_STATUS_PASSED; //result; + return result; } /*********************************************************************//**