mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Garmin: Persist SpO2 measurement type
This commit is contained in:
@@ -58,7 +58,7 @@ public class GBDaoGenerator {
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
final Schema schema = new Schema(110, MAIN_PACKAGE + ".entities");
|
||||
final Schema schema = new Schema(111, MAIN_PACKAGE + ".entities");
|
||||
|
||||
Entity userAttributes = addUserAttributes(schema);
|
||||
Entity user = addUserInfo(schema, userAttributes);
|
||||
@@ -892,6 +892,7 @@ public class GBDaoGenerator {
|
||||
Entity spo2sample = addEntity(schema, "GarminSpo2Sample");
|
||||
addCommonTimeSampleProperties("AbstractSpo2Sample", spo2sample, user, device);
|
||||
spo2sample.addIntProperty(SAMPLE_SPO2).notNull().codeBeforeGetter(OVERRIDE);
|
||||
spo2sample.addIntProperty("typeNum").notNull().codeBeforeGetter(OVERRIDE);
|
||||
return spo2sample;
|
||||
}
|
||||
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package nodomain.freeyourgadget.gadgetbridge.database.schema;
|
||||
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
||||
import nodomain.freeyourgadget.gadgetbridge.database.DBUpdateScript;
|
||||
import nodomain.freeyourgadget.gadgetbridge.entities.GarminSpo2SampleDao;
|
||||
|
||||
public class GadgetbridgeUpdate_111 implements DBUpdateScript {
|
||||
@Override
|
||||
public void upgradeSchema(final SQLiteDatabase db) {
|
||||
if (!DBHelper.existsColumn(GarminSpo2SampleDao.TABLENAME, GarminSpo2SampleDao.Properties.TypeNum.columnName, db)) {
|
||||
final String statement = "ALTER TABLE " + GarminSpo2SampleDao.TABLENAME + " ADD COLUMN \""
|
||||
+ GarminSpo2SampleDao.Properties.TypeNum.columnName + "\" INTEGER NOT NULL DEFAULT 2;";
|
||||
db.execSQL(statement);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downgradeSchema(SQLiteDatabase database) {
|
||||
|
||||
}
|
||||
}
|
||||
+14
-2
@@ -65,6 +65,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryParser;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.Spo2Sample;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.FileType;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.exception.FitParseException;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.fieldDefinitions.FieldDefinitionHrvStatus;
|
||||
@@ -225,8 +226,8 @@ public class FitImporter {
|
||||
}
|
||||
Objects.requireNonNull(activitySamplesPerTimestamp.get(currentMonitoringTimestamp)).add(monitoringRecord);
|
||||
lastMonitoringTimestamp = currentMonitoringTimestamp;
|
||||
} else if (record instanceof FitSpo2) {
|
||||
final Integer spo2 = ((FitSpo2) record).getReadingSpo2();
|
||||
} else if (record instanceof FitSpo2 fitSpo2) {
|
||||
final Integer spo2 = fitSpo2.getReadingSpo2();
|
||||
if (spo2 == null || spo2 <= 0) {
|
||||
continue;
|
||||
}
|
||||
@@ -234,6 +235,17 @@ public class FitImporter {
|
||||
final GarminSpo2Sample sample = new GarminSpo2Sample();
|
||||
sample.setTimestamp(ts * 1000L);
|
||||
sample.setSpo2(spo2);
|
||||
sample.setTypeNum(Spo2Sample.Type.UNKNOWN.getNum());
|
||||
if (fitSpo2.getMode() != null) {
|
||||
switch (fitSpo2.getMode()) {
|
||||
case 1:
|
||||
sample.setTypeNum(Spo2Sample.Type.MANUAL.getNum());
|
||||
break;
|
||||
case 3:
|
||||
sample.setTypeNum(Spo2Sample.Type.AUTOMATIC.getNum());
|
||||
break;
|
||||
}
|
||||
}
|
||||
spo2samples.add(sample);
|
||||
} else if (record instanceof FitRespirationRate) {
|
||||
final Float respiratoryRate = ((FitRespirationRate) record).getRespirationRate();
|
||||
|
||||
+1
-1
@@ -436,7 +436,7 @@ public class GlobalFITMessage {
|
||||
public static GlobalFITMessage SPO2 = new GlobalFITMessage(269, "SPO2", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT8, "reading_spo2"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT8, "reading_confidence"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT8, "mode"), // 3 periodic
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT8, "mode"), // 1 manual 3 periodic
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user