diff --git a/app/release/app-release-4.1.10a.apk b/app/release/app-release-4.1.10a.apk new file mode 100644 index 0000000..67e2574 Binary files /dev/null and b/app/release/app-release-4.1.10a.apk differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3bd8c7d..a157c57 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="124" + android:versionName="4.1.10a"> diff --git a/app/src/main/java/uk/org/openseizuredetector/MainActivity.java b/app/src/main/java/uk/org/openseizuredetector/MainActivity.java index 46586c2..71cf9a7 100644 --- a/app/src/main/java/uk/org/openseizuredetector/MainActivity.java +++ b/app/src/main/java/uk/org/openseizuredetector/MainActivity.java @@ -853,9 +853,9 @@ public class MainActivity extends AppCompatActivity { // Fault Conditions - We override the values in the UI because we do not know // if the stored ones are correct or not with a fault present. if ((mConnection.mSdServer.mSdData.alarmState == 4) || - (mConnection.mSdServer.mSdData.alarmState == 7)) { + (mConnection.mSdServer.mSdData.alarmState == 7) || mConnection.mSdServer.mSdData.mHrFrozenFaultStanding) { tv = (TextView) findViewById(R.id.alarmTv); - if (mConnection.mSdServer.mSdData.alarmState == 4) { + if (mConnection.mSdServer.mSdData.alarmState == 4 || mConnection.mSdServer.mSdData.mHrFrozenFaultStanding) { tv.setText(R.string.Fault); tv.setBackgroundColor(warnColour); tv.setTextColor(warnTextColour); @@ -876,7 +876,7 @@ public class MainActivity extends AppCompatActivity { tv.setTextColor(warnTextColour); tv = (TextView) findViewById(R.id.pebbleTv); - tv.setText(getString(R.string.HR_Equals) + " --- bpm\n"+getString(R.string.o2_sat)+" = --- %"); + //tv.setText(getString(R.string.HR_Equals) + " --- bpm\n"+getString(R.string.o2_sat)+" = --- %"); tv.setBackgroundColor(warnColour); tv.setTextColor(warnTextColour); diff --git a/app/src/main/java/uk/org/openseizuredetector/SdData.java b/app/src/main/java/uk/org/openseizuredetector/SdData.java index 420ca52..67a5541 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdData.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdData.java @@ -99,6 +99,7 @@ public class SdData implements Parcelable { public CircBuf mAdaptiveHrBuf; public CircBuf mAverageHrBuf; + public boolean mHrFrozenFaultStanding = false; int mNsamp = 0; /* Analysis results */ diff --git a/app/src/main/java/uk/org/openseizuredetector/SdDataSource.java b/app/src/main/java/uk/org/openseizuredetector/SdDataSource.java index 5173abd..07e9cb7 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdDataSource.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdDataSource.java @@ -104,6 +104,10 @@ public abstract class SdDataSource { private int mAlarmCount; protected String mBleDeviceAddr; protected String mBleDeviceName; + private double mLastHrValue; + private Time mHrStatusTime; + private double mHrFrozenPeriod = 60; // seconds + private boolean mHrFrozenAlarm; public SdDataSource(Context context, Handler handler, SdDataReceiver sdDataReceiver) { @@ -163,6 +167,12 @@ public abstract class SdDataSource { Log.v(TAG, "start(): status timer already running."); mUtil.writeToSysLogFile("SdDataSource.start() - status timer already running??"); } + + // Initialise time we last received a change in HR value. + mHrStatusTime = new Time(Time.getCurrentTimezone()); + mHrStatusTime.setToNow(); + mLastHrValue = -1; + if (mFaultCheckTimer == null) { Log.v(TAG, "start(): starting alarm check timer"); mUtil.writeToSysLogFile("SdDataSource.start() - starting alarm check timer"); @@ -779,6 +789,21 @@ public abstract class SdDataSource { //Log.v(TAG, "faultCheck() - watch app not running so not doing anything"); mAlarmCount = 0; } + + if (mSdData.mHRAlarmActive && mHrFrozenAlarm) { + if (mSdData.mHR != mLastHrValue) { + mLastHrValue = mSdData.mHR; + mHrStatusTime = tnow; + mSdData.mHrFrozenFaultStanding = false; + } else { + tdiff = (tnow.toMillis(false) - mHrStatusTime.toMillis(false)); + if (tdiff > mHrFrozenPeriod *1000.) { + mSdData.mHrFrozenFaultStanding = true; + } else { + mSdData.mHrFrozenFaultStanding = false; + } + } + } } void nnAnalysis() { @@ -971,6 +996,10 @@ public abstract class SdDataSource { Log.v(TAG, "updatePrefs() HRNullAsAlarm = " + mSdData.mHRNullAsAlarm); mUtil.writeToSysLogFile( "updatePrefs() HRNullAsAlarm = " + mSdData.mHRNullAsAlarm); + mHrFrozenAlarm = SP.getBoolean("HrFrozenAlarm", true); + Log.v(TAG, "updatePrefs() - mHrFrozenAlarm = " + mHrFrozenAlarm); + mUtil.writeToSysLogFile("updatePrefs() - mHrFrozenAlarm = " + mHrFrozenAlarm); + prefStr = SP.getString("HRThreshMin", "SET_FROM_XML"); mSdData.mHRThreshMin = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() HRThreshMin = " + mSdData.mHRThreshMin); diff --git a/app/src/main/java/uk/org/openseizuredetector/SdServer.java b/app/src/main/java/uk/org/openseizuredetector/SdServer.java index 32e4fab..d884c0b 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdServer.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdServer.java @@ -774,7 +774,7 @@ public class SdServer extends Service implements SdDataReceiver { // Fault - if ((sdData.alarmState) == 4 || (sdData.alarmState == 7) || (sdData.mHRFaultStanding)) { + if ((sdData.alarmState) == 4 || (sdData.alarmState == 7) || (sdData.mHRFaultStanding) || (sdData.mHrFrozenFaultStanding)) { sdData.alarmPhrase = "FAULT"; //writeAlarmToSD(); faultWarningBeep(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 280398b..a3cb89e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,6 +3,7 @@ OpenSeizureDetector "\n + \nV4.1.10 - Added warning if heart rate readings freeze and do not change for more than 1 minute. \nV4.1.9 - Fixed problem with average heart rate alarm Fixed issue with phone data source generating continuous alarms for Heart Rate or O2Sat Fixed a small number of user reported issues (https://github.com/OpenSeizureDetector/Android_Pebble_SD/issues?q=is%3Aissue+milestone%3AV4.1.8) @@ -499,4 +500,6 @@ Export Data Data Exported OK *** ERROR Exporting Data *** + Heart Rate measurement Frozen Warning + Produce a fault warning if the heart rate measurement freezes and does not change for more than 1 minute. diff --git a/app/src/main/res/xml/seizure_detector_prefs.xml b/app/src/main/res/xml/seizure_detector_prefs.xml index 0ed2a9c..d5bfa93 100644 --- a/app/src/main/res/xml/seizure_detector_prefs.xml +++ b/app/src/main/res/xml/seizure_detector_prefs.xml @@ -83,6 +83,11 @@ android:key="HRAlarmActive" android:summary="@string/HRAlarmEnabledSummary" android:title="@string/HRAlarmEnabledTitle" /> +