/************************************************************************** * * Copyright (c) 2019-2024 Diality Inc. - All Rights Reserved. * * 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 FPGA.h * * @author (last) Sean Nash * @date (last) 30-Jul-2024 * * @author (original) Sean Nash * @date (original) 30-Jul-2024 * ***************************************************************************/ #ifndef __FPGA_TD_H__ #define __FPGA_TD_H__ #include "TDCommon.h" /** * @defgroup FpgaTD FpgaTD * @brief FPGA service unit for TD firmware. * The FPGA unit contains get/set functions for the TD FPGA registers. * * @addtogroup FpgaTD * @{ */ // ********** public definitions ********** // Bit definitions for pinch valve control register #define FPGA_PINCH_VALVES_1_8_STEP 0x07 ///< Bit mask for configuring pinch valve for 1/8 step microstepping. #define FPGA_PINCH_VALVES_ENABLE_ENCODER 0x00 ///< Bit mask for configuring pinch valve enable encoder. #define FPGA_PINCH_VALVES_RESET_ENCODER 0x08 ///< Bit mask for configuring pinch valve to reset the encoder. #define FPAG_PINCH_VALVES_ENABLE 0x00 ///< Bit mask for configuring pinch valve to enable. #define FPGA_PINCH_VALVES_DISABLE 0x10 ///< Bit mask for configuring pinch valve to be disabled. #define FPGA_PINCH_VALVES_RESET 0x00 ///< Bit mask for configuring pinch valve to be in reset. #define FPGA_PINCH_VALVES_NOT_RESET 0x20 ///< Bit mask for configuring pinch valve to not be in reset. #define FPGA_PINCH_VALVES_NOT_SLEEP 0x40 ///< Bit mask for configuring pinch valve to not be in sleep mode. #define FPGA_PINCH_VALVES_ENABLE_HOMING 0x80 ///< Bit mask for configuring pinch valve to enable homing sequence. Bit 7 of control register. #define FPGA_PINCH_VALVES_NEW_POS_CMD 0x80 ///< Bit mask for configuring pinch valve to accept a new position command. // Bit definitions for syringe pump control register #define SYRINGE_PUMP_CONTROL_SLEEP_OFF 0x40 ///< Syringe pump control register bit for sleep mode (active low). #define SYRINGE_PUMP_CONTROL_NOT_RESET 0x20 ///< Syringe pump control register bit for resetting stepper motor (active low). #define SYRINGE_PUMP_CONTROL_ENABLE 0x00 ///< Syringe pump control register bit mask for enable. #define SYRINGE_PUMP_CONTROL_DISABLE 0x10 ///< Syringe pump control register bit for enable (active low). #define SYRINGE_PUMP_CONTROL_REVERSE_DIR 0x08 ///< Syringe pump control register bit for direction (0=fwd, 1=rev). #define SYRINGE_PUMP_CONTROL_FORWARD_DIR 0x00 ///< Syringe pump control register bit mask for forward direction. #define SYRINGE_PUMP_CONTROL_32TH_STEP 0x03 ///< Syringe pump control register bits for 1/32 micro-stepping mode. /// Baro sensor manufacturing coefficients typedef struct { U16 baroManufactInfo; ///< Reg 352. Baro sensor manufacturing information. U16 baroPresSensitivity; ///< Reg 354. Baro sensor prom coefficient 1. U16 baroPresOffset; ///< Reg 356. Baro sensor prom coefficient 2. U16 baroTempCoeffOfPresSense; ///< Reg 358. Baro sensor prom coefficient 3. U16 baroTempCoeffPresOffset; ///< Reg 360. Baro sensor prom coefficient 4. U16 baroRefTemp; ///< Reg 362. Baro sensor prom coefficient 5. U16 baroTempCoeffOfTemp; ///< Reg 364. Baro sensor prom coefficient 6. U16 baroPromCRC; ///< Reg 366. Baro prom CRC. } BARO_PRES_SENSOR_MFG_T; // ********** public function prototypes ********** void initFpgaTD( void ); void fpgaResetTransitoryCmds( void ); SELF_TEST_STATUS_T execFPGATest( void ); void execFPGAClockSpeedTest( void ); void checkFPGACommFailure( void ); void checkFPGAFEOEFailure( void ); U16 getFPGATimerCount( void ); void getFPGAVersions( U08 *Id, U08 *Maj, U08 *Min, U08 *Lab ); U16 getFPGATemperature( void ); F32 getFPGAVcc( void ); F32 getFPGAVccAux( void ); F32 getFPGAVpvn( void ); void setAlarmAudioState( U32 state, U32 volumeLevel, U32 volumeDivider ); void setH4Enabled( BOOL enable ); void setH4Direction( MOTOR_DIR_T dir ); void setH4SetSpeed( U16 rpm ); U16 getH4Period( void ); void setH4BrakeAndHoldTorque( void ); S16 getH4RotorCount( void ); S16 getH4TorqueCount( void ); U08 getH6Status( void ); U08 getH6RotorStatus( void ); void setH5ControlFlags( U08 ctrl ); U08 getH5ControlFlags( void ); void setH5StepToggleTime( U32 microSeconds ); U16 getH2Pressure( void ); S16 getH2Temperature( void ); U08 getH2ReadCounter( void ); U08 getH2ErrorCounter( void ); U16 getH14Pressure( void ); S16 getH14Temperature( void ); U08 getH14ReadCounter( void ); U08 getH14ErrorCounter( void ); void getH23MfgCoeffs( BARO_PRES_SENSOR_MFG_T* baroMfgCoeffs ); U32 getH23Pressure( void ); U32 getH23Temperature( void ); U08 getH23ReadCounter( void ); U08 getH23ErrorCounter( void ); F32 getFPGABackupAlarmAudioCurrent( void ); void getFPGAAirTrapLevels( BOOL *airAtLower, BOOL *airAtUpper ); BOOL H18BubbleDetected( void ); void setFPGAVenousBubbleSelfTest( void ); void clearFPGAVenousBubbleSelfTest( void ); void setH13ValveState( VALVE_3WAY_STATE_T state ); void setH20ValveState( VALVE_3WAY_STATE_T state ); void setH12AirPumpMotorPowerLevel( U08 power ); void setH12AirPumpMotorPWMCntTime( U16 tenNS ); void setH19Control( U08 controlBits ); U08 getH19Control( void ); void setH19Position( S16 setPoint ); S16 getH19EncoderPosition( void ); U16 getH19Status( void ); S16 getH19MaxEncPosition( void ); void setH1Control( U08 controlBits ); U08 getH1Control( void ); void setH1Position( S16 setPoint ); S16 getH1EncoderPosition( void ); U16 getH1Status( void ); S16 getH1MaxEncPosition( void ); U16 getFPGABoardTemperature( void ); U32 getFPGAPBAADCTemperature( void ); U16 getFPGAInletFan1TogglePeriod( void ); BOOL getH9FrontDoorClosedStatus( void ); U32 getFPGAEjectorRetractOpticalSensor( void ); U32 getFPGAEjectorEngageOpticalSensor( void ); /**@}*/ #endif