Overview
A telemetry system simulator built with modern C++17. The system collects simulated real-time data from three sensor types (Temperature, Altitude, Velocity) in a background thread, stores packets in a thread-safe circular buffer, and exposes everything through an interactive CLI.
The project includes a full CI/CD pipeline via GitHub Actions that runs unit tests and Valgrind thread-safety checks on every push and pull request.
Key Features
- Polymorphic sensor design — abstract base class with three concrete sensor types
- Thread-safe telemetry engine using
std::mutexandstd::atomic - Circular buffer capped at 1,000 packets, collected at 1 Hz
- Interactive CLI with 8 commands:
start,stop,status,latest,stats,clear,export,exit - CSV export with auto-generated timestamped filenames
- Unit tests + Valgrind helgrind concurrency validation
- Dual build system: CMake and Makefile
Tech Stack
Challenges & Learnings
Ensuring zero data races while keeping the collection thread and the CLI thread independent required careful scoping of every lock acquisition. Validating this with Valgrind helgrind in CI caught several subtle races early. Designing a clean polymorphic sensor hierarchy also reinforced RAII patterns and efficient use of virtual dispatch in modern C++.