Causes and records
This page holds the look-up tables behind the safe-state behaviour: every event type and cause value, what latches each SDM and what clears it, and the records each component writes. The narrative, including the release protocol, is in Safe-state model.
Logs print causes as numbers (cause=4), never as names. Use the tables below to read them.
Event types
The wire values of EventType in schema version 5. An SDM rejects a message whose schema version
differs, so every runtime, including the FSI firmware, must be built from the same release.
Every SDM is subscribed to SW_FAIL, PSS_STATUS_NOOP, SENSOR_INVALID, SENSOR_VALID,
AI_PIPELINE_INVALID and AI_PIPELINE_VALID whatever it registers for.
Other enumerations on the wire:
Causes
Every event carries a one-byte cause, protected by the event’s CRC. A value of 19 or more fails validation, and the whole request is dropped.
The name in brackets is the sensorIdentifier of the event.
Reasons on lost-source records
Causes 15, 17 and 18 are logged with a reason.
An MDX client registered without an instance number, and the NvPSD Gateway, are not tracked: a lost connection from either raises no lost-source record.
Presence report
Every status request (PSS_STATUS_NOOP, every status_noop_interval_ms) carries cause 16 and two
32-bit words:
For example, SAIM, PCM and MDX instances 1 and 2 present, with instance 2’s reports being rejected
and the others confirmed usable, gives objectID[0] = 0x02000303 and objectID[1] = 0x01030303.
What each monitor reports
SAIM
SAIM re-sends each camera’s current verdict, with its cause, every 30 s.
PCM
PCM sends nothing before its first verdict, sends every change at once, and re-sends an unchanged
verdict every verdict_resend_ms (5000 ms shipped, and when the key is missing). In LEARN mode it
does not register and sends nothing. See
Verdict aggregation.
SEI daemon re-assertion
On every status interval the SEI daemon re-sends every standing SENSOR_INVALID (with its recorded
cause) and AI_PIPELINE_INVALID (cause 0), so an SDM that restarts latches again within one
interval.
SEI mode
The NvPSD Gateway turns every ERROR request into a SW_FAIL with cause 12 for each SDM. If the
gateway itself loses the SEI daemon (its own heartbeat fails max_hb_failures times and it cannot
re-register), it sends every SDM one request with mode=ERROR and no events.
SDM latch causes
A CCPLEX SDM latches its safe state when any cause below becomes active. The cause clearing does
not release the latch: only a validated safe-release request from the command receiver does, and
it is denied while any cause is still active. SDM logs print the active causes as a decimal sum of
the bit values, for example active_causes=34.
A sensor is marked failed by a SENSOR_INVALID, or by an event that arrives unhealthy, except with
cause 1. A camera still in its start-up state is not marked failed by unhealthy events either.
PSS sub-causes
Each sub-cause raises the SEI latch cause and suppresses decisions from fused events.
Every SW_FAIL latches, wherever it is in the request, whatever the mode, and even when it is
STALE.
What the SDM sends
The command receiver requests a release with CMD_SAFE_RELEASE_REQUEST (0x08).
SDMs on the FSI
The FSI SDMs apply the same causes and sub-causes, with a compiled reviewed sensor set and these bits (printed in hexadecimal on the FSI UART):
The SDM watchdog fault (a task silent for 2000 ms) has no runtime clear, so a release is denied until the FSI restarts.
Records
Where records go
Most Safety Core processes write audit records through the SBB library to syslog.
Each record’s message has this form. The record name and its details are joined with no space:
The SDMs, SAIM, PCM, the command receivers and fsicom-agent do not use syslog; see
SDM log lines.
SEI daemon records
Refusal records
The SEI daemon refuses reports and registrations with these WARNING records:
NvPSD Gateway records
SDM log lines
Each CCPLEX SDM writes [<date> <time>.<ms>] [ATL|PXC|APX][INFO|WARNING|ERR] <message> to its log
file and its console. The table shows the atl_sdm text; proximity_sdm and atl_proximity_sdm
use the prefixes Proximity: and APX:.
The note after a SW_FAIL cause names the sub-cause, for example
(Safety Monitor lost -- clears only when it is back).
fsicom-agent writes [GW]-prefixed lines to stdout and stderr; see
fsicom-agent. The FSI SDMs write to the FSI UART,
for example [SDM] PSS sub-cause active: <name>,
[SDM] Safe-release denied; active safe-state fault source remains (active_causes=0x<hex>) and
[SDM-WD] ATL SDM watchdog fault task=<n> reason=<n> elapsed=<ms> ms -> UNMUTE + SW_ERROR.
Example lines
Constructed from the format strings. The syslog prefix in front of SEI and gateway records depends on the rsyslog template.