From 51fa986a51cc7285e9bb4971d5a094363c88c849 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 17 May 2026 02:07:31 +0000 Subject: [PATCH] Add laser_tracking_cli_tool/src/tracking.c --- laser_tracking_cli_tool/src/tracking.c | 73 ++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 laser_tracking_cli_tool/src/tracking.c diff --git a/laser_tracking_cli_tool/src/tracking.c b/laser_tracking_cli_tool/src/tracking.c new file mode 100644 index 0000000..4b18cca --- /dev/null +++ b/laser_tracking_cli_tool/src/tracking.c @@ -0,0 +1,73 @@ +/* + * tracking.c - Simulierte Implementierung der Tracking-API + * + * Startet kein echtes Laser-Tracking, sondern simuliert nur sinnvolle + * Statuswerte, z.B. kleine Winkelabweichungen und Zeitstempel. + */ + +#include "tracking.h" + +#include +#include +#include + +bool start_tracking(const char *target_satellite, + double elevation_angle, + tracking_status *status_out, + int debug) +{ + if (target_satellite == NULL || status_out == NULL) { + return false; + } + + if (elevation_angle < 0.0 || elevation_angle > 90.0) { + return false; + } + + /* In einer echten Implementierung würden hier: + * - Hardware-Schnittstellen geöffnet + * - Sicherheitschecks durchgeführt + * - TLE-/Ephemeriden-Daten ausgewertet + * - Steuerbefehle an Motoren/Controller gesendet + * werden. + * + * Hier: nur eine einfache Simulation. */ + + if (debug) { + printf("[DEBUG] (simulation) Initialisiere Tracking auf '%s' bei elev=%.2fdeg\n", + target_satellite, elevation_angle); + } + + status_out->active = true; + status_out->last_update = time(NULL); + + /* Simulierte kleine Abweichung (z.B. 0.0–0.1 Grad) */ + double r = (double)rand() / (double)RAND_MAX; /* in [0,1] */ + status_out->deviation = r * 0.1; /* in [0,0.1] */ + + if (debug) { + printf("[DEBUG] (simulation) deviation=%.4fdeg\n", status_out->deviation); + } + + return true; +} + +bool get_status(tracking_status *status_out) +{ + if (status_out == NULL) { + return false; + } + + /* In einem realen System würden hier aktuelle Daten der Hardware + * oder eines Steuerprozesses abgefragt. Wir generieren nur einen + * plausiblen Demo-Status, der zu einer laufenden Messung passt. */ + + status_out->active = true; + status_out->last_update = time(NULL); + + /* Kleine, fluktuierende Abweichung (z.B. 0.0–0.2 Grad). */ + double r = (double)rand() / (double)RAND_MAX; /* [0,1] */ + status_out->deviation = r * 0.2; /* [0,0.2] */ + + return true; +}