diff --git a/app/src/main/assets/logback.xml b/app/src/main/assets/logback.xml
index c6703356..713bb057 100644
--- a/app/src/main/assets/logback.xml
+++ b/app/src/main/assets/logback.xml
@@ -4,7 +4,7 @@
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{1} - %msg%n
+ %msg
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractBTDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractBTDeviceSupport.java
index 8c9665c5..487e3408 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractBTDeviceSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractBTDeviceSupport.java
@@ -1,11 +1,27 @@
package nodomain.freeyourgadget.gadgetbridge;
+import android.content.Context;
+import android.content.Intent;
+import android.support.v4.content.LocalBroadcastManager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.UUID;
+import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommand;
+import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandAppInfo;
+import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandCallControl;
+import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandMusicControl;
+import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandSendBytes;
+import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandSleepMonitorResult;
+import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandVersionInfo;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceProtocol;
public abstract class AbstractBTDeviceSupport extends AbstractDeviceSupport {
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractDeviceSupport.class);
+
private GBDeviceProtocol gbDeviceProtocol;
private GBDeviceIoThread gbDeviceIOThread;
@@ -53,6 +69,95 @@ public abstract class AbstractBTDeviceSupport extends AbstractDeviceSupport {
}
}
+
+ public void handleGBDeviceCommand(GBDeviceCommandMusicControl musicCmd) {
+ Context context = getContext();
+ LOG.info("Got command for MUSIC_CONTROL");
+ Intent musicIntent = new Intent(GBMusicControlReceiver.ACTION_MUSICCONTROL);
+ musicIntent.putExtra("command", musicCmd.command.ordinal());
+ musicIntent.setPackage(context.getPackageName());
+ context.sendBroadcast(musicIntent);
+ }
+
+ public void handleGBDeviceCommand(GBDeviceCommandCallControl callCmd) {
+ Context context = getContext();
+ LOG.info("Got command for CALL_CONTROL");
+ Intent callIntent = new Intent(GBCallControlReceiver.ACTION_CALLCONTROL);
+ callIntent.putExtra("command", callCmd.command.ordinal());
+ callIntent.setPackage(context.getPackageName());
+ context.sendBroadcast(callIntent);
+ }
+
+ public void handleGBDeviceCommand(GBDeviceCommandVersionInfo infoCmd) {
+ Context context = getContext();
+ LOG.info("Got command for VERSION_INFO");
+ if (gbDevice == null) {
+ return;
+ }
+ gbDevice.setFirmwareVersion(infoCmd.fwVersion);
+ gbDevice.setHardwareVersion(infoCmd.hwVersion);
+ gbDevice.sendDeviceUpdateIntent(context);
+ }
+
+ public void handleGBDeviceCommand(GBDeviceCommandAppInfo appInfoCmd) {
+ Context context = getContext();
+ LOG.info("Got command for APP_INFO");
+
+ Intent appInfoIntent = new Intent(AppManagerActivity.ACTION_REFRESH_APPLIST);
+ int appCount = appInfoCmd.apps.length;
+ appInfoIntent.putExtra("app_count", appCount);
+ for (Integer i = 0; i < appCount; i++) {
+ appInfoIntent.putExtra("app_name" + i.toString(), appInfoCmd.apps[i].getName());
+ appInfoIntent.putExtra("app_creator" + i.toString(), appInfoCmd.apps[i].getCreator());
+ appInfoIntent.putExtra("app_uuid" + i.toString(), appInfoCmd.apps[i].getUUID().toString());
+ appInfoIntent.putExtra("app_type" + i.toString(), appInfoCmd.apps[i].getType().ordinal());
+ }
+ LocalBroadcastManager.getInstance(context).sendBroadcast(appInfoIntent);
+ }
+
+ public void handleGBDeviceCommand(GBDeviceCommandSleepMonitorResult sleepMonitorResult) {
+ Context context = getContext();
+ LOG.info("Got command for SLEEP_MONIOR_RES");
+ Intent sleepMontiorIntent = new Intent(SleepMonitorActivity.ACTION_REFRESH);
+ sleepMontiorIntent.putExtra("smartalarm_from", sleepMonitorResult.smartalarm_from);
+ sleepMontiorIntent.putExtra("smartalarm_to", sleepMonitorResult.smartalarm_to);
+ sleepMontiorIntent.putExtra("recording_base_timestamp", sleepMonitorResult.recording_base_timestamp);
+ sleepMontiorIntent.putExtra("alarm_gone_off", sleepMonitorResult.alarm_gone_off);
+ sleepMontiorIntent.putExtra("points", sleepMonitorResult.points);
+
+ LocalBroadcastManager.getInstance(context).sendBroadcast(sleepMontiorIntent);
+ }
+
+ public void handleGBDeviceCommand(GBDeviceCommandSendBytes sendBytes) {
+ sendToDevice(sendBytes.encodedBytes);
+ }
+
+ public void evaluateGBDeviceCommand(GBDeviceCommand deviceCmd) {
+
+ switch (deviceCmd.commandClass) {
+ case MUSIC_CONTROL:
+ handleGBDeviceCommand((GBDeviceCommandMusicControl) deviceCmd);
+ break;
+ case CALL_CONTROL:
+ handleGBDeviceCommand((GBDeviceCommandCallControl) deviceCmd);
+ break;
+ case VERSION_INFO:
+ handleGBDeviceCommand((GBDeviceCommandVersionInfo) deviceCmd);
+ break;
+ case APP_INFO:
+ handleGBDeviceCommand((GBDeviceCommandAppInfo) deviceCmd);
+ break;
+ case SLEEP_MONITOR_RES:
+ handleGBDeviceCommand((GBDeviceCommandSleepMonitorResult) deviceCmd);
+ break;
+ case SEND_BYTES:
+ handleGBDeviceCommand((GBDeviceCommandSendBytes) deviceCmd);
+ break;
+ default:
+ break;
+ }
+ }
+
@Override
public void onSMS(String from, String body) {
byte[] bytes = gbDeviceProtocol.encodeSMS(from, body);
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java
index 8dd73618..8700cdf9 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java
@@ -7,7 +7,7 @@ import android.content.Context;
// conditions: app was running and received notifications, but device was not connected.
// maybe need to check for "unread notifications" on device for that.
public abstract class AbstractDeviceSupport implements DeviceSupport {
- private GBDevice gbDevice;
+ protected GBDevice gbDevice;
private BluetoothAdapter btAdapter;
private Context context;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/MorpheuzSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/MorpheuzSupport.java
index 15a42eb9..4056ff32 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/MorpheuzSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/MorpheuzSupport.java
@@ -25,11 +25,13 @@ public class MorpheuzSupport {
public static final int KEY_VERSION = 6;
public static final int KEY_GONEOFF = 7;
public static final int KEY_TRANSMIT = 8;
+
public static final int CTRL_TRANSMIT_DONE = 1;
public static final int CTRL_VERSION_DONE = 2;
public static final int CTRL_GONEOFF_DONE = 4;
public static final int CTRL_DO_NEXT = 8;
public static final int CTRL_SET_LAST_SENT = 16;
+
public static final UUID uuid = UUID.fromString("5be44f1d-d262-4ea6-aa30-ddbec1e3cab2");
private final PebbleProtocol mPebbleProtocol;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleIoThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleIoThread.java
index 25fae854..f94980ac 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleIoThread.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleIoThread.java
@@ -13,7 +13,6 @@ import android.net.Uri;
import android.os.ParcelUuid;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
-import android.support.v4.content.LocalBroadcastManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,26 +25,19 @@ import java.nio.ByteOrder;
import java.util.zip.ZipInputStream;
import nodomain.freeyourgadget.gadgetbridge.AppManagerActivity;
-import nodomain.freeyourgadget.gadgetbridge.GBCallControlReceiver;
import nodomain.freeyourgadget.gadgetbridge.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.GBDeviceIoThread;
-import nodomain.freeyourgadget.gadgetbridge.GBMusicControlReceiver;
import nodomain.freeyourgadget.gadgetbridge.R;
-import nodomain.freeyourgadget.gadgetbridge.SleepMonitorActivity;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommand;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandAppInfo;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandAppManagementResult;
-import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandCallControl;
-import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandMusicControl;
-import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandSendBytes;
-import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandSleepMonitorResult;
-import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandVersionInfo;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceProtocol;
public class PebbleIoThread extends GBDeviceIoThread {
private static final Logger LOG = LoggerFactory.getLogger(PebbleIoThread.class);
private static final int NOTIFICATION_ID = 2;
private final PebbleProtocol mPebbleProtocol;
+ private final PebbleSupport mPebbleSupport;
private BluetoothAdapter mBtAdapter = null;
private BluetoothSocket mBtSocket = null;
private InputStream mInStream = null;
@@ -67,10 +59,11 @@ public class PebbleIoThread extends GBDeviceIoThread {
private int mBinarySize = -1;
private int mBytesWritten = -1;
- public PebbleIoThread(GBDevice gbDevice, GBDeviceProtocol gbDeviceProtocol, BluetoothAdapter btAdapter, Context context) {
+ public PebbleIoThread(PebbleSupport pebbleSupport, GBDevice gbDevice, GBDeviceProtocol gbDeviceProtocol, BluetoothAdapter btAdapter, Context context) {
super(gbDevice, context);
mPebbleProtocol = (PebbleProtocol) gbDeviceProtocol;
mBtAdapter = btAdapter;
+ mPebbleSupport = pebbleSupport;
}
public static Notification createInstallNotification(String text, boolean ongoing,
@@ -268,7 +261,9 @@ public class PebbleIoThread extends GBDeviceIoThread {
if (deviceCmd == null) {
LOG.info("unhandled message to endpoint " + endpoint + " (" + length + " bytes)");
} else {
- evaluateGBDeviceCommand(deviceCmd);
+ if (!evaluateGBDeviceCommandPebble(deviceCmd)) {
+ mPebbleSupport.evaluateGBDeviceCommand(deviceCmd);
+ }
}
try {
Thread.sleep(100);
@@ -321,71 +316,11 @@ public class PebbleIoThread extends GBDeviceIoThread {
}
}
- // FIXME: this does not belong here in this class, it is supporsed to be generic code
- private void evaluateGBDeviceCommand(GBDeviceCommand deviceCmd) {
+ // FIXME: parts are supporsed to be generic code
+ private boolean evaluateGBDeviceCommandPebble(GBDeviceCommand deviceCmd) {
Context context = getContext();
switch (deviceCmd.commandClass) {
- case MUSIC_CONTROL:
- LOG.info("Got command for MUSIC_CONTROL");
- GBDeviceCommandMusicControl musicCmd = (GBDeviceCommandMusicControl) deviceCmd;
- Intent musicIntent = new Intent(GBMusicControlReceiver.ACTION_MUSICCONTROL);
- musicIntent.putExtra("command", musicCmd.command.ordinal());
- musicIntent.setPackage(context.getPackageName());
- context.sendBroadcast(musicIntent);
- break;
- case CALL_CONTROL:
- LOG.info("Got command for CALL_CONTROL");
- GBDeviceCommandCallControl callCmd = (GBDeviceCommandCallControl) deviceCmd;
- Intent callIntent = new Intent(GBCallControlReceiver.ACTION_CALLCONTROL);
- callIntent.putExtra("command", callCmd.command.ordinal());
- callIntent.setPackage(context.getPackageName());
- context.sendBroadcast(callIntent);
- break;
- case VERSION_INFO:
- LOG.info("Got command for VERSION_INFO");
- if (gbDevice == null) {
- return;
- }
- GBDeviceCommandVersionInfo infoCmd = (GBDeviceCommandVersionInfo) deviceCmd;
- gbDevice.setFirmwareVersion(infoCmd.fwVersion);
- gbDevice.setHardwareVersion(infoCmd.hwVersion);
- gbDevice.sendDeviceUpdateIntent(context);
- break;
- case APP_INFO:
- LOG.info("Got command for APP_INFO");
- GBDeviceCommandAppInfo appInfoCmd = (GBDeviceCommandAppInfo) deviceCmd;
- setInstallSlot(appInfoCmd.freeSlot); // FIXME: Pebble specific
-
- Intent appInfoIntent = new Intent(AppManagerActivity.ACTION_REFRESH_APPLIST);
- int appCount = appInfoCmd.apps.length;
- appInfoIntent.putExtra("app_count", appCount);
- for (Integer i = 0; i < appCount; i++) {
- appInfoIntent.putExtra("app_name" + i.toString(), appInfoCmd.apps[i].getName());
- appInfoIntent.putExtra("app_creator" + i.toString(), appInfoCmd.apps[i].getCreator());
- appInfoIntent.putExtra("app_uuid" + i.toString(), appInfoCmd.apps[i].getUUID().toString());
- appInfoIntent.putExtra("app_type" + i.toString(), appInfoCmd.apps[i].getType().ordinal());
- }
- LocalBroadcastManager.getInstance(context).sendBroadcast(appInfoIntent);
- break;
- case SLEEP_MONITOR_RES:
- LOG.info("Got command for SLEEP_MONIOR_RES");
- GBDeviceCommandSleepMonitorResult sleepMonitorResult = (GBDeviceCommandSleepMonitorResult) deviceCmd;
-
- Intent sleepMontiorIntent = new Intent(SleepMonitorActivity.ACTION_REFRESH);
- sleepMontiorIntent.putExtra("smartalarm_from", sleepMonitorResult.smartalarm_from);
- sleepMontiorIntent.putExtra("smartalarm_to", sleepMonitorResult.smartalarm_to);
- sleepMontiorIntent.putExtra("recording_base_timestamp", sleepMonitorResult.recording_base_timestamp);
- sleepMontiorIntent.putExtra("alarm_gone_off", sleepMonitorResult.alarm_gone_off);
- sleepMontiorIntent.putExtra("points", sleepMonitorResult.points);
-
- LocalBroadcastManager.getInstance(context).sendBroadcast(sleepMontiorIntent);
- break;
- case SEND_BYTES:
- GBDeviceCommandSendBytes sendBytes = (GBDeviceCommandSendBytes) deviceCmd;
- write(sendBytes.encodedBytes);
- break;
-
case APP_MANAGEMENT_RES:
GBDeviceCommandAppManagementResult appMgmtRes = (GBDeviceCommandAppManagementResult) deviceCmd;
switch (appMgmtRes.type) {
@@ -421,8 +356,14 @@ public class PebbleIoThread extends GBDeviceIoThread {
default:
break;
}
+ return true;
+ case APP_INFO:
+ LOG.info("Got command for APP_INFO");
+ GBDeviceCommandAppInfo appInfoCmd = (GBDeviceCommandAppInfo) deviceCmd;
+ setInstallSlot(appInfoCmd.freeSlot);
+ return false;
default:
- break;
+ return false;
}
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleProtocol.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleProtocol.java
index 258695f5..0796d9bd 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleProtocol.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleProtocol.java
@@ -545,7 +545,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
private byte[] encodeApplicationMessageWeatherNeatTest() {
// encode push message for WeatherNeat
- ArrayList> pairs = new ArrayList<>();
+ ArrayList> pairs = new ArrayList<>(4);
pairs.add(new Pair<>(1, (Object) "Gadgetbridge")); // city
pairs.add(new Pair<>(2, (Object) "-22C")); // temperature
pairs.add(new Pair<>(3, (Object) "this is just a stupid test")); // condition
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java
index 4e621f11..1d55c4af 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java
@@ -19,7 +19,7 @@ public class PebbleSupport extends AbstractBTDeviceSupport {
@Override
protected GBDeviceIoThread createDeviceIOThread() {
- return new PebbleIoThread(getDevice(), getDeviceProtocol(), getBluetoothAdapter(), getContext());
+ return new PebbleIoThread(PebbleSupport.this, getDevice(), getDeviceProtocol(), getBluetoothAdapter(), getContext());
}
@Override