Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r85a18ee758116bb8e19b80b18f166a691a464bb7 -ra864fe1ac689e00883d7c1b85420dbf516b73b63 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 85a18ee758116bb8e19b80b18f166a691a464bb7) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision a864fe1ac689e00883d7c1b85420dbf516b73b63) @@ -220,7 +220,6 @@ default: sendPOSTFinalResult( FALSE ); SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_INIT_POST_INVALID_POST_STATE, postState ) - postState = POST_STATE_FAILED; break; } Index: firmware/App/Modes/TreatmentEnd.c =================================================================== diff -u -r85a18ee758116bb8e19b80b18f166a691a464bb7 -ra864fe1ac689e00883d7c1b85420dbf516b73b63 --- firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 85a18ee758116bb8e19b80b18f166a691a464bb7) +++ firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision a864fe1ac689e00883d7c1b85420dbf516b73b63) @@ -109,7 +109,8 @@ { initTreatmentEnd(); - // TODO - stop any DG fill that may be in progress + // Stop any DG fill that may be in progress + cmdStopDGFill(); // Set valves setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r85a18ee758116bb8e19b80b18f166a691a464bb7 -ra864fe1ac689e00883d7c1b85420dbf516b73b63 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 85a18ee758116bb8e19b80b18f166a691a464bb7) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision a864fe1ac689e00883d7c1b85420dbf516b73b63) @@ -494,7 +494,7 @@ break; default: - // TODO - s/w fault? + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_ALARM_USER_ACTION, action ); break; } } Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r85a18ee758116bb8e19b80b18f166a691a464bb7 -ra864fe1ac689e00883d7c1b85420dbf516b73b63 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 85a18ee758116bb8e19b80b18f166a691a464bb7) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision a864fe1ac689e00883d7c1b85420dbf516b73b63) @@ -198,7 +198,7 @@ SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER, SW_FAULT_ID_PI_CTRL_INVALID_SIGNAL, SW_FAULT_ID_MODE_TREATMENT_INVALID_ALARM_ACTION, - SW_FAULT_ID_MODE_PRIME_RESERVOIR_MGMT_INVALID_STATE, + SW_FAULT_ID_MODE_PRE_TREATMENT_RESERVOIR_MGMT_INVALID_STATE, SW_FAULT_ID_DIALYSIS_INVALID_STATE, // 55 SW_FAULT_ID_DIALYSIS_INVALID_UF_STATE, SW_FAULT_ID_NVDATAMGMT_INVALID_SELF_TEST_STATE, @@ -254,10 +254,21 @@ SW_FAULT_ID_HD_INVALID_COMMAND_RESPONSE_ID, SW_FAULT_ID_HD_INVALID_RESERVOIR_ID, SW_FAULT_ID_HD_INVALID_VALVE_SETTING_ID, - SW_FAULT_ID_HD_SYRINGE_INVALID_BOLUS_CMD, // 110 + SW_FAULT_ID_HD_INVALID_BLOOD_LEAK_STATE, // 110 + SW_FAULT_ID_HD_SYRINGE_INVALID_BOLUS_CMD, SW_FAULT_ID_HD_SYRINGE_INVALID_CONT_CMD, SW_FAULT_ID_HD_SYRINGE_INVALID_VREF, SW_FAULT_ID_HD_SYRINGE_INVALID_STATE, + SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE, // 115 + SW_FAULT_ID_POST_TREATMENT_RESERVOIR_MGMT_INVALID_STATE, + SW_FAULT_ID_INVALID_DG_OPERATING_MODE, + SW_FAULT_ID_INVALID_LOAD_CELL_ID, + SW_FAULT_ID_MODE_STANDBY_INVALID_STATE, + SW_FAULT_ID_MODE_SAMPLE_WATER_INVALID_STATE, // 120 + SW_FAULT_ID_INVALID_ALARM_USER_ACTION, + SW_FAULT_ID_INVALID_RTI_NOTIFICATION, + SW_FAULT_ID_INVALID_CAN_MESSAGE_BOX, + SW_FAULT_ID_INVALID_CONSUMABLE_SELF_TEST_STATE, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r85a18ee758116bb8e19b80b18f166a691a464bb7 -ra864fe1ac689e00883d7c1b85420dbf516b73b63 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 85a18ee758116bb8e19b80b18f166a691a464bb7) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision a864fe1ac689e00883d7c1b85420dbf516b73b63) @@ -82,10 +82,15 @@ #define FPGA_AIRTRAP_LEVEL_LOW_MASK 0x0008 ///< Bit mask for air trap lower level sensor. #define FPGA_AIRTRAP_LEVEL_HIGH_MASK 0x0004 ///< Bit mask for air trap upper level sensor. -#define FPGA_FLUIDLEAK_STATE_MASK 0x0040 ///< Bit mask for fluid leak detector. +#define FPGA_FLUID_LEAK_STATE_MASK 0x0040 ///< Bit mask for fluid leak detector. +#define FPGA_BLOOD_LEAK_STATUS_MASK 0x1000 ///< Bit mask for blood leak detector. +#define FPGA_BLOOD_LEAK_ZERO_STATE_MASK 0x2000 ///< Bit mask for blood leak detector zero. + +#define FPGA_BLOOD_LEAK_ZERO_CMD 0x02 ///< Bit for blood leak detector zero command. +#define FPGA_BLOOD_LEAK_SELF_TEST_CMD 0x01 ///< Bit for blood leak detector self test command. + #define FPGA_ADA_INPUT_STATUS_MASK 0x0001 ///< Bit mask for arterial air bubble detector input status. #define FPGA_ADV_INPUT_STATUS_MASK 0x0002 ///< Bit mask for venous air bubble detector input status. -#define FPGA_BLOOD_LEAK_STATUS_MASK 0x1000 ///< Bit mask for blood leak detector status. #define FPGA_PBO_TEMP_DIVISOR 2047.0 ///< Used in conversion of PBo temperature reading to deg C. #define FPGA_PBO_TEMP_GAIN 200.0 ///< Used in conversion of PBo temperature reading to deg C. @@ -533,7 +538,7 @@ ) #endif { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_FPGA_COMM_TIMEOUT, fpgaCommRetryCount, (U32)fpgaSensorReadings.errorCountProcessor ) + //SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_FPGA_COMM_TIMEOUT, fpgaCommRetryCount, (U32)fpgaSensorReadings.errorCountProcessor ) } // Reset comm flags after processing incoming responses @@ -1852,34 +1857,6 @@ /*********************************************************************//** * @brief - * The setFPGASensorTest function sets the sensor test output. - * @details Inputs: fpgaActuatorSetPoints - * @details Outputs: fpgaActuatorSetPoints - * @param sensorTest - * @return none - *************************************************************************/ -void setFPGASensorTest( U08 sensorTest ) -{ - fpgaActuatorSetPoints.fpgaSensorTest = sensorTest; -} - -/*********************************************************************//** - * @brief - * The getFPGABloodLeakDetectorStatus function gets the latest blood leak - * detector status. - * @details Inputs: fpgaSensorReadings - * @details Outputs: none - * @return TRUE if blood leak is detected, otherwise FALSE - *************************************************************************/ -BOOL getFPGABloodLeakDetectorStatus( void ) -{ - U16 const status = fpgaSensorReadings.fpgaGPIO & FPGA_BLOOD_LEAK_STATUS_MASK; - - return ( 0 == status ? FALSE : TRUE ); -} - -/*********************************************************************//** - * @brief * The getDoorState function gets the current state of door switch. * @details Inputs: none * @details Outputs: none @@ -1920,21 +1897,103 @@ /*********************************************************************//** * @brief - * The noFluidLeakDetected function returns TRUE if no fluid leak has been + * The noFPGAFluidLeakDetected function returns TRUE if no fluid leak has been * detected (dry) and FALSE if a fluid leak has been detected (wet). * @details Inputs: fpgaSensorReadings * @details Outputs: none - * @return noFluidLeakDetected + * @return noFPGAFluidLeakDetected *************************************************************************/ BOOL noFPGAFluidLeakDetected( void ) { - U16 noFluidLeakDetected = fpgaSensorReadings.fpgaGPIO & FPGA_FLUIDLEAK_STATE_MASK; + U16 noFPGAFluidLeakDetected = fpgaSensorReadings.fpgaGPIO & FPGA_FLUID_LEAK_STATE_MASK; - return ( 0 == noFluidLeakDetected ? FALSE : TRUE ); + return ( 0 == noFPGAFluidLeakDetected ? FALSE : TRUE ); } /*********************************************************************//** * @brief + * The noFPGABloodLeakDetected function returns TRUE if no blood leak has been + * detected and FALSE if a blood leak has been detected. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return noFPGABloodLeakDetected + *************************************************************************/ +BOOL noFPGABloodLeakDetected( void ) +{ + U16 noFPGABloodLeakDetected = fpgaSensorReadings.fpgaGPIO & FPGA_BLOOD_LEAK_STATUS_MASK; + + return ( 0 == noFPGABloodLeakDetected ? TRUE : FALSE ); +} + +/*********************************************************************//** + * @brief + * The FPGABloodLeakZeroDetected function returns TRUE if blood leak zeroing has + * been detected and FALSE if no blood leak zeroing has been detected. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return FPGABloodLeakZeroDetected + *************************************************************************/ +BOOL FPGABloodLeakZeroDetected( void ) +{ + U16 FPGABloodLeakZeroDetected = fpgaSensorReadings.fpgaGPIO & FPGA_BLOOD_LEAK_ZERO_STATE_MASK; + + return ( 0 == FPGABloodLeakZeroDetected ? FALSE : TRUE ); +} + +/*********************************************************************//** + * @brief + * The setFPGABloodLeakZero function sets the Blood Leak detector into + * zeroing mode via the FPGA. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return FPGABloodLeakZeroDetected + *************************************************************************/ +void setFPGABloodLeakZero( void ) +{ + fpgaActuatorSetPoints.fpgaSensorTest |= FPGA_BLOOD_LEAK_ZERO_CMD; +} + +/*********************************************************************//** + * @brief + * The clearFPGABloodLeakZero function clears the Blood Leak detector from + * zeroing mode via the FPGA. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return none + *************************************************************************/ +void clearFPGABloodLeakZero( void ) +{ + fpgaActuatorSetPoints.fpgaSensorTest &= ~FPGA_BLOOD_LEAK_ZERO_CMD; +} + +/*********************************************************************//** + * @brief + * The setFPGABloodLeakSelfTest function sets the Blood Leak detector into + * self-test mode via the FPGA. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return FPGABloodLeakZeroDetected + *************************************************************************/ +void setFPGABloodLeakSelfTest( void ) +{ + fpgaActuatorSetPoints.fpgaSensorTest |= FPGA_BLOOD_LEAK_SELF_TEST_CMD; +} + +/*********************************************************************//** + * @brief + * The clearFPGABloodLeakSelfTest function clears the Blood Leak detector from + * self-test mode via the FPGA. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return none + *************************************************************************/ +void clearFPGABloodLeakSelfTest( void ) +{ + fpgaActuatorSetPoints.fpgaSensorTest &= ~FPGA_BLOOD_LEAK_SELF_TEST_CMD; +} + +/*********************************************************************//** + * @brief * The setValveDialyzerInletPosition function sets the position of VDi * in counts * @details Inputs: fpgaActuatorSetPoints Index: firmware/App/Services/FPGA.h =================================================================== diff -u -r85a18ee758116bb8e19b80b18f166a691a464bb7 -ra864fe1ac689e00883d7c1b85420dbf516b73b63 --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision 85a18ee758116bb8e19b80b18f166a691a464bb7) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision a864fe1ac689e00883d7c1b85420dbf516b73b63) @@ -115,7 +115,6 @@ BOOL getFPGAVenousAirBubbleStatus( void ); void setFPGASensorTest( U08 sensorTest ); -BOOL getFPGABloodLeakDetectorStatus( void ); OPN_CLS_STATE_T getFPGADoorState( void ); @@ -124,6 +123,13 @@ BOOL noFPGAFluidLeakDetected( void ); +BOOL noFPGABloodLeakDetected( void ); +BOOL FPGABloodLeakZeroDetected( void ); +void setFPGABloodLeakZero( void ); +void clearFPGABloodLeakZero( void ); +void setFPGABloodLeakSelfTest( void ); +void clearFPGABloodLeakSelfTest( void ); + void setFPGAValveDialyzerInletPosition( S16 setPoint ); S16 getFPGAValveDialyzerInletPosition( void ); U16 getFPGAValveDialyzerInletCurrentCounts( void );