Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -r285b5d82539c96524c93703d52a66fff76fb64fc -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 285b5d82539c96524c93703d52a66fff76fb64fc) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -227,7 +227,7 @@ * @details \b Outputs: none * @return none *************************************************************************/ -void execAirTrapMonitorTreatment( void ) // TODO - call from treatment mode when ready +void execAirTrapMonitorTreatment( void ) { // Check air trap fill timeout during treatment if ( AIR_TRAP_RAISE_LEVEL_STATE == airTrapControllerState ) Index: firmware/App/Controllers/AlarmAudio.c =================================================================== diff -u -ra0d405d152c0f451ebf3c25e3c2cfa49a4db17cd -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Controllers/AlarmAudio.c (.../AlarmAudio.c) (revision a0d405d152c0f451ebf3c25e3c2cfa49a4db17cd) +++ firmware/App/Controllers/AlarmAudio.c (.../AlarmAudio.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -233,7 +233,7 @@ *************************************************************************/ U32 getAlarmAudioVolume( void ) { - U32 result = alarmAudioVolumeLevel.data; + U32 result = getU32OverrideValue( &alarmAudioVolumeLevel ); #ifndef _RELEASE_ // Check the software configurations @@ -243,11 +243,6 @@ // } #endif - if ( OVERRIDE_KEY == alarmAudioVolumeLevel.override ) - { - result = alarmAudioVolumeLevel.ovData; - } - return result; } @@ -261,13 +256,8 @@ *************************************************************************/ F32 getAlarmAudioPrimaryHighGainCurrent( void ) { - F32 result = alarmPrimaryAudioCurrentHG.data; + F32 result = getF32OverrideValue( &alarmPrimaryAudioCurrentHG ); - if ( OVERRIDE_KEY == alarmPrimaryAudioCurrentHG.override ) - { - result = alarmPrimaryAudioCurrentHG.ovData; - } - return result; } @@ -281,13 +271,8 @@ *************************************************************************/ F32 getAlarmAudioPrimaryLowGainCurrent( void ) { - F32 result = alarmPrimaryAudioCurrentLG.data; + F32 result = getF32OverrideValue( &alarmPrimaryAudioCurrentLG ); - if ( OVERRIDE_KEY == alarmPrimaryAudioCurrentLG.override ) - { - result = alarmPrimaryAudioCurrentLG.ovData; - } - return result; } @@ -301,13 +286,8 @@ *************************************************************************/ F32 getAlarmAudioBackupCurrent( void ) { - F32 result = alarmBackupAudioCurrent.data; + F32 result = getF32OverrideValue( &alarmBackupAudioCurrent ); - if ( OVERRIDE_KEY == alarmBackupAudioCurrent.override ) - { - result = alarmBackupAudioCurrent.ovData; - } - return result; } Index: firmware/App/Controllers/AlarmLamp.c =================================================================== diff -u -ra0d405d152c0f451ebf3c25e3c2cfa49a4db17cd -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision a0d405d152c0f451ebf3c25e3c2cfa49a4db17cd) +++ firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -182,13 +182,8 @@ *************************************************************************/ LAMP_PATTERN_T getCurrentAlarmLampPattern( void ) { - LAMP_PATTERN_T result = (LAMP_PATTERN_T)currentLampPattern.data; + LAMP_PATTERN_T result = (LAMP_PATTERN_T)getU32OverrideValue( ¤tLampPattern ); - if ( OVERRIDE_KEY == currentLampPattern.override ) - { - result = (LAMP_PATTERN_T)currentLampPattern.ovData; - } - return result; } Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r285b5d82539c96524c93703d52a66fff76fb64fc -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 285b5d82539c96524c93703d52a66fff76fb64fc) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -736,13 +736,8 @@ *************************************************************************/ F32 getMeasuredBloodFlowRate( void ) { - F32 result = measuredBloodFlowRate.data; + F32 result = getF32OverrideValue( &measuredBloodFlowRate ); - if ( OVERRIDE_KEY == measuredBloodFlowRate.override ) - { - result = measuredBloodFlowRate.ovData; - } - return result; } @@ -756,13 +751,8 @@ *************************************************************************/ F32 getMeasuredBloodPumpRotorSpeed( void ) { - F32 result = bloodPumpRotorSpeedRPM.data; + F32 result = getF32OverrideValue( &bloodPumpRotorSpeedRPM ); - if ( OVERRIDE_KEY == bloodPumpRotorSpeedRPM.override ) - { - result = bloodPumpRotorSpeedRPM.ovData; - } - return result; } @@ -776,13 +766,8 @@ *************************************************************************/ F32 getMeasuredBloodPumpSpeed( void ) { - F32 result = bloodPumpSpeedRPM.data; + F32 result = getF32OverrideValue( &bloodPumpSpeedRPM ); - if ( OVERRIDE_KEY == bloodPumpSpeedRPM.override ) - { - result = bloodPumpSpeedRPM.ovData; - } - return result; } Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -rf3a26c402a2ec88f5ee7dbb8eb7127ab5b4692aa -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision f3a26c402a2ec88f5ee7dbb8eb7127ab5b4692aa) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -301,7 +301,7 @@ if ( valve < NUM_OF_VALVES ) { - if ( getCurrentOperationMode() != MODE_INIT ) +// if ( getCurrentOperationMode() != MODE_INIT ) { nextState = VALVE_STATE_HOMING_NOT_STARTED; } Index: firmware/App/Controllers/Valves.h =================================================================== diff -u -rd9b5f588d81e15ed3849222bed3362e15dbf4b0a -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Controllers/Valves.h (.../Valves.h) (revision d9b5f588d81e15ed3849222bed3362e15dbf4b0a) +++ firmware/App/Controllers/Valves.h (.../Valves.h) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -37,9 +37,9 @@ typedef enum valveStatesNames { VALVE_POSITION_NOT_IN_POSITION = 0, ///< Valve position is unknown (cannot be used as a command) - VALVE_POSITION_A_INSERT_EJECT, ///< Position A, Insert/Eject (current position or commanded) - VALVE_POSITION_B_OPEN, ///< Position B, Open (current position or commanded) - VALVE_POSITION_C_CLOSE, ///< Position C, Close (current position or commanded) + VALVE_POSITION_A_INSERT_EJECT, ///< Position A, Insert/Eject + VALVE_POSITION_B_OPEN, ///< Position B, Open + VALVE_POSITION_C_CLOSE, ///< Position C, Close NUM_OF_VALVE_POSITIONS, ///< Number of valve positions } VALVE_POSITION_T; Index: firmware/App/Drivers/BubbleDetector.c =================================================================== diff -u -r961784c895cb8f551a2623cd02dcbfe42d04b7c2 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Drivers/BubbleDetector.c (.../BubbleDetector.c) (revision 961784c895cb8f551a2623cd02dcbfe42d04b7c2) +++ firmware/App/Drivers/BubbleDetector.c (.../BubbleDetector.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -83,11 +83,7 @@ if ( sensor < NUM_OF_BUBBLE_DETECTORS ) { - result = (BUBBLE_STATE_T)currentBubbleState[ sensor ].data; - if ( OVERRIDE_KEY == currentBubbleState[ sensor ].override ) - { - result = (BUBBLE_STATE_T)currentBubbleState[ sensor ].ovData; - } + result = (BUBBLE_STATE_T)getU32OverrideValue( ¤tBubbleState[ sensor ] ); } else { Index: firmware/App/Drivers/LevelSensors.c =================================================================== diff -u -r285b5d82539c96524c93703d52a66fff76fb64fc -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Drivers/LevelSensors.c (.../LevelSensors.c) (revision 285b5d82539c96524c93703d52a66fff76fb64fc) +++ firmware/App/Drivers/LevelSensors.c (.../LevelSensors.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -120,11 +120,7 @@ if ( sensor < NUM_OF_AIR_TRAP_LEVEL_SENSORS ) { - result = (AIR_TRAP_LEVELS_T)currentLevelStates[ sensor ].data; - if ( OVERRIDE_KEY == currentLevelStates[ sensor ].override ) - { - result = (AIR_TRAP_LEVELS_T)currentLevelStates[ sensor ].ovData; - } + result = (AIR_TRAP_LEVELS_T)getU32OverrideValue( ¤tLevelStates[ sensor ] ); } else { @@ -150,11 +146,7 @@ if ( sensor < NUM_OF_AIR_TRAP_LEVEL_SENSORS ) { - result = (AIR_TRAP_LEVELS_T)rawLevelStates[ sensor ].data; - if ( OVERRIDE_KEY == rawLevelStates[ sensor ].override ) - { - result = (AIR_TRAP_LEVELS_T)rawLevelStates[ sensor ].ovData; - } + result = (AIR_TRAP_LEVELS_T)getU32OverrideValue( &rawLevelStates[ sensor ] ); } else { Index: firmware/App/Drivers/PeristalticPump.c =================================================================== diff -u -rf3a26c402a2ec88f5ee7dbb8eb7127ab5b4692aa -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Drivers/PeristalticPump.c (.../PeristalticPump.c) (revision f3a26c402a2ec88f5ee7dbb8eb7127ab5b4692aa) +++ firmware/App/Drivers/PeristalticPump.c (.../PeristalticPump.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -186,13 +186,8 @@ *************************************************************************/ F32 getPeristalticPumpMeasSpeed( void ) { - F32 result = pumpMeasSpeedRPM.data; + F32 result = getF32OverrideValue( &pumpMeasSpeedRPM ); - if ( OVERRIDE_KEY == pumpMeasSpeedRPM.override ) - { - result = pumpMeasSpeedRPM.ovData; - } - return result; } Index: firmware/App/Drivers/PressureSensor.c =================================================================== diff -u -rf6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision f6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493) +++ firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -228,11 +228,7 @@ if ( sensor < NUM_OF_PRESSURE_SENSORS ) { - result = currentPressureReadings[ sensor ].data; - if ( OVERRIDE_KEY == currentPressureReadings[ sensor ].override ) - { - result = currentPressureReadings[ sensor ].ovData; - } + result = getF32OverrideValue( ¤tPressureReadings[ sensor ] ); } else { @@ -258,11 +254,7 @@ if ( sensor < NUM_OF_PRESSURE_SENSORS ) { - result = currentPresTempReadings[ sensor ].data; - if ( OVERRIDE_KEY == currentPresTempReadings[ sensor ].override ) - { - result = currentPresTempReadings[ sensor ].ovData; - } + result = getF32OverrideValue( ¤tPresTempReadings[ sensor ] ); } else { @@ -288,11 +280,7 @@ if ( sensor < NUM_OF_PRESSURE_SENSORS ) { - result = lastPressureReadCounter[ sensor ].data; - if ( OVERRIDE_KEY == lastPressureReadCounter[ sensor ].override ) - { - result = lastPressureReadCounter[ sensor ].ovData; - } + result = getU32OverrideValue( &lastPressureReadCounter[ sensor ] ); } else { @@ -318,11 +306,7 @@ if ( sensor < NUM_OF_PRESSURE_SENSORS ) { - result = lastPressureErrorCounter[ sensor ].data; - if ( OVERRIDE_KEY == lastPressureErrorCounter[ sensor ].override ) - { - result = lastPressureErrorCounter[ sensor ].ovData; - } + result = getU32OverrideValue ( &lastPressureErrorCounter[ sensor ] ); } else { Index: firmware/App/Drivers/RotaryValve.c =================================================================== diff -u -r961784c895cb8f551a2623cd02dcbfe42d04b7c2 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Drivers/RotaryValve.c (.../RotaryValve.c) (revision 961784c895cb8f551a2623cd02dcbfe42d04b7c2) +++ firmware/App/Drivers/RotaryValve.c (.../RotaryValve.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -160,11 +160,13 @@ ctrl = getH1Control(); if ( MOTOR_DIR_REVERSE == dir ) { - setH1Control( ( ctrl | FPGA_PINCH_VALVES_REVERSE ) ); +// 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_REVERSE ) ); +// setH1Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD & ~FPGA_PINCH_VALVES_REVERSE ) ); + setH1Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD | FPGA_PINCH_VALVES_REVERSE ) ); } setH1Position( mag ); } @@ -173,11 +175,11 @@ ctrl = getH19Control(); if ( MOTOR_DIR_REVERSE == dir ) { - setH19Control( ( ctrl | FPGA_PINCH_VALVES_REVERSE ) ); + setH19Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD | FPGA_PINCH_VALVES_REVERSE ) ); } else { - setH19Control( ( ctrl & ~FPGA_PINCH_VALVES_REVERSE ) ); + setH19Control( ( ctrl | FPGA_PINCH_VALVES_NEW_POS_CMD & ~FPGA_PINCH_VALVES_REVERSE ) ); } setH19Position( mag ); } @@ -234,11 +236,7 @@ if ( valve < NUM_OF_VALVES ) { - result = (S16)(currentValveEncPosition[ valve ].data); - if ( OVERRIDE_KEY == currentValveEncPosition[ valve ].override ) - { - result = (S16)(currentValveEncPosition[ valve ].ovData); - } + result = (S16)getS32OverrideValue( ¤tValveEncPosition[ valve ] ); } else { @@ -268,11 +266,7 @@ if ( valve < NUM_OF_VALVES ) { - result = (U08)( valveStatus[ valve ].data & MASK_OFF_U32_MSBS ); - if ( OVERRIDE_KEY == valveStatus[ valve ].override ) - { - result = (U08)( valveStatus[ valve ].ovData & MASK_OFF_U32_MSBS ); - } + result = getU08OverrideValue( &valveStatus[ valve ] ); } else { Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r285b5d82539c96524c93703d52a66fff76fb64fc -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 285b5d82539c96524c93703d52a66fff76fb64fc) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -16,8 +16,11 @@ ***************************************************************************/ #include "AirTrap.h" +#include "Buttons.h" #include "DDInterface.h" #include "Messaging.h" +#include "ModeTreatment.h" +#include "ModeTxParams.h" #include "ModeStandby.h" #include "OperationModes.h" @@ -28,6 +31,9 @@ // ********** private definitions ********** +#define USER_COMMAND_CANCEL 0 ///< Cancel treatment workflow command code. +#define USER_COMMAND_INITIATE 1 ///< Initiate treatment workflow command code. + // ********** private data ********** static TD_STANDBY_STATE_T currentStandbyState; ///< Current state (sub-mode) of standby mode. @@ -102,8 +108,13 @@ *************************************************************************/ U32 execStandbyMode( void ) { -// BOOL stop = isStopButtonPressed(); + BOOL stop = isStopButtonPressed(); + if ( TRUE == stop ) + { + // Ignore stop button in this mode. + } + // State machine to get DG to prep a reservoir so we can start a treatment switch ( currentStandbyState ) { @@ -235,9 +246,9 @@ // PRESSURE_LIMIT_CHANGE_RESPONSE_T respRecord = { TRUE, REQUEST_REJECT_REASON_NONE, 0, 0, 0 }; // Initialize treatment modes before starting a new treatment -// initTreatParamsMode(); + initTreatParamsMode(); // initPreTreatmentMode(); -// initTreatmentMode(); + initTreatmentMode(); // initPostTreatmentMode(); resetAirTrap(); // Send UI default pressure settings since user is not asked to set them. @@ -246,15 +257,74 @@ // respRecord.venPresLimitAsymmetricmmHg = getTreatmentParameterS32DefaultValue( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ); // sendPressureLimitsChangeResponse( &respRecord ); // Start treatment workflow with treatment parameters mode -// requestNewOperationMode( MODE_TPAR ); -// treatStartReqReceived = FALSE; + requestNewOperationMode( MODE_TPAR ); + treatStartReqReceived = FALSE; } return state; } /*********************************************************************//** * @brief + * The signalUserInitiateTreatment function handles user initiation of a + * treatment. + * @details \b Inputs: none + * @details \b Outputs: treatStartReqReceived + * @param message initiate/reject treatment workflow message from UI which + * includes the command code (0=cancel, 1=initiate). + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserInitiateTreatment( MESSAGE_T *message ) +{ + BOOL result = FALSE; + U32 cmd = 0; + TD_OP_MODE_T mode = getCurrentOperationMode(); + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; + UI_RESPONSE_PAYLOAD_T response; + + // Verify message payload length is valid + if ( sizeof( U32 ) == message->hdr.payloadLen ) + { + memcpy( &cmd, message->payload, sizeof( U32 ) ); + + if ( USER_COMMAND_INITIATE == cmd ) + { + // Verify TD is in standby mode waiting for treatment start request + if ( ( mode != MODE_STAN ) || ( STANDBY_WAIT_FOR_TREATMENT_STATE != currentStandbyState ) ) + { + rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + } + else + { + // If request to start treatment not rejected, set flag to initiate treatment workflow + result = TRUE; + treatStartReqReceived = TRUE; + } + } + else if ( USER_COMMAND_CANCEL == cmd ) + { + result = signalUserCancelTreatment(); + if ( result != TRUE ) + { + rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + } + } + else + { + rejReason = REQUEST_REJECT_REASON_INVALID_COMMAND; + } + } + + // Respond to request to start treatment + response.accepted = result; + response.rejectionReason = rejReason; + sendMessage( MSG_ID_TD_RESP_INITIATE_TREATMENT_WORKFLOW, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)(&response), sizeof( UI_RESPONSE_PAYLOAD_T ) ); + + return result; +} + +/*********************************************************************//** + * @brief * The signalAlarmActionToStandbyMode function executes the given alarm action * as appropriate while in Standby Mode. * @details \b Inputs: none Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -r380b0afc95467d0861ff3aa2cdcde5d5d7ac85e7 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 380b0afc95467d0861ff3aa2cdcde5d5d7ac85e7) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -38,6 +38,7 @@ U32 transitionToStandbyMode( void ); // Prepares for transition to standby mode U32 execStandbyMode( void ); // Execute the standby mode state machine (call from OperationModes) +BOOL signalUserInitiateTreatment( MESSAGE_T *message ); // User has initiated/cancelled treatment workflow void signalAlarmActionToStandbyMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for Standby mode /**@}*/ Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r383c4be0d9ad14570c87cf5b7330f5f83d92383e -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 383c4be0d9ad14570c87cf5b7330f5f83d92383e) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -22,9 +22,9 @@ #include "ModeService.h" #include "ModeFault.h" #include "ModeStandby.h" -//#include "ModeTreatmentParams.h" +#include "ModeTxParams.h" //#include "ModePreTreat.h" -//#include "ModeTreatment.h" +#include "ModeTreatment.h" //#include "ModePostTreat.h" //#include "NVDataMgmt.h" #include "OperationModes.h" @@ -120,9 +120,9 @@ initServiceMode(); initInitAndPOSTMode(); initStandbyMode(); -// initTreatParamsMode(); + initTreatParamsMode(); // initPreTreatmentMode(); -// initTreatmentMode(); + initTreatmentMode(); // initPostTreatmentMode(); } @@ -144,10 +144,11 @@ // Any new mode requests? newMode = arbitrateModeRequest(); // Will return current mode if no pending requests - if ( getTestConfigStatus( TEST_CONFIG_RECOVER_TREATMENT ) != TRUE ) - { - newMode = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; - } + // Verify mode transition is legal unless tester working with system TODO - restore check when all modes are implemented +// if ( ( isTestingActivated() != TRUE ) && ( getTestConfigStatus( TEST_CONFIG_RECOVER_TREATMENT ) != TRUE ) ) +// { +// newMode = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; +// } // Is requested new mode valid and legal at this time? if ( newMode >= MODE_NLEG ) @@ -168,8 +169,9 @@ { // If the last mode is treatment but the new mode is not treatment // it means the treatment is done. Get the elapsed time since the beginning of the treatment and convert it to hours to be written -// U32 txElapsedTimeMS = calcTimeSince( getTreatmentStartTimeStamp() ); -// F32 txElapsedTimeHrs = (F32)txElapsedTimeMS / ( (F32)( MIN_PER_HOUR * SEC_PER_MIN * MS_PER_SECOND ) ); + U32 txElapsedTimeMS = calcTimeSince( getTreatmentStartTimeStamp() ); + F32 txElapsedTimeHrs = (F32)txElapsedTimeMS / ( (F32)( MIN_PER_HOUR * SEC_PER_MIN * MS_PER_SECOND ) ); + // Write the treatment hours and set the service to be false so the treatment hours is not reset // setTxTimeHours( txElapsedTimeHrs ); } @@ -195,18 +197,18 @@ currentSubMode = execStandbyMode(); break; -// case MODE_TPAR: -// currentSubMode = execTreatParamsMode(); -// break; -// + case MODE_TPAR: + currentSubMode = execTreatParamsMode(); + break; + // case MODE_PRET: // currentSubMode = execPreTreatmentMode(); // break; // -// case MODE_TREA: -// currentSubMode = execTreatmentMode(); -// break; -// + case MODE_TREA: + currentSubMode = execTreatmentMode(); + break; + // case MODE_POST: // currentSubMode = execPostTreatmentMode(); // break; @@ -318,15 +320,15 @@ case MODE_STAN: signalAlarmActionToStandbyMode( action ); break; -// case MODE_TPAR: -// signalAlarmActionToTreatParamsMode( action ); -// break; + case MODE_TPAR: + signalAlarmActionToTreatParamsMode( action ); + break; // case MODE_PRET: // signalAlarmActionToPreTreatmentMode( action ); // break; -// case MODE_TREA: -// signalAlarmActionToTreatmentMode( action ); -// break; + case MODE_TREA: + signalAlarmActionToTreatmentMode( action ); + break; // case MODE_POST: // signalAlarmActionToPostTreatmentMode( action ); // break; @@ -402,15 +404,15 @@ case MODE_STAN: currentSubMode = transitionToStandbyMode(); break; -// case MODE_TPAR: -// currentSubMode = transitionToTreatParamsMode(); -// break; + case MODE_TPAR: + currentSubMode = transitionToTreatParamsMode(); + break; // case MODE_PRET: // currentSubMode = transitionToPreTreatmentMode(); // break; -// case MODE_TREA: -// currentSubMode = transitionToTreatmentMode(); -// break; + case MODE_TREA: + currentSubMode = transitionToTreatmentMode(); + break; // case MODE_POST: // currentSubMode = transitionToPostTreatmentMode(); // break; @@ -644,51 +646,47 @@ * mode if the transition is legal. * @details \b Inputs: none * @details \b Outputs: modeRequest[] - * @param newMode ID of requested mode to transition to + * @param message message from Dialin which includes the op mode to + * transition to. * @return TRUE if request successful, FALSE if not *************************************************************************/ -//BOOL testSetOperationMode( TD_OP_MODE_T newMode ) -//{ -// BOOL result = FALSE; -// -// if ( TRUE == isTestingActivated() ) -// { -// TD_OP_MODE_T check = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; -// -// // Is mode transition legal? -// if ( check == newMode ) -// { -// requestNewOperationMode( newMode ); -// result = TRUE; -// } -// } -// -// return result; -//} +BOOL testSetOperationMode( MESSAGE_T *message ) +{ + BOOL result = FALSE; + // Verify message payload length is valid + if ( sizeof( U32 ) == message->hdr.payloadLen ) + { + U32 newMode; + + memcpy( &newMode, message->payload, sizeof( U32 ) ); + if ( (TD_OP_MODE_T)newMode < NUM_OF_MODES ) + { + TD_OP_MODE_T reqMode = (TD_OP_MODE_T)newMode; + + requestNewOperationMode( reqMode ); + result = TRUE; + } + } + + return result; +} + /*********************************************************************//** * @brief * The testSetOpModePublishIntervalOverride function sets the override of the * operation mode publication interval. * @details \b Inputs: none * @details \b Outputs: opModePublishInterval - * @param ms milliseconds between operation mode broadcasts + * @param message override message from Dialin which includes the interval + * (in ms) to set the op mode publish to. * @return TRUE if override set successful, FALSE if not *************************************************************************/ -//BOOL testSetOpModePublishIntervalOverride( U32 ms ) -//{ -// BOOL result = FALSE; -// -// if ( TRUE == isTestingActivated() ) -// { -// U32 intvl = ms / TASK_GENERAL_INTERVAL; -// -// result = TRUE; -// opModePublishInterval.ovData = intvl; -// opModePublishInterval.override = OVERRIDE_KEY; -// } -// -// return result; -//} +BOOL testSetOpModePublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &opModePublishInterval, TASK_GENERAL_INTERVAL ); + return result; +} + /**@}*/ Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r383c4be0d9ad14570c87cf5b7330f5f83d92383e -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 383c4be0d9ad14570c87cf5b7330f5f83d92383e) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -61,8 +61,8 @@ void sendOperationStatusEvent( void ); // Constructs and sends operation status event -//BOOL testSetOperationMode( TD_OP_MODE_T newMode ); // Force transition to a given mode (if allowed) -//BOOL testSetOpModePublishIntervalOverride( U32 ms ); +BOOL testSetOperationMode( MESSAGE_T *message ); // Force transition to a given mode (if allowed) +BOOL testSetOpModePublishIntervalOverride( MESSAGE_T *message ); // Override op mode data publish interval /**@}*/ Index: firmware/App/Monitors/Buttons.c =================================================================== diff -u -r3a8cf075eb6f0d255f516ac26bac7fbaacfde14a -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Monitors/Buttons.c (.../Buttons.c) (revision 3a8cf075eb6f0d255f516ac26bac7fbaacfde14a) +++ firmware/App/Monitors/Buttons.c (.../Buttons.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -188,13 +188,8 @@ *************************************************************************/ BUTTON_STATE_T getOffButtonState( void ) { - BUTTON_STATE_T result = (BUTTON_STATE_T)dataOffButtonState.data; + BUTTON_STATE_T result = (BUTTON_STATE_T)getU32OverrideValue( &dataOffButtonState ); - if ( OVERRIDE_KEY == dataOffButtonState.override ) - { - result = (BUTTON_STATE_T)dataOffButtonState.ovData; - } - return result; } @@ -208,13 +203,8 @@ *************************************************************************/ BUTTON_STATE_T getStopButtonState( void ) { - BUTTON_STATE_T result = (BUTTON_STATE_T)dataStopButtonState.data; + BUTTON_STATE_T result = (BUTTON_STATE_T)getU32OverrideValue( &dataStopButtonState ); - if ( OVERRIDE_KEY == dataStopButtonState.override ) - { - result = (BUTTON_STATE_T)dataStopButtonState.ovData; - } - return result; } Index: firmware/App/Monitors/Pressures.c =================================================================== diff -u -rf6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Monitors/Pressures.c (.../Pressures.c) (revision f6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493) +++ firmware/App/Monitors/Pressures.c (.../Pressures.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -590,7 +590,7 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; } - else if ( ( TREATMENT_DIALYSIS_STATE == currTxState ) || ( TREATMENT_STOP_STATE == currTxState ) ) + else if ( ( TREATMENT_DIALYSIS_STATE == currTxState ) || ( TREATMENT_PAUSED_STATE == currTxState ) ) { stabilizationStartTimeMs = getMSTimerCount(); pressureStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; @@ -618,7 +618,7 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; } - else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_STOP_STATE ) ) + else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_PAUSED_STATE ) ) { currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } @@ -648,7 +648,7 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; } - else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_STOP_STATE ) ) + else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_PAUSED_STATE ) ) { currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } @@ -668,7 +668,7 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; } - else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_STOP_STATE ) ) + else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_PAUSED_STATE ) ) { currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } Index: firmware/App/Monitors/Switches.c =================================================================== diff -u -r961784c895cb8f551a2623cd02dcbfe42d04b7c2 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Monitors/Switches.c (.../Switches.c) (revision 961784c895cb8f551a2623cd02dcbfe42d04b7c2) +++ firmware/App/Monitors/Switches.c (.../Switches.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -179,12 +179,7 @@ if ( switchId < NUM_OF_SWITCHES ) { - state = switchesStatus[ switchId ].data; - - if ( OVERRIDE_KEY == switchesStatus[ switchId ].override ) - { - state = switchesStatus[ switchId ].ovData; - } + state = getU32OverrideValue( &switchesStatus[ switchId ] ); } else { Index: firmware/App/Monitors/Voltages.c =================================================================== diff -u -r3a8cf075eb6f0d255f516ac26bac7fbaacfde14a -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Monitors/Voltages.c (.../Voltages.c) (revision 3a8cf075eb6f0d255f516ac26bac7fbaacfde14a) +++ firmware/App/Monitors/Voltages.c (.../Voltages.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -293,12 +293,7 @@ if ( signal < NUM_OF_MONITORED_VOLTAGES ) { - result = voltages[ signal ].data; - - if ( OVERRIDE_KEY == voltages[ signal ].override ) - { - result = voltages[ signal ].ovData; - } + result = getF32OverrideValue( &voltages[ signal ] ); } else { Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -rd595ea4a23b0b2371e31838c24990059653c1871 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision d595ea4a23b0b2371e31838c24990059653c1871) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -144,6 +144,24 @@ SW_FAULT_ID_BLOOD_FLOW_SET_TOO_HIGH = 113, SW_FAULT_ID_BLOOD_FLOW_INVALID_BLOOD_PUMP_STATE = 114, SW_FAULT_ID_INVALID_DD_PRESSURE_DATA = 115, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_STATE = 116, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_PARAM = 117, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_F32_PARAM_MAX_LIMIT = 118, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_F32_PARAM_MIN_LIMIT = 119, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_S32_PARAM_MAX_LIMIT = 120, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_S32_PARAM_MIN_LIMIT = 121, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_U32_PARAM_MAX_LIMIT = 122, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_U32_PARAM_MIN_LIMIT = 123, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_SET_U32_PARAM = 124, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_SET_S32_PARAM = 125, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_SET_F32_PARAM = 126, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_U32_PARAM = 127, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_S32_PARAM = 128, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_F32_PARAM = 129, + SW_FAULT_ID_MODE_TREATMENT_INVALID_ALARM_ACTION = 130, + SW_FAULT_ID_MODE_TREATMENT_INVALID_STATE = 131, + SW_FAULT_ID_TX_DIALYSIS_INVALID_STATE1 = 132, + SW_FAULT_ID_TX_DIALYSIS_INVALID_STATE2 = 133, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/AlarmMgmtTD.c =================================================================== diff -u -rf6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision f6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493) +++ firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -14,6 +14,8 @@ * @date (original) 30-Jul-2024 * ***************************************************************************/ + +#define __ALARM_MGMT_TD_C__ #include "mibspi.h" Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -rf6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision f6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -43,9 +43,11 @@ static BOOL ddStartCommandSent; ///< Flag indicates command to start DD has been sent. static BOOL ddStarted; ///< Flag indicates whether we have commanded the DD to start or stop. -static BOOL ddOpModeDataFreshFlag; ///< Flag to signal the handleDDOpMode() to process fresh dd op mode data +static BOOL ddOpModeDataFreshFlag; ///< Flag to signal the handleDDOpMode() to process fresh dd op mode data. static BOOL ddDialysatePressureFreshFlag; ///< Flag to signal +static DIALYSATE_DELIVERY_REQ_PAYLOAD_T dialysateDeliveryCmdSet; ///< Set of dialysate delivery parameters to send to the DD during treatment. + // DG command response static DD_CMD_RESPONSE_T ddCmdResp[ NUM_OF_DD_COMMANDS ]; ///< Keep the latest DD command response for each command. @@ -66,15 +68,23 @@ U32 i; // NOTE: the active reservoir is set to reservoir 1 since DG will send active reservoir 1 as active on power up - ddStarted = FALSE; - ddCurrentOpMode = DD_MODE_INIT; - ddSubMode = 0; - dialysatePressure = 0.0F; - ddStartCommandSent = FALSE; + ddStarted = FALSE; + ddCurrentOpMode = DD_MODE_INIT; + ddSubMode = 0; + dialysatePressure = 0.0F; + ddStartCommandSent = FALSE; - ddOpModeDataFreshFlag = FALSE; - ddDialysatePressureFreshFlag = FALSE; + ddOpModeDataFreshFlag = FALSE; + ddDialysatePressureFreshFlag = FALSE; + dialysateDeliveryCmdSet.start = FALSE; + dialysateDeliveryCmdSet.dialRate = 0.0F; + dialysateDeliveryCmdSet.ufRate = 0.0F; + dialysateDeliveryCmdSet.dialTemp = 0.0F; + dialysateDeliveryCmdSet.bypassDialyzer = TRUE; + dialysateDeliveryCmdSet.acidType = 0; + dialysateDeliveryCmdSet.bicarbType = 0; + // initialize DD command response for ( i = 0; i < NUM_OF_DD_COMMANDS; i++ ) { @@ -262,7 +272,7 @@ * to the DD with a given set of details. DD will transition to dialysate * delivery mode if it hasn't already. * @details \b Inputs: none - * @details \b Outputs: none + * @details \b Outputs: dialysateDeliveryCmdSet * @details \b Message \b Sent: Start/continue generate dialysate command. * @param qd Target dialysate flow rate (Qd). * @param quf Target ultrafiltration rate (Quf). @@ -274,36 +284,102 @@ *************************************************************************/ void cmdStartGenerateDialysate( F32 qd, F32 quf, F32 dialTemp, BOOL bypass, ACID_CONCENTRATE_TYPE_T acid, BICARB_CONCENTRATE_TYPE_T bicarb ) { - DIALYSATE_DELIVERY_REQ_PAYLOAD_T payload; + dialysateDeliveryCmdSet.start = TRUE; + dialysateDeliveryCmdSet.dialRate = qd; + dialysateDeliveryCmdSet.ufRate = quf; + dialysateDeliveryCmdSet.dialTemp = dialTemp; + dialysateDeliveryCmdSet.bypassDialyzer = bypass; + dialysateDeliveryCmdSet.acidType = (U32)acid; + dialysateDeliveryCmdSet.bicarbType = (U32)bicarb; - payload.start = TRUE; - payload.dialRate = qd; - payload.ufRate = quf; - payload.dialTemp = dialTemp; - payload.bypassDialyzer = bypass; - payload.acidType = (U32)acid; - payload.bicarbType = (U32)bicarb; + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); +} - sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&payload), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); +/*********************************************************************//** + * @brief + * The cmdChangeQd function sends a generate dialysate command to the DD + * with a given new dialysate rate. + * @details \b Inputs: none + * @details \b Outputs: dialysateDeliveryCmdSet + * @details \b Message \b Sent: Continue generate dialysate command w/ new Qd. + * @param qd Target dialysate flow rate (Qd). + * @return none + *************************************************************************/ +void cmdChangeQd( F32 qd ) +{ + if ( TRUE == dialysateDeliveryCmdSet.start ) + { + dialysateDeliveryCmdSet.dialRate = qd; + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + } + else + { + // TODO - s/w fault? + } } /*********************************************************************//** * @brief + * The cmdChangeQuf function sends a generate dialysate command to the DD + * with a given new ultrafiltration rate. + * @details \b Inputs: none + * @details \b Outputs: dialysateDeliveryCmdSet + * @details \b Message \b Sent: Continue generate dialysate command w/ new Quf. + * @param quf Target ultrafiltration flow rate (in L/hr). + * @return none + *************************************************************************/ +void cmdChangeQuf( F32 quf ) +{ + if ( TRUE == dialysateDeliveryCmdSet.start ) + { + dialysateDeliveryCmdSet.ufRate = quf; + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + } + else + { + // TODO - s/w fault? + } +} + +/*********************************************************************//** + * @brief + * The cmdBypassDialyzer function sends a generate dialysate command to the DD + * with a given flag indicating whether dialyzer should be bypassed. + * @details \b Inputs: none + * @details \b Outputs: dialysateDeliveryCmdSet + * @details \b Message \b Sent: Continue generate dialysate command w/ new + * dialyzer bypass flag. + * @param bypass Flag indicating whether dialyzer should be bypassed. + * @return none + *************************************************************************/ +void cmdBypassDialyzer( BOOL bypass ) +{ + if ( TRUE == dialysateDeliveryCmdSet.start ) + { + dialysateDeliveryCmdSet.bypassDialyzer = bypass; + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + } + else + { + // TODO - s/w fault? + } +} + +/*********************************************************************//** + * @brief * The cmdStopGenerateDialysate function sends a stop generate dialysate command * to the DD. DD will transition back to standby mode. * @details \b Inputs: none - * @details \b Outputs: none + * @details \b Outputs: dialysateDeliveryCmdSet * @details \b Message \b Sent: Stop generate dialysate command. * @return none *************************************************************************/ void cmdStopGenerateDialysate( void ) { - DIALYSATE_DELIVERY_REQ_PAYLOAD_T payload; + memset( &dialysateDeliveryCmdSet, 0, sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + dialysateDeliveryCmdSet.start = FALSE; - memset( &payload, 0, sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); - payload.start = FALSE; - - sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&payload), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); } /**********************************************************************//** Index: firmware/App/Services/DDInterface.h =================================================================== diff -u -rd595ea4a23b0b2371e31838c24990059653c1871 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision d595ea4a23b0b2371e31838c24990059653c1871) +++ firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -55,6 +55,9 @@ BOOL setDialysatePressure( MESSAGE_T *message ); void cmdStartGenerateDialysate( F32 qd, F32 quf, F32 dialTemp, BOOL bypass, ACID_CONCENTRATE_TYPE_T acid, BICARB_CONCENTRATE_TYPE_T bicarb ); +void cmdChangeQd( F32 qd ); +void cmdChangeQuf( F32 quf ); +void cmdBypassDialyzer( BOOL bypass ); void cmdStopGenerateDialysate( void ); void handleDDCommandResponse( DD_CMD_RESPONSE_T *ddCmdRespPtr ); Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -rceddc04641038a62bbbd9714a045d0cbfc473c8f -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision ceddc04641038a62bbbd9714a045d0cbfc473c8f) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -212,6 +212,24 @@ /*********************************************************************//** * @brief + * The fpgaResetTransitoryCmds function resets any transitory commands in + * the actuator registers. + * @note This function should be called by FPGA driver after actuator registers + * copied to transmit buffer to clear command bits that are only intended to + * be sent to FPGA once. + * @details \b Inputs: none + * @details \b Outputs: Transitory command bits cleared + * @return none + *************************************************************************/ +void fpgaResetTransitoryCmds( void ) +{ + // Reset pinch valve position change command bits + setH1Control( ( getH1Control() & ~FPGA_PINCH_VALVES_NEW_POS_CMD ) ); + setH19Control( ( getH19Control() & ~FPGA_PINCH_VALVES_NEW_POS_CMD ) ); +} + +/*********************************************************************//** + * @brief * The execFPGATest function executes the FPGA self-test. * @details \b Alarm: ALARM_ID_TD_FPGA_POST_TEST_FAILED if self-test fails. * @details \b Inputs: fpgaHeader Index: firmware/App/Services/FpgaTD.h =================================================================== diff -u -rceddc04641038a62bbbd9714a045d0cbfc473c8f -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision ceddc04641038a62bbbd9714a045d0cbfc473c8f) +++ firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -36,10 +36,12 @@ #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. +#define FPGA_PINCH_VALVES_NEW_POS_CMD 0x80 ///< Bit mask for configuring pinch valve to accept a new position command. // ********** public function prototypes ********** void initFpgaTD( void ); +void fpgaResetTransitoryCmds( void ); SELF_TEST_STATUS_T execFPGATest( void ); void execFPGAClockSpeedTest( void ); void checkFPGACommFailure( void ); Index: firmware/App/Services/Messaging.c =================================================================== diff -u -rf6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision f6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -28,10 +28,14 @@ #include "DDInterface.h" #include "LevelSensors.h" #include "Messaging.h" +#include "ModeTxParams.h" +#include "ModeStandby.h" #include "OperationModes.h" #include "PAL.h" #include "Pressures.h" #include "RotaryValve.h" +#include "StateTxDialysis.h" +#include "StateTxPaused.h" #include "Switches.h" #include "SystemCommTD.h" #include "Utilities.h" @@ -85,6 +89,11 @@ static const U16 MSG_FUNCTION_HANDLER_LOOKUP[] = { MSG_ID_DD_OP_MODE_DATA, MSG_ID_DD_PRESSURES_DATA, + MSG_ID_UI_TREATMENT_PARAMS_TO_VALIDATE, + MSG_ID_UI_ULTRAFILTRATION_VOLUME_TO_VALIDATE, + MSG_ID_UI_TREATMENT_PARAMS_CONFIRMED, + MSG_ID_UI_INITIATE_TREATMENT_WORKFLOW, + MSG_ID_UI_UF_PAUSE_RESUME_REQUEST, MSG_ID_TESTER_LOGIN_REQUEST, MSG_ID_TD_SOFTWARE_RESET_REQUEST, MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST, @@ -128,13 +137,20 @@ MSG_ID_TD_BLOOD_PUMP_MEASURED_MOTOR_SPEED_OVERRIDE_REQUEST, MSG_ID_TD_BLOOD_PUMP_MEASURED_ROTOR_SPEED_OVERRIDE_REQUEST, MSG_ID_TD_BLOOD_PUMP_ROTOR_COUNT_OVERRIDE_REQUEST, - MSG_ID_TD_TMP_PRESSURE_OVERRIDE_REQUEST + MSG_ID_TD_TMP_PRESSURE_OVERRIDE_REQUEST, + MSG_ID_TD_OP_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + MSG_ID_TD_OP_MODE_OVERRIDE_REQUEST }; /// Message handling function table static const MsgFuncPtr MSG_FUNCTION_HANDLERS[] = { &setDDOpMode, &setDialysatePressure, + &validateAndSetTreatmentParameters, + &validateAndSetUFVolume, + &signalUserConfirmationOfTreatmentParameters, + &signalUserInitiateTreatment, + &signalPauseResumeUF, &handleTesterLogInRequest, &testTDSoftwareResetRequest, &testBubbleDetectOverride, @@ -178,7 +194,9 @@ &testMeasuredBloodPumpSpeedOverride, &testMeasuredBloodPumpRotorSpeedOverride, &testBloodPumpRotorCountOverride, - &testTMPOverride + &testTMPOverride, + &testSetOpModePublishIntervalOverride, + &testSetOperationMode }; #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLERS) / sizeof(MsgFuncPtr)) @@ -228,6 +246,9 @@ #ifdef TEST_AIR_TRAP_ALPHA_TESTING return 0; #endif +#ifdef TEST_PINCH_VALVES + return 0; +#endif // Check to see if tester has requested this message not be transmited if ( TRUE == isTestingActivated() ) Index: firmware/App/TDCommon.h =================================================================== diff -u -rd595ea4a23b0b2371e31838c24990059653c1871 -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/TDCommon.h (.../TDCommon.h) (revision d595ea4a23b0b2371e31838c24990059653c1871) +++ firmware/App/TDCommon.h (.../TDCommon.h) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -15,24 +15,25 @@ * ***************************************************************************/ -#ifndef __HD_COMMON_H__ -#define __HD_COMMON_H__ +#ifndef __TD_COMMON_H__ +#define __TD_COMMON_H__ #include "hal_stdtypes.h" // ********** version ********** -#define HD_VERSION_MAJOR 0 -#define HD_VERSION_MINOR 0 -#define HD_VERSION_MICRO 0 -#define HD_VERSION_BUILD 0 +#define TD_VERSION_MAJOR 0 +#define TD_VERSION_MINOR 0 +#define TD_VERSION_MICRO 0 +#define TD_VERSION_BUILD 0 // ********** development build switches ********** #ifndef _RELEASE_ #ifndef _VECTORCAST_ // #define TASK_TIMING_OUTPUT_ENABLED 1 // Re-purposes alarm lamp pins for task timing // #define TEST_AIR_TRAP_ALPHA_TESTING 1 // Alpha unit air trap testing +// #define TEST_PINCH_VALVES 1 // Alpha unit pinch valve testing #include #include @@ -50,7 +51,7 @@ #pragma pack(push,1) -/// Payload record structure for an HD versions message. +/// Payload record structure for an TD versions message. typedef struct { U08 major; ///< HD version major revision. @@ -62,7 +63,7 @@ U08 fpgaMinor; ///< HD FPGA minor revision. U08 fpgaLab; ///< HD FPGA lab revision. U32 compatibilityRev; ///< HD compatibility revision. -} HD_VERSIONS_T; +} TD_VERSIONS_T; /// DD version struct. typedef struct Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -rceddc04641038a62bbbd9714a045d0cbfc473c8f -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision ceddc04641038a62bbbd9714a045d0cbfc473c8f) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -34,6 +34,11 @@ #include "Valve3Way.h" #endif +#ifdef TEST_PINCH_VALVES +#include "FpgaTD.h" +#include "LevelSensors.h" +#endif + /** * @addtogroup TaskGeneral * @{ @@ -63,8 +68,10 @@ // Manage data received from other sub-systems #ifndef TEST_AIR_TRAP_ALPHA_TESTING +#ifndef TEST_PINCH_VALVES execSystemCommRx(); #endif +#endif // Prevent most processing until UI has started communicating or if DG is active and alarm (ALARM_ID_HD_UI_COMM_POST_FAILED) is raised // proceed to further operations since UI likely failed to come up. @@ -121,6 +128,44 @@ } // ****************** Start Air Trap Test Code ************************ + +#ifdef TEST_PINCH_VALVES +#if 0 + static BOOL vlvCmd = FALSE; + S16 pos = getH19EncoderPosition(); + + readValves(); + // Get level sensor data + readAirTrapLevelSensors(); + if ( TRUE == vlvCmd ) + { + setValveCmdChangePosition( H1_VALV, 500, MOTOR_DIR_FORWARD ); // s/b ~30 deg + //setValveCmdChangePosition( H19_VALV, 2000, MOTOR_DIR_FORWARD ); + vlvCmd = FALSE; + } +#endif +#if 1 + { + static BOOL homeValveCmd = FALSE; + static BOOL setValvePos = FALSE; + static VALVE_POSITION_T setPos = VALVE_POSITION_A_INSERT_EJECT; // VALVE_POSITION_B_OPEN VALVE_POSITION_C_CLOSE VALVE_POSITION_A_INSERT_EJECT + + execValvesController(); + + if ( TRUE == homeValveCmd ) + { + homeValve( H1_VALV, FALSE, FALSE ); + homeValveCmd = FALSE; + } + if ( TRUE == setValvePos ) + { + setValvePosition( H1_VALV, setPos ); + setValvePos = FALSE; + } + } +#endif +#endif + #ifdef TEST_AIR_TRAP_ALPHA_TESTING #if 0 { Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -rf1d812de6fbaf4943d05bbee2271bcb61138325a -r036a75d76ab01912646a480b935d97187a231a19 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision f1d812de6fbaf4943d05bbee2271bcb61138325a) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 036a75d76ab01912646a480b935d97187a231a19) @@ -47,6 +47,9 @@ #ifdef TEST_AIR_TRAP_ALPHA_TESTING execFPGA( TRUE ); #endif +#ifdef TEST_PINCH_VALVES + execFPGA( TRUE ); +#endif // Prevent most processing until UI has started communicating if ( TRUE == uiCommunicated() ) @@ -76,6 +79,9 @@ #ifdef TEST_AIR_TRAP_ALPHA_TESTING execFPGA( FALSE ); #endif +#ifdef TEST_PINCH_VALVES + execFPGA( FALSE ); +#endif // Check in with watchdog manager checkInWithWatchdogMgmt( TASK_PRIORITY );