Corrected web server mime types to get Garmin display working again. Also added HR alarm standing prameter to /data so network datasource should alarm correctly on HR alarm now.

This commit is contained in:
Graham Jones
2020-02-15 21:26:57 +00:00
parent 384bb7c9a3
commit 8a09fe45cc
6 changed files with 37 additions and 17 deletions

View File

@@ -4,6 +4,12 @@
V3.2.0 - (NEXT VERSION!) V3.2.0 - (NEXT VERSION!)
- Added neural network based data analysis. - Added neural network based data analysis.
V3.1.12 - 15feb2019
- Updated web server to return correct application/json mime type to get rid of -400
errors on garmin watch. Made error messages json strings too.
Added hrAlarmStanding value to /data json string, which should get remove
heart rate alarms working with network datasource.
V3.1.11 - 23oct2019 V3.1.11 - 23oct2019
- Updated network data source so it displays heart rate data if it is available. - Updated network data source so it displays heart rate data if it is available.

Binary file not shown.

View File

@@ -1 +1 @@
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":65,"versionName":"3.1.11","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] [{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":66,"versionName":"3.1.12","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]

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"
package="uk.org.openseizuredetector" package="uk.org.openseizuredetector"
android:versionCode="65" android:versionCode="66"
android:versionName="3.1.11" android:versionName="3.1.12"
> >
<!--android:allowBackup="false"--> <!--android:allowBackup="false"-->

View File

@@ -121,6 +121,7 @@ public class SdData implements Parcelable {
alarmThresh = jo.optInt("alarmThresh"); alarmThresh = jo.optInt("alarmThresh");
alarmRatioThresh = jo.optInt("alarmRatioThresh"); alarmRatioThresh = jo.optInt("alarmRatioThresh");
mHRAlarmActive=jo.optBoolean("hrAlarmActive"); mHRAlarmActive=jo.optBoolean("hrAlarmActive");
mHRAlarmStanding = jo.optBoolean("hrAlarmStanding");
mHRThreshMin = jo.optDouble("hrThreshMin"); mHRThreshMin = jo.optDouble("hrThreshMin");
mHRThreshMax = jo.optDouble("hrThreshMax"); mHRThreshMax = jo.optDouble("hrThreshMax");
mHR = jo.optDouble("hr"); mHR = jo.optDouble("hr");
@@ -176,6 +177,7 @@ public class SdData implements Parcelable {
jsonObj.put("alarmThresh", alarmThresh); jsonObj.put("alarmThresh", alarmThresh);
jsonObj.put("alarmRatioThresh", alarmRatioThresh); jsonObj.put("alarmRatioThresh", alarmRatioThresh);
jsonObj.put("hrAlarmActive", mHRAlarmActive); jsonObj.put("hrAlarmActive", mHRAlarmActive);
jsonObj.put("hrAlarmStanding", mHRAlarmStanding);
jsonObj.put("hrThreshMin",mHRThreshMin); jsonObj.put("hrThreshMin",mHRThreshMin);
jsonObj.put("hrThreshMax", mHRThreshMax); jsonObj.put("hrThreshMax", mHRThreshMax);
jsonObj.put("hr",mHR); jsonObj.put("hr",mHR);

View File

@@ -51,20 +51,28 @@ public class SdWebServer extends NanoHTTPD {
Map<String, String> header; Map<String, String> header;
Map<String, String> parameters; Map<String, String> parameters;
Map<String, String> files = new HashMap<String, String>(); Map<String, String> files = new HashMap<String, String>();
NanoHTTPD.Response res = null;
String responseMimeType = "application/json";
if (session.getMethod() == Method.POST) {
// We try to parse the 'files' part of POST requests to get the data
try { try {
session.parseBody(files); session.parseBody(files);
} catch (IOException ioe) { } catch (IOException ioe) {
Log.e(TAG, "IOError parsing body of request");
return new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage()); return new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage());
} catch (ResponseException re) { } catch (ResponseException re) {
Log.e(TAG, "ResponseException parsing body of request" + re.getMessage());
return new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage()); return new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage());
} }
}
uri = session.getUri(); uri = session.getUri();
method = session.getMethod(); method = session.getMethod();
header = session.getHeaders(); header = session.getHeaders();
parameters = session.getParms(); parameters = session.getParms();
Log.v(TAG, "WebServer.serve() - uri=" + uri + " Method=" + method.toString()); Log.v(TAG, "WebServer.serve() - uri=" + uri + " Method=" + method.toString());
String answer = "Error - you should not see this message! - Something wrong in WebServer.serve()"; String answer = "{'msg': 'Error - you should not see this message! - Something wrong in WebServer.serve()'}";
Iterator it = parameters.keySet().iterator(); Iterator it = parameters.keySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
@@ -80,10 +88,11 @@ public class SdWebServer extends NanoHTTPD {
case GET: case GET:
//Log.v(TAG,"WebServer.serve() - Returning data"); //Log.v(TAG,"WebServer.serve() - Returning data");
try { try {
Log.v(TAG, "WebServer.serve() - GET /data - sending " + mSdData.toString());
answer = mSdData.toString(); answer = mSdData.toString();
} catch (Exception ex) { } catch (Exception ex) {
Log.v(TAG, "Error Creating Data Object - " + ex.toString()); Log.v(TAG, "Error Creating Data Object - " + ex.toString());
answer = "Error Creating Data Object"; answer = "{'msg': 'Error Creating Data Object'}";
} }
break; break;
case POST: case POST:
@@ -124,7 +133,7 @@ public class SdWebServer extends NanoHTTPD {
answer = jsonObj.toString(); answer = jsonObj.toString();
} catch (Exception ex) { } catch (Exception ex) {
Log.v(TAG, "Error Creating Data Object - " + ex.toString()); Log.v(TAG, "Error Creating Data Object - " + ex.toString());
answer = "Error Creating Data Object"; answer = "{'msg': 'Error Creating Data Object'}";
} }
break; break;
case POST: case POST:
@@ -144,6 +153,7 @@ public class SdWebServer extends NanoHTTPD {
default: default:
Log.v(TAG, "WebServer.serve() - Unrecognised method - " + method); Log.v(TAG, "WebServer.serve() - Unrecognised method - " + method);
} }
break;
case "/spectrum": case "/spectrum":
Log.v(TAG, "WebServer.serve() - Returning spectrum - 1"); Log.v(TAG, "WebServer.serve() - Returning spectrum - 1");
try { try {
@@ -162,14 +172,14 @@ public class SdWebServer extends NanoHTTPD {
Log.v(TAG, "WebServer.serve() - Returning spectrum - 5" + answer); Log.v(TAG, "WebServer.serve() - Returning spectrum - 5" + answer);
} catch (Exception ex) { } catch (Exception ex) {
Log.v(TAG, "Error Creating Data Object - " + ex.toString()); Log.v(TAG, "Error Creating Data Object - " + ex.toString());
answer = "Error Creating Data Object"; answer = "{'msg' : 'Error Creating Data Object'}";
} }
break; break;
case "/acceptalarm": case "/acceptalarm":
Log.v(TAG, "WebServer.serve() - Accepting alarm"); Log.v(TAG, "WebServer.serve() - Accepting alarm");
mSdServer.acceptAlarm(); mSdServer.acceptAlarm();
answer = "Alarm Accepted"; answer = "{'msg' : 'Alarm Accepted'}";
break; break;
default: default:
@@ -189,11 +199,13 @@ public class SdWebServer extends NanoHTTPD {
} else { } else {
Log.v(TAG, "WebServer.serve() - Unknown uri -" + Log.v(TAG, "WebServer.serve() - Unknown uri -" +
uri); uri);
answer = "Unknown URI: "; answer = "{'msg' : 'Unknown URI: '}";
} }
} }
Log.v(TAG,"WebServer.serve() - returning "+answer); res = new NanoHTTPD.Response(answer);
return new NanoHTTPD.Response(answer); res.setMimeType(responseMimeType);
Log.v(TAG,"WebServer.serve() - returning "+res.getData()+", mime="+res.getMimeType()+", status="+res.getStatus());
return (res);
} }