Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -r958b77084f04adb4e6d0542c84d014c36fd1b760 -r585e01a1d143a900ec37e1204a0a048ab6f86f53 --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 958b77084f04adb4e6d0542c84d014c36fd1b760) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 585e01a1d143a900ec37e1204a0a048ab6f86f53) @@ -684,18 +684,21 @@ { BLOOD_LEAK_STATE_T state = BLOOD_LEAK_SELF_TEST_STATE; +#ifndef IGNORE_BLOOD_LEAK_SELF_TEST if ( SELF_TEST_STATUS_IN_PROGRESS == bloodLeakSelfTestStatus ) { if ( FALSE == noFPGABloodLeakDetected() ) // Faked blood leak caused by independent MCU board { bloodLeakSelfTestStatus = SELF_TEST_STATUS_PASSED; clearFPGABloodLeakSelfTest(); } + else if ( TRUE == didTimeout( bloodLeakSelfTestStartTime, BLOOD_LEAK_TIMEOUT_MS ) ) { bloodLeakSelfTestStatus = SELF_TEST_STATUS_FAILED; - +#ifndef IGNORE_BLOOD_LEAK_ALARM activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE ); +#endif } } else @@ -706,6 +709,7 @@ state = BLOOD_LEAK_NORMAL_STATE; } } +#endif return state; } Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -rd558c3058a027d8f4407c7bb882505e30225a7f9 -r585e01a1d143a900ec37e1204a0a048ab6f86f53 --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision d558c3058a027d8f4407c7bb882505e30225a7f9) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 585e01a1d143a900ec37e1204a0a048ab6f86f53) @@ -72,30 +72,30 @@ /// Payload record structure for DG temperature sensors data message. typedef struct { - F32 inletPrimaryHeater; ///< Inlet primary heater temperature sensor - F32 outletPrimaryHeater; ///< Outlet primary heater temperature sensor - F32 conductivitySensor1; ///< Conductivity sensor 1 temperature sensor - F32 conductivitySensor2; ///< Conductivity sensor 2 temperature sensor - F32 outletRedundant; ///< Outlet redundant temperature sensor - F32 inletDialysate; ///< Inlet dialysate temperature sensor - F32 primaryHeaterThermocouple; ///< Primary heaters thermocouple sensor - F32 trimmerHeaterThermocouple; ///< Trimmer heater thermocouple sensor - F32 priamyHeaterColdjunction; ///< Primary heaters cold junction temperature sensor - F32 trimmerHeaterColdjunction; ///< Trimmer heater cold junction temperature sensor - F32 primaryHeaterInternal; ///< Primary heaters internal temperature (calculated from thermocouple and cold junction) - F32 trimmerHeaterInternal; ///< Trimmer heater internal temperature (calculated from thermocouple and cold junction) - F32 fpgaBoard; ///< FPGA board temperature sensor - F32 loadCellA1B1; ///< Load cell A1/B1 temperature sensor - F32 loadCellA2B2; ///< Load cell A2/B2 temperature sensor - F32 internalTHDORTD; ///< THDo RTD channel temperature sensor - F32 internalTDIRTD; ///< TDI RTD channel temperature sensor - F32 internalCondSnsrTemp; ///< Conductivity Sensor internal temperature sensor - U32 primaryThermoCoupleRaw; ///< Primary heaters thermocouple raw ADC value - U32 primaryColdjuncRaw; ///< Primary heaters cold junction raw ADC value - U32 trimmerThermoCoupleRaw; ///< Trimmer heater thermocouple raw ADC value - U32 trimmerColdjuncRaw; ///< Trimmer heater cold junction raw ADC value - S32 cond1Raw; ///< Conductivity sensor 1 raw temperature ADC value - S32 cond2Raw; ///< Conductivity sensor 2 raw temperature ADC value + F32 TPi; ///< Inlet primary heaters temperature sensor + F32 TPo; ///< Outlet primary heaters temperature sensor + F32 TD1; ///< Conductivity sensor 1 temperature sensor + F32 TD2; ///< Conductivity sensor 2 temperature sensor + F32 TRo; ///< Outlet redundant temperature sensor + F32 TDi; ///< Inlet dialysate temperature sensor + F32 HtrPrimThermo; ///< Primary heaters internal temperature sensor + F32 HtrTrimThermo; ///< Trimmer heater internal temperature sensor + F32 HtrPrimColdJunc; ///< Primary heaters cold junction temperature sensor + F32 HtrTrimColdJunc; ///< Trimmer heater cold junction temperature sensor + F32 HtrPrimInternal; ///< Primary heaters internal temperature + F32 HtrTrimInternal; ///< Trimmer heater internal temperature + F32 DGBoardTemp; ///< DG board temperature + F32 ResOneLoadCellTemp; ///< Reservoir 1 load cell sensor temperature + F32 ResTwoLoadCellTemp; ///< Reservoir 2 load cell sensor temperature + F32 THDoInternalTemp; ///< THDo RTD channel temperature sensor + F32 TDiInternalTemp; ///< TDI RTD channel temperature sensor + F32 internalCondSnsrTemp; ///< Conductivity Sensor internal temperature sensor + U32 primaryThermoCoupleRaw; ///< Primary heaters thermocouple raw ADC value + U32 primaryColdjuncRaw; ///< Primary heaters cold junction raw ADC value + U32 trimmerThermoCoupleRaw; ///< Trimmer heater thermocouple raw ADC value + U32 trimmerColdjuncRaw; ///< Trimmer heater cold junction raw ADC value + S32 cond1Raw; ///< Conductivity sensor 1 raw temperature ADC value + S32 cond2Raw; ///< Conductivity sensor 2 raw temperature ADC value } TEMPERATURE_SENSORS_DATA_T; /// Payload record structure for a drain reservoir command message. @@ -151,8 +151,8 @@ F32 getLoadCellWeight( LOAD_CELL_ID_T loadCellID ); F32 getReservoirWeight( DG_RESERVOIR_ID_T resID ); F32 getReservoirWeightLargeFilter( DG_RESERVOIR_ID_T resID ); -F32 getDialysateTemperature( void ); DG_DISINFECT_UI_STATES_T getDGDisinfectsStates( void ); +F32 getDialysateTemperature( void ); DG_MIXING_RATIOS_T getDGMixingRatios( void ); void setDGOpMode( U32 opMode, U32 subMode ); Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -r932820cf5d0e3ba08fa06f5f90de90f42eaa1684 -r585e01a1d143a900ec37e1204a0a048ab6f86f53 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 932820cf5d0e3ba08fa06f5f90de90f42eaa1684) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 585e01a1d143a900ec37e1204a0a048ab6f86f53) @@ -90,6 +90,7 @@ /// Expected position of empty in relation to home position. #define SYRINGE_PUMP_EMPTY_POS ( SYRINGE_ENCODER_COUNTS_PER_ML * 10.84F ) + /// Margin of error for empty position determination. #define SYRINGE_PUMP_EMPTY_POS_MARGIN ( SYRINGE_ENCODER_COUNTS_PER_ML * 0.5F ) /// Minimum retract position. @@ -491,6 +492,10 @@ heparinDeliveryState = HEPARIN_STATE_STOPPED; } #endif + if ( MODE_SERV == getCurrentOperationMode() ) // Allow syringe pump operations in Service Mode. + { + heparinDeliveryState = HEPARIN_STATE_STOPPED; + } if ( ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) && ( heparinDeliveryState != HEPARIN_STATE_OFF ) ) { { @@ -521,6 +526,10 @@ syringePumpSetRate = SYRINGE_PUMP_SEEK_RATE; syringePumpSeekRequested = TRUE; } + if ( MODE_SERV == getCurrentOperationMode() ) // Allow syringe pump operations in Service Mode. + { + heparinDeliveryState = HEPARIN_STATE_STOPPED; + } return syringePumpSeekRequested; } @@ -542,6 +551,10 @@ syringePumpPrimeRequested = TRUE; resetHeparinVolumeDelivered(); } + if ( MODE_SERV == getCurrentOperationMode() ) // Allow syringe pump operations in Service Mode. + { + heparinDeliveryState = HEPARIN_STATE_STOPPED; + } return syringePumpPrimeRequested; } @@ -588,8 +601,13 @@ { SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, (F32)SW_FAULT_ID_HD_SYRINGE_INVALID_BOLUS_CMD, syringePumpSetRate ) } + if ( MODE_SERV == getCurrentOperationMode() ) // Allow syringe pump operations in Service Mode. + { + heparinDeliveryState = HEPARIN_STATE_STOPPED; + } } + return syringePumpBolusRequested; } @@ -621,6 +639,10 @@ { SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, (F32)SW_FAULT_ID_HD_SYRINGE_INVALID_CONT_CMD, flowRate ) } + if ( MODE_SERV == getCurrentOperationMode() ) // Allow syringe pump operations in Service Mode. + { + heparinDeliveryState = HEPARIN_STATE_STOPPED; + } } return syringePumpContinuousRequested; @@ -1922,6 +1944,7 @@ *************************************************************************/ + /*********************************************************************//** * @brief * The testSetSyringePumpDataPublishIntervalOverride function overrides the Index: firmware/App/Modes/ConsumableSelfTest.c =================================================================== diff -u -rd558c3058a027d8f4407c7bb882505e30225a7f9 -r585e01a1d143a900ec37e1204a0a048ab6f86f53 --- firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision d558c3058a027d8f4407c7bb882505e30225a7f9) +++ firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision 585e01a1d143a900ec37e1204a0a048ab6f86f53) @@ -106,6 +106,7 @@ if ( TRUE == consumableInstallConfirmed ) { consumableInstallConfirmed = FALSE; + #ifndef _RELEASE_ if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_CONSUMABLES_TESTS ) ) { Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r7498c77e7f99c2d3854df69f1999244de066a504 -r585e01a1d143a900ec37e1204a0a048ab6f86f53 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 7498c77e7f99c2d3854df69f1999244de066a504) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 585e01a1d143a900ec37e1204a0a048ab6f86f53) @@ -554,16 +554,17 @@ { PRE_TREATMENT_STATE_DATA_T preTreatmentData; - preTreatmentData.preTreatmentSubMode = currentPreTreatmentState; - preTreatmentData.sampleWaterState = getSampleWaterState(); + preTreatmentData.preTreatmentSubMode = currentPreTreatmentState; + preTreatmentData.sampleWaterState = getSampleWaterState(); preTreatmentData.consumableSelfTestsState = getConsumableSelfTestState(); - preTreatmentData.noCartSelfTestsState = getNoCartSelfTestsState(); - preTreatmentData.installState = 0; - preTreatmentData.drySelfTestsState = getDrySelfTestsState(); - preTreatmentData.primeState = getPrimeState(); - preTreatmentData.recircState = getPreTreatmentRecircState(); - preTreatmentData.patientConnectionState = 0; - preTreatmentData.wetSelfTestsState = getWetSelfTestState(); + preTreatmentData.noCartSelfTestsState = getNoCartSelfTestsState(); + preTreatmentData.installState = 0; + preTreatmentData.drySelfTestsState = getDrySelfTestsState(); + preTreatmentData.primeState = getPrimeState(); + preTreatmentData.recircState = getPreTreatmentRecircState(); + preTreatmentData.patientConnectionState = 0; + preTreatmentData.wetSelfTestsState = getWetSelfTestState(); + preTreatmentData.preTreatmentRsrvrState = currentReservoirMgmtState; broadcastData( MSG_ID_PRE_TREATMENT_STATE, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&preTreatmentData, sizeof( PRE_TREATMENT_STATE_DATA_T ) ); preTreatmentPublishTimerCounter = 0; @@ -1106,12 +1107,12 @@ } else { - U32 volume = FILL_RESERVOIR_TO_VOLUME_ML; + U32 volume = PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML; #ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) != SW_CONFIG_ENABLE_VALUE ) + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRIMING ) ) { - volume = PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML; + volume = FILL_RESERVOIR_TO_VOLUME_ML; } #endif Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -r7498c77e7f99c2d3854df69f1999244de066a504 -r585e01a1d143a900ec37e1204a0a048ab6f86f53 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 7498c77e7f99c2d3854df69f1999244de066a504) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 585e01a1d143a900ec37e1204a0a048ab6f86f53) @@ -45,6 +45,7 @@ U32 recircState; ///< Current re-circulate state U32 patientConnectionState; ///< Current patient connection state U32 wetSelfTestsState; ///< CUrrent wet self-tests state + U32 preTreatmentRsrvrState; ///< Current pre-treatment reservoir state } PRE_TREATMENT_STATE_DATA_T; // ********** public function prototypes ********** Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r958b77084f04adb4e6d0542c84d014c36fd1b760 -r585e01a1d143a900ec37e1204a0a048ab6f86f53 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 958b77084f04adb4e6d0542c84d014c36fd1b760) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 585e01a1d143a900ec37e1204a0a048ab6f86f53) @@ -52,8 +52,7 @@ #define MAX_COMM_CRC_FAILURE_WINDOW_MS (10 * SEC_PER_MIN * MS_PER_SECOND) ///< CRC error window #define MSG_NOT_ACKED_TIMEOUT_MS 150 ///< Maximum time for a Denali message that requires ACK to be ACK'd - -#define MSG_NOT_ACKED_TIMEOUT_MS_INIT 5000 ///< Maximum time for a Denali message that requires ACK to be ACK'd on the INIT state for the first (UI version request) message of the POST +#define MSG_NOT_ACKED_TIMEOUT_MS_INIT 5000 ///< Maximum time for a Denali message that requires ACK to be ACK'd on the INIT state for the first (UI version request) message of the POST #define MSG_NOT_ACKED_MAX_RETRIES 3 ///< Maximum number of times a message that requires ACK that was not ACK'd can be re-sent before alarm #define PENDING_ACK_LIST_SIZE 25 ///< Maximum number of Denali messages that can be pending ACK at any given time @@ -1619,10 +1618,6 @@ handleTestSyringePumpHeprinBolusTargetRateOverrideRequest( message ); break; - case MSG_ID_HD_REQ_CURRENT_TREATMENT_PARAMETERS: - handleTestCurrentTreamtmentParametersRequest( message ); - break; - case MSG_ID_HD_FANS_DUTY_CYCLE_OVERRIDE: handleSetFansDutyCycleOverrideRequest( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r372f524a0baa83b446b7a69bd869cfdea59ce295 -r585e01a1d143a900ec37e1204a0a048ab6f86f53 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 372f524a0baa83b446b7a69bd869cfdea59ce295) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 585e01a1d143a900ec37e1204a0a048ab6f86f53) @@ -2335,13 +2335,13 @@ { TEMPERATURE_SENSORS_DATA_T payload; - memcpy( &payload, message->payload, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); - setDialysateTemperatureReadings( payload.inletDialysate, payload.outletRedundant ); - } - // TODO - what to do if invalid payload length? - // TODO - how to know if DG stops sending these? -} - + memcpy( &payload, message->payload, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); + setDialysateTemperatureReadings( payload.TDi, payload.TRo ); + } + // TODO - what to do if invalid payload length? + // TODO - how to know if DG stops sending these? +} + /*********************************************************************//** * @brief * The handleDialysateFlowData function handles dialysate flow data broadcast @@ -5166,6 +5166,7 @@ if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) { result = testSetBatteryRemainingPercentOverride( payload.state.u32 );