Skip to content

Commit e27dde6

Browse files
eriedclaude
andcommitted
feat(metrics): external GPS speed metric + tire pressure on the HUD
Overlay Studio (phone): - Add WheelData.externalGpsSpeedKmh, merged from ExternalGpsRepository in OverlayStudioViewModel like the ext-GPS battery / coords already are. - New "Ext GPS speed" Studio metric (SPEED-kind, honours km/h <-> mph). HUD (was missing tire pressure entirely; ext-GPS battery + coords already worked): - HudState gains tirePressureKpa (ext-GPS speed rides the existing gpsSpeedKmh + gpsSource=="EXTERNAL", no new wire field). - HudServer streams it; StudioElementData.from maps both into the HUD's WheelData; HUD Studio enum gains TIRE_PRESSURE (PRESSURE-kind, via a new HudUnits.pressure) and EXTERNAL_GPS_SPEED. Tire pressure already worked as a Studio graph/number on the phone. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GHUZZ33sT9FYS6sXiMogJc
1 parent 2ced665 commit e27dde6

28 files changed

Lines changed: 57 additions & 4 deletions

File tree

app/src/main/java/com/eried/eucplanet/data/model/WheelData.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ data class WheelData(
2424
* Studio (like latitude/longitude) so an overlay number can show it; not
2525
* wheel telemetry, so it stays -1 on the plain wheel stream. */
2626
val externalGpsBatteryPercent: Int = -1,
27+
/** Ground speed in km/h from the paired external GPS box (RaceBox / Dragy),
28+
* or -1 when none is paired / no fresh sample. Merged in like the battery /
29+
* lat / long above so an overlay or HUD element can show it. */
30+
val externalGpsSpeedKmh: Float = -1f,
2731
/** Phone IMU acceleration magnitude in g, 0 for trips recorded before this. */
2832
val gForce: Float = 0f,
2933
/** Phone IMU lateral acceleration in g (+right). 0 for trips recorded before this. */

app/src/main/java/com/eried/eucplanet/service/hud/HudServer.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,7 @@ class HudServer @Inject constructor(
921921
gpsAltitudeM = if (location?.hasAltitude() == true) location.altitude.toFloat()
922922
else Float.NaN,
923923
externalGpsBatteryPercent = if (externalFresh) (external!!.batteryPercent ?: -1) else -1,
924+
tirePressureKpa = wd.tirePressureKpa,
924925
wheelRollDeg = wd.rollAngle,
925926
wheelPitchDeg = wd.pitchAngle,
926927
customOverlayJson = s.hudCustomOverlayJson,

app/src/main/java/com/eried/eucplanet/ui/studio/OverlayStudioViewModel.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,11 @@ class OverlayStudioViewModel @Inject constructor(
161161
tripRepository.currentLocation,
162162
externalGpsRepository.currentSample
163163
) { data, loc, ext ->
164-
val extBattery = ext?.batteryPercent
165-
?.takeIf { System.currentTimeMillis() - ext.timestamp < 5_000L } ?: -1
164+
val extFresh = ext != null && System.currentTimeMillis() - ext.timestamp < 5_000L
165+
val extBattery = if (extFresh) (ext!!.batteryPercent ?: -1) else -1
166+
val extSpeed = if (extFresh) ext!!.speedKmh else -1f
166167
val withGps = if (loc != null) data.copy(latitude = loc.latitude, longitude = loc.longitude) else data
167-
withGps.copy(externalGpsBatteryPercent = extBattery)
168+
withGps.copy(externalGpsBatteryPercent = extBattery, externalGpsSpeedKmh = extSpeed)
168169
}.stateIn(viewModelScope, SharingStarted.Eagerly, WheelData())
169170

170171
// Live (un-throttled) lateral / forward G in g. The G-Force overlay's dot

app/src/main/java/com/eried/eucplanet/ui/studio/StudioMetric.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ enum class StudioMetric(
4646
ROLL("ROLL", "Roll", StudioMetricKind.PLAIN, "°", 1, 30f, { it.rollAngle }),
4747
G_FORCE("G-FORCE", "G-Force", StudioMetricKind.PLAIN, "g", 2, 2f, { it.gForce }),
4848
EXTERNAL_GPS_BATTERY("EXT_GPS_BATTERY", "Ext GPS battery", StudioMetricKind.PLAIN, "%", 0, 100f, { it.externalGpsBatteryPercent.toFloat() }),
49+
EXTERNAL_GPS_SPEED("EXT_GPS_SPEED", "Ext GPS speed", StudioMetricKind.SPEED, "", 1, 60f, { it.externalGpsSpeedKmh.coerceAtLeast(0f) }),
4950
TIRE_PRESSURE("TIRE_PRESSURE", "Tire pressure", StudioMetricKind.PRESSURE, "", 1, 50f, { it.tirePressureKpa }),
5051
// A lat/lng pair shown as text (not a scalar), so it only makes sense on a
5152
// text value element. extract is a placeholder; formatted() renders the pair.
@@ -110,6 +111,7 @@ fun StudioMetric.displayName(): String = when (this) {
110111
StudioMetric.ROLL -> stringResource(R.string.studio_metric_roll)
111112
StudioMetric.G_FORCE -> stringResource(R.string.studio_metric_g_force)
112113
StudioMetric.EXTERNAL_GPS_BATTERY -> stringResource(R.string.studio_metric_external_gps_battery)
114+
StudioMetric.EXTERNAL_GPS_SPEED -> stringResource(R.string.studio_metric_external_gps_speed)
113115
StudioMetric.TIRE_PRESSURE -> stringResource(R.string.studio_metric_tire_pressure)
114116
StudioMetric.GPS -> stringResource(R.string.studio_metric_gps)
115117
}

app/src/main/res/values-b+es+419/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,6 +1382,7 @@
13821382
<string name="studio_metric_roll">Alabeo</string>
13831383
<string name="studio_metric_g_force">G-Force</string>
13841384
<string name="studio_metric_external_gps_battery">Batería GPS ext.</string>
1385+
<string name="studio_metric_external_gps_speed">Vel. GPS ext.</string>
13851386
<string name="studio_metric_gps">Coordenadas GPS</string>
13861387

13871388
<!-- Studio misc -->

app/src/main/res/values-da/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,6 +1369,7 @@
13691369
<string name="studio_metric_roll">Krængning</string>
13701370
<string name="studio_metric_g_force">G-Force</string>
13711371
<string name="studio_metric_external_gps_battery">Ekst. GPS-batteri</string>
1372+
<string name="studio_metric_external_gps_speed">Ext. GPS-fart</string>
13721373
<string name="studio_metric_gps">GPS-koordinater</string>
13731374

13741375
<!-- Navigator -->

app/src/main/res/values-de/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,6 +1380,7 @@
13801380
<string name="studio_metric_roll">Querneigung</string>
13811381
<string name="studio_metric_g_force">G-Force</string>
13821382
<string name="studio_metric_external_gps_battery">Ext. GPS-Akku</string>
1383+
<string name="studio_metric_external_gps_speed">Ext. GPS-Tempo</string>
13831384
<string name="studio_metric_gps">GPS-Koordinaten</string>
13841385

13851386
<!-- Studio misc -->

app/src/main/res/values-es/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,6 +1368,7 @@
13681368
<string name="studio_metric_roll">Alabeo</string>
13691369
<string name="studio_metric_g_force">G-Force</string>
13701370
<string name="studio_metric_external_gps_battery">Batería GPS ext.</string>
1371+
<string name="studio_metric_external_gps_speed">Vel. GPS ext.</string>
13711372
<string name="studio_metric_gps">Coordenadas GPS</string>
13721373

13731374
<!-- Navigator -->

app/src/main/res/values-fr/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1407,6 +1407,7 @@
14071407
<string name="studio_metric_roll">Roulis</string>
14081408
<string name="studio_metric_g_force">G-Force</string>
14091409
<string name="studio_metric_external_gps_battery">Batterie GPS ext.</string>
1410+
<string name="studio_metric_external_gps_speed">Vitesse GPS ext.</string>
14101411
<string name="studio_metric_gps">Coordonnées GPS</string>
14111412

14121413
<!-- Studio: overwrite preset -->

app/src/main/res/values-it/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -924,6 +924,7 @@
924924
<string name="studio_metric_current">Corrente</string>
925925
<string name="studio_metric_g_force">G-Force</string>
926926
<string name="studio_metric_external_gps_battery">Batteria GPS est.</string>
927+
<string name="studio_metric_external_gps_speed">Vel. GPS est.</string>
927928
<string name="studio_metric_gps">Coordinate GPS</string>
928929
<string name="studio_metric_odometer">Contachilometri</string>
929930
<string name="studio_metric_pitch">Beccheggio</string>

0 commit comments

Comments
 (0)