Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,21 @@ The project follows Semantic Versioning once the first firmware release is tagge

### Changed

- the **GPS session trigger starts on the start line** rather than the pit exit, which is
what keeps it when the pit gates go. The start line is crossed every lap, where pit exit
on a road loop was a line somebody picked; and on a circuit whose start and finish are
one line, the session and lap 1 begin on the same crossing. `pit_exit_auto_start_enabled`
is renamed `gps_start_line_enabled` - the stored byte and its meaning are unchanged, so
the settings record needs **no version bump and no migration**. The byte that held
pit-entry auto-stop is kept as reserved and written as zero, because reclaiming it would
change a fixed-width record's length for a setting nothing uses
- a start-line crossing starts a session **only while armed**. Without that, driving out of
the paddock would begin one: the pit-exit gate was obscure enough that a crossing implied
intent, and the start line is not. `GateAutomationResult::ignored_unarmed` reports it,
because the remedy differs from every other refusal
- `SETUP` names the rest period **`REST`**, not `PIT REST`: it is time between sessions,
spent wherever the driver likes

- the G radar's trace is back to **1.2 seconds**, reverting an increase to three that was
merged on a bad measurement and then measured properly. Both figures below are with the
device untouched, which is when the meter reaches `ready` and the trace is actually
Expand Down Expand Up @@ -303,8 +318,31 @@ The project follows Semantic Versioning once the first firmware release is tagge
25 Hz, so while the receiver ran at 20 its 50 ms intervals sat 10 ms under a 60 ms gap
threshold rather than the 20 ms the 1.5x multiple was chosen to give. All three now agree

### Removed

- **pit lane entry and exit, entirely**: the two timing gates, the settings behind them,
the session automation's stop path, the capture steps, the gate fields in a track
definition, and their documentation. Too much complexity for what they earned
- `TimingGate` is `start` and `finish`, and `kTimingGateCount` is 2. A track definition's
`CircuitGateDefinitions` loses both pit gates, which takes the **track schema to
version 4**. A schema-3 file still loads - its pit gates are parsed and discarded -
because the 26 circuits already written to cards are otherwise correct and rejecting
them would cost a device its whole track list for gates nothing reads
- gate capture walks **two gates rather than four**
- `SessionController::stop_from_pit_entry` and `CompletionReason::pit_entry`. The log
format's `SessionCompletionReason::pit_entry` becomes `reserved_pit_entry`: it is kept,
not produced, so sessions already recorded on cards still decode to a reason the reader
knows
- `pit_entry_auto_stop_enabled`. Stopping has no start-line equivalent and gains none -
stopping on the start line would end a session after one lap - so stopping stays the
driver's

### Fixed

- `SettingsField` gained `acceleration_target` without `kSettingsFieldCount` or the name
array following it, so naming that field read past the end of the array. Found while
removing the two pit entries from the same list

