From d6b9e6d64b9c60e23c1b5ed093d65f5a9046f1a4 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Fri, 28 Oct 2016 00:32:45 +0200 Subject: [PATCH] Pebble: Support sending byte arrays from app configuration data Also add debug output if trying to encode unknown classes in PebbleProtocol (Fixes #421) --- .../service/devices/pebble/PebbleProtocol.java | 3 +++ .../service/devices/pebble/PebbleSupport.java | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java index a2a7e73f5..57c58b70d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java @@ -1645,6 +1645,9 @@ public class PebbleProtocol extends GBDeviceProtocol { } else if (pair.second instanceof byte[]) { length += ((byte[]) pair.second).length; } + else { + LOG.warn("unknown type: " + pair.second.getClass().toString()); + } } ByteBuffer buf = ByteBuffer.allocate(LENGTH_PREFIX + length); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java index a6beb9ffa..dcf14ada3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java @@ -3,6 +3,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.pebble; import android.net.Uri; import android.util.Pair; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -59,6 +60,14 @@ public class PebbleSupport extends AbstractSerialDeviceSupport { while (keysIterator.hasNext()) { String keyStr = keysIterator.next(); Object object = json.get(keyStr); + if (object instanceof JSONArray) { + JSONArray jsonArray = (JSONArray) object; + byte[] byteArray = new byte[jsonArray.length()]; + for (int i = 0; i < jsonArray.length(); i++) { + byteArray[i] = ((Integer) jsonArray.get(i)).byteValue(); + } + object = byteArray; + } pairs.add(new Pair<>(Integer.parseInt(keyStr), object)); } getDeviceIOThread().write(((PebbleProtocol) getDeviceProtocol()).encodeApplicationMessagePush(PebbleProtocol.ENDPOINT_APPLICATIONMESSAGE, uuid, pairs));