2.5 KiB
HostLink session state and frame routing
Model status: integration · confirmed; belongs to the cross-processor integration model
Real representation of the session
There is no HostlinkSession class here. A session consists of three explicit structures:
LinkState:Stopped / Waiting / Connected / Handshaking / Ready / ErrorStatus:state、RX/TX count、last errorSessionRuntime:Status、TX sequence、handshake deadline、status/GPS emit timestamps
Behavior is operated by functions such as reset_session, stop_session, set_link_state, mark_handshake_started, mark_handshake_complete, mark_disconnected and handshake_expired.
Handshake and recovery
stateDiagram-v2
[*] --> Stopped
Stopped --> Waiting: reset_session
Waiting --> Connected: transport connected
Connected --> Handshaking: mark_handshake_started
Handshaking --> Ready: mark_handshake_complete
Handshaking --> Error: handshake_expired
Ready --> Waiting: mark_disconnected
Error --> Waiting: reset/retry
Waiting --> Stopped: stop_session
The external triggering of Connected to Handshaking is the responsibility of the caller; the description of these calling relationships in the figure belongs to Inferred and should be verified through execution flow.
Decision before the frame enters the service
hostlink_frame_router.h definition:
HostlinkCommandIdHostlinkFrameDecisionTypeHostlinkFrameDecision
Frame router first generates a decision, and then the service/config/event/app-data codec translates the payload. The responsibility of Transport is byte transfer; the responsibility of Session is link status and sequence number; the responsibility of Router is frame classification. These three cannot be combined into "C6 service".
Periodic output
should_emit_status / mark_status_emitted and should_emit_gps / mark_gps_emitted indicate that status and GPS push each have a throttling status; they are part of the SessionRuntime, not the UI timer.
Still needs to be verified
- processing rules for sequence wrap-around and old session responses.
- Whether version/capability negotiation is completed in the codec or upper-layer service.
- retry ownership after
Error.
Drilldown and evidence
- LinkState and handshake life cycle
modules/core_hostlink/include/hostlink/hostlink_session.hmodules/core_hostlink/src/hostlink_session.cppmodules/core_hostlink/include/hostlink/hostlink_frame_router.h