fwt_software/docs/known-issues.md

4.0 KiB

Known Issues — Status

This tracks the reproduction blockers and robustness issues identified in the original code and what the refactor did about them.

Resolved

# Original issue Resolution
1 Hardcoded config path (/home/ggs/...) Config search order: --config$FGC_CONFIG./config.ini → exe dir → XDG (src/core/Paths.cpp)
2 Hardcoded image output path [Paths] output_dir with ~/$ENV expansion + sensible default
3 Startup scripts with ~/projects/... Replaced by path-independent scripts/run.sh + systemd unit
4 Vimba X required to build WITH_VIMBA CMake option (default ON); OFF builds a mock-only binary
5 No hardware path; exits if MQTT down Mock implementations + runtime toggles; MQTT failure now logs and continues
8 Plaintext MQTT credentials $FGC_MQTT_USER/$FGC_MQTT_PW env override; config.ini gitignored
9 MQTT busy-wait (while(running);) Gone — Paho async client + set_automatic_reconnect; no spin thread
10 parser() missing return Old parser removed; parseTelemetryLine returns std::optional cleanly
11 Fragile Boost.Spirit command grammar Replaced by parseCommand whitespace tokenizer (src/core/CommandParser.cpp)
12 Two divergent config.ini files Single committed config/config.example.ini; real configs gitignored
6 Telemetry field order: humidity before temperature Obsolete — migrated to the current firmware's ST protocol (encoder counts, no environmental fields); humidity/temp/fan are gone
7 Trigger fires while is_moving == 1 (not when stopped) Fixed by the protocol migration — capture is now move → settle → trigger; the camera fires only once both axes report standstill at the target (CaptureScheduler.cpp)

Also added along the way: a leveled logger, typed/validated config, an SDK-independent core library, and a doctest unit-test suite (ctest).

Open / needs hardware confirmation

# Issue Status
13 [Motor] degrees↔counts calibration The config.example.ini values are placeholders. Calibrate *_counts_per_deg / *_zero_count against real xenc readings after homing on the rig.
14 Settle tolerance / timing kSettleTolCounts (600) and the per-interval timing in CaptureScheduler.cpp are untested against hardware; tune against observed ST behaviour.

Verification caveats

  • Real MQTT wrapper now compiles and links: cmake -B build -DWITH_MQTT=ON fetches and builds Paho (C++ wrapper plus its bundled C library) from official Eclipse upstream and links MqttControlChannel into the binary. Verified on GCC 16 / CMake 4 (see cmake/Paho.cmake for the toolchain-compat shims).
  • Real Serial/Vimba wrappers were verified by code review, not compilation (no Vimba X SDK on the development machine). They are faithful adaptations of the original code. First Vimba compile happens on a machine with the SDK via WITH_VIMBA=ON.
  • Makefile parity was never re-checked because the original Makefile build also can't run without the SDKs. The Makefile has been removed in favour of CMake; if you need to confirm byte-for-byte behaviour, do a full WITH_VIMBA=ON WITH_MQTT=ON build on a tower PC.
  • Demo mode copies bin/x64/Release/test_smoke.jxl, resolved relative to the working directory. Run from a directory where that path exists, or extend ImagePipeline::Params::demo_image.

Possible follow-ups (not done)

  • Graceful shutdown on SIGINT (currently exit via exit/Ctrl-D; a pending getline can delay shutdown).
  • Make the camera index→label map and JPEG XL defaults fully config-driven.
  • Reintroduce optional image upload to the ground station, config-driven (the old hardcoded NFS/SMB upload was removed).