Correct SWI69 distance scale
This commit is contained in:
+2
-2
@@ -34,8 +34,8 @@ android {
|
||||
applicationId "com.evsuite.abrp"
|
||||
minSdk 27
|
||||
targetSdk 36
|
||||
versionCode 44
|
||||
versionName "2.2.27"
|
||||
versionCode 45
|
||||
versionName "2.2.28"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import com.evsuite.hardware.telemetry.EnergySnapshot;
|
||||
import com.evsuite.hardware.FirmwareInfo;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
@@ -37,6 +38,7 @@ final class ConsumptionTracker {
|
||||
}
|
||||
|
||||
synchronized void sample(EnergySnapshot s) {
|
||||
migrateSwi69DistanceScale(s.getFirmware());
|
||||
long now = s.getTimestampMs();
|
||||
if (lastMs > 0 && now > lastMs) {
|
||||
double hours = (now - lastMs) / 3_600_000d;
|
||||
@@ -129,6 +131,20 @@ final class ConsumptionTracker {
|
||||
pruneOldDays();
|
||||
}
|
||||
|
||||
/** 2.2.27 and earlier multiplied SWI69's already-km/h speed by 3.6. Repair distance only. */
|
||||
private void migrateSwi69DistanceScale(FirmwareInfo.Gen firmware) {
|
||||
if (firmware != FirmwareInfo.Gen.SWI69 || prefs.getBoolean("swi69_distance_v2", false)) return;
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
for (java.util.Map.Entry<String, ?> entry : prefs.getAll().entrySet()) {
|
||||
String key = entry.getKey();
|
||||
if (!key.endsWith("_km") || !(entry.getValue() instanceof Long)) continue;
|
||||
double oldKm = Double.longBitsToDouble((Long) entry.getValue());
|
||||
editor.putLong(key, Double.doubleToRawLongBits(oldKm / 3.6d));
|
||||
}
|
||||
editor.putBoolean("swi69_distance_v2", true).commit();
|
||||
lifetime = load("life"); tripA = load("a"); tripB = load("b");
|
||||
}
|
||||
|
||||
private Totals load(String key) { return new Totals(bits(key,"km"), bits(key,"kwh"), bits(key,"h"), bits(key,"soc")); }
|
||||
private double bits(String key, String field) { return Double.longBitsToDouble(prefs.getLong(key + "_" + field, 0L)); }
|
||||
private static void save(SharedPreferences.Editor e, String key, Totals t) {
|
||||
|
||||
Reference in New Issue
Block a user