Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r2332d35e7db7dd3b4b58e79433ebcf9fd28a1544 -r3cc784af591b14e5d292f92c796db70bcbd5a40b --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 2332d35e7db7dd3b4b58e79433ebcf9fd28a1544) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 3cc784af591b14e5d292f92c796db70bcbd5a40b) @@ -44,7 +44,6 @@ #ifdef __DIENER_CONC_PUMP__ #define CONCENTRATE_PUMP_VOLUME_PER_REV 0.4F ///< Volume output every revolution (mL). -#define CONCENTRATR_PUMP_SPEED_RATIO_FACTOR 4.0F ///< Diener pump Speed multiply factor. #elif __PUMPTEST__ #define PISTON_PUMP_STEPS_PER_ML 342.0F ///< Revolution count for 1ml volume delivery. #define CONCENTRATE_PUMP_VOLUME_PER_REV ( CONCENTRATE_PUMP_STEP_PER_REV / PISTON_PUMP_STEPS_PER_ML ) ///< Volume output every revolution (mL). @@ -130,17 +129,17 @@ /// Payload record structure for concentrate pump start/stop request typedef struct { - U32 pumpID; ///< Concentrate pump ID (0:Acid ,1:Bicarb) + U32 pumpID; ///< Concentrate pump ID (0:Acid ,1:Bicarb, 2:UF) U32 startStop; ///< Concentrate pump start:1,stop :0. - F32 speed; ///< Speed range from 0.1 ml/min to 48.0 ml/min. + F32 speed; ///< Speed in ml/min F32 volume; ///< Target volume in ml } CONC_PUMP_START_STOP_CMD_PAYLOAD_T; // ********** private data ********** static U32 concentratePumpMonitorTimerCounter; ///< Timer counter to perform monitor on concentrate pump. static BOOL acidConcentratePumpParkPersistenceClear; ///< Boolean acid park persistence clearing. -static BOOL bicarbConcentratePumpParkPersistenceClear; ///< Boolean for bicard park persistence clearing. +static BOOL bicarbConcentratePumpParkPersistenceClear; ///< Boolean for bicarb park persistence clearing. /// Concentrate pump data publish interval. static OVERRIDE_U32_T concentratePumpDataPublishInterval = { CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, 0, 0 }; @@ -156,6 +155,7 @@ //static DD_ACID_CONCENTRATES_RECORD_T acidConcentrateCalRecord; ///< Acid concentrate calibration record. //static DD_BICARB_CONCENTRATES_RECORD_T bicarbConcentrateCalRecord; ///< Bicarb concentrate calibration record. +//static DD_UF_PUMP_RECORD_T ultrafilterationPumpCalRecord; ///< Ultrafilteration pump calibration record. //static DD_CONC_PUMPS_CAL_RECORD_T concentratePumpsCalRecord; ///< Concentrate pumps calibration record. // ********** private function prototypes ********** @@ -227,6 +227,7 @@ initPersistentAlarm( ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR, 0, CONCENTRATE_PUMP_SPEED_OUT_OF_RANGE_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR, 0, CONCENTRATE_PUMP_SPEED_OUT_OF_RANGE_TIMEOUT_MS ); + //TODO: UF pump park bits to be defined in HDD and then will handle UF pump alarm later initPersistentAlarm( ALARM_ID_DD_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE, CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS, CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS ); initPersistentAlarm( ALARM_ID_DD_CONCENTRATE_PUMP_FAULT, CONCENTRATE_PUMP_FAULT_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_FAULT_PERSISTENCE_PERIOD ); } @@ -261,6 +262,7 @@ // Update rev count status pumpMesauredRevCnt[ D11_PUMP ].data = (U32)getFPGAD11PumpRevolutionCountStatus(); pumpMesauredRevCnt[ D10_PUMP ].data = (U32)getFPGAD10PumpRevolutionCountStatus(); + pumpMesauredRevCnt[ D76_PUMP ].data = (U32)getFPGAD76PumpRevolutionCountStatus(); //Monitor Pump Park status monitorPumpParkStatus(); @@ -290,6 +292,7 @@ parked[ D10_PUMP ].data = (U32)getFPGAD10PumpIsParked(); parkFaulted[ D11_PUMP ].data = (U32)getFPGAD11PumpParkFault(); parkFaulted[ D10_PUMP ].data = (U32)getFPGAD10PumpParkFault(); + // TODO : Handle UF Pump Park alarms once HDD updated with the details. if ( ( TRUE == getConcPumpIsParked( D11_PUMP ) ) || ( TRUE == getConcPumpParkIsFaulted( D11_PUMP ) ) ) { @@ -434,12 +437,14 @@ // pumps should be not ON and DD operation mode is not in fault mode if ( ( concentratePumps[D11_PUMP].execState == CONCENTRATE_PUMP_OFF_STATE ) && ( concentratePumps[D10_PUMP].execState == CONCENTRATE_PUMP_OFF_STATE ) && + ( concentratePumps[D76_PUMP].execState == CONCENTRATE_PUMP_OFF_STATE ) && //( DD_MODE_FILL != opMode ) && ( DD_MODE_FAUL != opMode ) ) { // Park concentrate pump requestConcentratePumpOff( D11_PUMP, PARK_CONC_PUMPS ); requestConcentratePumpOff( D10_PUMP, PARK_CONC_PUMPS ); + requestConcentratePumpOff( D76_PUMP, PARK_CONC_PUMPS ); result = TRUE; } @@ -536,10 +541,14 @@ { setFPGAD11PumpRevolutionCount( getConcPumpTargetRevolutionCount( pumpId ) ); } - else + else if ( D10_PUMP == pumpId ) { setFPGAD10PumpRevolutionCount( getConcPumpTargetRevolutionCount( pumpId ) ); } + else + { + setFPGAD76PumpRevolutionCount( getConcPumpTargetRevolutionCount( pumpId ) ); + } } /* @@ -826,10 +835,14 @@ { setFPGAD11PumpSetStepSpeed( CONCENTRATE_PUMP_ZERO_FLOW_RATE ); } - else + else if ( D10_PUMP == pumpId ) { setFPGAD10PumpSetStepSpeed( CONCENTRATE_PUMP_ZERO_FLOW_RATE ); } + else + { + setFPGAD76PumpSetStepSpeed( CONCENTRATE_PUMP_ZERO_FLOW_RATE ); + } #ifndef __PUMPTEST__ // Park concentrate pump too if requested if ( TRUE == parkPump ) @@ -839,11 +852,16 @@ setFPGAD11PumpParkCmd(); acidConcentratePumpParkPersistenceClear = TRUE; } - else + else if ( D10_PUMP == pumpId ) { setFPGAD10PumpParkCmd(); bicarbConcentratePumpParkPersistenceClear = TRUE; } + else + { + //TODO: Need to evaluate park support in the new pump. + setFPGAD76PumpParkCmd(); + } concentratePumps[ pumpId ].isConcPumpParkInProgress = TRUE; } #endif @@ -870,10 +888,14 @@ { setFPGAD11PumpControl( controlSet ); } - else + else if ( D10_PUMP == pumpId ) { setFPGAD10PumpControl( controlSet ); } + else + { + setFPGAD76PumpControl( controlSet ); + } state = CONCENTRATE_PUMP_RAMP_TO_TARGET_SPEED_STATE; } @@ -1002,11 +1024,7 @@ if ( concentratePumps[ pumpId ].currentPumpSpeed > NEARLY_ZERO ) { -#ifdef __DIENER_CONC_PUMP__ - F32 timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV / ( concentratePumps[ pumpId ].currentPumpSpeed * CONCENTRATR_PUMP_SPEED_RATIO_FACTOR * CONCENTRATE_PUMP_STEP_PER_REV ); -#else F32 timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV / ( concentratePumps[ pumpId ].currentPumpSpeed * CONCENTRATE_PUMP_STEP_PER_REV ); -#endif F32 stepPeriodCounts = timePerStep / ( CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION * CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ); concentratePumps[ pumpId ].togglePeriodCount = (U16)( stepPeriodCounts + FLOAT_TO_INT_ROUNDUP_OFFSET ); @@ -1023,10 +1041,14 @@ { setFPGAD11PumpSetStepSpeed( concentratePumps[ pumpId ].togglePeriodCount ); } - else + else if ( D10_PUMP == pumpId ) { setFPGAD10PumpSetStepSpeed( concentratePumps[ pumpId ].togglePeriodCount ); } + else + { + setFPGAD76PumpSetStepSpeed( concentratePumps[ pumpId ].togglePeriodCount ); + } return hasTgtBeenReached; } @@ -1058,10 +1080,14 @@ { pulseWidthCount = getFPGAD11PumpHallSensePulseWidth(); } - else + else if ( D10_PUMP == pumpId ) { pulseWidthCount = getFPGAD10PumpHallSensePulseWidth(); } + else + { + pulseWidthCount = getFPGAD76PumpHallSensePulseWidth(); + } pulseWidthInMicroSeconds = pulseWidthCount * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION; concentratePumps[ pumpId ].pulseWidthUS = pulseWidthInMicroSeconds; @@ -1074,11 +1100,7 @@ } else if ( FALSE == isPumpPulseWidthOut ) { -#ifdef __DIENER_CONC_PUMP__ - measuredPumpSpeed[ pumpId ].data = ( ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN ) / CONCENTRATR_PUMP_SPEED_RATIO_FACTOR; -#else measuredPumpSpeed[ pumpId ].data = ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; -#endif } // If pulse width is out of range capture pump out of range, pumpId and pulse width @@ -1151,7 +1173,7 @@ setFPGAD11PumpControl( concentratePumps[ pumpId ].controlSet ); } } - else + else if ( D10_PUMP == pumpId ) { controlSetBits = getFPGAD10PumpControlStatus(); @@ -1160,6 +1182,15 @@ setFPGAD10PumpControl( concentratePumps[ pumpId ].controlSet ); } } + else + { + controlSetBits = getFPGAD76PumpControlStatus(); + + if ( controlSetBits != concentratePumps[ pumpId ].controlSet ) + { + setFPGAD76PumpControl( concentratePumps[ pumpId ].controlSet ); + } + } } /*********************************************************************//** @@ -1183,6 +1214,9 @@ U08 d10_PumpDirection = concentratePumps[ D10_PUMP ].direction; F32 d10_PumpSetSpeed = concentratePumps[ D10_PUMP ].currentPumpSpeed; F32 d10_PumpTgtSpeed = getPumpTargetSpeed( D10_PUMP ); + U08 d76_PumpDirection = concentratePumps[ D76_PUMP ].direction; + F32 d76_PumpSetSpeed = concentratePumps[ D76_PUMP ].currentPumpSpeed; + F32 d76_PumpTgtSpeed = getPumpTargetSpeed( D76_PUMP ); // Use the above values to prepare the broadcast data data.d11_PumpCurrentSetSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == d11_PumpDirection ? d11_PumpSetSpeed * -1.0F : d11_PumpSetSpeed ); @@ -1203,6 +1237,13 @@ data.d10_PumpParked = getConcPumpIsParked( D10_PUMP ); data.d11_PumpParkFault = getConcPumpParkIsFaulted( D11_PUMP ); data.d10_PumpParkFault = getConcPumpParkIsFaulted( D10_PUMP ); + data.d76_PumpTargetSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == d76_PumpDirection ? d76_PumpTgtSpeed * -1.0F : d76_PumpTgtSpeed ); + data.d76_PumpCurrentSetSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == d76_PumpDirection ? d76_PumpSetSpeed * -1.0F : d76_PumpSetSpeed ); + data.d76_PumpMeasuredSpeed = getMeasuredPumpSpeedMLPM( D76_PUMP ); + data.d76_PumpTargetRevCount = (U32)getConcPumpTargetRevolutionCount( D76_PUMP ); + data.d76_PumpMeasuredRevCount= (U32)getConcPumpCurrentMeasuredRevolutionCount( D76_PUMP ); + data.d76_PumpState = concentratePumps[ D76_PUMP ].execState; + data.d76_PumpPulseUS = concentratePumps[ D76_PUMP ].pulseWidthUS; concentratePumpMonitorTimerCounter = 0; broadcastData( MSG_ID_DD_CONCENTRATE_PUMP_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( CONCENTRATE_PUMP_DATA_T ) ); Index: firmware/App/Controllers/ConcentratePumps.h =================================================================== diff -u -r5126b79e4970ffe2ed9db4cccea18a1216c78570 -r3cc784af591b14e5d292f92c796db70bcbd5a40b --- firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 5126b79e4970ffe2ed9db4cccea18a1216c78570) +++ firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 3cc784af591b14e5d292f92c796db70bcbd5a40b) @@ -30,8 +30,13 @@ */ // ********** public definitions ********** - +#ifdef __DIENER_CONC_PUMP__ +// For 100 RPM, Diener pump delivers 40ml/min,so restricing 300 RPM for now to maintain accuracy. We may allow up to 500 RPM +// that yields 200 ml/min, but as speed increases, accuracy may drop. +#define CONCENTRATE_PUMP_MAX_SPEED 120.0F ///< Optimal speed for concentrate pump in mL/min +#else #define CONCENTRATE_PUMP_MAX_SPEED 48.0F ///< Maximum speed for concentrate pump in mL/min +#endif #define DEFAULT_ACID_VOLUME_ML 0.67F ///< Acid concentrate volume in ml. #define DEFAULT_BICARB_VOLUME_ML 1.15F ///< Bicarb concentrate volume in ml. @@ -44,6 +49,7 @@ D11_PUMP = 0, ///< Acid concentrate pump CONCENTRATEPUMPS_FIRST = D11_PUMP, ///< First concentrate pump in list D10_PUMP, ///< Bicarbonate concentrate pump + D76_PUMP, ///< Ultrafilteration pump NUM_OF_CONCENTRATE_PUMPS ///< Number of concentrate pumps } CONCENTRATE_PUMPS_T; @@ -68,6 +74,13 @@ BOOL d10_PumpParked; ///< Concentrate pump D10_Pump parked status BOOL d11_PumpParkFault; ///< Concentrate pump D11_Pump park fault status BOOL d10_PumpParkFault; ///< Concentrate pump D10_Pump park fault status + F32 d76_PumpTargetSpeed; ///< Concentrate pump D76_Pump target speed + F32 d76_PumpCurrentSetSpeed; ///< Concentrate pump D76_Pump current set speed + F32 d76_PumpMeasuredSpeed; ///< Concentrate pump D76_Pump measured speed + U32 d76_PumpTargetRevCount; ///< Concentrate pump D76_Pump target revolution count + U32 d76_PumpMeasuredRevCount; ///< Concentrate pump D76_Pump measured revolution count + U32 d76_PumpState; ///< Concentrate pump D76_Pump current state + F32 d76_PumpPulseUS; ///< Concentrate pump D76_Pump pulse in microseconds } CONCENTRATE_PUMP_DATA_T; // ********** public function prototypes ********** Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r6408d79e3a9a543e90b2fa7ab823be348befd391 -r3cc784af591b14e5d292f92c796db70bcbd5a40b --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 6408d79e3a9a543e90b2fa7ab823be348befd391) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 3cc784af591b14e5d292f92c796db70bcbd5a40b) @@ -178,7 +178,8 @@ targetHydChamberFluidTemp.data = getTDTargetDialysateTemperature(); // Turn on the primary heater setHeaterTargetTemperature( D5_HEAT, getGenDialysateTargetTemperature() ); - startHeater( D5_HEAT ); + // TODO : For A1 Testing + //startHeater( D5_HEAT ); lastDialTargetTemperatureSet = getGenDialysateTargetTemperature(); setValveState( D14_VALV, VALVE_STATE_OPEN ); @@ -195,7 +196,8 @@ case DD_GEND_DIALYSATE_DELIVERY_STATE: //Previous state setValveState( M4_VALV, VALVE_STATE_OPEN ); - startHeater( D5_HEAT ); + //TODO : For A1 Testing + //startHeater( D5_HEAT ); setValveState( D14_VALV, VALVE_STATE_OPEN ); setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, FALSE ); setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -ra9983d3e6b07e7c927fab3d16e80b715594fe221 -r3cc784af591b14e5d292f92c796db70bcbd5a40b --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision a9983d3e6b07e7c927fab3d16e80b715594fe221) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 3cc784af591b14e5d292f92c796db70bcbd5a40b) @@ -244,6 +244,8 @@ U16 fpgaD74CondTemp; ///< Reg 438. D74 Temperature U08 fpgaD74CondReadCnt; ///< Reg 440. D74 successful read count U08 fpgaD74CondErrorCnt; ///< Reg 441. D74 error read count + U16 fpgaD76PumpHallSense; ///< Reg 442. UF D76_Pump hall sensor pulse width + U16 fpgaD76PumpStepCountStatus; ///< Reg 444. UF pump revolution down count status } DD_FPGA_SENSORS_T; typedef struct @@ -342,7 +344,9 @@ U08 fpgaConSensD74Control; ///< Reg 152. Conductivity/Temperature Sensors D74 Control registers U16 fpgaConSensD74_Addrs; ///< Reg 153. D74 Initialization Address register U32 fpgaConSensD74_Data_In; ///< Reg 155. D74 Initialization data register - + U16 fpgaD76PumpSpeed; ///< Reg 159. UF Pump Speed/RPM Control + U08 fpgaD76PumpControl; ///< Reg 161. UF Pump Control + U16 fpgaD76PumpRevCount; ///< Reg 162. UF pump revolution count } FPGA_ACTUATORS_T; #pragma pack(pop) @@ -637,6 +641,20 @@ /*********************************************************************//** * @brief + * The setFPGAD76PumpSetStepSpeed function sets the step speed period for + * UF D76_Pump. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaD76PumpSpeed + * @param stepSpeed The concentrate pump step speed period + * @return none + *************************************************************************/ +void setFPGAD76PumpSetStepSpeed( U16 stepSpeed ) +{ + fpgaActuatorSetPoints.fpgaD76PumpSpeed = stepSpeed; +} + +/*********************************************************************//** + * @brief * The setFPGAD11PumpControl function sets the DVT concentrate pump 1 * (acid pump) control mode. * bit 7: Park (set in different function) @@ -679,6 +697,27 @@ /*********************************************************************//** * @brief + * The setFPGAD76PumpControl function sets the UF pump + * (D76 pump) control mode. + * bit 7: Park (set in different function) + * bit 6: nSleep + * bit 5: nReset + * bit 4: nEnable + * bit 3: Direction (1=Fwd, 0=Rev) + * bit 0-2: Microstepping resolution + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaD76PumpControl + * @param control UF pump control set + * @return none + *************************************************************************/ +void setFPGAD76PumpControl( U08 control ) +{ + fpgaActuatorSetPoints.fpgaD76PumpControl &= FPGA_CONC_PUMP_PARK_COMMAND; // preserve msb (park command bit) + fpgaActuatorSetPoints.fpgaD76PumpControl |= control; +} + +/*********************************************************************//** + * @brief * The setFPGAD11PumpParkCmd function sets the DVT concentrate pump 1 * (acid pump) park command bit. * bit 7: Park command bit @@ -711,6 +750,22 @@ /*********************************************************************//** * @brief + * The setFPGAD76PumpParkCmd function sets the Ultrafiltration pump + * (D76 pump) park command bit. + * bit 7: Park command bit + * bit 0-6: Other pump control bits (set in different function) + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaD76PumpControl + * @param Park command bit set + * @return none + *************************************************************************/ +void setFPGAD76PumpParkCmd( void ) +{ + fpgaActuatorSetPoints.fpgaD76PumpControl |= FPGA_CONC_PUMP_PARK_COMMAND; // this bit must be cleared after next transmit to prevent continuous park commands +} + +/*********************************************************************//** + * @brief * The setFPGAD17CondReset function resets the FPGA Conductivity * Sensor D17. * @details \b Inputs: none @@ -1505,6 +1560,20 @@ /*********************************************************************//** * @brief + * The setFPGAD76PumpRevolutionCount function sets the UltraFilteration + * pump revolution count. + * @details \b Inputs: none + * @details \b Outputs: fpgaD76PumpRevCount + * @param count the number of revolution to be rotated for the pump. + * @return none + *************************************************************************/ +void setFPGAD76PumpRevolutionCount( U16 count ) +{ + fpgaActuatorSetPoints.fpgaD76PumpRevCount = count; +} + +/*********************************************************************//** + * @brief * The setFPGAD5HeaterOnOffControl function sets the primary heater * On/Off control. * @details \b Inputs: none @@ -1784,6 +1853,25 @@ /*********************************************************************//** * @brief + * The getFPGAD76PumpControlStatus function gets the Ultrafilteration pump + * (D76 pump) control mode. + * bit 7: Park (set in different function) + * bit 6: nSleep + * bit 5: nReset + * bit 4: nEnable + * bit 3: Direction (1=Fwd, 0=Rev) + * bit 0-2: Microstepping resolution + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaD76PumpControl + * @return UF pump control status bit + *************************************************************************/ +U08 getFPGAD76PumpControlStatus( void ) +{ + return fpgaActuatorSetPoints.fpgaD76PumpControl; +} + +/*********************************************************************//** + * @brief * The getFPGAConcentratePumpsFault function gets concentrate pumps fault * reported by FGPA. * @details \b Inputs: fpgaSensorReadings.fpgaD11_D10_PumpFault @@ -1887,6 +1975,19 @@ /*********************************************************************//** * @brief + * The getFPGAD76PumpHallSensePulseWidth function gets UF pump D76_Pump + * hall sense pulse width. + * @details \b Inputs: fpgaSensorReadings.fpgaD76PumpHallSense + * @details \b Outputs: none + * @return ultrafilteration pump D76_Pump hall sense pulse width + *************************************************************************/ +U16 getFPGAD76PumpHallSensePulseWidth( void ) +{ + return fpgaSensorReadings.fpgaD76PumpHallSense; +} + +/*********************************************************************//** + * @brief * The getFPGAValveStates function gets the latest sensed valve states. * See setFPGAValveStates for valve state bit positions. * @details \b Inputs: fpgaSensorReadings.fpgaValveStates @@ -2928,6 +3029,19 @@ /*********************************************************************//** * @brief + * The getFPGAD76PumpRevolutionCountStatus function gets the current revolution of + * UF pump (down counter) status. + * @details \b Inputs: fpgaD76PumpStepCountStatus + * @details \b Outputs: none + * @return the current revolution of the UF pump + *************************************************************************/ +U16 getFPGAD76PumpRevolutionCountStatus( void ) +{ + return fpgaSensorReadings.fpgaD76PumpStepCountStatus; +} + +/*********************************************************************//** + * @brief * The checkFPGAAFEOEFailure function increments the FPGA comm failure * windowed timer if an FE or OE error has occurred and returns whether * or not the number of failures in Index: firmware/App/Services/FpgaDD.h =================================================================== diff -u -ra9983d3e6b07e7c927fab3d16e80b715594fe221 -r3cc784af591b14e5d292f92c796db70bcbd5a40b --- firmware/App/Services/FpgaDD.h (.../FpgaDD.h) (revision a9983d3e6b07e7c927fab3d16e80b715594fe221) +++ firmware/App/Services/FpgaDD.h (.../FpgaDD.h) (revision 3cc784af591b14e5d292f92c796db70bcbd5a40b) @@ -140,24 +140,32 @@ // Pumps (Concentrate and Gear pumps ) void setFPGAD11PumpSetStepSpeed( U16 stepSpeed ); void setFPGAD10PumpSetStepSpeed( U16 stepSpeed ); +void setFPGAD76PumpSetStepSpeed( U16 stepSpeed ); void setFPGAD11PumpControl( U08 control ); void setFPGAD10PumpControl( U08 control ); +void setFPGAD76PumpControl( U08 control ); void setFPGAD11PumpParkCmd( void ); void setFPGAD10PumpParkCmd( void ); +void setFPGAD76PumpParkCmd( void ); void setFPGAD11PumpRevolutionCount( U16 count ); void setFPGAD10PumpRevolutionCount( U16 count ); +void setFPGAD76PumpRevolutionCount( U16 count ); U08 getFPGAD11PumpControlStatus( void ); U08 getFPGAD10PumpControlStatus( void ); +U08 getFPGAD76PumpControlStatus( void ); +//TODO : UF pump park yet to defined in HDD U08 getFPGAConcentratePumpsFault( void ); BOOL getFPGAD11PumpIsParked( void ); BOOL getFPGAD10PumpIsParked( void ); BOOL getFPGAD11PumpParkFault( void ); BOOL getFPGAD10PumpParkFault( void ); U16 getFPGAD11PumpHallSensePulseWidth( void ); U16 getFPGAD10PumpHallSensePulseWidth( void ); +U16 getFPGAD76PumpHallSensePulseWidth( void ); U16 getFPGAD11PumpRevolutionCountStatus( void ); U16 getFPGAD10PumpRevolutionCountStatus( void ); +U16 getFPGAD76PumpRevolutionCountStatus( void ); void setFPGAD48PumpSpeed( U16 speed ); void setFPGAD12PumpSpeed( U16 speed );