From 5e19e7daa851bdbacd2e3aef59a517924922bfd9 Mon Sep 17 00:00:00 2001 From: Hector van der Aa Date: Mon, 30 Mar 2026 23:43:43 +0200 Subject: [PATCH] Added member variables to GPS for lap detection --- src/base/task.h | 1 + src/modules/config/config.cpp | 1 + src/modules/gps/gps.cpp | 23 +++++++++++++++++++++++ src/modules/gps/gps.h | 15 +++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/src/base/task.h b/src/base/task.h index 942ea35..c229ab4 100644 --- a/src/base/task.h +++ b/src/base/task.h @@ -44,6 +44,7 @@ enum Type : uint8_t { ConfigTengSetHigh, BatteryCal, AllConfigUpdated, + AllTrackLoaded, }; } // namespace task diff --git a/src/modules/config/config.cpp b/src/modules/config/config.cpp index 1bc78dc..4fc4d01 100644 --- a/src/modules/config/config.cpp +++ b/src/modules/config/config.cpp @@ -375,5 +375,6 @@ int Config::loadTrack(unsigned int idx) { loaded_track_ = track_data; trackGlobalWrite(loaded_track_); is_track_loaded_ = true; + router::send(module::All, task::AllTrackLoaded); return 0; } diff --git a/src/modules/gps/gps.cpp b/src/modules/gps/gps.cpp index 71b6481..ec2ea30 100644 --- a/src/modules/gps/gps.cpp +++ b/src/modules/gps/gps.cpp @@ -49,6 +49,29 @@ int Gps::loop(unsigned long timeout_ms) { return 1; } } + + Task active; + int res = queue_.pop(active); + if (res == 0) { + if (active.target_ == module::Gps) { + + } else if (active.target_ == module::All) { + switch (active.type_) + { + case task::AllTrackLoaded: + #ifdef DEBUG + if (logger_ != nullptr) { + logger_->debug("GPS received track loaded sig"); + } + #endif + lap_active_ = true; + break; + + default: + break; + } + } + } return 0; } diff --git a/src/modules/gps/gps.h b/src/modules/gps/gps.h index b09d16d..2b72e00 100644 --- a/src/modules/gps/gps.h +++ b/src/modules/gps/gps.h @@ -13,6 +13,15 @@ #include "data/gps_store.h" #include "base/router.h" +namespace trigger_status { + +enum TriggerStatus { + Idle, + Armed, + Trigd, +}; +} + class Gps : public ModuleBase { private: TinyGPSPlus *gps_; @@ -20,6 +29,12 @@ private: SystemLogger *logger_; RingBuffer queue_; uint32_t last_fix_value_ = 0; + trigger_status::TriggerStatus start_line_trigger_ = trigger_status::Idle; + bool lap_active_ = false; + unsigned long last_check_ = 0; + unsigned long check_interval_ = 250; + unsigned long last_arm_ = 0; + int arm_sign_ = 0; public: int push(const Task &task) override;