mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-18 22:41:44 +02:00
Try to calculate fat, water, muscle and bone for inlife
This commit is contained in:
@@ -20,7 +20,9 @@ import android.bluetooth.BluetoothGatt;
|
|||||||
import android.bluetooth.BluetoothGattCharacteristic;
|
import android.bluetooth.BluetoothGattCharacteristic;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.health.openscale.core.OpenScale;
|
||||||
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
||||||
|
import com.health.openscale.core.datatypes.ScaleUser;
|
||||||
import com.health.openscale.core.utils.Converters;
|
import com.health.openscale.core.utils.Converters;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -84,9 +86,34 @@ public class BluetoothInlife extends BluetoothCommunication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
float weight = Converters.fromUnsignedInt16Be(data, 2) / 10.0f;
|
float weight = Converters.fromUnsignedInt16Be(data, 2) / 10.0f;
|
||||||
|
float lbm = Converters.fromUnsignedInt24Be(data, 4) / 1000.0f;
|
||||||
|
|
||||||
|
final ScaleUser selectedUser = OpenScale.getInstance().getSelectedScaleUser();
|
||||||
|
switch (selectedUser.getActivityLevel()) {
|
||||||
|
case SEDENTARY:
|
||||||
|
case MILD:
|
||||||
|
break;
|
||||||
|
case MODERATE:
|
||||||
|
lbm *= 1.0427f;
|
||||||
|
break;
|
||||||
|
case HEAVY:
|
||||||
|
case EXTREME:
|
||||||
|
lbm *= 1.0958f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
float fatKg = weight - lbm;
|
||||||
|
float fat = (fatKg / weight) * 100.0f;
|
||||||
|
float water = (0.73f * (weight - fatKg) / weight) * 100.0f;
|
||||||
|
float muscle = (0.548f * lbm / weight) * 100.0f;
|
||||||
|
float bone = 0.05158f * lbm;
|
||||||
|
|
||||||
ScaleMeasurement measurement = new ScaleMeasurement();
|
ScaleMeasurement measurement = new ScaleMeasurement();
|
||||||
measurement.setWeight(weight);
|
measurement.setWeight(weight);
|
||||||
|
measurement.setFat(fat);
|
||||||
|
measurement.setWater(water);
|
||||||
|
measurement.setMuscle(muscle);
|
||||||
|
measurement.setBone(bone);
|
||||||
|
|
||||||
addScaleData(measurement);
|
addScaleData(measurement);
|
||||||
}
|
}
|
||||||
|
@@ -284,10 +284,21 @@ public class Converters {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int fromSignedInt24Be(byte[] data, int offset) {
|
||||||
|
int value = data[offset] << 16;
|
||||||
|
value += (data[offset + 1] & 0xFF) << 8;
|
||||||
|
value += data[offset + 2] & 0xFF;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
public static int fromUnsignedInt24Le(byte[] data, int offset) {
|
public static int fromUnsignedInt24Le(byte[] data, int offset) {
|
||||||
return fromSignedInt24Le(data, offset) & 0xFFFFFF;
|
return fromSignedInt24Le(data, offset) & 0xFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int fromUnsignedInt24Be(byte[] data, int offset) {
|
||||||
|
return fromSignedInt24Be(data, offset) & 0xFFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
public static int fromSignedInt32Le(byte[] data, int offset) {
|
public static int fromSignedInt32Le(byte[] data, int offset) {
|
||||||
int value = data[offset + 3] << 24;
|
int value = data[offset + 3] << 24;
|
||||||
value += (data[offset + 2] & 0xFF) << 16;
|
value += (data[offset + 2] & 0xFF) << 16;
|
||||||
|
@@ -133,10 +133,18 @@ public class ConvertersTest {
|
|||||||
assertEquals(0x0010fcfe, Converters.fromSignedInt24Le(data, 1));
|
assertEquals(0x0010fcfe, Converters.fromSignedInt24Le(data, 1));
|
||||||
assertEquals(0x007f10fc, Converters.fromSignedInt24Le(data, 2));
|
assertEquals(0x007f10fc, Converters.fromSignedInt24Le(data, 2));
|
||||||
|
|
||||||
|
assertEquals(0xfffdfefc, Converters.fromSignedInt24Be(data, 0));
|
||||||
|
assertEquals(0xfffefc10, Converters.fromSignedInt24Be(data, 1));
|
||||||
|
assertEquals(0xfffc107f, Converters.fromSignedInt24Be(data, 2));
|
||||||
|
|
||||||
assertEquals(0xfcfefd, Converters.fromUnsignedInt24Le(data, 0));
|
assertEquals(0xfcfefd, Converters.fromUnsignedInt24Le(data, 0));
|
||||||
assertEquals(0x10fcfe, Converters.fromUnsignedInt24Le(data, 1));
|
assertEquals(0x10fcfe, Converters.fromUnsignedInt24Le(data, 1));
|
||||||
assertEquals(0x7f10fc, Converters.fromUnsignedInt24Le(data, 2));
|
assertEquals(0x7f10fc, Converters.fromUnsignedInt24Le(data, 2));
|
||||||
|
|
||||||
|
assertEquals(0xfdfefc, Converters.fromUnsignedInt24Be(data, 0));
|
||||||
|
assertEquals(0xfefc10, Converters.fromUnsignedInt24Be(data, 1));
|
||||||
|
assertEquals(0xfc107f, Converters.fromUnsignedInt24Be(data, 2));
|
||||||
|
|
||||||
assertEquals(-1234567,
|
assertEquals(-1234567,
|
||||||
Converters.fromSignedInt24Le(Converters.toInt32Le(-1234567), 0));
|
Converters.fromSignedInt24Le(Converters.toInt32Le(-1234567), 0));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user