mirror of
https://github.com/vicliu624/trail-mate.git
synced 2026-10-23 21:43:28 +00:00
fix(gps): allow GPS runtime without motion hardware
This commit is contained in:
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());
|
||||
|
||||
Reference in new issue
Block a user