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

Binary file not shown.

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:versionCode="123" android:versionCode="124"
android:versionName="4.1.9"> android:versionName="4.1.10a">
<!-- android:allowBackup="false" --> <!-- android:allowBackup="false" -->
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <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 // 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 the stored ones are correct or not with a fault present.
if ((mConnection.mSdServer.mSdData.alarmState == 4) || 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); 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.setText(R.string.Fault);
tv.setBackgroundColor(warnColour); tv.setBackgroundColor(warnColour);
tv.setTextColor(warnTextColour); tv.setTextColor(warnTextColour);
@@ -876,7 +876,7 @@ public class MainActivity extends AppCompatActivity {
tv.setTextColor(warnTextColour); tv.setTextColor(warnTextColour);
tv = (TextView) findViewById(R.id.pebbleTv); 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.setBackgroundColor(warnColour);
tv.setTextColor(warnTextColour); tv.setTextColor(warnTextColour);

View File

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

View File

@@ -104,6 +104,10 @@ public abstract class SdDataSource {
private int mAlarmCount; private int mAlarmCount;
protected String mBleDeviceAddr; protected String mBleDeviceAddr;
protected String mBleDeviceName; 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) { public SdDataSource(Context context, Handler handler, SdDataReceiver sdDataReceiver) {
@@ -163,6 +167,12 @@ public abstract class SdDataSource {
Log.v(TAG, "start(): status timer already running."); Log.v(TAG, "start(): status timer already running.");
mUtil.writeToSysLogFile("SdDataSource.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) { if (mFaultCheckTimer == null) {
Log.v(TAG, "start(): starting alarm check timer"); Log.v(TAG, "start(): starting alarm check timer");
mUtil.writeToSysLogFile("SdDataSource.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"); //Log.v(TAG, "faultCheck() - watch app not running so not doing anything");
mAlarmCount = 0; 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() { void nnAnalysis() {
@@ -971,6 +996,10 @@ public abstract class SdDataSource {
Log.v(TAG, "updatePrefs() HRNullAsAlarm = " + mSdData.mHRNullAsAlarm); Log.v(TAG, "updatePrefs() HRNullAsAlarm = " + mSdData.mHRNullAsAlarm);
mUtil.writeToSysLogFile( "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"); prefStr = SP.getString("HRThreshMin", "SET_FROM_XML");
mSdData.mHRThreshMin = (short) Integer.parseInt(prefStr); mSdData.mHRThreshMin = (short) Integer.parseInt(prefStr);
Log.v(TAG, "updatePrefs() HRThreshMin = " + mSdData.mHRThreshMin); Log.v(TAG, "updatePrefs() HRThreshMin = " + mSdData.mHRThreshMin);

View File

@@ -774,7 +774,7 @@ public class SdServer extends Service implements SdDataReceiver {
// Fault // Fault
if ((sdData.alarmState) == 4 || (sdData.alarmState == 7) || (sdData.mHRFaultStanding)) { if ((sdData.alarmState) == 4 || (sdData.alarmState == 7) || (sdData.mHRFaultStanding) || (sdData.mHrFrozenFaultStanding)) {
sdData.alarmPhrase = "FAULT"; sdData.alarmPhrase = "FAULT";
//writeAlarmToSD(); //writeAlarmToSD();
faultWarningBeep(); faultWarningBeep();

View File

@@ -3,6 +3,7 @@
<string name="app_name">OpenSeizureDetector</string> <string name="app_name">OpenSeizureDetector</string>
<string name="changelog"> <string name="changelog">
"\n "\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 \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 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) 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="export_data_menuItem">Export Data</string>
<string name="data_exported_ok">Data Exported OK</string> <string name="data_exported_ok">Data Exported OK</string>
<string name="error_exporting_data">*** ERROR Exporting Data ***</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> </resources>

View File

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