diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/heartrate/BodySensorLocation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/heartrate/BodySensorLocation.java new file mode 100644 index 00000000..57a484e7 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/heartrate/BodySensorLocation.java @@ -0,0 +1,23 @@ +package nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.heartrate; + +/** + * The Body Sensor Location characteristic of the device is used to describe the intended location of the heart rate measurement for the device. + * + * https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.body_sensor_location.xml + */ +public enum BodySensorLocation { + Other(0), + Checst(1), + Wrist(2), + Finger(3), + Hand(4), + EarLobe(5), + Foot(6); + // others are reserved + + private final int val; + + BodySensorLocation(int val) { + this.val = val; + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/heartrate/HeartRateProfile.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/heartrate/HeartRateProfile.java new file mode 100644 index 00000000..beb60465 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/heartrate/HeartRateProfile.java @@ -0,0 +1,51 @@ +package nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.heartrate; + +import android.bluetooth.BluetoothGatt; +import android.bluetooth.BluetoothGattCharacteristic; + +import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEDeviceSupport; +import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic; +import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; +import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.AbstractBleProfile; + +/** + * https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.heart_rate.xml + */ +public class HeartRateProfile extends AbstractBleProfile { + /** + * Returned when a request to the heart rate control point is not supported by the device + */ + public static final int ERR_CONTROL_POINT_NOT_SUPPORTED = 0x80; + + public HeartRateProfile(T support) { + super(support); + } + + public void resetEnergyExpended(TransactionBuilder builder) { + writeToControlPoint((byte) 0x01, builder); + } + + protected void writeToControlPoint(byte value, TransactionBuilder builder) { + builder.write(getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_HEART_RATE_CONTROL_POINT), new byte[] { value }); + } + + public void requestBodySensorLocation(TransactionBuilder builder) { + + } + + public void requestHeartRateMeasurement(TransactionBuilder builder) { + + } + + @Override + public boolean onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { +// if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) { +// int flag = characteristic.getProperties(); +// int format = -1; +// if ((flag & 0x01) != 0) { +// format = BluetoothGattCharacteristic.FORMAT_UINT16; +// } else { +// format = BluetoothGattCharacteristic.FORMAT_UINT8; +// } +// final int heartRate = characteristic.getIntValue(format, 1); } +}