From b79b94809af07d6910f423424032433eb373d2e2 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Thu, 16 Jun 2016 00:24:27 +0200 Subject: [PATCH] initial support for FW 4.0-dp1 --- .../pebble/AppMessageHandlerMisfit.java | 2 +- .../devices/pebble/PebbleIoThread.java | 4 +-- .../devices/pebble/PebbleProtocol.java | 29 +++++++++---------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java index 1a7e4b97..adc42650 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java @@ -69,7 +69,7 @@ public class AppMessageHandlerMisfit extends AppMessageHandler { break; } - if (!mPebbleProtocol.isFw3x) { + if (mPebbleProtocol.mFwMajor < 3) { timestamp -= SimpleTimeZone.getDefault().getOffset(timestamp * 1000L) / 1000; } Date startDate = new Date((long) timestamp * 1000L); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java index fcc19641..e7fd0d7e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java @@ -296,7 +296,7 @@ public class PebbleIoThread extends GBDeviceIoThread { if (mPBWReader.isFirmware()) { writeInstallApp(mPebbleProtocol.encodeInstallFirmwareComplete()); finishInstall(false); - } else if (mPBWReader.isLanguage() || mPebbleProtocol.isFw3x) { + } else if (mPBWReader.isLanguage() || mPebbleProtocol.mFwMajor >= 3) { finishInstall(false); // FIXME: dont know yet how to detect success } else { writeInstallApp(mPebbleProtocol.encodeAppRefresh(mInstallSlot)); @@ -614,7 +614,7 @@ public class PebbleIoThread extends GBDeviceIoThread { writeInstallApp(mPebbleProtocol.encodeGetTime()); } else { GBDeviceApp app = mPBWReader.getGBDeviceApp(); - if (mPebbleProtocol.isFw3x && !mPBWReader.isLanguage()) { + if (mPebbleProtocol.mFwMajor >= 3 && !mPBWReader.isLanguage()) { if (appId == 0) { // only install metadata - not the binaries write(mPebbleProtocol.encodeInstallMetadata(app.getUUID(), app.getName(), mPBWReader.getAppVersion(), mPBWReader.getSdkVersion(), mPBWReader.getFlags(), mPBWReader.getIconId())); 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 95ff6628..1a882db1 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 @@ -262,7 +262,7 @@ public class PebbleProtocol extends GBDeviceProtocol { private static final Random mRandom = new Random(); - boolean isFw3x = false; + int mFwMajor = 3; boolean mForceProtocol = false; GBDeviceEventScreenshot mDevEventScreenshot = null; int mScreenshotRemaining = -1; @@ -453,12 +453,12 @@ public class PebbleProtocol extends GBDeviceProtocol { } Long ts = System.currentTimeMillis(); - if (!isFw3x) { + if (mFwMajor < 3) { ts += (SimpleTimeZone.getDefault().getOffset(ts)); } ts /= 1000; - if (isFw3x) { + if (mFwMajor >= 3) { // 3.x notification return encodeBlobdbNotification(id, (int) (ts & 0xffffffffL), title, subtitle, notificationSpec.body, notificationSpec.sourceName, hasHandle, notificationSpec.type, notificationSpec.cannedReplies); } else if (mForceProtocol || notificationSpec.type != NotificationType.EMAIL) { @@ -500,7 +500,7 @@ public class PebbleProtocol extends GBDeviceProtocol { long ts = System.currentTimeMillis(); long ts_offset = (SimpleTimeZone.getDefault().getOffset(ts)); ByteBuffer buf; - if (isFw3x) { + if (mFwMajor >= 3) { String timezone = SimpleTimeZone.getDefault().getID(); short length = (short) (LENGTH_SETTIME + timezone.getBytes().length + 3); buf = ByteBuffer.allocate(LENGTH_PREFIX + length); @@ -1194,7 +1194,7 @@ public class PebbleProtocol extends GBDeviceProtocol { @Override public byte[] encodeAppInfoReq() { - if (isFw3x) { + if (mFwMajor >= 3) { return null; // can't do this on 3.x :( } return encodeSimpleMessage(ENDPOINT_APPMANAGER, APPMANAGER_GETUUIDS); @@ -1202,7 +1202,7 @@ public class PebbleProtocol extends GBDeviceProtocol { @Override public byte[] encodeAppStart(UUID uuid, boolean start) { - if (isFw3x) { + if (mFwMajor >= 3) { ByteBuffer buf = ByteBuffer.allocate(LENGTH_PREFIX + LENGTH_APPRUNSTATE); buf.order(ByteOrder.BIG_ENDIAN); buf.putShort(LENGTH_APPRUNSTATE); @@ -1221,7 +1221,7 @@ public class PebbleProtocol extends GBDeviceProtocol { @Override public byte[] encodeAppDelete(UUID uuid) { - if (isFw3x) { + if (mFwMajor >= 3) { if (UUID_PEBBLE_HEALTH.equals(uuid)) { return encodeActivateHealth(false); } @@ -1317,7 +1317,7 @@ public class PebbleProtocol extends GBDeviceProtocol { /* pebble specific install methods */ public byte[] encodeUploadStart(byte type, int app_id, int size, String filename) { short length; - if (isFw3x && (type != PUTBYTES_TYPE_FILE)) { + if (mFwMajor >= 3 && (type != PUTBYTES_TYPE_FILE)) { length = LENGTH_UPLOADSTART_3X; type |= 0b10000000; } else { @@ -1336,7 +1336,7 @@ public class PebbleProtocol extends GBDeviceProtocol { buf.putInt(size); buf.put(type); - if (isFw3x && (type != PUTBYTES_TYPE_FILE)) { + if (mFwMajor >= 3 && (type != PUTBYTES_TYPE_FILE)) { buf.putInt(app_id); } else { // slot @@ -1724,7 +1724,7 @@ public class PebbleProtocol extends GBDeviceProtocol { int id; long uuid_high = 0; long uuid_low = 0; - if (isFw3x) { + if (mFwMajor >= 3) { buf.order(ByteOrder.BIG_ENDIAN); uuid_high = buf.getLong(); uuid_low = buf.getLong(); @@ -1792,9 +1792,9 @@ public class PebbleProtocol extends GBDeviceProtocol { break; } GBDeviceEventSendBytes sendBytesAck = null; - if (isFw3x || needsAck2x) { + if (mFwMajor >= 3 || needsAck2x) { sendBytesAck = new GBDeviceEventSendBytes(); - if (isFw3x) { + if (mFwMajor >= 3) { sendBytesAck.encodedBytes = encodeActionResponse(new UUID(uuid_high, uuid_low), icon_id, caption); } else { sendBytesAck.encodedBytes = encodeActionResponse2x(id, action, 6, caption); @@ -2040,9 +2040,8 @@ public class PebbleProtocol extends GBDeviceProtocol { buf.get(tmp, 0, 32); versionCmd.fwVersion = new String(tmp).trim(); - if (versionCmd.fwVersion.startsWith("v3")) { - isFw3x = true; - } + + mFwMajor = versionCmd.fwVersion.charAt(1); buf.get(tmp, 0, 9); int hwRev = buf.get() + 8;