2.0 KiB
2.0 KiB
System Architecture
1. Overview
The suite consists of a C++ server library (libmarte_dev.so) that instrument MARTe2 applications at runtime, and a native Rust client for visualization.
2. Core Mechanism: Registry Patching
The "Zero-Code-Change" requirement is met by intercepting the MARTe2 ClassRegistryDatabase. When the DebugService initializes, it replaces the standard object builders for critical classes:
- Broker Injection: Standard Brokers (e.g.,
MemoryMapInputBroker) are replaced withDebugBrokerWrapper. This captures data every time a GAM reads or writes a signal. - Scheduler Injection: The
FastScheduleris replaced withDebugFastScheduler. This provides hooks at the start/end of each real-time cycle for execution control (pausing).
3. Communication Layer
The system uses three distinct channels:
3.1 Command & Control (TCP Port 8080)
- Protocol: Text-based over TCP.
- Role: Object tree discovery (
TREE), signal metadata (DISCOVER), and trace activation (TRACE). - Response Format: JSON for complex data,
OK/ERRORfor status.
3.2 High-Speed Telemetry (UDP Port 8081)
- Protocol: Binary over UDP.
- Format: Packed C-structs.
- Header:
[Magic:4][Seq:4][TS:8][Count:4](Packed, 20 bytes). - Payload:
[ID:4][Size:4][Data:N](Repeated for each traced signal).
3.3 Log Streaming (TCP Port 8082)
- Protocol: Real-time event streaming.
- Service:
TcpLogger(Standalone component). - Role: Forwards global
REPORT_ERRORcalls andstdoutmessages to the GUI client.
4. Component Diagram
[ MARTe2 App ] <--- [ DebugFastScheduler ] (Registry Patch)
| |
+ <--- [ DebugBrokerWrapper ] (Registry Patch)
| |
+---------------------+
| |
[ DebugService ] [ TcpLogger ]
| |
+--- (TCP 8080) ------+-----> [ Rust GUI Client ]
+--- (UDP 8081) ------+-----> [ (Oscilloscope) ]
+--- (TCP 8082) ------+-----> [ (Log Terminal) ]