|
1 | 1 | # external-gps |
2 | 2 |
|
3 | | -## What this branch adds |
4 | | - |
5 | | -External BLE GPS box support for high-accuracy speed and position logging. The |
6 | | -first (and only) implementation is **RaceBox** — Mini, Mini S, Pro. The wheel |
7 | | -and the GPS box hold separate BLE connections, so pairing one doesn't affect |
8 | | -the other. |
9 | | - |
10 | | -When a RaceBox is paired and connected: |
11 | | - |
12 | | -- A small purple **dot on the speedometer dial** marks the external GPS speed |
13 | | - alongside the wheel's needle. |
14 | | -- A **"GPS X.X" readout** sits under the main speed number, in the same purple |
15 | | - so the two read as a pair. |
16 | | -- Trip CSVs gain one new column at the end: **`Ext GPS speed`**. Empty when |
17 | | - no device is paired so analysis tools can tell "not connected" from "0 km/h". |
18 | | -- The trip-detail speed chart adds a thin purple overlay line for the external |
19 | | - GPS speed (only when the CSV has data for it). |
20 | | - |
21 | | -Pairing UI lives in **Settings → Integration → External GPS**. |
| 3 | +External BLE GPS support (RaceBox) for ground-truth speed verification |
| 4 | +and wheel calibration, plus Compare-tab tooling and the usual polish. |
| 5 | + |
| 6 | +## What's new |
| 7 | + |
| 8 | +**External GPS (RaceBox Mini / Mini S / Pro)** |
| 9 | +- Pair in Settings → Integration → External GPS. |
| 10 | +- Purple speed dot on the dial + "GPS X.X" readout under the main speed. |
| 11 | +- `Ext GPS speed` column in trip CSVs, purple overlay on the trip chart. |
| 12 | +- **E** indicator top-right: dim when stale, lit when sending, hidden when |
| 13 | + no external GPS is paired. |
| 14 | + |
| 15 | +**Live data sources sheet (tap the GPS icon)** |
| 16 | +- Phone / Wheel / External tabs + a Compare tab. |
| 17 | +- Compare auto-decalibrates the wheel speed so wheel-vs-GPS delta reflects |
| 18 | + the real sensor offset, not the residual after the current calibration. |
| 19 | +- A/B selection persists across sheet open/close; first compare entry |
| 20 | + seeds Wheel vs External (or Phone fallback). |
| 21 | +- **Calibrate wheel** stays enabled whenever the wheel reports motion. |
| 22 | + |
| 23 | +**Wheel parameters** |
| 24 | +- Speed calibration range widened from ±5 % to ±15 %. |
| 25 | +- Per-wheel profiles (keyed by BLE name) restore tiltback / alarm / |
| 26 | + calibration automatically on reconnect. |
| 27 | + |
| 28 | +**Dashboard polish** |
| 29 | +- Lock Wheel stays enabled at all speeds; tap while moving shows a |
| 30 | + "Slow down to lock the wheel" toast. Repository still hard-blocks the |
| 31 | + actual lock command on every entry path. |
| 32 | + |
| 33 | +**Begode imperial fix** |
| 34 | +- Begode firmware emits mph-scaled bytes when the wheel's screen is set |
| 35 | + to imperial. EUC Planet now reads the units flag and converts back to |
| 36 | + km internally so speed reads correctly in either app unit setting. |
22 | 37 |
|
23 | 38 | ## Who should test this |
24 | 39 |
|
25 | | -You need a RaceBox device to exercise the actual protocol. Without one you can |
26 | | -still: |
27 | | - |
28 | | -- Check that the Integration tab shows the new section. |
29 | | -- Confirm the dashboard is unchanged when no device is paired. |
30 | | -- Inspect a trip CSV from a normal recording — the new trailing column should |
31 | | - exist with empty cells. |
| 40 | +- RaceBox owners: pairing, dial overlay, Compare tab, CSV column. |
| 41 | +- Begode riders: flip the wheel display to imperial via the Begode app, |
| 42 | + then check EUC Planet reads correct speed in both metric and imperial |
| 43 | + app modes. |
| 44 | +- Everyone else: confirm dashboard / Compare / Lock Wheel still behave |
| 45 | + normally without an external GPS paired. |
32 | 46 |
|
33 | | -## Known limitations |
| 47 | +## Known gaps |
34 | 48 |
|
35 | | -- **No real-device verification yet.** The UBX-NAV-PVT parser is implemented |
36 | | - to spec but has not been confirmed against an actual RaceBox. Reach out if |
37 | | - it doesn't decode. |
38 | | -- **Auto-reconnect on app restart is not wired yet.** You'll need to tap |
39 | | - "Reconnect" after pairing if the connection drops or the app restarts. |
40 | | -- **No reconnect-on-disconnect retry.** If the GPS box goes out of range, |
41 | | - the connection won't come back automatically. |
42 | | -- **Dial gauge upper bound** still follows the wheel's max speed. If you |
43 | | - paired RaceBox to a moped that goes 80 km/h but the wheel max is 50, the |
44 | | - dot will pin at the top of the dial. |
| 49 | +- No auto-connect for the external GPS on app start; tap Reconnect after. |
| 50 | +- No reconnect-on-disconnect retry when the box goes out of range. |
| 51 | +- Dial upper bound still scales to wheel max; a faster external source |
| 52 | + will pin at the top. |
45 | 53 |
|
46 | 54 | ## How to install |
47 | 55 |
|
48 | | -This is a **debug-signed build** (CI). It can't update an existing Play Store |
49 | | -install in place — uninstall the Play version first, then install this APK. |
50 | | -Reinstalling the Play Store version later will overwrite this branch build. |
| 56 | +Debug-signed CI build. Uninstall any Play Store install first, then |
| 57 | +install this APK. Reinstalling from Play later overwrites this build. |
51 | 58 |
|
52 | | -## Provide feedback |
| 59 | +## Feedback |
53 | 60 |
|
54 | | -Open an issue at https://github.com/eried/eucplanet/issues with the tag |
| 61 | +Open an issue at https://github.com/eried/eucplanet/issues tagged |
55 | 62 | `branch:external-gps`. |
0 commit comments