# MARTe IO Components

A collection of I/O components for the [MARTe2](https://vcis.f4e.europa.eu/marte2-docs/) real-time framework,
together with a Go-based web visualisation client.

## Components

| Component | Type | Description |
|-----------|------|-------------|
| [UDPStreamer](Docs/UDPStreamer.md) | DataSource | Streams MARTe2 signals to a single UDP client in real time |
| [SineArrayGAM](Docs/SineArrayGAM.md) | GAM | Generates continuous sinusoidal burst arrays (testing / demo) |

## Client Tools

| Tool | Description |
|------|-------------|
| [WebUI](Docs/WebUI.md) | Browser-based real-time plotter — connects to UDPStreamer via UDP, exposes data over WebSocket |

## Quick Start

```bash
# 1. Configure environment (edit paths to point at your MARTe2 builds)
source marte_env.sh

# 2. Build everything and run the demo application with the browser UI
cd Test/MARTeApp
./run.sh --webui

# 3. Open http://localhost:8080 in a browser
#    Drag signals from the sidebar onto a plot panel to visualise them.
```

See the [Tutorial](Docs/Tutorial.md) for a step-by-step walkthrough.

## Building

### UDPStreamer library

```bash
source marte_env.sh
make -f Makefile.gcc TARGET=x86-linux
```

### Unit tests

```bash
source marte_env.sh
make -f Makefile.gcc TARGET=x86-linux test
./Build/x86-linux/Tests/GTest/MainGTest.ex --gtest_filter="UDPStreamer*"
```

### WebUI client

```bash
cd Client/WebUI
go build -o udpstreamer-webui ./...
```

## Repository Layout

```
.
├── Source/Components/DataSources/UDPStreamer/   # UDPStreamer DataSource + SineArrayGAM
├── Test/
│   ├── Components/DataSources/UDPStreamer/      # GTest unit tests
│   ├── GTest/                                   # GTest main entry point
│   └── MARTeApp/                                # Demo MARTe2 application (cfg + run.sh)
├── Client/WebUI/                                # Go WebSocket relay + browser UI
├── Docs/                                        # Reference documentation and tutorial
├── marte_env.sh                                 # Environment setup (MARTe2_DIR, LD_LIBRARY_PATH)
└── Makefile.gcc / Makefile.inc                  # Top-level build system
```

## Prerequisites

| Dependency | Notes |
|------------|-------|
| MARTe2 | Must be built; path configured via `MARTe2_DIR` in `marte_env.sh` |
| MARTe2-components | IOGAM, LinuxTimer, WaveformGAM must be built |
| GCC ≥ 7 | C++98 mode (`-std=c++98`) |
| Go ≥ 1.21 | For the WebUI client only |

## Documentation

- [UDPStreamer DataSource reference](Docs/UDPStreamer.md)
- [SineArrayGAM reference](Docs/SineArrayGAM.md)
- [WebUI client reference](Docs/WebUI.md)
- [Wire protocol specification](Docs/Protocol.md)
- [Tutorial: streaming your first signals](Docs/Tutorial.md)

## License

EUPL v1.1
