1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2025-02-18 05:17:08 +01:00

added heart rate measurement base

This commit is contained in:
Daniel Dakhno 2020-01-09 15:35:47 +01:00
parent 30b6837012
commit ce880b69c9
5 changed files with 46 additions and 6 deletions

View File

@ -110,6 +110,7 @@ public class QHybridSupport extends QHybridBaseSupport {
public static final String ITEM_USE_ACTIVITY_HAND = "USE_ACTIVITY_HAND";
public static final String ITEM_LAST_HEARTBEAT = "LAST_HEARTBEAT";
public static final String ITEM_TIMEZONE_OFFSET = "TIMEZONE_OFFSET_COUNT";
public static final String ITEM_HEART_RATE_MEASUREMENT_MODE = "HEART_RATE_MEASUREMENT_MODE";
private static final Logger logger = LoggerFactory.getLogger(QHybridSupport.class);
private final BroadcastReceiver commandReceiver;

View File

@ -87,7 +87,7 @@ public class FossilWatchAdapter extends WatchAdapter {
private int lastButtonIndex = -1;
Logger logger = LoggerFactory.getLogger(getClass().getSimpleName());
protected Logger logger = LoggerFactory.getLogger(getClass().getSimpleName());
public FossilWatchAdapter(QHybridSupport deviceSupport) {
super(deviceSupport);
@ -442,6 +442,10 @@ public class FossilWatchAdapter extends WatchAdapter {
handleBackgroundCharacteristic(characteristic);
break;
}
case "00002a37-0000-1000-8000-00805f9b34fb": {
handleHeartRateCharacteristic(characteristic);
break;
}
case "3dda0002-957f-7d4a-34a6-74696673696d":
case "3dda0004-957f-7d4a-34a6-74696673696d":
case "3dda0005-957f-7d4a-34a6-74696673696d":
@ -484,6 +488,9 @@ public class FossilWatchAdapter extends WatchAdapter {
return true;
}
public void handleHeartRateCharacteristic(BluetoothGattCharacteristic characteristic) {
}
protected void handleBackgroundCharacteristic(BluetoothGattCharacteristic characteristic) {
byte[] value = characteristic.getValue();
switch (value[1]) {

View File

@ -21,6 +21,7 @@ import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Random;
import java.util.TimeZone;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.Widget;
@ -31,6 +32,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.RequestMtuRequest;
@ -133,6 +135,10 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
));
}*/
// no effect
// negotiateSymmetricKey();
// queueWrite(new ConfigurationPutRequest(new nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.configuration.ConfigurationPutRequest.HeartRateMeasurementModeItem((byte) 2), this));
syncSettings();
setTime();
@ -140,7 +146,7 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
overwriteButtons(null);
loadWidgets();
renderWidgets();
// renderWidgets();
// dunno if there is any point in doing this at start since when no watch is connected the QHybridSupport will not receive any intents anyway
queueWrite(new SetDeviceStateRequest(GBDevice.State.INITIALIZED));
@ -154,13 +160,13 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
private void loadWidgets() {
CustomWidget ethWidget = new CustomWidget(0, 63);
ethWidget.addElement(new CustomWidgetElement(CustomWidgetElement.WidgetElementType.TYPE_TEXT, "date", "-", CustomWidgetElement.X_CENTER, CustomWidgetElement.Y_UPPER_HALF));
ethWidget.addElement(new CustomWidgetElement(CustomWidgetElement.WidgetElementType.TYPE_TEXT, "eth", "-", CustomWidgetElement.X_CENTER, CustomWidgetElement.Y_LOWER_HALF));
ethWidget.addElement(new CustomWidgetElement(CustomWidgetElement.WidgetElementType.TYPE_TEXT, "date", "wtf", CustomWidgetElement.X_CENTER, CustomWidgetElement.Y_UPPER_HALF));
ethWidget.addElement(new CustomWidgetElement(CustomWidgetElement.WidgetElementType.TYPE_TEXT, "eth", "", CustomWidgetElement.X_CENTER, CustomWidgetElement.Y_LOWER_HALF));
CustomWidget btcWidget = new CustomWidget(90, 63);
btcWidget.addElement(new CustomWidgetElement(CustomWidgetElement.WidgetElementType.TYPE_TEXT, "", "BTC", CustomWidgetElement.X_CENTER, CustomWidgetElement.Y_UPPER_HALF));
btcWidget.addElement(new CustomWidgetElement(CustomWidgetElement.WidgetElementType.TYPE_TEXT, "btc", "wtf", CustomWidgetElement.X_CENTER, CustomWidgetElement.Y_LOWER_HALF));
btcWidget.addElement(new CustomWidgetElement(CustomWidgetElement.WidgetElementType.TYPE_TEXT, "btc", "", CustomWidgetElement.X_CENTER, CustomWidgetElement.Y_LOWER_HALF));
this.widgets = new CustomWidget[]{
ethWidget,
btcWidget,
@ -216,10 +222,11 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
// queueWrite(new FileDeleteRequest((short) 0x0700));
queueWrite(new AssetFilePutRequest(
widgetImages,
(byte) 0x00,
this
));
queueWrite(new FileDeleteRequest((short) 0x0503));
// queueWrite(new FileDeleteRequest((short) 0x0503));
queueWrite(new ImagesSetRequest(
widgetImages,
this
@ -394,6 +401,17 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
}
}
@Override
public void handleHeartRateCharacteristic(BluetoothGattCharacteristic characteristic) {
super.handleHeartRateCharacteristic(characteristic);
byte[] value = characteristic.getValue();
int heartRate = value[1];
logger.debug("heart rate: " + heartRate);
}
@Override
protected void handleBackgroundCharacteristic(BluetoothGattCharacteristic characteristic) {
super.handleBackgroundCharacteristic(characteristic);

View File

@ -23,6 +23,7 @@ import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.HashMap;
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileCloseAndPutRequest;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest;
@ -37,6 +38,7 @@ public class ConfigurationPutRequest extends FilePutRequest {
itemsById.put((short)0x0A, VibrationStrengthConfigItem.class);
itemsById.put((short)0x0C, TimeConfigItem.class);
itemsById.put((short)0x0D, BatteryConfigItem.class);
itemsById.put((short)0x0E, HeartRateMeasurementModeItem.class);
}
public static ConfigItem[] parsePayload(byte[] data) {
@ -228,6 +230,16 @@ public class ConfigurationPutRequest extends FilePutRequest {
}
}
static public class HeartRateMeasurementModeItem extends GenericConfigItem<Byte>{
public HeartRateMeasurementModeItem() {
this((byte)-1);
}
public HeartRateMeasurementModeItem(byte value) {
super((short) 14, value);
}
}
static public class DailyStepGoalConfigItem extends GenericConfigItem<Integer> {
public DailyStepGoalConfigItem(){
this(-1);

View File

@ -44,6 +44,8 @@ public class ConfigurationGetRequest extends FileEncryptedLookupAndGetRequest {
batteryInfo.level = (short) ((ConfigurationPutRequest.BatteryConfigItem) item).getBatteryPercentage();
batteryInfo.state = BatteryState.BATTERY_NORMAL;
getAdapter().getDeviceSupport().handleGBDeviceEvent(batteryInfo);
}else if(item instanceof ConfigurationPutRequest.HeartRateMeasurementModeItem){
device.addDeviceInfo(new GenericItem(QHybridSupport.ITEM_HEART_RATE_MEASUREMENT_MODE, String.valueOf(((ConfigurationPutRequest.HeartRateMeasurementModeItem) item).getValue())));
}
}