Index: firmware/App/Drivers/InternalADC.c =================================================================== diff -u -r56100135135bb715d316b5fd002a4a4951b9334a -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision 56100135135bb715d316b5fd002a4a4951b9334a) +++ firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -153,7 +153,7 @@ { U32 i; - if ( adcRawReadingsCount < NUM_OF_INT_ADC_CHANNELS ) + if ( adcRawReadingsCount <= NUM_OF_INT_ADC_CHANNELS ) { // Process readings from last conversion for ( i = 0; i < adcRawReadingsCount; i++ ) Index: firmware/App/Drivers/RotaryValve.c =================================================================== diff -u -r036a75d76ab01912646a480b935d97187a231a19 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Drivers/RotaryValve.c (.../RotaryValve.c) (revision 036a75d76ab01912646a480b935d97187a231a19) +++ firmware/App/Drivers/RotaryValve.c (.../RotaryValve.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -70,7 +70,7 @@ for ( i = FIRST_VALVE; i < NUM_OF_VALVES; i++ ) { - valveControl[ i ] = FPGA_PINCH_VALVES_1_32_STEP | FPGA_PINCH_VALVES_NOT_RESET | FPGA_PINCH_VALVES_NOT_SLEEP; // enable valves, configure for 1/32 step control + valveControl[ i ] = FPGA_PINCH_VALVES_1_8_STEP | FPGA_PINCH_VALVES_NOT_RESET | FPGA_PINCH_VALVES_NOT_SLEEP; // enable valves, configure for 1/32 step control commandValvePosChange[ i ] = 0; currentValveEncPosition[ i ].data = 0; currentValveEncPosition[ i ].ovData = 0; @@ -158,29 +158,13 @@ if ( H1_VALV == valve ) { ctrl = getH1Control(); - if ( MOTOR_DIR_REVERSE == dir ) - { -// setH1Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD | FPGA_PINCH_VALVES_REVERSE ) ); - setH1Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD & ~FPGA_PINCH_VALVES_REVERSE ) ); // TODO - reverse direction polarity when corrected - } - else - { -// setH1Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD & ~FPGA_PINCH_VALVES_REVERSE ) ); - setH1Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD | FPGA_PINCH_VALVES_REVERSE ) ); - } + setH1Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD ) ); setH1Position( mag ); } else { ctrl = getH19Control(); - if ( MOTOR_DIR_REVERSE == dir ) - { - setH19Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD | FPGA_PINCH_VALVES_REVERSE ) ); - } - else - { - setH19Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD & ~FPGA_PINCH_VALVES_REVERSE ) ); - } + setH19Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD ) ); setH19Position( mag ); } } Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r50f4b79164155c1bc375dd3ff0e8588f934dc729 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 50f4b79164155c1bc375dd3ff0e8588f934dc729) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -15,6 +15,7 @@ * ***************************************************************************/ +#include "Bubbles.h" #include "Messaging.h" #include "ModeFault.h" #include "OperationModes.h" @@ -65,7 +66,7 @@ // requestAlarmLampPattern( LAMP_PATTERN_FAULT ); // in case we get here before LED POST can take alarm lamp out of manual control. doorClosedRequired( FALSE ); // syringeDetectionRequired( FALSE ); -// setVenousBubbleDetectionEnabled( FALSE ); + setVenousBubbleDetectionEnabled( H18_BBLD, FALSE ); setCurrentSubState( NO_SUB_STATE ); // Set user alarm recovery actions allowed in this mode Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rfdb7ee915da2741dc200fef1b624b7f383f4db85 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision fdb7ee915da2741dc200fef1b624b7f383f4db85) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -17,6 +17,7 @@ #include "AirTrap.h" //#include "BloodFlow.h" +#include "Bubbles.h" #include "Buttons.h" #include "DDInterface.h" #include "ModeService.h" @@ -196,7 +197,7 @@ setCurrentSubState( NO_SUB_STATE ); // Enable venous bubble detection in treatment mode -// setVenousBubbleDetectionEnabled( TRUE ); + setVenousBubbleDetectionEnabled( H18_BBLD, TRUE ); // Set treatment parameters presTreatmentTimeSecs = getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ) * SEC_PER_MIN; Index: firmware/App/Monitors/Bubbles.c =================================================================== diff -u -r1477c8a0fe85267e77005dd34ee2ed235d55a487 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Monitors/Bubbles.c (.../Bubbles.c) (revision 1477c8a0fe85267e77005dd34ee2ed235d55a487) +++ firmware/App/Monitors/Bubbles.c (.../Bubbles.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -82,7 +82,7 @@ bubblesSelfTestStatus[ bubble ] = SELF_TEST_STATUS_IN_PROGRESS; bubblesSelfTestRequested[ bubble ] = FALSE; bubblesSelfTestStartTime[ bubble ] = 0; - bubbleDetectionEnabled[ bubble ] = TRUE; + bubbleDetectionEnabled[ bubble ] = FALSE; } bubblesDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; Index: firmware/App/Monitors/Voltages.c =================================================================== diff -u -r036a75d76ab01912646a480b935d97187a231a19 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Monitors/Voltages.c (.../Voltages.c) (revision 036a75d76ab01912646a480b935d97187a231a19) +++ firmware/App/Monitors/Voltages.c (.../Voltages.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -242,7 +242,7 @@ } // Check the persistence alarm - checkPersistentAlarm ( ALARM_ID_TD_VOLTAGE_OUT_OF_RANGE, isVoltageOutOfRange, channelInAlarm, alarmVoltage ); +// checkPersistentAlarm ( ALARM_ID_TD_VOLTAGE_OUT_OF_RANGE, isVoltageOutOfRange, channelInAlarm, alarmVoltage ); // TODO if ( TRUE == hasPowerBeenLost ) { Index: firmware/App/Services/AlarmMgmtTD.c =================================================================== diff -u -r036a75d76ab01912646a480b935d97187a231a19 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision 036a75d76ab01912646a480b935d97187a231a19) +++ firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -20,6 +20,7 @@ #include "mibspi.h" #include "AlarmMgmtTD.h" +#include "Bubbles.h" #include "CpldInterface.h" #include "Messaging.h" #include "OperationModes.h" @@ -688,40 +689,51 @@ * entries. * @details \b Message \b Sent: MSG_ID_TD_ACTIVE_ALARMS_LIST_REQUEST_RESPONSE * @details \b Inputs: alarmStatus, alarmIsActive[], ALARM_RANK_TABLE[] -* @details \b Outputs: sent active alarms list to UI -* @return none +* @details \b Outputs: none +* @return TRUE if request handled successfully, FALSE if not *************************************************************************/ -void handleActiveAlarmListRequest( void ) +BOOL handleActiveAlarmListRequest( MESSAGE_T *message ) { ACTIVE_ALARM_LIST_RESPONSE_PAYLOAD_T activeAlarmPayload; + BOOL result; U32 index; U32 activeAlarmListIndex = 0; - activeAlarmPayload.accepted = TRUE; - activeAlarmPayload.rejectionReason = (U32)REQUEST_REJECT_REASON_NONE; - // Blank alarm list initially for ( index = 0; index < MAX_ALARM_LIST_SIZE; index++ ) { activeAlarmPayload.activeAlarmList[ index ] = ALARM_ID_NO_ALARM; } - // Fill alarm list from (up to) 10 highest priority active alarms - if ( TRUE == isAnyAlarmActive() ) + if ( 0 == message->hdr.payloadLen ) { - for ( index = 0; index < NUM_OF_ALARM_IDS; index++ ) - { - ALARM_RANK_T ranks = getAlarmRank( index ); + activeAlarmPayload.accepted = TRUE; + activeAlarmPayload.rejectionReason = (U32)REQUEST_REJECT_REASON_NONE; - if ( ( TRUE == isAlarmActive( ranks.alarmID ) ) && ( activeAlarmListIndex < MAX_ALARM_LIST_SIZE ) ) + // Fill alarm list from (up to) 10 highest priority active alarms + if ( TRUE == isAnyAlarmActive() ) + { + for ( index = 0; index < NUM_OF_ALARM_IDS; index++ ) { - activeAlarmPayload.activeAlarmList[ activeAlarmListIndex ] = ranks.alarmID; - activeAlarmListIndex++; + ALARM_RANK_T ranks = getAlarmRank( index ); + + if ( ( TRUE == isAlarmActive( ranks.alarmID ) ) && ( activeAlarmListIndex < MAX_ALARM_LIST_SIZE ) ) + { + activeAlarmPayload.activeAlarmList[ activeAlarmListIndex ] = ranks.alarmID; + activeAlarmListIndex++; + } } } } + else + { + activeAlarmPayload.accepted = FALSE; + activeAlarmPayload.rejectionReason = (U32)REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT; + } -// TODO sendActiveAlarmsList( activeAlarmPayload ); + result = sendMessage( MSG_ID_TD_ACTIVE_ALARMS_LIST_REQUEST_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)(&activeAlarmPayload), sizeof( ACTIVE_ALARM_LIST_RESPONSE_PAYLOAD_T ) ); + + return result; } /*********************************************************************//** @@ -809,7 +821,7 @@ if ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == getConfirmationRequestStatus( GENERIC_CONFIRM_ID_TREATMENT_END ) ) { // To avoid raising repeated alarm before reaching end treatment -// setVenousBubbleDetectionEnabled( FALSE ); + setVenousBubbleDetectionEnabled( H18_BBLD, FALSE ); clearAllRecoverableAlarms( ALARM_USER_ACTION_END_TREATMENT ); initiateAlarmAction( ALARM_ACTION_END_TREATMENT ); } Index: firmware/App/Services/AlarmMgmtTD.h =================================================================== diff -u -rd9b5f588d81e15ed3849222bed3362e15dbf4b0a -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Services/AlarmMgmtTD.h (.../AlarmMgmtTD.h) (revision d9b5f588d81e15ed3849222bed3362e15dbf4b0a) +++ firmware/App/Services/AlarmMgmtTD.h (.../AlarmMgmtTD.h) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -149,7 +149,7 @@ BOOL doesAlarmStatusIndicateEndTxOnly( void ); ALARM_PRIORITY_T getCurrentAlarmStatePriority( void ); -void handleActiveAlarmListRequest( void ); +BOOL handleActiveAlarmListRequest( MESSAGE_T *message ); void handleResendActiveAlarmsRequest( void ); BOOL testSetAlarmStartTimeOverride( MESSAGE_T *message ); Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r50f4b79164155c1bc375dd3ff0e8588f934dc729 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 50f4b79164155c1bc375dd3ff0e8588f934dc729) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -155,8 +155,8 @@ typedef struct { U16 fpgaGenWrRd; ///< Reg 04. FPGA general write/read-back register (mirrored to a general read register in read page at addr 256). - U08 airTrapControl; ///< Reg 06. Air trap valve control register. - U08 airTrapPWMEnable; ///< Reg 07. Air trap valve PWM enable register. + U08 h13h20AirTrapValveControl; ///< Reg 06. H13 & H20 air trap valve control register. + U08 h13h20AirTrapValvePWMEnable; ///< Reg 07. H13 & H20 air trap valve PWM enable register. U16 h13PWMLowPeriod; ///< Reg 08. H13 PWM low signal period register. U16 h13PWMPeriod; ///< Reg 10. H13 PWM period register. U16 h13PWMPUllInTime; ///< Reg 12. H13 PWM pull in time register. @@ -166,12 +166,12 @@ U16 H4SetSpeed; ///< Reg 18. H4 Blood pump speed set register (RPM). U08 H4Control; ///< Reg 20. H4 Blood pump control register. U08 H19Control; ///< Reg 21. H19 control register. - U16 H19Position; ///< Reg 22. H19 position set register (200 steps/rev). - U16 H19MotorSpeed; ///< Reg 24. H19 stepper motor speed (uSec/step). - U16 H1Position; ///< Reg 26. H1 position set register (200 steps/rev). - U16 H1MotorSpeed; ///< Reg 28. H1 stepper motor speed (uSec/step). + S16 H19Position; ///< Reg 22. H19 position set register (200 steps/rev). + U16 NotUsed2; ///< Reg 24. Reserved. + S16 H1Position; ///< Reg 26. H1 position set register (200 steps/rev). + U16 NotUsed3; ///< Reg 28. Reserved. U08 H1Control; ///< Reg 30. H1 control register. - U08 valveEncoderControl; ///< Reg 31. H1/H19 encoder control register. + U08 h1h19ValveEncoderControl; ///< Reg 31. H1/H19 valve encoder control register. U08 alarmControl; ///< Reg 32. Alarm audio control register. U08 syrPumpControl; ///< Reg 33. Syringe pump control register. U32 syrPumpSpeed; ///< Reg 34. Syringe pump time between step toggle (1/2 step period). @@ -215,8 +215,8 @@ fpgaActuatorSetPoints.alarmControl = (U08)MIN_ALARM_VOLUME_ATTENUATION << 2; // Start alarm audio volume at maximum // Set H1 and H19 to default configuration + disabled so they do not run immediately on power up - fpgaActuatorSetPoints.H1Control = FPGA_PINCH_VALVES_1_32_STEP | FPGA_PINCH_VALVES_DISABLE | FPGA_PINCH_VALVES_NOT_RESET | FPGA_PINCH_VALVES_NOT_SLEEP; - fpgaActuatorSetPoints.H19Control = FPGA_PINCH_VALVES_1_32_STEP | FPGA_PINCH_VALVES_DISABLE | FPGA_PINCH_VALVES_NOT_RESET | FPGA_PINCH_VALVES_NOT_SLEEP; + fpgaActuatorSetPoints.H1Control = FPGA_PINCH_VALVES_1_8_STEP | FPGA_PINCH_VALVES_DISABLE | FPGA_PINCH_VALVES_NOT_RESET | FPGA_PINCH_VALVES_NOT_SLEEP; + fpgaActuatorSetPoints.H19Control = FPGA_PINCH_VALVES_1_8_STEP | FPGA_PINCH_VALVES_DISABLE | FPGA_PINCH_VALVES_NOT_RESET | FPGA_PINCH_VALVES_NOT_SLEEP; // initialize FPGA comm failures windowed timer count initTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_COMM_FAILURES, MAX_FPGA_COMM_FAILURES, MAX_FPGA_COMM_FAILURES_WINDOW_MS); @@ -736,41 +736,41 @@ * @brief * The setH13ValveState function sets the command position for H13 valve. * @note VBTControl register bit 0 will drive state of H13 valve (0=closed, 1=open). - * @details \b Inputs: fpgaActuatorSetPoints - * @details \b Outputs: fpgaActuatorSetPoints + * @details \b Inputs: fpgaActuatorSetPoints.h13h20AirTrapValveControl + * @details \b Outputs: fpgaActuatorSetPoints.h13h20AirTrapValveControl * @param state : The valve state to command H13 valve to * @return none *************************************************************************/ void setH13ValveState( VALVE_3WAY_STATE_T state ) { if ( VALVE_3WAY_COMMON_TO_OPEN_STATE == state ) { - fpgaActuatorSetPoints.airTrapControl |= FPGA_H13_OPEN_BIT_MASK; + fpgaActuatorSetPoints.h13h20AirTrapValveControl |= FPGA_H13_OPEN_BIT_MASK; } else { - fpgaActuatorSetPoints.airTrapControl &= ~((U08)FPGA_H13_OPEN_BIT_MASK); + fpgaActuatorSetPoints.h13h20AirTrapValveControl &= ~((U08)FPGA_H13_OPEN_BIT_MASK); } } /*********************************************************************//** * @brief * The setH20ValveState function sets the command position for H20 valve. * @note VBTControl register bit 0 will drive state of H13 valve (0=closed, 1=open). - * @details \b Inputs: fpgaActuatorSetPoints - * @details \b Outputs: fpgaActuatorSetPoints + * @details \b Inputs: fpgaActuatorSetPoints.h13h20AirTrapValveControl + * @details \b Outputs: fpgaActuatorSetPoints.h13h20AirTrapValveControl * @param state The valve state to command H13 valve to * @return none *************************************************************************/ void setH20ValveState( VALVE_3WAY_STATE_T state ) { if ( VALVE_3WAY_COMMON_TO_OPEN_STATE == state ) { - fpgaActuatorSetPoints.airTrapControl |= FPGA_H20_OPEN_BIT_MASK; + fpgaActuatorSetPoints.h13h20AirTrapValveControl |= FPGA_H20_OPEN_BIT_MASK; } else { - fpgaActuatorSetPoints.airTrapControl &= ~((U08)FPGA_H20_OPEN_BIT_MASK); + fpgaActuatorSetPoints.h13h20AirTrapValveControl &= ~((U08)FPGA_H20_OPEN_BIT_MASK); } } @@ -859,8 +859,7 @@ * 6=1/4 step * 7=1/8 step * Direction: bit 3 - * 0=forward - * 1=reverse + * 1=reset encoder * Enable: bit 4 (active low) * 0=enabled * 1=disabled @@ -900,7 +899,7 @@ * @param setPoint The target encoder position of the H19 valve in counts * @return none *************************************************************************/ -void setH19Position( U16 setPoint ) +void setH19Position( S16 setPoint ) { fpgaActuatorSetPoints.H19Position = setPoint; } @@ -1001,7 +1000,7 @@ * @param setPoint The target encoder position of the H1 valve in counts * @return none *************************************************************************/ -void setH1Position( U16 setPoint ) +void setH1Position( S16 setPoint ) { fpgaActuatorSetPoints.H1Position = setPoint; } Index: firmware/App/Services/FpgaTD.h =================================================================== diff -u -r50f4b79164155c1bc375dd3ff0e8588f934dc729 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 50f4b79164155c1bc375dd3ff0e8588f934dc729) +++ firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -32,8 +32,8 @@ // ********** public definitions ********** // Bit definitions for pinch valve control register -#define FPGA_PINCH_VALVES_1_32_STEP 0x03 ///< Bit mask for configuring pinch valve for 1/32 step. -#define FPGA_PINCH_VALVES_REVERSE 0x08 ///< Bit mask for configuring pinch valve for reverse direction. +#define FPGA_PINCH_VALVES_1_8_STEP 0x07 ///< Bit mask for configuring pinch valve for 1/8 step microstepping. +#define FPGA_PINCH_VALVES_RESET_ENCODER 0x08 ///< Bit mask for configuring pinch valve to reset the encoder. #define FPGA_PINCH_VALVES_DISABLE 0x10 ///< Bit mask for configuring pinch valve to be disabled. #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. @@ -104,14 +104,14 @@ void setH19Control( U08 controlBits ); U08 getH19Control( void ); -void setH19Position( U16 setPoint ); +void setH19Position( S16 setPoint ); S16 getH19EncoderPosition( void ); S16 getH19CmdPosition( void ); U16 getH19Status( void ); void setH1Control( U08 controlBits ); U08 getH1Control( void ); -void setH1Position( U16 setPoint ); +void setH1Position( S16 setPoint ); S16 getH1EncoderPosition( void ); S16 getH1CmdPosition( void ); U16 getH1Status( void ); Index: firmware/App/Services/Messaging.c =================================================================== diff -u -rb05bbd09d430425d907779b02feadde8addc8c79 -r51f42cd88bd9c50ed9096a2d1d8ff859a95aff95 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision b05bbd09d430425d907779b02feadde8addc8c79) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 51f42cd88bd9c50ed9096a2d1d8ff859a95aff95) @@ -97,6 +97,7 @@ /// Message handling function lookup table static const MSG_HANDLER_LOOKUP_T MSG_FUNCTION_HANDLER_LOOKUP[] = { + { MSG_ID_UI_ACTIVE_ALARMS_LIST_REQUEST, &handleActiveAlarmListRequest }, { MSG_ID_FW_VERSIONS_REQUEST, &handleVersionRequestMessage }, { MSG_ID_DD_OP_MODE_DATA, &setDDOpMode }, { MSG_ID_DD_PRESSURES_DATA, &setDialysatePressure },