Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -r275ee4fdc1ace09febcf9788c80171f7a6372c99 -rf2511feb9d636af8a938374f96c3199125f3bdd8 --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 275ee4fdc1ace09febcf9788c80171f7a6372c99) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision f2511feb9d636af8a938374f96c3199125f3bdd8) @@ -91,7 +91,7 @@ #define FPGA_D12_PUMP_ERROR_BIT 0x01 ///< Fresh dialysate pump error bit mask. #define FPGA_D48_PUMP_ERROR_BIT 0x02 ///< Spent dialysate pump error bit mask. -#define FPGA_D6_FLOATER_LEVEL_BIT 0x03 ///< Floater level bit mask. +#define FPGA_D6_FLOATER_LEVEL_BIT 0x07 ///< Floater level bit mask. #define FPGA_D5_HEATER_CNTRL_BIT 0x01 ///< FPGA GIO D5 heater control bit mask #define FPGA_D5_HEATER_PWM_ENABLE_BIT 0x02 ///< FPGA D5 PWM based heater control bit mask @@ -102,11 +102,18 @@ #define MAX_FPGA_COMM_FAILURES 3 ///< FPGA maximum comm failures per MAX_FPGA_COMM_FAILURES_WINDOW_MS #define MIN_POWER_ON_TIME_FOR_COMM_FAILS ( 1 * MS_PER_SECOND ) ///< Allow FPGA comm errors for first second after power-up -#define FPGA_CONDUCTIVITY_RESET_BIT 0x01 ///< Conductivity Sensor reset bit mask. -#define FPGA_CONDUCTIVITY_INIT_ENABLE_BIT 0x02 ///< Conductivity Sensor initialization enable bit mask. -#define FPGA_CONDUCTIVITY_WR_ENABLE_BIT 0x04 ///< Conductivity Sensor write enable bit mask. -#define FPGA_CONDUCTIVITY_RD_ENABLE_BIT 0x08 ///< Conductivity Sensor read enable bit mask. +#define FPGA_CONDUCTIVITY_RESET_BIT 0x01 ///< Conductivity Sensor reset bit mask. +#define FPGA_CONDUCTIVITY_INIT_ENABLE_BIT 0x02 ///< Conductivity Sensor initialization enable bit mask. +#define FPGA_CONDUCTIVITY_WR_ENABLE_BIT 0x04 ///< Conductivity Sensor write enable bit mask. +#define FPGA_CONDUCTIVITY_RD_ENABLE_BIT 0x08 ///< Conductivity Sensor read enable bit mask. +#define FPGA_D42_BLOOD_LEAK_STATUS_MASK 0x04 ///< Bit mask for blood leak detector. +#define FPGA_D42_BLOOD_LEAK_ST_BIT_INDEX 2 ///< Bit index for the blood leak self test status bit. + +#define MAX_PUMP_SPEED 3000.0F ///< Maxon controller pump maximum speed +#define PUMP_SPEED_OFFSET 168.7F ///< Speed Scale adjustment intercept factor +#define PUMP_SPEED_FULL_SCALE 3187.0F ///< Speed scale adjustment slope factor + #pragma pack(push,1) /// FPGA header struct. typedef struct @@ -202,8 +209,8 @@ U08 fpgaD76PumpFault; ///< Reg 658: UF pump fault U08 fpga_UnUsed_3; ///< reg 659: Not used - S16 pressureM1; ///< Reg 660. M1 pressure data. - U16 temperatureM1; ///< Reg 662. M1 temperature data. + S16 pressureP46; ///< Reg 660. P46 pressure data. + U16 temperatureP46; ///< Reg 662. P46 temperature data. S16 pressureM3; ///< Reg 664. M3 pressure data. U16 temperatureM3; ///< Reg 666. M3 temperature data. S16 pressureP8; ///< Reg 668. P8 pressure data. @@ -230,8 +237,10 @@ U16 p12PumpTachCount; ///< Reg 708. P12 pump tachometer counter. U16 dsPumpTachCount; ///< Reg 710. DSP tachometer counter. U16 flowIntTempP7; ///< Reg 712. P7 flow sensor internal temperature. - U16 valveControlReadback; ///< Reg 714. Valve control bits read back. - U16 valvePWMEnableReadback; ///< Reg 716. Valve PWM enable read back. + U08 valveIOControlReadback; ///< Reg 714. Valve IO control bits read back. + U08 valveFPControlReadback; ///< Reg 715. Valve FP control bits read back. + U08 valveIOPWMEnableReadback; ///< Reg 716. Valve IO PWM enable read back. + U08 valveFPPWMEnableReadback; ///< Reg 717. Valve FP PWM enable read back. U16 p12PumpPWMReadback; ///< Reg 718. P12 pump PWM read back. U16 p40PumpPWMReadback; ///< Reg 720. P40 pump PWM read back. U08 p7flowReadCount; ///< Reg 722. P7 Flow sensor read counter. @@ -304,7 +313,8 @@ U08 fpgaD76PumpControl; ///< Reg 78. UF Pump Control U08 notused; ///< Reg 79. Not used - U16 valveControl; ///< Reg 80. Valve control register. + U08 valveIOControl; ///< Reg 80. Valve IO control register. + U08 valveFPControl; ///< Reg 81. Valve FP control register. U08 conductivityP9Control; ///< Reg 82. P9 conductivity control register. U08 conductivityP18Control; ///< Reg 83. P18 conductivity control register. U16 conductivityP9Address; ///< Reg 84. P9 conductivity address register. @@ -323,7 +333,8 @@ U08 reserved1; ///< Reg 111. Reserved. U08 flowControlp7; ///< Reg 112. P7 AVS Romer flow sensor control register. U08 flowAddressp7; ///< Reg 113. P7 AVS Romer flow sensor I2C slave address register. - U16 valvePWMEnable; ///< Reg 114. Valve PWM enable register. + U08 valveIOPWMEnable; ///< Reg 114. Valve IO PWM enable register. + U08 valveFPPWMEnable; ///< Reg 115. Valve FP PWM enable register. U08 flowControlp16; ///< Reg 116. P16 AVS Romer flow sensor control register. U08 flowAddressp16; ///< Reg 117. P16 AVS Romer flow sensor I2C slave address register. @@ -533,7 +544,16 @@ *************************************************************************/ void setFPGAD48PumpSpeed( U16 speed ) { - fpgaActuatorSetPoints.fpgaD48PumpSpeed = speed; +#ifdef __MAXON_SPEED_UPDATE__ + { + U16 currentSpeed =(U16)( ( ( speed + PUMP_SPEED_OFFSET ) / PUMP_SPEED_FULL_SCALE ) * MAX_PUMP_SPEED ); + fpgaActuatorSetPoints.fpgaD48PumpSpeed = currentSpeed; + } +#else + { + fpgaActuatorSetPoints.fpgaD48PumpSpeed = speed; + } +#endif } /*********************************************************************//** @@ -547,7 +567,16 @@ *************************************************************************/ void setFPGAD12PumpSpeed( U16 speed ) { - fpgaActuatorSetPoints.fpgaD12PumpSpeed = speed; +#ifdef __MAXON_SPEED_UPDATE__ + { + U16 currentSpeed =(U16)( ( ( speed + PUMP_SPEED_OFFSET ) / PUMP_SPEED_FULL_SCALE ) * MAX_PUMP_SPEED ); + fpgaActuatorSetPoints.fpgaD12PumpSpeed = currentSpeed; + } +#else + { + fpgaActuatorSetPoints.fpgaD12PumpSpeed = speed; + } +#endif } /*********************************************************************//** @@ -2727,7 +2756,7 @@ *************************************************************************/ U08 getFPGABloodLeakStatus( void ) { - U08 selfTestStatus = fpgaSensorReadings.fpgaD42PulseStatus; + U08 selfTestStatus = ( fpgaSensorReadings.fpgaD42PulseStatus & FPGA_D42_BLOOD_LEAK_STATUS_MASK ) >> FPGA_D42_BLOOD_LEAK_ST_BIT_INDEX; return selfTestStatus; } @@ -2812,44 +2841,74 @@ /*********************************************************************//** * @brief - * The setFPGAIOFPValveStates function sets the RO valve states with an 8-bit + * The setFPGAIOValveStates function sets the IO valve states with an 8-bit * mask of states - one bit per valve, with a 1 meaning "energized" and a 0 * meaning "de-energized". The bit positions for these bit states are as follows: * 0 - M4.\n - * 1 - P11.\n - * 2 - P33.\n - * 3 - P34.\n - * 4 - P37.\n - * 5 - P39.\n - * 6 - P43.\n - * 7 - P6.\n - * 15:8 - Not used. \n + * 1 - M12.\n + * 2:7- Not used. \n * @details \b Inputs: none - * @details \b Outputs: fpgaActuatorSetPoints.valveControl + * @details \b Outputs: fpgaActuatorSetPoints.valveIOControl * @param valveStates bit mask for requested valve states * @return none *************************************************************************/ -void setFPGAIOFPValveStates( U16 valveStates ) +void setFPGAIOValveStates( U08 valveStates ) { - fpgaActuatorSetPoints.valveControl = valveStates; + fpgaActuatorSetPoints.valveIOControl = valveStates; } /*********************************************************************//** * @brief - * The getFPGAValveStates function gets the RO valve commanded states with + * The setFPGAFPValveStates function sets the FP valve states with an 8-bit + * mask of states - one bit per valve, with a 1 meaning "energized" and a 0 + * meaning "de-energized". The bit positions for these bit states are as follows: + * 0 - P11.\n + * 1 - P33.\n + * 2 - P34.\n + * 3 - P37.\n + * 4 - P39.\n + * 5 - P6.\n + * 6:7- Not used. \n + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.valveFPControl + * @param valveStates bit mask for requested valve states + * @return none + *************************************************************************/ +void setFPGAFPValveStates( U08 valveStates ) +{ + fpgaActuatorSetPoints.valveFPControl = valveStates; +} + +/*********************************************************************//** + * @brief + * The getFPGAIOValveStates function gets the IO valve commanded states with * an 8-bit mask representing the set of states with a 1 meaning "energized" * and a 0 meaning "de-energized". * @details \b Inputs: none - * @details \b Outputs: fpgaSensorReadings.valveControlReadback + * @details \b Outputs: fpgaSensorReadings.valveIOControlReadback * @return none *************************************************************************/ -U16 getFPGAIOFPValveStates( void ) +U08 getFPGAIOValveStates( void ) { - return fpgaSensorReadings.valveControlReadback; + return fpgaSensorReadings.valveIOControlReadback; } /*********************************************************************//** * @brief + * The getFPGAFPValveStates function gets the FP valve commanded states with + * an 8-bit mask representing the set of states with a 1 meaning "energized" + * and a 0 meaning "de-energized". + * @details \b Inputs: none + * @details \b Outputs: fpgaSensorReadings.valveFPControlReadback + * @return none + *************************************************************************/ +U08 getFPGAFPValveStates( void ) +{ + return fpgaSensorReadings.valveFPControlReadback; +} + +/*********************************************************************//** + * @brief * The setFPGAP12PumpEnable function enables or disables the P12 pump. * @details \b Inputs: none * @details \b Outputs: fpgaActuatorSetPoints.p12PumpControl @@ -2934,26 +2993,26 @@ /*********************************************************************//** * @brief - * The getFPGAM1RawPressure function gets the M1 pressure reading. - * @details \b Inputs: fpgaSensorReadings.pressureM1 + * The getFPGAP46RawPressure function gets the P46 pressure reading. + * @details \b Inputs: fpgaSensorReadings.pressureP46 * @details \b Outputs: none - * @return M1 pressure + * @return P46 pressure *************************************************************************/ -S16 getFPGAM1RawPressure( void ) +S16 getFPGAP46RawPressure( void ) { - return fpgaSensorReadings.pressureM1; + return fpgaSensorReadings.pressureP46; } /*********************************************************************//** * @brief - * The getFPGAM1RawTemperature function gets the M1 sensor temperature reading. - * @details \b Inputs: fpgaSensorReadings.temperatureM1 + * The getFPGAP46RawTemperature function gets the P46 sensor temperature reading. + * @details \b Inputs: fpgaSensorReadings.temperatureP46 * @details \b Outputs: none - * @return M1 sensor temperature + * @return P46 sensor temperature *************************************************************************/ -S16 getFPGAM1RawTemperature( void ) +S16 getFPGAP46RawTemperature( void ) { - return fpgaSensorReadings.temperatureM1; + return fpgaSensorReadings.temperatureP46; } /*********************************************************************//**