From eec87aedd784789b13e8c761f8cceda1a997495c Mon Sep 17 00:00:00 2001 From: Graham Jones Date: Tue, 10 Nov 2015 18:14:51 +0000 Subject: [PATCH] Added experimental support for fall detection, with ability to change fall detection settings from android app. --- app/src/main/AndroidManifest.xml | 4 +- .../uk/org/openseizuredetector/SdServer.java | 73 ++++++++++++++++--- app/src/main/res/xml/prefs.xml | 22 ++++++ 3 files changed, 87 insertions(+), 12 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1988e8a..05ee419 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="16" + android:versionName="1.12"> diff --git a/app/src/main/java/uk/org/openseizuredetector/SdServer.java b/app/src/main/java/uk/org/openseizuredetector/SdServer.java index 54c4763..e6566b7 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdServer.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdServer.java @@ -111,6 +111,11 @@ public class SdServer extends Service private int KEY_NMAX = 17; private int KEY_ALARM_RATIO_THRESH = 18; private int KEY_BATTERY_PC = 19; + //private int KEY_SET_SETTINGS =20; // Phone is asking us to update watch app settings. + private int KEY_FALL_THRESH_MIN = 21; + private int KEY_FALL_THRESH_MAX = 22; + private int KEY_FALL_WINDOW = 23; + private int KEY_FALL_ACTIVE =24; // Values of the KEY_DATA_TYPE entry in a message private int DATA_TYPE_RESULTS = 1; // Analysis Results @@ -470,7 +475,7 @@ public class SdServer extends Service if (sdData.alarmState == 2) { sdData.alarmPhrase = "ALARM"; if (mLogAlarms) { - Log.v(TAG, "***ALARM*** - Loggin to SD Card"); + Log.v(TAG, "***ALARM*** - Logging to SD Card"); writeAlarmToSD(); logData(); } else { @@ -491,6 +496,30 @@ public class SdServer extends Service } } } + if (sdData.alarmState == 3) { + sdData.alarmPhrase = "FALL"; + if (mLogAlarms) { + Log.v(TAG, "***FALL*** - Logging to SD Card"); + writeAlarmToSD(); + logData(); + } else { + Log.v(TAG, "***FALL***"); + } + // Make alarm beep tone + alarmBeep(); + // Send SMS Alarm. + if (mSMSAlarm) { + Time tnow = new Time(Time.getCurrentTimezone()); + tnow.setToNow(); + // limit SMS alarms to one per minute + if ((tnow.toMillis(false) + - mSMSTime.toMillis(false)) + > 60000) { + sendSMSAlarm(); + mSMSTime = tnow; + } + } + } // Read the data that has been sent, and convert it into @@ -720,34 +749,58 @@ public class SdServer extends Service String prefStr; prefStr = SP.getString("AlarmFreqMin","5"); intVal = (short)Integer.parseInt(prefStr); - Log.v(TAG,"updatePrefs() AlarmFreqMin = "+intVal); + Log.v(TAG, "updatePrefs() AlarmFreqMin = " + intVal); setDict.addInt16(KEY_ALARM_FREQ_MIN,intVal); prefStr = SP.getString("AlarmFreqMax","10"); intVal = (short)Integer.parseInt(prefStr); - Log.v(TAG,"updatePrefs() AlarmFreqMax = "+intVal); - setDict.addUint16(KEY_ALARM_FREQ_MAX,(short)intVal); + Log.v(TAG, "updatePrefs() AlarmFreqMax = " + intVal); + setDict.addUint16(KEY_ALARM_FREQ_MAX, (short) intVal); prefStr = SP.getString("WarnTime","5"); intVal = (short)Integer.parseInt(prefStr); - Log.v(TAG,"updatePrefs() WarnTime = "+intVal); + Log.v(TAG, "updatePrefs() WarnTime = " + intVal); setDict.addUint16(KEY_WARN_TIME,(short)intVal); prefStr = SP.getString("AlarmTime","10"); intVal = (short)Integer.parseInt(prefStr); - Log.v(TAG,"updatePrefs() AlarmTime = "+intVal); + Log.v(TAG, "updatePrefs() AlarmTime = " + intVal); setDict.addUint16(KEY_ALARM_TIME,(short)intVal); prefStr = SP.getString("AlarmThresh","100"); intVal = (short)Integer.parseInt(prefStr); - Log.v(TAG,"updatePrefs() AlarmThresh = "+intVal); + Log.v(TAG, "updatePrefs() AlarmThresh = " + intVal); setDict.addUint16(KEY_ALARM_THRESH,(short)intVal); prefStr = SP.getString("AlarmRatioThresh","30"); intVal = (short)Integer.parseInt(prefStr); - Log.v(TAG,"updatePrefs() AlarmRatioThresh = "+intVal); - setDict.addUint16(KEY_ALARM_RATIO_THRESH,(short)intVal); - // Send to Pebble + Log.v(TAG, "updatePrefs() AlarmRatioThresh = " + intVal); + setDict.addUint16(KEY_ALARM_RATIO_THRESH, (short) intVal); + + boolean fallActiveBool = SP.getBoolean("FallActive",false); + Log.v(TAG, "updatePrefs() FallActive = " + fallActiveBool); + if (fallActiveBool) + setDict.addUint16(KEY_FALL_ACTIVE,(short)1); + else + setDict.addUint16(KEY_FALL_ACTIVE,(short)0); + + prefStr = SP.getString("FallThreshMin","200"); + intVal = (short)Integer.parseInt(prefStr); + Log.v(TAG,"updatePrefs() FallThreshMin = "+intVal); + setDict.addUint16(KEY_FALL_THRESH_MIN,(short)intVal); + + prefStr = SP.getString("FallThreshMax","1200"); + intVal = (short)Integer.parseInt(prefStr); + Log.v(TAG,"updatePrefs() FallThreshMax = "+intVal); + setDict.addUint16(KEY_FALL_THRESH_MAX,(short)intVal); + + prefStr = SP.getString("FallWindow","1500"); + intVal = (short)Integer.parseInt(prefStr); + Log.v(TAG,"updatePrefs() FallWindow = "+intVal); + setDict.addUint16(KEY_FALL_WINDOW,(short)intVal); + + + // Send Watch Settings to Pebble Log.v(TAG,"updatePrefs() - setDict = "+setDict.toJsonString()); PebbleKit.sendDataToPebble(getApplicationContext(), SD_UUID, setDict); } catch (Exception ex) { diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml index 8b83f5d..c1c0128 100644 --- a/app/src/main/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -84,6 +84,28 @@ android:summary="Alarm Ratio Threshold (Default = 30)" android:defaultValue="30" /> + + + + + +