Index: firmware/.cproject
===================================================================
diff -u -r7138d8ca7496d3ee0f788ea1d9a34bb47e45da6e -r7478d513d7493d08484a880f5cd6c296c9616e70
--- firmware/.cproject (.../.cproject) (revision 7138d8ca7496d3ee0f788ea1d9a34bb47e45da6e)
+++ firmware/.cproject (.../.cproject) (revision 7478d513d7493d08484a880f5cd6c296c9616e70)
@@ -84,7 +84,9 @@
-
+
+
+
Index: firmware/App/Modes/Dialysis.c
===================================================================
diff -u -rca8a81beba20b62acf98cea4d934354ce512bcfe -r7478d513d7493d08484a880f5cd6c296c9616e70
--- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision ca8a81beba20b62acf98cea4d934354ce512bcfe)
+++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 7478d513d7493d08484a880f5cd6c296c9616e70)
@@ -462,7 +462,7 @@
// if we've reached target UF volume, UF is complete
if ( measUFVolume >= maxUFVolumeML )
{
- result = UF_OFF_STATE;
+ result = UF_COMPLETED_STATE;
}
// TODO - test code - remove later
Index: firmware/App/Modes/ModeTreatment.c
===================================================================
diff -u -r744b177ec4114c62303e976aed1677b820f7a281 -r7478d513d7493d08484a880f5cd6c296c9616e70
--- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 744b177ec4114c62303e976aed1677b820f7a281)
+++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 7478d513d7493d08484a880f5cd6c296c9616e70)
@@ -97,6 +97,12 @@
lastTreatmentTimeStamp = 0;
treatmentTimeBroadcastTimerCtr = 0;
+ presTreatmentTimeSecs = 0;
+ presBloodFlowRate = 0;
+ presDialysateFlowRate = 0;
+ presMaxUFVolumeML = 0.0;
+ presUFRate = 0.0;
+
pendingParamChangesTimer = 0;
pendingUFVolumeChange = 0.0;
pendingUFRateChange = 0.0;
@@ -214,7 +220,8 @@
break;
default:
- // TODO - s/w fault
+ SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_INVALID_STATE, currentTreatmentState );
+ currentTreatmentState = TREATMENT_END_STATE;
break;
}
@@ -224,7 +231,7 @@
{
stopDialysis();
elapsedTreatmentTimeInSecs = presTreatmentTimeSecs;
- currentTreatmentState = TREATMENT_END_STATE;
+ currentTreatmentState = TREATMENT_DIALYSIS_END_STATE;
}
// broadcast treatment time and state data at interval
if ( ++treatmentTimeBroadcastTimerCtr >= TREATMENT_TIME_DATA_PUB_INTERVAL )
@@ -410,9 +417,9 @@
}
else
{
- if ( MODE_TREA == currMode )
+ if ( MODE_TREA != currMode )
{
- rejectReason = REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE;
+ rejectReason = REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE;
}
else if ( ( currentTreatmentState <= TREATMENT_START_STATE ) ||
( currentTreatmentState >= TREATMENT_DIALYSIS_END_STATE ) )
@@ -425,7 +432,7 @@
}
}
// send response to request
- sendChangeTreatmentDurationResponse( result, rejectReason, treatmentTime, presMaxUFVolumeML );
+ sendChangeTreatmentDurationResponse( result, rejectReason, presTreatmentTimeSecs / SEC_PER_MIN, presMaxUFVolumeML );
return result;
}
@@ -448,16 +455,21 @@
F32 rateDiff = 0.0;
OP_MODE currMode = getCurrentOperationMode();
+ // reset pending UF/time settings changes to current values in case request is rejected
+ pendingUFVolumeChange = presMaxUFVolumeML;
+ pendingUFRateChange = presUFRate;
+ pendingTreatmentTimeChange = presTreatmentTimeSecs / SEC_PER_MIN;
+
// check if we are in an appropriate treatment state for settings adjustment
if ( ( MODE_TREA == currMode ) &&
( currentTreatmentState > TREATMENT_START_STATE ) && ( currentTreatmentState < TREATMENT_DIALYSIS_END_STATE ) &&
( uFVolume <= MAX_UF_VOLUME_ML ) &&
- ( CALC_TREAT_TIME_REMAINING_IN_SECS() < PREVENT_UF_VOL_CHANGE_IF_NEARLY_DONE_SEC ) )
+ ( CALC_TREAT_TIME_REMAINING_IN_SECS() >= PREVENT_UF_VOL_CHANGE_IF_NEARLY_DONE_SEC ) )
{
DIALYSIS_STATE_T currDialysisState = getDialysisState();
UF_STATE_T currUFState = getUltrafiltrationState();
F32 uFRate = uFVolume / ((F32)presTreatmentTimeSecs / (F32)SEC_PER_MIN); // what would UF rate be if user selected to adjust it?
- U32 trtTime = (S32)( uFVolume / uFRate ) + 1; // what would the treatment duration be if user selected to adjust it?
+ U32 trtTime = (S32)( uFVolume / presUFRate ) + 1; // what would the treatment duration be if user selected to adjust it?
U32 dialVolume = presDialysateFlowRate * trtTime; // what would dialysate volume be if user selected to adjust time?
// UF should already be paused but let's make sure.
@@ -471,34 +483,29 @@
// start t/o timer - user must confirm UF changes within 1 minute from now
pendingParamChangesTimer = getMSTimerCount();
- // reset pending UF/time settings change
- pendingUFVolumeChange = 0.0;
- pendingUFRateChange = 0.0;
- pendingTreatmentTimeChange = 0;
-
// verify UF rate change would be valid (this should be as UI is getting regular UF volume range updates)
if ( uFRate <= (F32)MAX_UF_RATE_ML_MIN )
{
result = TRUE;
pendingUFVolumeChange = uFVolume;
pendingUFRateChange = uFRate;
rateDiff = ( uFRate - presUFRate );
+
+ // verify treatment duration change would be valid
+ if ( ( trtTime <= MAX_TREATMENT_TIME_MINUTES ) && ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) )
+ {
+ pendingTreatmentTimeChange = trtTime;
+ timeDiff = trtTime - ( (U32)( (F32)presTreatmentTimeSecs / (F32)SEC_PER_MIN ) + 1 );
+ }
}
else
{
rejectReason = REQUEST_REJECT_REASON_UF_RATE_OUT_OF_RANGE;
}
-
- // verify treatment duration change would be valid
- if ( ( trtTime <= MAX_TREATMENT_TIME_MINUTES ) && ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) )
- {
- pendingTreatmentTimeChange = trtTime;
- timeDiff = trtTime - ( (U32)( (F32)presTreatmentTimeSecs / (F32)SEC_PER_MIN ) + 1 );
- }
}
else
{
- if ( MODE_TREA == currMode )
+ if ( MODE_TREA != currMode )
{
rejectReason = REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE;
}
@@ -517,7 +524,7 @@
}
}
// respond to UF settings change request
- sendChangeUFSettingsResponse( result, rejectReason, pendingUFVolumeChange, pendingTreatmentTimeChange, timeDiff, pendingUFRateChange, rateDiff );
+ sendChangeUFSettingsResponse( result, rejectReason, pendingUFVolumeChange, pendingTreatmentTimeChange, pendingUFRateChange, timeDiff, rateDiff );
return result;
}
@@ -579,7 +586,7 @@
}
}
// respond to UF settings change confirmation
- sendChangeUFSettingsResponse( result, rejectReason, pendingUFVolumeChange, pendingTreatmentTimeChange, 0, pendingUFRateChange, 0 );
+ sendChangeUFSettingsResponse( result, rejectReason, presMaxUFVolumeML, presTreatmentTimeSecs / SEC_PER_MIN, presUFRate, 0, 0 );
return result;
}
@@ -637,7 +644,7 @@
{
rejectReason = REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE;
}
- sendChangeBloodDialysateRateChangeResponse( result, (U32)rejectReason, bloodRate, dialRate );
+ sendChangeBloodDialysateRateChangeResponse( result, (U32)rejectReason, presBloodFlowRate, presDialysateFlowRate );
return result;
}
Index: firmware/App/Services/AlarmMgmt.h
===================================================================
diff -u -r744b177ec4114c62303e976aed1677b820f7a281 -r7478d513d7493d08484a880f5cd6c296c9616e70
--- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 744b177ec4114c62303e976aed1677b820f7a281)
+++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 7478d513d7493d08484a880f5cd6c296c9616e70)
@@ -168,6 +168,7 @@
SW_FAULT_ID_DIALYSIS_INVALID_UF_STATE,
SW_FAULT_ID_NVDATAMGMT_EXEC_INVALID_STATE,
SW_FAULT_ID_NVDATAMGMT_INVALID_SELF_TEST_STATE,
+ SW_FAULT_ID_MODE_TREATMENT_INVALID_STATE,
NUM_OF_SW_FAULT_IDS
} SW_FAULT_ID_T;
Index: firmware/source/sys_main.c
===================================================================
diff -u -r9b262ba08e3180f121c3cf19d8d25e565183f87d -r7478d513d7493d08484a880f5cd6c296c9616e70
--- firmware/source/sys_main.c (.../sys_main.c) (revision 9b262ba08e3180f121c3cf19d8d25e565183f87d)
+++ firmware/source/sys_main.c (.../sys_main.c) (revision 7478d513d7493d08484a880f5cd6c296c9616e70)
@@ -71,6 +71,7 @@
#include "FPGA.h"
#include "InternalADC.h"
#include "MsgQueues.h"
+#include "NVDataMgmt.h"
#include "OperationModes.h"
#include "PresOccl.h"
#include "RTC.h"
@@ -175,6 +176,7 @@
initDialOutFlow();
initOperationModes();
initRTC();
+ initNVDataMgmt();
}
/*************************************************************************