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:
parent
30b6837012
commit
ce880b69c9
@ -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;
|
||||
|
@ -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]) {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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())));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user