@startuml Seq_RealtimeDataTransfer title Real-time Data Transfer — End-to-End Scenario participant "CANDumpPlayer" as CDP participant "CAN Bus\n(SocketCAN)" as CANBUS participant "LeahiRt\n(LeahiRtController)" as LRC participant "Unix Domain\nSocket" as UDS participant "AgentSim\n(AgentSimController)" as ASC note over CDP Replays a candump log onto SocketCAN at a configurable speed multiplier. See Seq_CANDumpPlayer for detail. end note CDP -> CANBUS : writeFrame(can_id, payload) CANBUS -> LRC : didFrameReceive(QCanBusFrame) LRC -> LRC : MessageDispatcher reassembles\nmulti-frame Can::Message\n(see Seq_CANToCloud for detail) alt action == drop (or msgId not in _msgHandling) LRC -> LRC : discard else action == send_delta AND payload unchanged\n(cached data.chopped(1) == new data.chopped(1)) LRC -> LRC : discard (no change) else action == send_always OR send_delta with new payload LRC -> LRC : canMessageToProtobufByteArray()\n→ serialised protobuf bytes LRC -> UDS : AgentMessage frame\n(msgId=topic, seq++, protobuf payload) UDS -> ASC : readyRead ASC -> ASC : AgentMessage::feed() → Complete\nlogMessage() + Envelope parse\n(see Seq_AgentSim for detail) end @enduml