diff --git a/app/google-services.json.template b/app/google-services.json.template
new file mode 100644
index 0000000..f62842f
--- /dev/null
+++ b/app/google-services.json.template
@@ -0,0 +1,47 @@
+{
+ "project_info": {
+ "project_number": "1234",
+ "project_id": "osd-data-sharing",
+ "storage_bucket": "osd-data-sharing.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "xxxx",
+ "android_client_info": {
+ "package_name": "uk.org.openseizuredetector"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "xxxx",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "uk.org.openseizuredetector",
+ "certificate_hash": "xxx"
+ }
+ },
+ {
+ "client_id": "xxx",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "xxx"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "xxx",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/app/src/main/java/uk/org/openseizuredetector/LogManager.java b/app/src/main/java/uk/org/openseizuredetector/LogManager.java
index babd01d..66a26c5 100644
--- a/app/src/main/java/uk/org/openseizuredetector/LogManager.java
+++ b/app/src/main/java/uk/org/openseizuredetector/LogManager.java
@@ -328,7 +328,7 @@ public class LogManager {
* Write data to local database
* FIXME - I am sure we should not be using raw SQL Srings to do this!
*/
- public void writeDatapointToLocalDb(SdData sdData) {
+ public void writeDatapointToLocalDb(SdData sdData, long alarmDuration) {
//Log.v(TAG, "writeDatapointToLocalDb()");
Date curDate = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -355,7 +355,9 @@ public class LogManager {
if (sdData.alarmState != 0) {
Log.i(TAG, "writeDatapointToLocalDb(): adding event to local DB");
- createLocalEvent(dateStr, sdData.alarmState, null, null, null, sdData.toSettingsJSON());
+ createLocalEvent(dateStr, sdData.alarmState, "seizure", null,
+ "Duration: " + alarmDuration + "s HR: " + sdData.mHR,
+ sdData.toSettingsJSON());
}
} catch (SQLException e) {
Log.e(TAG, "writeToLocalDb(): Error Writing Data: " + e.toString());
diff --git a/app/src/main/java/uk/org/openseizuredetector/SdServer.java b/app/src/main/java/uk/org/openseizuredetector/SdServer.java
index 4ad088f..93cd591 100644
--- a/app/src/main/java/uk/org/openseizuredetector/SdServer.java
+++ b/app/src/main/java/uk/org/openseizuredetector/SdServer.java
@@ -125,6 +125,8 @@ public class SdServer extends Service implements SdDataReceiver {
private boolean mMp3Alarm = false;
private boolean mPhoneAlarm = false;
private boolean mSMSAlarm = false;
+ private boolean mFlogaEmergencyEscalation = true;
+ private long mAlarmStartTime = 0;
private String[] mSMSNumbers;
private String mSMSMsgStr = "default SMS Message";
private String mSMSFalseAlarmMsgStr = "default SMS False Alarm Message";
@@ -655,6 +657,7 @@ public class SdServer extends Service implements SdDataReceiver {
if ((sdData.alarmState == 2) || (sdData.alarmState == 5)) {
sdData.alarmPhrase = "ALARM";
sdData.alarmStanding = true;
+ if (mAlarmStartTime == 0) mAlarmStartTime = System.currentTimeMillis();
if (mLogAlarms) {
Log.v(TAG, "***ALARM*** - Logging to SD Card");
//writeAlarmToSD();
@@ -675,7 +678,12 @@ public class SdServer extends Service implements SdDataReceiver {
- mSMSTime.toMillis(false))
> 60000) {
sendSMSAlarm();
- sendPhoneAlarm();
+ // Floga: escalate to emergency call if seizure longer than 5 minutes
+ long alarmDurationSecs = (System.currentTimeMillis() - mAlarmStartTime) / 1000;
+ if (alarmDurationSecs >= 300 && mFlogaEmergencyEscalation) {
+ sendPhoneAlarm();
+ Log.v(TAG, "Floga: 5 minute threshold reached - calling emergency contacts");
+ }
mSMSTime = tnow;
} else {
mUtil.showToast(getString(R.string.SMSAlarmAlreadySentMsg));
@@ -820,6 +828,7 @@ public class SdServer extends Service implements SdDataReceiver {
mSdData.alarmState = 4; // set fault alarm state.
mSdData.alarmPhrase = "FAULT";
mSdData.alarmStanding = false;
+ mAlarmStartTime = 0;
if (webServer != null) webServer.setSdData(mSdData);
// We only take action to warn the user and re-start the data source to attempt to fix it
// ourselves if we have been in a fault condition for a while - signified by the mFaultTimerCompleted
@@ -1238,7 +1247,11 @@ public class SdServer extends Service implements SdDataReceiver {
if (mLm != null) {
Log.v(TAG, "logData() - writing data to Database");
//writeToSD();
- mLm.writeDatapointToLocalDb(mSdData);
+ long alarmDurationSecs = 0;
+ if (mAlarmStartTime != 0) {
+ alarmDurationSecs = (System.currentTimeMillis() - mAlarmStartTime) / 1000;
+ }
+ mLm.writeDatapointToLocalDb(mSdData, alarmDurationSecs);
} else {
Log.e(TAG, "logData() - mLm is null - this should not happen");
}
@@ -1302,6 +1315,7 @@ public class SdServer extends Service implements SdDataReceiver {
mSMSAlarm = SP.getBoolean("SMSAlarm", false);
Log.v(TAG, "updatePrefs() - mSMSAlarm = " + mSMSAlarm);
mUtil.writeToSysLogFile("updatePrefs() - mSMSAlarm = " + mSMSAlarm);
+ mFlogaEmergencyEscalation = SP.getBoolean("FlogaEmergencyEscalation", true);
mPhoneAlarm = SP.getBoolean("PhoneCallAlarm", false);
Log.v(TAG, "updatePrefs() - mSMSAlarm = " + mSMSAlarm);
mUtil.writeToSysLogFile("updatePrefs() - mSMSAlarm = " + mSMSAlarm);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a889561..999bda9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -105,11 +105,11 @@
Alarm Ratio Threshold
Alarm Ratio Threshold (Default = 57). Increase to reduce sensitivity.
AlarmFreqMax (Hz)
- Maximum Frequency of ROI (Hz) (Default = 8 Hz)
+ Maximum Frequency of ROI (Hz) ([Floga] Default = 5 Hz)
AlarmFreqMin (Hz)
Minimum Frequency of ROI (Hz) (Default = 3 Hz)
Enable Simple Heart Rate Alarm
-
+ Floga: Triggers alarm if heart rate rises by 20% during detected seizure motion, reducing false alarms
Treat a Null heart rate as an alarm condition
Heart Rate Min Threshold (bpm)
@@ -303,7 +303,7 @@
SMS Alarm Settings
**SEIZURE DETECTED**
Alarm Logging
- Time to wait before initiating warning (Default = 5 sec)
+ Time to wait before initiating warning ([Floga] Default = 10 sec)
WarnTime (sec)
Time to wait before initiating alarm (Default = 10 sec)
AlarmTime (sec)
@@ -486,7 +486,7 @@
NO
Privacy Policy
Data Sharing
- Enable Adaptive Threshold Heart Rate Alarm
+ [Floga] Enable Adaptive Threshold Heart Rate Alarm
Window Size for Adaptive Threshold Calculation
Moving Average Time Window (seconds) must be a multiple of 5 seconds
Adaptive Threshold Offset (bpm)
diff --git a/app/src/main/res/xml/seizure_detector_prefs.xml b/app/src/main/res/xml/seizure_detector_prefs.xml
index 48013c5..520be3c 100644
--- a/app/src/main/res/xml/seizure_detector_prefs.xml
+++ b/app/src/main/res/xml/seizure_detector_prefs.xml
@@ -22,7 +22,7 @@
android:summary="@string/HRAlarmEnabledSummary"
android:title="@string/HRAlarmEnabledTitle" />
@@ -50,7 +50,7 @@
android:summary="@string/OsdAlarmEnabledSummary"
android:title="@string/OsdAlarmEnabledTitle" />
@@ -59,6 +59,11 @@
android:key="AlarmTime"
android:summary="@string/AlarmTimeSummary"
android:title="@string/AlarmTimeTitle" />
+
@@ -168,7 +173,7 @@