-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Description
On Polar H7 the HeartRate measurement doesn't works.
According to https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml
It seems that Energy and HeartRate are interverted.
Other issues is that Health Profile is not fully exposed (cannot request RR-interval for exemple).
Other things, battery should be exposed as service.
Following, code with correct bitmask.
private void notifyHeartRateMeasurement(final BluetoothGatt gatt,
final BluetoothGattCharacteristic characteristic) {
int heartRate = 0;
int energyExpended = 0;
double rrInterval = 0;
int offset = 1;
byte[] buf = characteristic.getValue();
if (buf.length > 1) {
// Heart Rate Value Format bit
if ((buf[0] & 0x01) != 0) {
Integer v = characteristic.getIntValue(FORMAT_UINT16, offset);
if (v != null) {
heartRate = v;
}
offset += 2;
} else {
Integer v = characteristic.getIntValue(FORMAT_UINT8, offset);
if (v != null) {
heartRate = v;
}
offset += 1;
}
// Sensor Contact Status bits
if ((buf[0] & 0x06) != 0) {
// MEMO: not implements yet
}
// Energy Expended Status bit
if ((buf[0] & 0x08) != 0) {
Integer v = characteristic.getIntValue(FORMAT_UINT16, offset);
if (v != null) {
energyExpended = v;
}
offset += 2;
}
// RR-Interval bit
Integer v = characteristic.getIntValue(FORMAT_UINT16, offset);
if (v != null) {
rrInterval = ((float) v / 1024.0) * 1000.0;
}
}
mLogger.warning("@@@@@@ HEART RATE[" + heartRate + ", "
+ energyExpended + ", " + rrInterval + "]");
BluetoothDevice device = gatt.getDevice();
if (mListener != null) {
mListener.onReceivedData(device, heartRate, energyExpended, rrInterval);
}
}
Metadata
Metadata
Assignees
Labels
No labels