diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMisfitActivitySample.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMisfitActivitySample.java new file mode 100644 index 00000000..4ecde61a --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/entities/AbstractPebbleMisfitActivitySample.java @@ -0,0 +1,70 @@ +package nodomain.freeyourgadget.gadgetbridge.entities; + +import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; + +public abstract class AbstractPebbleMisfitActivitySample extends AbstractActivitySample { + abstract public int getRawPebbleMisfitSample(); + + private transient int intensity = 0; + private transient int steps = 0; + private transient int activityKind = ActivityKind.TYPE_UNKNOWN; + + private void calculate() { + int sample = getRawPebbleMisfitSample(); + + if (((sample & 0x83ff) == 0x0001) && ((sample & 0xff00) <= 0x4800)) { + // sleep seems to be from 0x2401 to 0x4801 (0b0IIIII0000000001) where I = intensity ? + intensity = (sample & 0x7c00) >>> 10; + // 9-18 decimal after shift + if (intensity <= 13) { + activityKind = ActivityKind.TYPE_DEEP_SLEEP; + } else { + // FIXME: this leads to too much false positives, ignore for now + //activityKind = ActivityKind.TYPE_LIGHT_SLEEP; + //intensity *= 2; // better visual distinction + } + } else { + if ((sample & 0x0001) == 0) { // 16-??? steps encoded in bits 1-7 + steps = (sample & 0x00fe); + } else { // 0-14 steps encoded in bits 1-3, most of the time fc71 bits are set in that case + steps = (sample & 0x000e); + } + intensity = steps; + activityKind = ActivityKind.TYPE_ACTIVITY; + } + } + + @Override + public int getSteps() { + calculate(); + return steps; + } + + @Override + public int getRawKind() { + calculate(); + return activityKind; + } + + @Override + public int getRawIntensity() { + calculate(); + return intensity; + } + + @Override + public void setRawKind(int kind) { + + } + + @Override + public void setRawIntensity(int intensity) { + + } + + @Override + public void setSteps(int steps) { + + } + +} \ No newline at end of file