V4.1.10a - Added heart rate readings frozen fault warning.

This commit is contained in:
Graham Jones
2023-07-24 21:10:46 +01:00
parent 8e781fc092
commit 17c82abc50
8 changed files with 44 additions and 6 deletions

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:versionCode="123"
android:versionName="4.1.9">
android:versionCode="124"
android:versionName="4.1.10a">
<!-- android:allowBackup="false" -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

View File

@@ -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);

View File

@@ -99,6 +99,7 @@ public class SdData implements Parcelable {
public CircBuf mAdaptiveHrBuf;
public CircBuf mAverageHrBuf;
public boolean mHrFrozenFaultStanding = false;
int mNsamp = 0;
/* Analysis results */

View File

@@ -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);

View File

@@ -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();

View File

@@ -3,6 +3,7 @@
<string name="app_name">OpenSeizureDetector</string>
<string name="changelog">
"\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 @@
<string name="export_data_menuItem">Export Data</string>
<string name="data_exported_ok">Data Exported OK</string>
<string name="error_exporting_data">*** ERROR Exporting Data ***</string>
<string name="HrFrozenTitle">Heart Rate measurement Frozen Warning</string>
<string name="HrFrozenSummary">Produce a fault warning if the heart rate measurement freezes and does not change for more than 1 minute.</string>
</resources>

View File

@@ -83,6 +83,11 @@
android:key="HRAlarmActive"
android:summary="@string/HRAlarmEnabledSummary"
android:title="@string/HRAlarmEnabledTitle" />
<CheckBoxPreference
android:defaultValue="true"
android:key="HrFrozenAlarm"
android:summary="@string/HrFrozenSummary"
android:title="@string/HrFrozenTitle" />
<CheckBoxPreference
android:defaultValue="false"
android:key="HRNullAsAlarm"