@startuml Seq_Startup title Real-time Data Transfer — Startup participant "CAN Bus\n(SocketCAN)" as CANBUS participant "Can::CanInterface" as CAN participant "Can::MessageDispatcher" as DISP participant "CloudConnectController" as CC participant "MqttClient" as MQTT participant "AWS IoT Core\n(MQTT broker)" as AWS == CloudConnectController: signal → slot == note over CAN, MQTT CanInterface::didFrameReceive → CloudConnectController::onCanFrameReceive MessageDispatcher::didActionReceive → CloudConnectController::onCanMessageReceive MqttClient::didStateChanged → CloudConnectController::onCloudStateChanged MqttClient::didMessageStatusChanged → CloudConnectController::onCloudMessageStatusChanged MqttClient::didMessageReceived → CloudConnectController::onCloudMessageReceived end note == Configuration (on main thread) == CC -> CC : loadConfig(CloudConnect.ini) CC -> CC : loadCanRouting(LeahiCanRouting.ini) → CAN mesg handling CC -> MQTT : init(MqttClient::Config)\nbuild connection with cert/key/CA from CloudConnect.ini == Bring-up (on controller thread) == CC -> MQTT : open MQTT connection CC -> CAN : open CAN connection CAN -> CANBUS : open the SocketCAN device MQTT -> AWS : CONNECT (create encrypted connection to host) AWS --> MQTT : CONNACK MQTT -> CC : didStateChanged(Connected) @enduml