fix(gps): allow GPS runtime without motion hardware

This commit is contained in:
Trail Mate Dev committed 2026-09-18 17:47:53 +08:00
1 parent 22deba41b4
commit 45367642da
3 files changed
+26 -7

No files matched your search

@@ -26,7 +26,7 @@ class GpsService
public:
static GpsService& getInstance();
void begin(GpsBoard& gps_board, MotionBoard& motion_board, uint32_t disable_hw_init,
void begin(GpsBoard& gps_board, MotionBoard* motion_board, uint32_t disable_hw_init,
uint32_t gps_interval_ms, const MotionConfig& motion_config,
const GpsReceiverInitConfig& receiver_init_config = GpsReceiverInitConfig{});
GpsState getData();
@@ -19,6 +19,7 @@
#include "platform/esp/arduino_common/gps/track_recorder.h"
#include "platform/esp/arduino_common/storage/sd_card_runtime.h"
#include "platform/esp/arduino_common/storage/storage_runtime.h"
#include "platform/esp/arduino_common/geocaching/browse_runtime.h"
#include "platform/esp/arduino_common/team/crypto/team_crypto.h"
#include "platform/esp/arduino_common/team/event/team_app_data_event_bus_bridge.h"
#include "platform/esp/arduino_common/team/event/team_event_bus_sink.h"
@@ -59,14 +60,14 @@ void init_gps_runtime(GpsBoard* gps_board,
uint32_t disable_hw_init,
const app::AppConfig& config)
{
if (!gps_board || !motion_board)
if (!gps_board)
{
return;
}
auto& gps_service = gps::GpsService::getInstance();
gps_service.begin(*gps_board,
*motion_board,
motion_board,
disable_hw_init,
config.gps_interval_ms,
config.motion_config,
@@ -277,6 +278,7 @@ app::ChatServicesBundle create_chat_services(const app::AppConfig& config,
}
}
bundle.service = std::unique_ptr<chat::ChatService>(
new chat::ChatService(*bundle.model, *bundle.mesh_runtime, *bundle.store, config.mesh_protocol));
if (!bundle.service)
@@ -295,6 +297,9 @@ app::ChatServicesBundle create_chat_services(const app::AppConfig& config,
{
bundle.start_deferred_storage = start_deferred_storage;
}
if (lora_board)
::platform::esp::arduino_common::geocaching::browse_runtime::configure(
*static_cast<chat::MeshAdapterRouter*>(bundle.mesh_runtime.get()), *lora_board);
return bundle;
}
@@ -70,13 +70,13 @@ GpsService& GpsService::getInstance()
return *instance;
}
void GpsService::begin(GpsBoard& gps_board, MotionBoard& motion_board,
void GpsService::begin(GpsBoard& gps_board, MotionBoard* motion_board,
uint32_t disable_hw_init, uint32_t gps_interval_ms,
const MotionConfig& motion_config,
const GpsReceiverInitConfig& receiver_init_config)
{
gps_board_ = &gps_board;
motion_board_ = &motion_board;
motion_board_ = motion_board;
receiver_init_config_ = receiver_init_config;
gps_board_->setGPSReceiverInitConfig(receiver_init_config_);
gps_adapter_.begin(gps_board);
@@ -95,7 +95,10 @@ void GpsService::begin(GpsBoard& gps_board, MotionBoard& motion_board,
Serial.printf("[GPS] service starting reason=adapter_not_ready_waiting_retry\n");
}
motion_adapter_.begin(motion_board);
if (motion_board_ != nullptr)
{
motion_adapter_.begin(*motion_board_);
}
gps_data_mutex_ = xSemaphoreCreateMutex();
if (gps_data_mutex_ == NULL)
@@ -127,7 +130,11 @@ void GpsService::begin(GpsBoard& gps_board, MotionBoard& motion_board,
log_d("GPS data collection task created successfully (interval: %lu ms)", runtime_state_.requestedCollectionIntervalMs());
}
const bool motion_control_enabled = motion_policy_.begin(motion_adapter_, motion_config_);
bool motion_control_enabled = false;
if (motion_board_ != nullptr)
{
motion_control_enabled = motion_policy_.begin(motion_adapter_, motion_config_);
}
runtime_state_.setMotionControlEnabled(motion_control_enabled, millis());
if (motion_control_enabled && motion_task_handle_ == nullptr)
@@ -399,6 +406,13 @@ void GpsService::setMotionConfig(const MotionConfig& config)
}
motion_config_ = normalizeMotionConfig(config);
if (motion_board_ == nullptr)
{
runtime_state_.setMotionControlEnabled(
false,
millis());
return;
}
const bool motion_control_enabled = motion_policy_.begin(motion_adapter_, motion_config_);
runtime_state_.setMotionControlEnabled(motion_control_enabled, millis());