Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r7d963ca43801628920617ce0b904a62effcd2722 -rffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 7d963ca43801628920617ce0b904a62effcd2722) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision ffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d) @@ -331,7 +331,7 @@ ( D19_VALV == valveID ) || ( D25_VALV == valveID ) || ( D21_VALV == valveID ) || ( D24_VALV == valveID ) || ( D20_VALV == valveID ) || ( D26_VALV == valveID ) || ( D22_VALV == valveID ) || ( D80_VALV == valveID ) || ( D81_VALV == valveID ) || ( D79_PMP_VALV == valveID ) || ( P11_VALV == valveID ) || ( P33_VALV == valveID ) || ( P34_VALV == valveID ) || ( P37_VALV == valveID ) || ( P6_VALV == valveID ) || - ( M12_VALV == valveID ) || ( P39_VALV == valveID ) ) + ( M12_VALV == valveID ) || ( P39_VALV == valveID ) || ( D83_VALV == valveID ) || ( D91_VALV == valveID ) || ( D100_VALV == valveID ) ) { result = TRUE; } Index: firmware/App/Drivers/TemperatureSensors.c =================================================================== diff -u -rae7a7f0dc06fd31a53b0db564d515ce4c39acf67 -rffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d --- firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision ae7a7f0dc06fd31a53b0db564d515ce4c39acf67) +++ firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision ffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d) @@ -139,7 +139,6 @@ tempSensors[ D99_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; tempSensors[ D99_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; - // Board temperature sensors conversion coefficient tempSensors[ BRD_TEMP ].conversionCoeff = conversionCoeff; tempSensors[ BRD_TEMP ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -rae7a7f0dc06fd31a53b0db564d515ce4c39acf67 -rffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision ae7a7f0dc06fd31a53b0db564d515ce4c39acf67) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision ffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d) @@ -1018,13 +1018,6 @@ data.genDialysateExecState = (U32)getCurrentGenDialysateState(); data.isDialDelInProgress = (BOOL)getDialDeliveryProgressStatus(); - data.d6Level = (U32)getLevelStatus( D6_LEVL ); - data.d63Level = (U32)getLevelStatus( D63_LEVL ); - data.d98Level = (U32)getLevelStatus( D98_LEVL ); - data.d46Level = (U32)getLevelStatus( D46_LEVL ); - data.d9Pressure = getFilteredPressure( D9_PRES ); - data.d18Pressure = getFilteredPressure( D18_PRES ); - data.d51Pressure = getFilteredPressure( D51_PRES ); data.isDialysateGoodtoDeliver = (BOOL)getDialGoodToDeliverStatus(); data.currentQd = dialysateToDialyzerFlowRate; Index: firmware/App/Modes/ModeGenDialysate.h =================================================================== diff -u -rae7a7f0dc06fd31a53b0db564d515ce4c39acf67 -rffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d --- firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision ae7a7f0dc06fd31a53b0db564d515ce4c39acf67) +++ firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision ffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d) @@ -40,13 +40,6 @@ { U32 genDialysateExecState; ///< Generate dialysate execution state BOOL isDialDelInProgress; ///< Whether Dialysate Delivery in progress or not - U32 d6Level; ///< Floater level (low, medium and high) - U32 d63Level; ///< BiCarb Chamber Upper level - U32 d98Level; ///< BiCarb Chamber Lower level - U32 d46Level; ///< Spent dialysate chamber level - F32 d9Pressure; ///< Hydraulics chamber negative pressure - F32 d18Pressure; ///< Hydraulics chamber positive pressure - F32 d51Pressure; ///< Spent Dialysate positive pressure BOOL isDialysateGoodtoDeliver; ///< Ready to deliver dialysate or not F32 currentQd; ///< Current dialysate flow rate (ml/min) } GEN_DIALYSATE_MODE_DATA_T; Index: firmware/App/Monitors/Level.c =================================================================== diff -u -rae7a7f0dc06fd31a53b0db564d515ce4c39acf67 -rffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d --- firmware/App/Monitors/Level.c (.../Level.c) (revision ae7a7f0dc06fd31a53b0db564d515ce4c39acf67) +++ firmware/App/Monitors/Level.c (.../Level.c) (revision ffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d) @@ -63,6 +63,7 @@ static void publishLevelsData( void ); static BOOL processLevelCount( U16 count ); static LEVEL_STATE_T readFloaterLevelstatus( LEVEL_T levelId ); +static LEVEL_STATE_T readBicarbChamberFLevelStatus( void ); /*********************************************************************//** * @brief @@ -123,11 +124,11 @@ break; case D63_LEVL: - currentLevelStatus = ( processLevelCount( getFPGAD63LevelSensor() ) == 0 ? LEVEL_STATE_LOW : LEVEL_STATE_HIGH ); + currentLevelStatus = readBicarbChamberFLevelStatus(); break; case D98_LEVL: - currentLevelStatus = ( processLevelCount( getFPGAD63LevelSensor() ) == 0 ? LEVEL_STATE_LOW : LEVEL_STATE_HIGH ); + currentLevelStatus = readBicarbChamberFLevelStatus(); break; case D46_LEVL: @@ -324,6 +325,41 @@ /*********************************************************************//** * @brief + * Derive Bicarb chamber F level from the two level sensors. + * @details \b Inputs: FPGA level sensor data + * @details \b Outputs: level + * @return level status + *************************************************************************/ +static LEVEL_STATE_T readBicarbChamberFLevelStatus( void ) +{ + BOOL upperlevel = FALSE; + BOOL lowerlevel = FALSE; + + // These FPGA reads are raw counts + upperlevel = processLevelCount( getFPGAD63LevelSensor() ); + lowerlevel = processLevelCount( getFPGAD98LevelSensor() ); + + if ( ( FALSE == lowerlevel ) && ( FALSE == upperlevel ) ) + { + return LEVEL_STATE_LOW; + } + else if ( ( TRUE == lowerlevel ) && ( FALSE == upperlevel ) ) + { + return LEVEL_STATE_MEDIUM; + } + else if ( ( TRUE == lowerlevel ) && ( TRUE == upperlevel ) ) + { + return LEVEL_STATE_HIGH; + } + else + { + //upperlevel == TRUE while lowerlevel == FALSE -> illegal + return LEVEL_STATE_ILLEGAL; + } +} + +/*********************************************************************//** + * @brief * The publishLevelsData function broadcasts the level data at the * publication interval. * @details \b Inputs: levelsDataPublicationCounter Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -rae7a7f0dc06fd31a53b0db564d515ce4c39acf67 -rffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision ae7a7f0dc06fd31a53b0db564d515ce4c39acf67) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision ffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d) @@ -43,7 +43,8 @@ #define TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Temperature sensors FPGA error timeout in milliseconds. #define D4_TEMP_MOVING_AVG_NUM_OF_SAMPLES 50 ///< D4 temperature sensor moving average number of samples. #define D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES 25 ///< D50 temperature sensor moving average number of samples ( 250ms filter ). -#define D99_TEMP_MOVING_AVG_NUM_OF_SAMPLES ///< D99 temperature sensor moving average number of samples //TODO +//TODO for D99 the sample size will be defined as needed +#define D99_TEMP_MOVING_AVG_NUM_OF_SAMPLES 50 ///< D99 temperature sensor moving average number of samples #define DATA_PUBLISH_COUNTER_START_COUNT 30 ///< Data publish counter start count. #define DIAL_TEMP_MOVING_AVG_NUM_OF_SAMPLES 30 ///< Dialysate temperature sensors moving average number of samples. #define D28_D30_DATA_COLLECTION_TIME_MS ( 1 * MS_PER_SECOND ) ///< Dialysate temperature sensors data collection time in milliseconds. @@ -141,6 +142,10 @@ d50TempAvgC = 0.0F; d50TempSamplesNextIndex = 0; d50TempCount = 0; + d99TempRunningSumC = 0.0F; + d99TempAvgC = 0.0F; + d99TempSamplesNextIndex = 0; + d99TempCount = 0; d4TempSampleIntervalCounter = 0; tempDataColTimeInterval = 0; tempDriftEventCheck = FALSE; @@ -292,7 +297,8 @@ * @details \b Inputs: D4 and D50 Temperature * @details \b Outputs: d4TempSamplesC[], d4TempSamplesNextIndex, d4TempRunningSumC, * d4TempCount, d4TempAvgC, d50TempSamplesC, d50TempRunningSumC, d50TempSamplesNextIndex, - * d50TempCount, d50TempAvgC + * d50TempCount, d50TempAvgC, d99TempSamplesC, d99TempRunningSumC, d99TempSamplesNextIndex, + * d99TempCount, d99TempAvgC * @return none *************************************************************************/ static void filterTemperatureReadings( void ) @@ -328,6 +334,19 @@ d50TempCount = INC_CAP( d50TempCount, D50_TEMP_MOVING_AVG_NUM_OF_SAMPLES ); d50TempAvgC = d50TempRunningSumC / (F32)d50TempCount; + // Filter D99 Temperature for fresh dialysate temperature + if ( d99TempCount >= D99_TEMP_MOVING_AVG_NUM_OF_SAMPLES ) + { + d99TempRunningSumC -= d99TempSamplesC[ d99TempSamplesNextIndex ]; + } + + F32 d99Temp = getTemperatureValue( D99_TEMP ); + d99TempSamplesC[ d99TempSamplesNextIndex ] = d99Temp; + d99TempRunningSumC += d99Temp; + d99TempSamplesNextIndex = INC_WRAP( d99TempSamplesNextIndex, 0, D99_TEMP_MOVING_AVG_NUM_OF_SAMPLES - 1 ); + d99TempCount = INC_CAP( d99TempCount, D99_TEMP_MOVING_AVG_NUM_OF_SAMPLES ); + d99TempAvgC = d99TempRunningSumC / (F32)d99TempCount; + // dailysate temperature moving average filterDialTemperatureReadings(); } @@ -432,6 +451,19 @@ /*********************************************************************//** * @brief + * The getD99AverageTemperature function returns the average temperature + * for D99 temperature sensor. + * @details \b Inputs: none + * @details \b Outputs: none + * @return the D99 average temperature + *************************************************************************/ +F32 getD99AverageTemperature( void ) +{ + return d99TempAvgC; +} + +/*********************************************************************//** + * @brief * The getTempMovingAverageTimeInterval function calculates the temperature * interval used for sample collection based on the dialysate flow rate, * to find the average value. @@ -470,6 +502,7 @@ data.d78Temp = getTemperatureValue( D78_TEMP ); data.d4Temp = getTemperatureValue( D4_TEMP ); data.d50Temp = getTemperatureValue( D50_TEMP ); + data.d99Temp = getTemperatureValue( D99_TEMP ); data.boardTemp = getTemperatureValue( BRD_TEMP ); data.d16CondTemp = getConductivityTemperatureValue( D17_COND ); data.d28CondTemp = getConductivityTemperatureValue( D27_COND ); @@ -478,6 +511,7 @@ data.d75CondTemp = getConductivityTemperatureValue( D74_COND ); data.d4AvgTemp = getD4AverageTemperature(); data.d50AvgTemp = getD50AverageTemperature(); + data.d99AvgTemp = getD99AverageTemperature(); data.d28AvgTemp = dialTempMovingAvgData[ DIAL_TEMP_D28 ].dialTempAvgC; data.d30AvgTemp = dialTempMovingAvgData[ DIAL_TEMP_D30 ].dialTempAvgC; data.d9PresTemp = getFilteredPressureSensorTemperature( D9_PRES ); Index: firmware/App/Monitors/Temperature.h =================================================================== diff -u -rae7a7f0dc06fd31a53b0db564d515ce4c39acf67 -rffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d --- firmware/App/Monitors/Temperature.h (.../Temperature.h) (revision ae7a7f0dc06fd31a53b0db564d515ce4c39acf67) +++ firmware/App/Monitors/Temperature.h (.../Temperature.h) (revision ffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d) @@ -38,6 +38,7 @@ F32 d78Temp; ///< Outlet heat exchanger temperature sensor F32 d4Temp; ///< Hydraulics primary heater temperature sensor F32 d50Temp; ///< Trimmer heater temperature sensor + F32 d99Temp; ///< Fresh dialysate temperature sensor F32 boardTemp; ///< Board temperature sensor F32 d16CondTemp; ///< D16 temperature value F32 d28CondTemp; ///< D28 temperature value @@ -46,6 +47,7 @@ F32 d75CondTemp; ///< D75 temperature value F32 d4AvgTemp; ///< D4 moving average temperature value F32 d50AvgTemp; ///< D50 moving average temperature value + F32 d99AvgTemp; ///< D99 moving average temperature value F32 d28AvgTemp; ///< D28 moving average temperature value F32 d30AvgTemp; ///< D30 moving average temperature value F32 d9PresTemp; ///< Hydraulics outlet pressure temperature Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -rae7a7f0dc06fd31a53b0db564d515ce4c39acf67 -rffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision ae7a7f0dc06fd31a53b0db564d515ce4c39acf67) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision ffd0828ba7d0c1ed6ae4624cfb2c502a2e7a203d) @@ -162,7 +162,7 @@ U16 fpgaD43CondTemp; ///< Reg 576. D43 Temperature U08 fpgaD43CondReadCnt; ///< Reg 578. D43 successful read count U08 fpgaD43CondErrorCnt; ///< Reg 579. D43 error read count - U16 fpgaD63LevelSensor; ///< Reg 580. Level Sensor 1 + U16 fpgaD63LevelSensor; ///< Reg 580. Upper level Sensor U16 fpgaD46LevelSensor; ///< Reg 582. Level Sensor 2 U08 fpgaHallSensInputs; ///< Reg 584. Hall sensor Inputs U08 fpgaD42TxFIFOCnt; ///< Reg 585. Blood leak sensor transmit FIFO count @@ -184,7 +184,7 @@ U32 fpgaD1Temp; ///< Reg 610. Inlet heat exchanger temperature U32 fpgaD4Temp; ///< Reg 614. Hydraulics primary heater temperature U32 fpgaD50Temp; ///< Reg 618. Trimmer heater temperature - U16 fpgaD98LevelSensor; ///< Reg 622. Level Sensor + U16 fpgaD98LevelSensor; ///< Reg 622. Lower level Sensor U08 fpgaRTDReadCnt; ///< Reg 623. Read count for all RTD sensors U16 fpgaD12MeasuredSpeed; ///< Reg 624. Fresh dialysate pump measured speed U16 fpgaD48MeasuredSpeed; ///< Reg 626. Spent dialysate pump measured speed @@ -2428,11 +2428,11 @@ /*********************************************************************//** * @brief - * The getFPGAD87PresRawPressure function gets transmembrane pressure sensor raw - * pressure value. + * The getFPGAD87PresRawPressure function gets fresh dialysate post ultrafilter + * pressure sensor raw pressure value. * @details \b Inputs: fpgaSensorReadings.fpgaD87PresPressure * @details \b Outputs: none - * @return Latest transmembrane pressure sensor raw pressure data + * @return Fresh dialysate post ultrafilter pressure sensor raw pressure data *************************************************************************/ U16 getFPGAD87PresRawPressure( void ) { @@ -2441,11 +2441,11 @@ /*********************************************************************//** * @brief - * The getFPGAD87PresRawTemperature function gets transmembrane pressure sensor raw - * temperature value. + * The getFPGAD87PresRawTemperature function gets fresh dialysate post ultrafilter + * pressure sensor raw temperature value. * @details \b Inputs: fpgaSensorReadings.fpgaD87PresTemp * @details \b Outputs: none - * @return Latest transmembrane pressure sensor raw temperature data + * @return Fresh dialysate post ultrafilter pressure sensor raw temperature data *************************************************************************/ U16 getFPGAD87PresRawTemperature( void ) { @@ -2754,11 +2754,11 @@ /*********************************************************************//** * @brief - * The getFPGAD63LevelSensor function gets the latest FPGA D63 level sensor - * reading. + * The getFPGAD63LevelSensor function gets the latest FPGA D63 upper level + * sensor reading. * @details \b Inputs: fpgaSensorReadings.fpgaD63LevelSensor * @details \b Outputs: none - * @return last FPGA D63 level sensor reading + * @return last FPGA D63 upper level sensor reading *************************************************************************/ U16 getFPGAD63LevelSensor( void ) { @@ -2767,6 +2767,19 @@ /*********************************************************************//** * @brief + * The getFPGAD98LevelSensor function gets the latest FPGA D98 lower level + * sensor reading. + * @details \b Inputs: fpgaSensorReadings.fpgaD98LevelSensor + * @details \b Outputs: none + * @return last FPGA D98 lower level sensor reading + *************************************************************************/ +U16 getFPGAD98LevelSensor( void ) +{ + return fpgaSensorReadings.fpgaD98LevelSensor; +} + +/*********************************************************************//** + * @brief * The getFPGAD46LevelSensor function gets the latest FPGA level sensor 2 * reading. * @details \b Inputs: fpgaSensorReadings.fpgaD46LevelSensor @@ -2869,10 +2882,10 @@ /*********************************************************************//** * @brief - * The getFPGAD99Temp function gets the trimmer heater temperature. + * The getFPGAD99Temp function gets the fresh dialysate temperature. * @details \b Inputs: fpgaSensorReadings * @details \b Outputs: none - * @return trimmer heater temperature + * @return Fresh dialysate temperature *************************************************************************/ U32 getFPGAD99Temp( void ) { @@ -3015,19 +3028,6 @@ /*********************************************************************//** * @brief - * The getFPGAD98LevelSensor function gets the latest FPGA D98 level sensor - * reading. - * @details \b Inputs: fpgaSensorReadings.fpgaD98LevelSensor - * @details \b Outputs: none - * @return last FPGA D98 level sensor reading - *************************************************************************/ -U16 getFPGAD98LevelSensor( void ) -{ - return fpgaSensorReadings.fpgaD98LevelSensor; -} - -/*********************************************************************//** - * @brief * The setFPGABloodLeakUARTControl function sets the blood leak sensor UART * control value. * @details \b Inputs: none