2026-10-09 20:15:13 +09:00
|
|
|
---
|
|
|
|
|
type: guidelines
|
|
|
|
|
---
|
|
|
|
|
# Core services guidelines
|
|
|
|
|
|
2026-10-12 23:25:03 +09:00
|
|
|
## 1. One CAN writer: `obd-poller`
|
|
|
|
|
- `obd-poller` is the only thing that transmits on the car's bus (project-yukart
|
|
|
|
|
decision 3): OBD-II requests, one at a time, only while the bus is visibly
|
|
|
|
|
alive. Anything else that transmits is a bug; the recorder only reads.
|
|
|
|
|
- `can_pcan` is no longer listen-only (2026-10-12), so the adapter acknowledges
|
|
|
|
|
frames like any scan tool. Going back is one line in orin-nano-env-setup's
|
|
|
|
|
`/etc/default/can-can_pcan`.
|
2026-10-09 20:15:13 +09:00
|
|
|
|
|
|
|
|
## 2. Capture never waits
|
|
|
|
|
- A frame missed is gone. Producers hand frames to the writer without blocking;
|
|
|
|
|
what doesn't fit is **counted**, recorded as an event, and never silently lost.
|
|
|
|
|
- Capture reads SocketCAN and gpsd directly. It does not depend on the broker, a
|
|
|
|
|
display, or any other service being up.
|
|
|
|
|
|
|
|
|
|
## 3. Every failure leaves complete files
|
|
|
|
|
- Append, flush and `fdatasync` about once a second. Power loss costs at most the
|
|
|
|
|
last second.
|
|
|
|
|
- Replace files by write-temp, fsync, rename. Never rewrite in place.
|
|
|
|
|
- Anything found half-done at startup is repaired or marked, not deleted.
|
|
|
|
|
|
|
|
|
|
## 4. Raw stays raw
|
|
|
|
|
- Recordings are `candump -L` text plus the gpsd JSON as received, so `can-utils`,
|
|
|
|
|
`canplayer` and anything already written against the first captures keep working.
|
|
|
|
|
- Decoding happens downstream of the recording, never instead of it.
|
|
|
|
|
|
|
|
|
|
## 5. Time is evidence, not truth
|
|
|
|
|
- The car unit's clock can boot stale and be stepped mid-drive. Record what is
|
|
|
|
|
needed to correct it later (sync state, monotonic time, observed steps, GNSS
|
|
|
|
|
time beside local receive time) rather than trusting it.
|
|
|
|
|
|
|
|
|
|
## 6. To be added
|