- the ready dashboard **reports the receiver as it is now, not as it was at boot**.
`ready_snapshot` read the health live and correctly, but `refresh_ready` was only
reached from boot, a settings save and a track change, and the receiver acquires its
Expand Down
14 changes: 1 addition & 13 deletions data/track-packs/test/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -142,19 +142,7 @@
34.0,
12
],
"pit_entry": [
54.170325,
-4.447392,
149.9,
12
],
"pit_exit": [
54.169953,
-4.446944,
147.3,
12
],
"derivation": "Start and finish sit 30 m back along King Edward Road from the Sea Cliff Road junction, measured along the OSM centreline, because the two legs meet at the junction itself and a gate there would span both. At 30 m back the outbound leg is 26.3 m away, leaving 16.5 m between the gate end and its carriageway. Gates are 12 m: 7.62 m of road plus 2.19 m beyond each edge for lateral fix error. pit_exit faces 147.3 deg south-east-bound so the north-bound pass into the pit lane does not register.",
"derivation": "Start and finish sit 30 m back along King Edward Road from the Sea Cliff Road junction, measured along the OSM centreline, because the two legs meet at the junction itself and a gate there would span both. At 30 m back the outbound leg is 26.3 m away, leaving 16.5 m between the gate end and its carriageway. Gates are 12 m: 7.62 m of road plus 2.19 m beyond each edge for lateral fix error.3 deg south-east-bound so the north-bound pass into the pit lane does not register.",
"validation": {
"geometry_status": "independently_validated",
"verified_utc": "2026-10-17T00:00:00Z",
Expand Down
186 changes: 3 additions & 183 deletions data/track-packs/uk/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,19 +53,19 @@
"track_id": "gb_anglesey_international_gp",
"name": "Anglesey International GP",
"minimum_lap_time_s": 35,
"blocker": "No redistributable public four-gate geometry with an identifiable pit lane was found; physical capture is required."
"blocker": "No redistributable public start/finish geometry with an identifiable pit lane to locate it was found; physical capture is required."
},
{
"track_id": "gb_anglesey_coastal",
"name": "Anglesey Coastal",
"minimum_lap_time_s": 25,
"blocker": "No redistributable public four-gate geometry with an identifiable pit lane was found; physical capture is required."
"blocker": "No redistributable public start/finish geometry with an identifiable pit lane to locate it was found; physical capture is required."
},
{
"track_id": "gb_anglesey_national",
"name": "Anglesey National",
"minimum_lap_time_s": 20,
"blocker": "No redistributable public four-gate geometry with an identifiable pit lane was found; physical capture is required."
"blocker": "No redistributable public start/finish geometry with an identifiable pit lane to locate it was found; physical capture is required."
}
]
},
Expand Down Expand Up @@ -138,18 +138,6 @@
0.2585922,
61.346,
20
],
"pit_entry": [
51.3580132,
0.2563892,
20.779,
12
],
"pit_exit": [
51.3608626,
0.2625725,
69.517,
12
]
}
},
Expand Down Expand Up @@ -225,18 +213,6 @@
-0.0590716,
206.012,
20
],
"pit_entry": [
53.3115369,
-0.0583758,
223.313,
12
],
"pit_exit": [
53.3093935,
-0.0600911,
191.183,
12
]
}
},
Expand Down Expand Up @@ -300,18 +276,6 @@
-1.5557027,
15.0,
20
],
"pit_entry": [
54.4537362,
-1.5563133,
359.691,
12
],
"pit_exit": [
54.4569957,
-1.5548089,
17.677,
12
]
}
},
Expand Down Expand Up @@ -354,18 +318,6 @@
280.5,
20
],
"pit_entry": [
52.8295427,
-1.3769056,
275.267,
12
],
"pit_exit": [
52.8303222,
-1.383843,
287.314,
12
],
"validation": {
"geometry_status": "independently_validated",
"verified_utc": "2026-10-10T00:00:00Z",
Expand Down Expand Up @@ -433,18 +385,6 @@
-0.7528623,
174.634,
20
],
"pit_entry": [
50.8597195,
-0.752909,
189.253,
12
],
"pit_exit": [
50.8578512,
-0.7526299,
168.863,
12
]
}
},
Expand Down Expand Up @@ -508,18 +448,6 @@
-3.506877,
95.28,
20
],
"pit_entry": [
56.1310537,
-3.5095813,
85.85,
12
],
"pit_exit": [
56.130658,
-3.50333,
102.862,
12
]
},
"anti_clockwise": {
Expand All @@ -538,18 +466,6 @@
-3.506877,
275.28,
20
],
"pit_entry": [
56.130658,
-3.50333,
282.862,
12
],
"pit_exit": [
56.1310537,
-3.5095813,
265.85,
12
]
}
},
Expand Down Expand Up @@ -603,18 +519,6 @@
-3.4964344,
89.5,
20
],
"pit_entry": [
51.4324616,
-3.4977578,
36.977,
12
],
"pit_exit": [
51.4327333,
-3.4950303,
95.934,
12
]
}
},
Expand Down Expand Up @@ -656,18 +560,6 @@
-1.3369314,
178.476,
20
],
"pit_entry": [
52.5984766,
-1.3369659,
189.05,
12
],
"pit_exit": [
52.5963928,
-1.3368746,
173.576,
12
]
}
},
Expand Down Expand Up @@ -709,18 +601,6 @@
-2.6124325,
165.415,
20
],
"pit_entry": [
53.1813678,
-2.6130318,
192.458,
12
],
"pit_exit": [
53.1769784,
-2.6134167,
223.746,
12
]
}
},
Expand Down Expand Up @@ -774,18 +654,6 @@
-4.3238773,
29.8,
20
],
"pit_entry": [
51.7030618,
-4.3231733,
318.475,
12
],
"pit_exit": [
51.7070317,
-4.3228469,
10.29,
12
]
}
},
Expand Down Expand Up @@ -833,18 +701,6 @@
-1.0219595,
37.3,
20
],
"pit_entry": [
52.0648411,
-1.0196927,
329.277,
12
],
"pit_exit": [
52.0714672,
-1.0157059,
45.231,
12
]
},
"national_pits": {
Expand All @@ -863,18 +719,6 @@
-1.0152726,
84.9,
20
],
"pit_entry": [
52.0786532,
-1.0178209,
84.499,
12
],
"pit_exit": [
52.0789308,
-1.0127209,
85.028,
12
]
}
},
Expand Down Expand Up @@ -928,18 +772,6 @@
0.9473904,
265.045,
20
],
"pit_entry": [
52.4638053,
0.9497182,
263.823,
12
],
"pit_exit": [
52.4631623,
0.9400147,
262.945,
12
]
}
},
Expand Down Expand Up @@ -993,18 +825,6 @@
-1.6094029,
343.482,
20
],
"pit_entry": [
51.2064456,
-1.6075329,
327.493,
12
],
"pit_exit": [
51.2100543,
-1.6084646,
32.583,
12
]
}
},
Expand Down
2 changes: 1 addition & 1 deletion data/tracks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Firmware accepts schema version 3 definitions up to 16384 bytes. Track identifiers must
fit the persisted 47-character identifier field and use letters, digits, `.`, `_`, or
`-`. Every layout must provide directed `start`, `finish`, `pit_entry`, and `pit_exit`
`-`. Every layout must provide directed `start` and `finish`
gates plus revision and provenance metadata. Sector records use the same directed-gate
structure. Each endpoint pair must form a sensible line inside the track geofence after
local projection; start and finish may intentionally contain identical geometry. Run
Expand Down
Loading