diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java
index 690934609..0be66cd6f 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java
@@ -80,6 +80,11 @@ public class HPlusCoordinator extends AbstractDeviceCoordinator {
return DeviceType.UNKNOWN;
}
+ @Override
+ public int getBondingStyle(GBDevice deviceCandidate){
+ return BONDING_STYLE_NONE;
+ }
+
@Override
public DeviceType getDeviceType() {
return DeviceType.HPLUS;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/BluetoothPairingRequestReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/BluetoothPairingRequestReceiver.java
new file mode 100644
index 000000000..f322e7f5b
--- /dev/null
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/BluetoothPairingRequestReceiver.java
@@ -0,0 +1,73 @@
+/* Copyright (C) 2015-2017 João Paulo Barraca
+
+ This file is part of Gadgetbridge.
+
+ Gadgetbridge is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Gadgetbridge is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see . */
+package nodomain.freeyourgadget.gadgetbridge.externalevents;
+
+import android.bluetooth.BluetoothDevice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
+import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
+import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
+import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
+import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
+
+/**
+ * Created by jpbarraca on 13/04/2017.
+ */
+
+public class BluetoothPairingRequestReceiver extends BroadcastReceiver {
+
+
+ private static final Logger LOG = LoggerFactory.getLogger(BluetoothConnectReceiver.class);
+
+ final DeviceCommunicationService service;
+
+ public BluetoothPairingRequestReceiver(DeviceCommunicationService service) {
+ this.service = service;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+
+ if (!action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
+ return;
+ }
+
+ GBDevice gbDevice = service.getGBDevice();
+ BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+ if (gbDevice == null || device == null)
+ return;
+
+ DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(gbDevice);
+ try {
+ if (coordinator.getBondingStyle(gbDevice) == DeviceCoordinator.BONDING_STYLE_NONE) {
+ LOG.info("Aborting unwanted pairing request");
+ abortBroadcast();
+ }
+ } catch (Exception e) {
+ LOG.warn("Could not abort pairing request process");
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java
index 7fb8a4d68..e04133e2e 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java
@@ -44,6 +44,7 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.externalevents.AlarmClockReceiver;
import nodomain.freeyourgadget.gadgetbridge.externalevents.AlarmReceiver;
import nodomain.freeyourgadget.gadgetbridge.externalevents.BluetoothConnectReceiver;
+import nodomain.freeyourgadget.gadgetbridge.externalevents.BluetoothPairingRequestReceiver;
import nodomain.freeyourgadget.gadgetbridge.externalevents.MusicPlaybackReceiver;
import nodomain.freeyourgadget.gadgetbridge.externalevents.PebbleReceiver;
import nodomain.freeyourgadget.gadgetbridge.externalevents.PhoneCallReceiver;
@@ -164,6 +165,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
private MusicPlaybackReceiver mMusicPlaybackReceiver = null;
private TimeChangeReceiver mTimeChangeReceiver = null;
private BluetoothConnectReceiver mBlueToothConnectReceiver = null;
+ private BluetoothPairingRequestReceiver mBlueToothPairingRequestReceiver = null;
private AlarmClockReceiver mAlarmClockReceiver = null;
private AlarmReceiver mAlarmReceiver = null;
@@ -609,6 +611,11 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
mBlueToothConnectReceiver = new BluetoothConnectReceiver(this);
registerReceiver(mBlueToothConnectReceiver, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED));
}
+ if (mBlueToothPairingRequestReceiver == null) {
+ mBlueToothPairingRequestReceiver = new BluetoothPairingRequestReceiver(this);
+ registerReceiver(mBlueToothPairingRequestReceiver, new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST));
+ }
+
if (mAlarmReceiver == null) {
mAlarmReceiver = new AlarmReceiver();
registerReceiver(mAlarmReceiver, new IntentFilter("DAILY_ALARM"));
@@ -645,6 +652,12 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
unregisterReceiver(mBlueToothConnectReceiver);
mBlueToothConnectReceiver = null;
}
+
+ if (mBlueToothPairingRequestReceiver != null) {
+ unregisterReceiver(mBlueToothPairingRequestReceiver);
+ mBlueToothPairingRequestReceiver = null;
+ }
+
if (mAlarmReceiver != null) {
unregisterReceiver(mAlarmReceiver);
mAlarmReceiver = null;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BleNamesResolver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BleNamesResolver.java
index 66d24cd40..9bdc0f885 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BleNamesResolver.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BleNamesResolver.java
@@ -101,6 +101,7 @@ public class BleNamesResolver {
mServices.put("00001804-0000-1000-8000-00805f9b34fb", "Tx Power");
mServices.put("0000fee0-0000-3512-2118-0009af100700", "(Propr: Xiaomi MiLi Service)");
mServices.put("00001530-0000-3512-2118-0009af100700", "(Propr: Xiaomi Weight Service)");
+ mServices.put("14701820-620a-3973-7c78-9cfff0876abd", "(Propr: HPLUS Service)");
mCharacteristics.put("00002a43-0000-1000-8000-00805f9b34fb", "Alert AlertCategory ID");
@@ -185,6 +186,8 @@ public class BleNamesResolver {
mCharacteristics.put("00002a07-0000-1000-8000-00805f9b34fb", "Tx Power Level");
mCharacteristics.put("00002a45-0000-1000-8000-00805f9b34fb", "Unread Alert Status");
+ mCharacteristics.put("14702856-620a-3973-7c78-9cfff0876abd", "(Propr: HPLUS Control)");
+ mCharacteristics.put("14702853-620a-3973-7c78-9cfff0876abd", "(Propr: HPLUS Measurements)");
mValueFormats.put(Integer.valueOf(52), "32bit float");
mValueFormats.put(Integer.valueOf(50), "16bit float");
mValueFormats.put(Integer.valueOf(34), "16bit signed int");
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusDataRecordDaySlot.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusDataRecordDaySlot.java
index ee3025823..abee8ff55 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusDataRecordDaySlot.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusDataRecordDaySlot.java
@@ -102,4 +102,8 @@ public class HPlusDataRecordDaySlot extends HPlusDataRecord {
secondsInactive += other.secondsInactive;
}
+
+ public boolean isValid(){
+ return steps != 0 || secondsInactive != 0 || heartRate != -1;
+ }
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusHandlerThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusHandlerThread.java
index a8bce80e4..fa8b37440 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusHandlerThread.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusHandlerThread.java
@@ -65,6 +65,8 @@ class HPlusHandlerThread extends GBDeviceIoThread {
private int DAY_SUMMARY_SYNC_PERIOD = 24 * 60 * 60;
private int DAY_SUMMARY_SYNC_RETRY_PERIOD = 30;
+ private int HELLO_PERIOD = 60;
+
private boolean mQuit = false;
private HPlusSupport mHPlusSupport;
@@ -76,6 +78,8 @@ class HPlusHandlerThread extends GBDeviceIoThread {
private Calendar mGetSleepTime = GregorianCalendar.getInstance();
private Calendar mGetDaySummaryTime = GregorianCalendar.getInstance();
+ private Calendar mHelloTime = GregorianCalendar.getInstance();
+
private boolean mSlotsInitialSync = true;
private HPlusDataRecordRealtime prevRealTimeRecord = null;
@@ -88,7 +92,7 @@ class HPlusHandlerThread extends GBDeviceIoThread {
public HPlusHandlerThread(GBDevice gbDevice, Context context, HPlusSupport hplusSupport) {
super(gbDevice, context);
-
+ LOG.info("Initializing HPlus Handler Thread");
mQuit = false;
mHPlusSupport = hplusSupport;
@@ -137,6 +141,10 @@ class HPlusHandlerThread extends GBDeviceIoThread {
requestDaySummaryData();
}
+ if(now.compareTo(mHelloTime) > 0){
+ sendHello();
+ }
+
now = GregorianCalendar.getInstance();
waitTime = Math.min(mGetDaySummaryTime.getTimeInMillis(), Math.min(mGetDaySlotsTime.getTimeInMillis(), mGetSleepTime.getTimeInMillis())) - now.getTimeInMillis();
}
@@ -152,10 +160,14 @@ class HPlusHandlerThread extends GBDeviceIoThread {
}
public void sync() {
+ LOG.info("HPlus: Starting data synchronization");
+
mGetSleepTime.setTimeInMillis(0);
mGetDaySlotsTime.setTimeInMillis(0);
mGetDaySummaryTime.setTimeInMillis(0);
mLastSleepDayReceived.setTimeInMillis(0);
+ mHelloTime = GregorianCalendar.getInstance();
+ mHelloTime.add(Calendar.SECOND, HELLO_PERIOD);
mSlotsInitialSync = true;
mLastSlotReceived = -1;
@@ -163,19 +175,41 @@ class HPlusHandlerThread extends GBDeviceIoThread {
mCurrentDaySlot = null;
mDaySlotRecords.clear();
- TransactionBuilder builder = new TransactionBuilder("startSyncDayStats");
+ try {
+ if(!mHPlusSupport.isConnected())
+ mHPlusSupport.connect();
- builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_DEVICE_ID});
- builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_VERSION});
- builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_CURR_DATA});
+ TransactionBuilder builder = new TransactionBuilder("startSyncDayStats");
- builder.queue(mHPlusSupport.getQueue());
+ builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_DEVICE_ID});
+ builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_VERSION});
+ builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_CURR_DATA});
+
+ builder.queue(mHPlusSupport.getQueue());
+ }catch(Exception e){
+
+ }
synchronized (waitObject) {
waitObject.notify();
}
}
+ public void sendHello(){
+ try {
+ if(!mHPlusSupport.isConnected())
+ mHPlusSupport.connect();
+
+ TransactionBuilder builder = new TransactionBuilder("hello");
+ builder.write(mHPlusSupport.ctrlCharacteristic, HPlusConstants.CMD_ACTION_HELLO);
+ builder.queue(mHPlusSupport.getQueue());
+ }catch(Exception e){
+
+ }
+ mHelloTime = GregorianCalendar.getInstance();
+ mHelloTime.add(Calendar.SECOND, HELLO_PERIOD);
+
+ }
/**
* Process a message containing information regarding a day slot
* A slot summarizes 10 minutes of data
@@ -190,7 +224,7 @@ class HPlusHandlerThread extends GBDeviceIoThread {
try{
record = new HPlusDataRecordDaySlot(data);
} catch(IllegalArgumentException e){
- LOG.debug((e.getMessage()));
+ LOG.info((e.getMessage()));
return false;
}
@@ -254,6 +288,11 @@ class HPlusHandlerThread extends GBDeviceIoThread {
List samples = new ArrayList<>();
for (HPlusDataRecordDaySlot storedRecord : mDaySlotRecords) {
+
+ //Invalid records (no data) will be ignored
+ if(!storedRecord.isValid())
+ continue;
+
HPlusHealthActivitySample sample = createSample(dbHandler, storedRecord.timestamp);
sample.setRawHPlusHealthData(storedRecord.getRawData());
@@ -269,9 +308,9 @@ class HPlusHandlerThread extends GBDeviceIoThread {
mDaySlotRecords.clear();
} catch (GBException ex) {
- LOG.debug((ex.getMessage()));
+ LOG.info((ex.getMessage()));
} catch (Exception ex) {
- LOG.debug(ex.getMessage());
+ LOG.info(ex.getMessage());
}
}
@@ -293,7 +332,7 @@ class HPlusHandlerThread extends GBDeviceIoThread {
try{
record = new HPlusDataRecordSleep(data);
} catch(IllegalArgumentException e){
- LOG.debug((e.getMessage()));
+ LOG.info((e.getMessage()));
return false;
}
@@ -326,7 +365,7 @@ class HPlusHandlerThread extends GBDeviceIoThread {
provider.addGBActivitySample(sample);
} catch (Exception ex) {
- LOG.debug(ex.getMessage());
+ LOG.info(ex.getMessage());
}
mGetSleepTime = GregorianCalendar.getInstance();
@@ -347,7 +386,7 @@ class HPlusHandlerThread extends GBDeviceIoThread {
try{
record = new HPlusDataRecordRealtime(data);
} catch(IllegalArgumentException e){
- LOG.debug((e.getMessage()));
+ LOG.info((e.getMessage()));
return false;
}
@@ -397,9 +436,9 @@ class HPlusHandlerThread extends GBDeviceIoThread {
//TODO: Handle Active Time. With Overlay?
} catch (GBException ex) {
- LOG.debug((ex.getMessage()));
+ LOG.info((ex.getMessage()));
} catch (Exception ex) {
- LOG.debug(ex.getMessage());
+ LOG.info(ex.getMessage());
}
return true;
}
@@ -417,7 +456,7 @@ class HPlusHandlerThread extends GBDeviceIoThread {
try{
record = new HPlusDataRecordDaySummary(data);
} catch(IllegalArgumentException e){
- LOG.debug((e.getMessage()));
+ LOG.info((e.getMessage()));
return false;
}
@@ -437,9 +476,9 @@ class HPlusHandlerThread extends GBDeviceIoThread {
sample.setProvider(provider);
provider.addGBActivitySample(sample);
} catch (GBException ex) {
- LOG.debug((ex.getMessage()));
+ LOG.info((ex.getMessage()));
} catch (Exception ex) {
- LOG.debug(ex.getMessage());
+ LOG.info(ex.getMessage());
}
mGetDaySummaryTime = GregorianCalendar.getInstance();
@@ -468,10 +507,16 @@ class HPlusHandlerThread extends GBDeviceIoThread {
* Issue a message requesting the next batch of sleep data
*/
private void requestNextSleepData() {
- TransactionBuilder builder = new TransactionBuilder("requestSleepStats");
- builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_SLEEP});
- builder.queue(mHPlusSupport.getQueue());
+ try {
+ if(!mHPlusSupport.isConnected())
+ mHPlusSupport.connect();
+ TransactionBuilder builder = new TransactionBuilder("requestSleepStats");
+ builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_SLEEP});
+ builder.queue(mHPlusSupport.getQueue());
+ }catch(Exception e){
+
+ }
mGetSleepTime = GregorianCalendar.getInstance();
mGetSleepTime.add(GregorianCalendar.SECOND, SLEEP_SYNC_RETRY_PERIOD);
@@ -519,19 +564,31 @@ class HPlusHandlerThread extends GBDeviceIoThread {
mLastSlotRequested = nextHour * 6 + (nextMinute / 10);
byte[] msg = new byte[]{HPlusConstants.CMD_GET_ACTIVE_DAY, hour, minute, nextHour, nextMinute};
+ try {
+ if(!mHPlusSupport.isConnected())
+ mHPlusSupport.connect();
- TransactionBuilder builder = new TransactionBuilder("getNextDaySlot");
- builder.write(mHPlusSupport.ctrlCharacteristic, msg);
- builder.queue(mHPlusSupport.getQueue());
+ TransactionBuilder builder = new TransactionBuilder("getNextDaySlot");
+ builder.write(mHPlusSupport.ctrlCharacteristic, msg);
+ builder.queue(mHPlusSupport.getQueue());
+ }catch(Exception e){
+
+ }
}
/**
* Request a batch of data with the summary of the previous days
*/
public void requestDaySummaryData(){
- TransactionBuilder builder = new TransactionBuilder("startSyncDaySummary");
- builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_DAY_DATA});
- builder.queue(mHPlusSupport.getQueue());
+ try {
+ if(!mHPlusSupport.isConnected())
+ mHPlusSupport.connect();
+ TransactionBuilder builder = new TransactionBuilder("startSyncDaySummary");
+ builder.write(mHPlusSupport.ctrlCharacteristic, new byte[]{HPlusConstants.CMD_GET_DAY_DATA});
+ builder.queue(mHPlusSupport.getQueue());
+ }catch(Exception e){
+
+ }
mGetDaySummaryTime = GregorianCalendar.getInstance();
mGetDaySummaryTime.add(Calendar.SECOND, DAY_SUMMARY_SYNC_RETRY_PERIOD);
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java
index 805c952fe..3cb3a881d 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java
@@ -94,8 +94,6 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
deviceType = type;
- addSupportedService(GattService.UUID_SERVICE_GENERIC_ACCESS);
- addSupportedService(GattService.UUID_SERVICE_GENERIC_ATTRIBUTE);
addSupportedService(HPlusConstants.UUID_SERVICE_HP);
LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getContext());
@@ -106,7 +104,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
@Override
public void dispose() {
- LOG.debug("Dispose");
+ LOG.info("Dispose");
LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getContext());
broadcastManager.unregisterReceiver(mReceiver);
@@ -117,7 +115,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
@Override
protected TransactionBuilder initializeDevice(TransactionBuilder builder) {
- LOG.debug("Initializing");
+ LOG.info("Initializing");
builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZING, getContext()));
@@ -424,7 +422,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
@Override
public void onNotification(NotificationSpec notificationSpec) {
//TODO: Show different notifications according to source as Band supports this
- //LOG.debug("OnNotification: Title: "+notificationSpec.title+" Body: "+notificationSpec.body+" Source: "+notificationSpec.sourceName+" Sender: "+notificationSpec.sender+" Subject: "+notificationSpec.subject);
+ //LOG.info("OnNotification: Title: "+notificationSpec.title+" Body: "+notificationSpec.body+" Source: "+notificationSpec.sourceName+" Sender: "+notificationSpec.sender+" Subject: "+notificationSpec.subject);
showText(notificationSpec.title, notificationSpec.body);
}
@@ -435,40 +433,46 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
@Override
public void onSetTime() {
- TransactionBuilder builder = new TransactionBuilder("time");
+ try {
+ TransactionBuilder builder = performInitialized("time");
- setCurrentDate(builder);
- setCurrentTime(builder);
+ setCurrentDate(builder);
+ setCurrentTime(builder);
- builder.queue(getQueue());
+ builder.queue(getQueue());
+ }catch(IOException e){
+
+ }
}
@Override
public void onSetAlarms(ArrayList extends Alarm> alarms) {
+ try {
+ TransactionBuilder builder = performInitialized("alarm");
- TransactionBuilder builder = new TransactionBuilder("alarm");
+ for (Alarm alarm : alarms) {
- for (Alarm alarm : alarms) {
+ if (!alarm.isEnabled())
+ continue;
- if (!alarm.isEnabled())
- continue;
+ if (alarm.isSmartWakeup()) //Not available
+ continue;
- if (alarm.isSmartWakeup()) //Not available
- continue;
+ Calendar t = alarm.getAlarmCal();
+ setAlarm(builder, t);
+ builder.queue(getQueue());
- Calendar t = alarm.getAlarmCal();
- setAlarm(builder, t);
+ GB.toast(getContext(), getContext().getString(R.string.user_feedback_miband_set_alarms_ok), Toast.LENGTH_SHORT, GB.INFO);
+
+ return; //Only first alarm
+ }
+
+ setAlarm(builder, null);
builder.queue(getQueue());
- GB.toast(getContext(), getContext().getString(R.string.user_feedback_miband_set_alarms_ok), Toast.LENGTH_SHORT, GB.INFO);
+ GB.toast(getContext(), getContext().getString(R.string.user_feedback_all_alarms_disabled), Toast.LENGTH_SHORT, GB.INFO);
+ }catch(Exception e){}
- return; //Only first alarm
- }
-
- setAlarm(builder, null);
- builder.queue(getQueue());
-
- GB.toast(getContext(), getContext().getString(R.string.user_feedback_all_alarms_disabled), Toast.LENGTH_SHORT, GB.INFO);
}
@@ -485,7 +489,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
@Override
public void onSetCannedMessages(CannedMessagesSpec cannedMessagesSpec) {
- LOG.debug("Canned Messages: " + cannedMessagesSpec);
+ LOG.info("Canned Messages: " + cannedMessagesSpec);
}
@Override
@@ -541,39 +545,47 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
@Override
public void onReboot() {
- getQueue().clear();
+ try {
+ getQueue().clear();
- TransactionBuilder builder = new TransactionBuilder("Shutdown");
- builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_SHUTDOWN, HPlusConstants.ARG_SHUTDOWN_EN});
- builder.queue(getQueue());
+ TransactionBuilder builder = performInitialized("Shutdown");
+ builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_SHUTDOWN, HPlusConstants.ARG_SHUTDOWN_EN});
+ builder.queue(getQueue());
+ }catch(Exception e){
+ }
}
@Override
public void onHeartRateTest() {
getQueue().clear();
+ try{
+ TransactionBuilder builder = performInitialized("HeartRateTest");
- TransactionBuilder builder = new TransactionBuilder("HeartRateTest");
+ builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_SET_HEARTRATE_STATE, HPlusConstants.ARG_HEARTRATE_MEASURE_ON}); //Set Real Time... ?
+ builder.queue(getQueue());
+ }catch(Exception e){
- builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_SET_HEARTRATE_STATE, HPlusConstants.ARG_HEARTRATE_MEASURE_ON}); //Set Real Time... ?
- builder.queue(getQueue());
+ }
}
@Override
public void onEnableRealtimeHeartRateMeasurement(boolean enable) {
getQueue().clear();
+ try {
+ TransactionBuilder builder = performInitialized("realTimeHeartMeasurement");
+ byte state;
- TransactionBuilder builder = new TransactionBuilder("realTimeHeartMeasurement");
- byte state;
+ if (enable)
+ state = HPlusConstants.ARG_HEARTRATE_ALLDAY_ON;
+ else
+ state = HPlusConstants.ARG_HEARTRATE_ALLDAY_OFF;
- if (enable)
- state = HPlusConstants.ARG_HEARTRATE_ALLDAY_ON;
- else
- state = HPlusConstants.ARG_HEARTRATE_ALLDAY_OFF;
-
- builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_SET_ALLDAY_HRM, state});
- builder.queue(getQueue());
+ builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_SET_ALLDAY_HRM, state});
+ builder.queue(getQueue());
+ }catch(Exception e){
+ }
}
@Override
@@ -632,13 +644,13 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
@Override
public void onSendConfiguration(String config) {
- LOG.debug("Send Configuration: " + config);
+ LOG.info("Send Configuration: " + config);
}
@Override
public void onTestNewFunction() {
- LOG.debug("Test New Function");
+ LOG.info("Test New Function");
}
@Override
@@ -706,7 +718,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
}
private void showText(String title, String body) {
- LOG.debug("Show Notification: " + title + " --> " + body);
+
try {
TransactionBuilder builder = performInitialized("notification");
@@ -844,7 +856,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
return syncHelper.processIncomingDaySlotData(data);
default:
- LOG.debug("Unhandled characteristic changed: " + characteristicUUID);
+ LOG.info("Unhandled characteristic change: " + characteristicUUID + " code: " + data[0]);
return true;
}
}
@@ -878,7 +890,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
getDevice().addDeviceInfo(new GenericItem("", info));
}
} catch (IllegalArgumentException e) {
- LOG.debug((e.getMessage()));
+ LOG.info((e.getMessage()));
}
}