Index: firmware/.launches/HD.launch =================================================================== diff -u -rf5f00981805e265ce63058f650d784f06db4d188 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/.launches/HD.launch (.../HD.launch) (revision f5f00981805e265ce63058f650d784f06db4d188) +++ firmware/.launches/HD.launch (.../HD.launch) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -10,6 +10,7 @@ + @@ -26,15 +27,18 @@ + + + Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -re4cc37257141c5227186ac6d8ca3d6c87d009042 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision e4cc37257141c5227186ac6d8ca3d6c87d009042) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -1126,7 +1126,9 @@ if ( lastBloodPumpDirectionCount != dirErrorCnt ) { lastBloodPumpDirectionCount = dirErrorCnt; +#ifndef DISABLE_PUMP_DIRECTION_CHECKS SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_PUMP_DIRECTION_STATUS_ERROR, (U32)HD_PUMP_BLOOD_PUMP ) +#endif } bpMCDir = ( getMeasuredBloodPumpMCSpeed() >= 0.0 ? MOTOR_DIR_FORWARD : MOTOR_DIR_REVERSE ); Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -re4cc37257141c5227186ac6d8ca3d6c87d009042 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision e4cc37257141c5227186ac6d8ca3d6c87d009042) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -1097,7 +1097,9 @@ if ( lastDialInPumpDirectionCount != dirErrorCnt ) { lastDialInPumpDirectionCount = dirErrorCnt; +#ifndef DISABLE_PUMP_DIRECTION_CHECKS SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_PUMP_DIRECTION_STATUS_ERROR, (U32)HD_PUMP_DIALYSATE_INLET_PUMP ) +#endif } dipMCDir = ( getMeasuredDialInPumpMCSpeed() >= 0.0 ? MOTOR_DIR_FORWARD : MOTOR_DIR_REVERSE ); Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -re4cc37257141c5227186ac6d8ca3d6c87d009042 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision e4cc37257141c5227186ac6d8ca3d6c87d009042) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -797,7 +797,9 @@ if ( lastDialOutPumpDirectionCount != dirErrorCnt ) { lastDialOutPumpDirectionCount = dirErrorCnt; +#ifndef DISABLE_PUMP_DIRECTION_CHECKS SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_PUMP_DIRECTION_STATUS_ERROR, (U32)HD_PUMP_DIALYSATE_OUTLET_PUMP ) +#endif } dopMCDir = ( getMeasuredDialOutPumpMCSpeed() >= 0.0 ? MOTOR_DIR_FORWARD : MOTOR_DIR_REVERSE ); Index: firmware/App/Controllers/Temperatures.c =================================================================== diff -u -r184261dfbd96bafe85c32c70bda406957ad0c128 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Controllers/Temperatures.c (.../Temperatures.c) (revision 184261dfbd96bafe85c32c70bda406957ad0c128) +++ firmware/App/Controllers/Temperatures.c (.../Temperatures.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -403,7 +403,7 @@ sensorsData.pbaADCTempSensor = getTemperatureValue( TEMPSENSOR_PBA_ADC_SENSOR ); // Broadcast the temperatures data - broadcastTemperaturesData( &sensorsData ); + broadcastData( MSG_ID_HD_TEMPERATURES_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&sensorsData, sizeof( TEMPERATURES_DATA_T ) ); // Reset the counter dataPublishCounter = 0; Index: firmware/App/HDCommon.h =================================================================== diff -u -r8f217e3f4f171dba78c9ac69a3470af442941a89 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/HDCommon.h (.../HDCommon.h) (revision 8f217e3f4f171dba78c9ac69a3470af442941a89) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -5,13 +5,13 @@ * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * -* @file HDCommon.h +* @file HDCommon.h * -* @author (last) Sean Nash -* @date (last) 14-Oct-2020 +* @author (last) Sean Nash +* @date (last) 14-Oct-2020 * -* @author (original) Sean -* @date (original) 27-Feb-2020 +* @author (original) Sean +* @date (original) 27-Feb-2020 * ***************************************************************************/ @@ -25,7 +25,7 @@ #define HD_VERSION_MAJOR 0 #define HD_VERSION_MINOR 6 #define HD_VERSION_MICRO 0 -#define HD_VERSION_BUILD 0 +#define HD_VERSION_BUILD 82 // ********** development build switches ********** @@ -54,7 +54,8 @@ #define DISABLE_SYRINGE_PUMP 1 // Disable syringe pump functionality #define ALWAYS_ALLOW_SYRINGE_PUMP_CMDS 1 // Allow syringe pump commands at any time except when pump is busy #define DISABLE_PRESSURE_CHECKS 1 // Do not error on HD pressure checks -// #define DISABLE_UF_ALARMS 1 // Do not error on HD ultrafiltration checks + #define DISABLE_UF_ALARMS 1 // Do not error on HD ultrafiltration checks + #define DISABLE_DIALYSATE_TEMP_CHECK 1 // Disable dialysate temperature check #define DISABLE_VALVE_ALARMS 1 // Do not error on HD valve position #define SKIP_CAL_CHECK 1 // // #define RUN_PUMPS_OPEN_LOOP 1 // BP and DPi pumps will be run open loop (no flow sensor feedback) @@ -68,7 +69,7 @@ #define DISABLE_OCCLUSION_SELF_TEST 1 // Skip occlusion sensor self-test. // #define SKIP_CARTRIDGE_REMOVAL 1 // Skip cartridge removal check // #define DISABLE_FPGA_COUNTER_CHECKS 1 // Disable alarms associated with FPGA read/error counters -// #define DISABLE_VOLTAGE_MONITOR 1 // Disable voltage monitoring/alarms + #define DISABLE_VOLTAGE_MONITOR 1 // Disable voltage monitoring/alarms #define ALLOW_1_MIN_TREATMENT_DURATION 1 // Allow user to change treatment duration to as low as 1 minute #define DISABLE_SYRINGE_PUMP_ALARMS 1 // Disable some syringe pump alarms that are triggering intermittently // #define NO_PUMP_FLOW_LIMITS 1 // Allow any commanded flow rate for peristaltic pumps Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -re4cc37257141c5227186ac6d8ca3d6c87d009042 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision e4cc37257141c5227186ac6d8ca3d6c87d009042) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -376,6 +376,10 @@ case ALARM_ACTION_END_TREATMENT: if ( HD_PRE_TREATMENT_PRIME_STATE > currentPreTreatmentState ) { + if ( HD_PRE_TREATMENT_WATER_SAMPLE_STATE == currentPreTreatmentState ) + { + cmdDGSampleWater( SAMPLE_WATER_CMD_END ); + } requestNewOperationMode( MODE_STAN ); } else Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r2a60f0eba906f0641e22a5d7f5c7ba1750911dcd -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 2a60f0eba906f0641e22a5d7f5c7ba1750911dcd) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -664,7 +664,7 @@ data.disinfectSubModeHDState = (U32)dgDisinfectState; - broadcastDisinfectsData( &data ); + broadcastData( MSG_ID_HD_DISINFECT_STANDBY_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( DISINFECTS_DATA_T ) ); dataPublishCounter = 0; } Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rc62b21415ad7b2a77be6d0b0adf06316d2ccb51b -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision c62b21415ad7b2a77be6d0b0adf06316d2ccb51b) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -610,6 +610,11 @@ activateAlarmNoData( ALARM_ID_TREATMENT_STOPPED_BY_USER ); } + if ( currentTreatmentState != TREATMENT_END_STATE ) + { + checkDialysateTemperature(); + } + // Treatment mode state machine switch ( currentTreatmentState ) { Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r50fc6ca962c381ac98c9f032115973a5fff2a761 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 50fc6ca962c381ac98c9f032115973a5fff2a761) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -128,6 +128,7 @@ if ( currentMode != newMode ) { // Handle transition to new mode + priorSubMode = 0; lastMode = currentMode; transitionToNewOperationMode( newMode ); currentMode = newMode; @@ -176,14 +177,11 @@ } // End switch // Send sub-mode change event when appropriate - if ( lastMode != currentMode ) + if ( priorSubMode != currentSubMode ) { - priorSubMode = 0; - } - if ( ( priorSubMode != currentSubMode ) || ( lastMode != currentMode ) ) - { SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, priorSubMode, currentSubMode ) } + priorSubMode = currentSubMode; // Broadcast current operation mode on interval broadcastOperationMode(); @@ -375,8 +373,12 @@ { if ( ++broadcastModeIntervalCtr >= getU32OverrideValue( &opModePublishInterval ) ) { + OP_MODE_PAYLOAD_T data; + broadcastModeIntervalCtr = 0; - broadcastHDOperationMode( (U32)currentMode, currentSubMode ); + data.opMode = (U32)currentMode; + data.subMode = currentSubMode; + broadcastData( MSG_ID_HD_OP_MODE, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( OP_MODE_PAYLOAD_T ) ); } } Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r88e0f56fa5eb3af397fee7cebb49efdab54f8491 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 88e0f56fa5eb3af397fee7cebb49efdab54f8491) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -319,7 +319,7 @@ primeData.totalTime = MAX_PRIME_TIME; primeData.remainingTime = MAX_PRIME_TIME - elapsedPrimeTimeInSecs; - broadcastPrimeData( &primeData ); + broadcastData( MSG_ID_HD_PRIMING_STATUS_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&primeData, sizeof( PRIMING_DATA_PAYLOAD_T ) ); primeStatusBroadcastTimerCounter = 0; } } Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -re4cc37257141c5227186ac6d8ca3d6c87d009042 -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision e4cc37257141c5227186ac6d8ca3d6c87d009042) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -601,6 +601,7 @@ signalBloodPumpHardStop(); signalDialInPumpHardStop(); signalDialOutPumpHardStop(); + selfTestStartTime = getMSTimerCount(); // TODO: Use appropriate sensor driver if ( STATE_CLOSED == getFPGADoorState() ) @@ -758,6 +759,9 @@ { NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_STOPPED_STATE; + // Restart self-test start time + selfTestStartTime = getMSTimerCount(); + if ( TRUE == selfTestsResumeRequested ) { selfTestsResumeRequested = FALSE; @@ -780,6 +784,9 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; + // Restart self-test start time + selfTestStartTime = getMSTimerCount(); + // TODO: Use appropriate sensor driver if ( STATE_CLOSED == getFPGADoorState() ) { @@ -1000,6 +1007,9 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_STOPPED_STATE; + // Restart self-test start time + selfTestStartTime = getMSTimerCount(); + if ( TRUE == selfTestsResumeRequested ) { selfTestsResumeRequested = FALSE; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r0eb91611fd84b139f3a35c7be0743b46e4f1bc8b -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 0eb91611fd84b139f3a35c7be0743b46e4f1bc8b) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -1779,6 +1779,14 @@ handleTestPostTreatmentModeSendIntervalOverrideRequest( message ); break; + case MSG_ID_HD_BLOCK_MESSAGE_TRANSMISSION: + handleTestBlockMessagesRequest( message ); + break; + + case MSG_ID_HD_SYRINGE_PUMP_FORCE_SENSOR_DAC_CALIBRATE: + handleTestSyringePumpForceSensorCalibrateRequest( message ); + break; + default: // Unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rc62b21415ad7b2a77be6d0b0adf06316d2ccb51b -rb14efe97c6baf3cca79d9199fd0575768262eb9f --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision c62b21415ad7b2a77be6d0b0adf06316d2ccb51b) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b14efe97c6baf3cca79d9199fd0575768262eb9f) @@ -2254,7 +2254,7 @@ TEMPERATURE_SENSORS_DATA_T payload; memcpy( &payload, message->payload, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); - setDialysateTemperatureReadings( payload.inletDialysate, payload.outletRedundant ); + setDialysateTemperatureReadings( payload.TDi, payload.TRo ); } // TODO - what to do if invalid payload length? // TODO - how to know if DG stops sending these? @@ -5223,6 +5223,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 );