Core Reference

Runtime Dataflow

Exact control path from CAN RX to lock request and transmit shaping.

End-to-end path

Chassis/Haldex CAN frame -> can_rx.cpp -> mapped decode attempt (bus/id/signal/mux/unit) -> telemetry state update (speed/throttle/rpm) -> fallback decode if mapped signal stale/missing -> calcs.cpp computes lock_target -> frames.cpp applies generation-specific byte shaping -> transmit to Haldex bus -> optional rebroadcast status on chassis bus

Timing model

Detailed sequence (chassis receive loop)

  1. Refresh mapping bindings from current configured signal keys.
  2. Receive frame from chassis bus.
  3. Cache frame for CAN view.
  4. Try mapped decode for throttle, rpm, and speed using DBC descriptor matching.
  5. Mark each mapped signal fresh if decode succeeded.
  6. Compute mapped freshness flags (speed, throttle, rpm).
  7. If not standalone mode, run fallback extraction for stale or missing mapped inputs.
  8. If mode is not stock, call lock data and frame mutation path for selected generation.
  9. Transmit toward Haldex with generated-frame marker for diagnostics.

Fallback hierarchy example (speed)

Detailed sequence (haldex receive loop)

  1. Receive frame from Haldex bus.
  2. Cache frame for CAN view.
  3. Optionally decode mapped telemetry if mapping targets Haldex bus signals.
  4. Extract generation-specific engagement and state bits for diagnostics.
  5. Update AWD status model.
  6. Forward Haldex traffic to chassis bus when bridge/broadcast is enabled.

UI visibility versus control reality

Try the OpenHaldex Firmware Demo

Preview the real OpenHaldex firmware UI in your browser with simulated live CAN traffic and interactive pages for tuning, diagnostics, logs, setup, and OTA workflows.

Open firmware demo