diff --git a/res/xml/device_filter.xml b/res/xml/device_filter.xml index 614e3abf..9d15bf9e 100644 --- a/res/xml/device_filter.xml +++ b/res/xml/device_filter.xml @@ -14,5 +14,5 @@ limitations under the License. --> - + diff --git a/src/com/nightscout/android/dexcom/USB/UsbSerialProber.java b/src/com/nightscout/android/dexcom/USB/UsbSerialProber.java index e20b7135..c1bdfc13 100644 --- a/src/com/nightscout/android/dexcom/USB/UsbSerialProber.java +++ b/src/com/nightscout/android/dexcom/USB/UsbSerialProber.java @@ -23,6 +23,7 @@ import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; +import android.util.Log; import java.util.Map; @@ -86,6 +87,8 @@ public UsbSerialDriver getDevice(final UsbManager manager, final UsbDevice usbDe } };*/ + private static final String TAG = UsbSerialProber.class.getSimpleName(); + /** * Builds a new {@link UsbSerialDriver} instance from the raw device, or * returns null if it could not be built (for example, if the @@ -128,6 +131,10 @@ public static UsbSerialDriver acquire(final UsbManager usbManager) { * could be acquired */ public static UsbSerialDriver acquire(final UsbManager usbManager, final UsbDevice usbDevice) { + if (!usbManager.hasPermission(usbDevice)) { + Log.i(TAG, "No permission for " + usbDevice.getVendorId() + " " + usbDevice.getProductId()); + return null; + } for (final UsbSerialProber prober : values()) { final UsbSerialDriver probedDevice = prober.getDevice(usbManager, usbDevice); if (probedDevice != null) { diff --git a/src/com/nightscout/android/upload/UploadHelper.java b/src/com/nightscout/android/upload/UploadHelper.java index 5490bbcb..06d360da 100644 --- a/src/com/nightscout/android/upload/UploadHelper.java +++ b/src/com/nightscout/android/upload/UploadHelper.java @@ -63,8 +63,13 @@ protected void onPostExecute(Long result) { private void doRESTUpload(SharedPreferences prefs, EGVRecord... records) { try { - String baseURL = prefs.getString("API Base URL", ""); - String postURL = baseURL + (baseURL.endsWith("/") ? "" : "/") + "entries"; + String baseURLSetting = prefs.getString("API Base URL", ""); + String baseURL = baseURLSetting + (baseURLSetting.endsWith("/") ? "" : "/"); + + int apiVersion = 0; + if (baseURL.endsWith("/v1/")) apiVersion = 1; + + String postURL = baseURL + "entries"; Log.i(TAG, "postURL: " + postURL); HttpParams params = new BasicHttpParams(); @@ -76,12 +81,17 @@ private void doRESTUpload(SharedPreferences prefs, EGVRecord... records) { HttpPost post = new HttpPost(postURL); for (EGVRecord record : records) { - Date date = DATE_FORMAT.parse(record.displayTime); JSONObject json = new JSONObject(); - json.put("device", "dexcom"); - json.put("timestamp", date.getTime()); - json.put("bg", Integer.parseInt(record.bGValue)); - json.put("direction", record.trend); + + try { + if (apiVersion >= 1) + populateV1APIEntry(json, record); + else + populateLegacyAPIEntry(json, record); + } catch (Exception e) { + Log.w(TAG, "Unable to populate entry, apiVersion: " + apiVersion, e); + continue; + } String jsonString = json.toString(); @@ -104,6 +114,22 @@ private void doRESTUpload(SharedPreferences prefs, EGVRecord... records) { } } + private void populateV1APIEntry(JSONObject json, EGVRecord record) throws Exception { + Date date = DATE_FORMAT.parse(record.displayTime); + json.put("device", "dexcom"); + json.put("timestamp", date.getTime()); + json.put("sgv", Integer.parseInt(record.bGValue)); + json.put("direction", record.trend); + } + + private void populateLegacyAPIEntry(JSONObject json, EGVRecord record) throws Exception { + Date date = DATE_FORMAT.parse(record.displayTime); + json.put("device", "dexcom"); + json.put("timestamp", date.getTime()); + json.put("bg", Integer.parseInt(record.bGValue)); + json.put("direction", record.trend); + } + private void doMongoUpload(SharedPreferences prefs, EGVRecord... records) { String dbURI = prefs.getString("MongoDB URI", null);