Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rd52b27c2797b07f6aba2e05c8ba24156b820fdbc -r6417c75d0c2a9643bcdb797065dbcde59e1dc734 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision d52b27c2797b07f6aba2e05c8ba24156b820fdbc) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 6417c75d0c2a9643bcdb797065dbcde59e1dc734) @@ -32,9 +32,12 @@ // ********** private definitions ********** -#define PUMP_RUN_SELF_TEST_TIME ( 15 * MS_PER_SECOND ) ///< Self-test time to run pumps in ms. -#define PUMP_SELF_TEST_FLOW_RATE 100 ///< Self-test pump flow rate. +#define PUMP_RUN_SELF_TEST_TIME ( 15 * MS_PER_SECOND ) ///< Self-test time to run pumps in ms. +#define PUMP_SELF_TEST_FLOW_RATE 100 ///< Self-test pump flow rate. +#define BLOOD_LEAK_SELF_TEST_SET 0x1 ///< Initiate blood leak self-test. +#define BLOOD_LEAK_NORMAL_OPERATION 0x0 ///< Return blood leak to normal operation. + /// No cartridge self-tests state machine. typedef enum No_Cart_Self_Tests_State { @@ -165,13 +168,22 @@ signalBloodPumpHardStop(); signalDialInPumpHardStop(); signalDialOutPumpHardStop(); + + setFPGASensorTest( BLOOD_LEAK_SELF_TEST_SET ); currentNoCartSelfTestsState = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; } break; case NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE: - // TODO: Implement self tests - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; + if ( TRUE == getFPGABloodLeakDetectorStatus() ) + { + setFPGASensorTest( BLOOD_LEAK_NORMAL_OPERATION ); + currentNoCartSelfTestsState = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; + } + else + { + result = SELF_TEST_STATUS_FAILED; + } break; case NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE: Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rd8b6a463f9e65c8ac145cf634d5d6641fb3bbd89 -r6417c75d0c2a9643bcdb797065dbcde59e1dc734 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision d8b6a463f9e65c8ac145cf634d5d6641fb3bbd89) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 6417c75d0c2a9643bcdb797065dbcde59e1dc734) @@ -51,7 +51,7 @@ #define FPGA_HEADER_START_ADDR 0x0000 ///< Start address for FPGA header data. #define FPGA_BULK_READ_START_ADDR 0x0100 ///< Start address for FPGA continuous priority reads. -#define FPGA_BULK_WRITE_START_ADDR 0x000C ///< Start address for FPGA continuous priority writes. +#define FPGA_BULK_WRITE_START_ADDR 0x000B ///< Start address for FPGA continuous priority writes. #define FPGA_BULK_ASYNC_READ_START_ADDR 0x0200 ///< Start address for FPGA async reads. #define FPGA_WRITE_CMD_BUFFER_LEN (FPGA_PAGE_SIZE+8) ///< FPGA write command buffer byte length. @@ -83,6 +83,7 @@ #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. // FPGA Sensors Record #pragma pack(push,1) @@ -99,8 +100,6 @@ U08 flowDAQ1Cmd; ///< Reg 8. Command passed to flow DAQ #1. U08 flowDAQ2Cmd; ///< Reg 9. Command passed to flow DAQ #2. U08 accelCmd; ///< Reg 10. Command passed to accelerometer. - U08 fpgaSensorTest; ///< Reg 11. Blood leak and bubble detector sensor test register. - U16 fpgaPIDControl; ///< Reg 12. Valve PID enables. } FPGA_HEADER_T; // Read only on FPGA /// Record structure for FPGA continuous priority reads. @@ -192,6 +191,7 @@ /// Record structure for FPGA continuous priority writes. typedef struct // TODO - add all actuator set points to this structure per FPGA register map { + U08 fpgaSensorTest; ///< Reg 11. Blood leak and bubble detector sensor test register. U16 fpgaPIDControl; ///< Reg 12. Valve PID enables. S16 VBASetPoint; ///< Reg 14. VBA pinch valve is commanded to this set point position. S16 VBVSetPoint; ///< Reg 16. VBV pinch valve is commanded to this set point position. @@ -1433,6 +1433,34 @@ /*********************************************************************//** * @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 setFPGAValvesControlMode function sets the valves control mode. * @details Inputs: fpgaActuatorSetPoints * @details Outputs: fpgaActuatorSetPoints Index: firmware/App/Services/FPGA.h =================================================================== diff -u -rd8b6a463f9e65c8ac145cf634d5d6641fb3bbd89 -r6417c75d0c2a9643bcdb797065dbcde59e1dc734 --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision d8b6a463f9e65c8ac145cf634d5d6641fb3bbd89) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision 6417c75d0c2a9643bcdb797065dbcde59e1dc734) @@ -77,6 +77,9 @@ BOOL getFPGAArterialAirBubbleStatus( void ); BOOL getFPGAVenousAirBubbleStatus( void ); +void setFPGASensorTest( U08 sensorTest ); +BOOL getFPGABloodLeakDetectorStatus( void ); + void setFPGAValvesControlMode( U16 bits ); U16 getFPGAValvesStatus( void );