apart-controller/README.md
Tronax c548d5c9f7 Add separate Linux and Windows build instructions to README
Document dependency install per platform, the MSYS2 MinGW64 toolchain
setup for Windows, and the cpack/NSIS installer step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-13 10:10:05 +02:00

133 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Apart Concept 1 — RS232 Controller
Eine native Desktop-Anwendung (C++ / Qt6) zur vollständigen Steuerung des
**Apart Concept 1** 2-Zonen-Verstärkers über die serielle RS232-Schnittstelle.
Mit modernem GUI, **Dark/Light-Mode** und eingebautem **Simulator** zum Testen
ohne Hardware.
## Funktionen
Alle Attribute des offiziellen Concept-1-RS232-Protokolls werden unterstützt:
- **Steuerung:** Standby, Quellenwahl (AD), Musik-/Mikrofon-Lautstärke pro Zone
(mit Mute), EQ Bass/Höhen, Auto-Loudness
- **Konfiguration:** Multizone & Zone-Link (Stereo / 2 Zonen verknüpft / 2 Zonen
unabhängig), Max-Musik-/Max-Mic-Pegel pro Zone, Paging-Active + Live-Paging-Status,
Eingangs-Gain pro Quelle, editierbare Quellennamen
- **RS-232 / System:** ECHO, LF, BS, HEADER, VALFB; Geräteinfo
(Serial-, HW-, SW-Version); Werksreset (RESTORE)
- **Terminal:** farbcodiertes TX/RX-Log und manuelle Rohbefehle
## Protokoll-Eckdaten
| Parameter | Wert |
|---|---|
| Baudrate | 19200 |
| Datenbits | 8 |
| Parität | keine |
| Stopbits | 1 |
| Flow-Control | keine |
| Terminator | `<CR>` (0x0D) |
**Verkabelung (D-Sub 9):** Pin 2 = TX, Pin 3 = RX, Pin 5 = GND (Nullmodem zum PC).
## Abhängigkeiten
- CMake ≥ 3.19, C++17-Compiler
- **Qt6 Widgets** (Pflicht) — Paket `qt6-base`
- **Qt6 SerialPort** (optional, für echte Hardware) — Paket `qt6-serialport`
> Ohne `qt6-serialport` baut die App weiterhin und läuft im **Simulator-Modus**.
> Für echte RS232-Hardware das Paket installieren:
> ```
> sudo pacman -S qt6-serialport
> ```
## Bauen
### Linux
Abhängigkeiten installieren (Arch / pacman):
```bash
sudo pacman -S cmake gcc qt6-base qt6-serialport
```
Bauen und starten:
```bash
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
./build/apart-controller
```
> Auf anderen Distributionen heißen die Pakete z. B. `qt6-base-dev` und
> `qt6-serialport-dev` (Debian/Ubuntu) bzw. `qt6-qtbase-devel` und
> `qt6-qtserialport-devel` (Fedora).
### Windows
Empfohlen ist die **MSYS2 MinGW64**-Toolchain.
1. [MSYS2](https://www.msys2.org/) installieren und die **„MSYS2 MinGW64“**-Shell
öffnen.
2. Toolchain und Qt6 installieren:
```bash
pacman -S --needed \
mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-cmake \
mingw-w64-x86_64-ninja \
mingw-w64-x86_64-qt6-base \
mingw-w64-x86_64-qt6-serialport \
mingw-w64-x86_64-nsis
```
3. Bauen:
```bash
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/apart-controller.exe
```
#### Installer erstellen
Der Installer bündelt automatisch die Anwendung, alle Qt- und MinGW-Laufzeit-DLLs
sowie die zur Laufzeit geladenen Qt-Plugins (Plattform-, Stil-, Bildformate).
Aus dem `build`-Verzeichnis heraus:
```bash
cd build
cpack -G NSIS
```
Heraus kommt `Apart Concept 1 Controller-1.0.0-win64.exe` — ein eigenständiger
Installer mit Start-Menü- und Desktop-Verknüpfung. Es müssen **keine** DLLs von
Hand kopiert werden.
## Bedienung
1. Oben **Transport** wählen: *Simulator* (kein Gerät nötig) oder
*Serielle Schnittstelle* (Port aus der Liste, ggf. mit `` aktualisieren).
2. **Verbinden** klicken. Beim Verbinden wird der Gerätezustand automatisch
eingelesen (`GET INFO`, Gains, Quellennamen, Versionen).
3. Bedienen über die Tabs **Steuerung**, **Konfiguration**, **RS232 / System**.
Alle Änderungen werden sofort als RS232-Befehl gesendet und der Zustand wird
über Value-Feedback synchron gehalten.
4. Theme über den Button rechts oben umschalten (wird gespeichert).
## Architektur
```
src/
protocol/ Concept1Protocol Befehlsaufbau & Reply-Parser (stateless)
Concept1State Gerätezustand
transport/ ITransport abstrakte Schnittstelle
SerialTransport echte RS232 (QtSerialPort, optional)
SimulatorTransport virtueller Concept 1
core/ Concept1Controller verbindet Transport+Protokoll, High-Level-API
ui/ MainWindow GUI mit Tabs
ThemeManager Dark/Light QSS + Persistenz
resources/ styles/*.qss Themes (Qt Resource System)
```