Index: docs/SDD/SoftwareArchitecture.puml =================================================================== diff -u -rcaca75be9a284ac5f98c078ec47c2e826ac5e980 -r6d2ef8c97f4bb34204e95811839b3995000c47c1 --- docs/SDD/SoftwareArchitecture.puml (.../SoftwareArchitecture.puml) (revision caca75be9a284ac5f98c078ec47c2e826ac5e980) +++ docs/SDD/SoftwareArchitecture.puml (.../SoftwareArchitecture.puml) (revision 6d2ef8c97f4bb34204e95811839b3995000c47c1) @@ -5,20 +5,28 @@ skinparam component { BackgroundColor<> LightYellow BackgroundColor<> LightGray + BackgroundColor<> #E8E8F8 + BorderStyle<> dashed } title Leahi Real-time CDT — Component Architecture +note as N1 + The Connectivity Agent process and its Unix domain socket + have been removed; CloudConnect is becoming the single + conduit to the cloud (docs/SDD/AgentMigrationPlan.md). + Dashed = planned, not yet implemented. +end note + node "Leahi Device" { node "CloudConnect (process)" { component "CloudConnectController" as LRC component "Can::CanInterface" as CAN - component "CloudConnectClient" as AI + component "Cloud pipeline\n(MessageSpool, Router,\nMqttPublisher, SpoolDrain)" as PIPE <> } node "Comms (lib)" { - component "CloudConnectClient\nimpl" as AI_IMPL component "CloudConnectServer\n(local-socket server)" as RS component "Can::MessageDispatcher\n(per-CAN-id reassembly)" as MDISP component "Can::MessageBuilder\n(frame ↔ message)" as MB @@ -30,20 +38,22 @@ } interface "CAN Bus\n(SocketCAN)" as CANBUS - interface "Unix Domain Socket\n(/tmp/cloudconnect_agent.sock)" as UDS + interface "Unix Domain Socket\n(/tmp/cloudconnect.sock)" as APPUDS } +node "Luis application" { + component "Application client" as APP +} + node "CANDumpPlayer (tool)" { component "CAN dump replay\n(writeFrame → SocketCAN)" as CDP } -node "AgentSim (tool / future Agent)" { - component "AgentSimController" as ASC - component "CloudConnectFrame\n(framing + CRC)" as AM2 +cloud "AWS Cloud" as CLOUD <> { + component "AWS IoT Core\n(MQTT broker)" as IOTCORE <> + component "Amazon S3\n(log bundles)" as S3 <> } -cloud "Cloud Service\n(out of scope)" as CLOUD <> - node "Build-time (scripts)" { component "MsgUtils Python\n(msgutils)" as PYUTILS <> component "Jinja2 Templates\n(MsgDefs_*.jinja)" as JINJA <> @@ -62,14 +72,14 @@ MDISP --> LRC : didActionReceive(Can::Message) LRC --> MD : canMessageToProtobufByteArray() MD --> AM : protobuf bytes -LRC --> AI : send(MsgId, seq, payload) -AI --> AI_IMPL -AI_IMPL --> AM : build() -AI_IMPL --> UDS : write frame +LRC --> RS : send(Type, seq, payload) +RS --> AM : build() +RS --> APPUDS : write frame +APPUDS --> APP : readyRead -UDS --> ASC : readyRead -ASC --> AM2 : feed() -ASC --> CLOUD : (future) forward payload +LRC ..> PIPE : route + spool (planned) +PIPE ..> IOTCORE : PUBLISH QoS 1 (mTLS 8883) +PIPE ..> S3 : multipart upload (HTTPS) PYUTILS --> JINJA : renders JINJA --> PROTO : generates