diff --git a/app/app-release.apk b/app/app-release.apk index 95a5715..ab74107 100644 Binary files a/app/app-release.apk and b/app/app-release.apk differ diff --git a/app/src/main/java/uk/org/openseizuredetector/MainActivity.java b/app/src/main/java/uk/org/openseizuredetector/MainActivity.java index 12d4d41..a769af1 100644 --- a/app/src/main/java/uk/org/openseizuredetector/MainActivity.java +++ b/app/src/main/java/uk/org/openseizuredetector/MainActivity.java @@ -165,6 +165,13 @@ public class MainActivity extends Activity Log.v(TAG,"exception starting pebble App "+ex.toString()); } return true; + + case R.id.action_accept_alarm: + Log.v(TAG,"action_accept_alarm"); + if (mBound) { + mSdServer.acceptAlarm(); + } + return true; case R.id.action_start_stop: // Respond to the start/stop server menu item. Log.v(TAG,"action_sart_stop"); @@ -243,7 +250,7 @@ public class MainActivity extends Activity versionName = null; } } - tv.setText("OpenSeizureDetector Server Version "+versionName); + tv.setText("OpenSeizureDetector Server Version " + versionName); if (!isServerRunning()) { Log.v(TAG,"Server not Running - Starting Server"); @@ -445,18 +452,26 @@ public class MainActivity extends Activity try { if (mBound) { tv = (TextView) findViewById(R.id.alarmTv); - if (mSdServer.sdData.alarmState==0) { - tv.setText(mSdServer.sdData.alarmPhrase); + if ((mSdServer.sdData.alarmState==0) + && !mSdServer.sdData.alarmStanding + && !mSdServer.sdData.fallAlarmStanding) { + tv.setText("OK"); tv.setBackgroundColor(okColour); } - if (mSdServer.sdData.alarmState==1) { - tv.setText(mSdServer.sdData.alarmPhrase); + if ((mSdServer.sdData.alarmState==1) + && !mSdServer.sdData.alarmStanding + && !mSdServer.sdData.fallAlarmStanding) { + tv.setText("WARNING"); tv.setBackgroundColor(warnColour); } - if (mSdServer.sdData.alarmState==2) { - tv.setText(mSdServer.sdData.alarmPhrase); + if (mSdServer.sdData.alarmStanding) { + tv.setText("**ALARM**"); tv.setBackgroundColor(alarmColour); } + if (mSdServer.sdData.fallAlarmStanding) { + tv.setText("**FALL**"); + tv.setBackgroundColor(alarmColour); + } tv = (TextView) findViewById(R.id.pebTimeTv); tv.setText(mSdServer.mPebbleStatusTime.format("%H:%M:%S")); // Pebble Connected Phrase diff --git a/app/src/main/java/uk/org/openseizuredetector/SdData.java b/app/src/main/java/uk/org/openseizuredetector/SdData.java index b059173..da00bf8 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdData.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdData.java @@ -53,6 +53,8 @@ public class SdData implements Parcelable { /* Analysis results */ public Time dataTime; public long alarmState; + public boolean alarmStanding = false; + public boolean fallAlarmStanding = false; public long maxVal; public long maxFreq; public long specPower; diff --git a/app/src/main/java/uk/org/openseizuredetector/SdServer.java b/app/src/main/java/uk/org/openseizuredetector/SdServer.java index e6566b7..bf3da71 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdServer.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdServer.java @@ -141,6 +141,7 @@ public class SdServer extends Service private WakeLock mWakeLock = null; public SdData sdData; private PebbleKit.PebbleDataReceiver msgDataHandler = null; + private boolean mLatchAlarms = false; private boolean mCancelAudible = false; private boolean mAudibleAlarm = false; private boolean mAudibleWarning = false; @@ -459,12 +460,24 @@ public class SdServer extends Service sdData.roiPower = data.getUnsignedIntegerAsLong(KEY_ROIPOWER); sdData.alarmPhrase = "Unknown"; if (sdData.alarmState == 0) { - sdData.alarmPhrase = "OK"; - } + if ((!mLatchAlarms) || + (mLatchAlarms && + (!sdData.alarmStanding && !sdData.fallAlarmStanding))) { + sdData.alarmPhrase = "OK"; + sdData.alarmStanding = false; + sdData.fallAlarmStanding = false; + } + } if (sdData.alarmState == 1) { - sdData.alarmPhrase = "WARNING"; + if ((!mLatchAlarms) || + (mLatchAlarms && + (!sdData.alarmStanding && !sdData.fallAlarmStanding))) { + sdData.alarmPhrase = "WARNING"; + sdData.alarmStanding = false; + sdData.fallAlarmStanding = false; + } if (mLogAlarms) { - Log.v(TAG, "WARNING - Loggin to SD Card"); + Log.v(TAG, "WARNING - Logging to SD Card"); writeAlarmToSD(); logData(); } else { @@ -472,8 +485,9 @@ public class SdServer extends Service } warningBeep(); } - if (sdData.alarmState == 2) { + if ((sdData.alarmState == 2) || (sdData.alarmStanding)) { sdData.alarmPhrase = "ALARM"; + sdData.alarmStanding = true; if (mLogAlarms) { Log.v(TAG, "***ALARM*** - Logging to SD Card"); writeAlarmToSD(); @@ -496,8 +510,9 @@ public class SdServer extends Service } } } - if (sdData.alarmState == 3) { + if ((sdData.alarmState == 3) || (sdData.fallAlarmStanding)) { sdData.alarmPhrase = "FALL"; + sdData.fallAlarmStanding = true; if (mLogAlarms) { Log.v(TAG, "***FALL*** - Logging to SD Card"); writeAlarmToSD(); @@ -555,6 +570,15 @@ public class SdServer extends Service PebbleKit.registerReceivedDataHandler(this,msgDataHandler); } + /** + * set the alarm standing flags to false to allow alarm phase to reset to current value. + */ + public void acceptAlarm() { + Log.v(TAG,"acceptAlarm()"); + sdData.alarmStanding = false; + sdData.fallAlarmStanding = false; + } + /** * De-register this server from receiving pebble data */ @@ -701,6 +725,8 @@ public class SdServer extends Service SharedPreferences SP = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); try { + mLatchAlarms = SP.getBoolean("LatchAlarms",false); + Log.v(TAG,"updatePrefs() - mLatchAlarms = "+mLatchAlarms); mAudibleFaultWarning = SP.getBoolean("AudibleFaultWarning",true); Log.v(TAG,"updatePrefs() - mAuidbleFaultWarning = "+mAudibleFaultWarning); mAudibleAlarm = SP.getBoolean("AudibleAlarm",true); diff --git a/app/src/main/res/menu/main_activity_actions.xml b/app/src/main/res/menu/main_activity_actions.xml index 42e3146..895277a 100644 --- a/app/src/main/res/menu/main_activity_actions.xml +++ b/app/src/main/res/menu/main_activity_actions.xml @@ -1,4 +1,10 @@