Architecture
The diagram below shows the lifecycle of a query: from creating a
Connection to receiving a parsed Response.
sequenceDiagram
actor User
participant Connection
participant Transport
participant Protocol
participant Parser
User->>Connection: Connection(...)
Connection->>Transport: resolve & connect()
Transport-->>Connection: OK
rect rgba(128, 128, 128, 0.25)
Note over Connection,Protocol: Initialization
loop Adapter configuration
Connection->>Transport: send AT command
Transport-->>Connection: raw bytes
end
loop Vehicle protocol detection
Connection->>Transport: try protocol
Transport-->>Connection: raw bytes
end
Connection->>Protocol: get_handler(protocol id)
Protocol-->>Connection: protocol handler
end
User->>Connection: conn.query(command)
Note over Connection: Command.build() ⮞ bytes
Connection->>Transport: write bytes
Transport-->>Connection: raw bytes
Note over Connection: Context(command, protocol) + raw ⮞ ResponseBase
Connection->>Protocol: parse_response(ResponseBase)
Protocol->>Parser: evaluate(processed bytes)
Parser-->>Protocol: value
Protocol-->>Connection: Response(value)
Connection-->>User: Response