diff --git a/platform/esp/arduino_common/include/platform/esp/arduino_common/gps/gps_service.h b/platform/esp/arduino_common/include/platform/esp/arduino_common/gps/gps_service.h index d639431d..ae44f647 100644 --- a/platform/esp/arduino_common/include/platform/esp/arduino_common/gps/gps_service.h +++ b/platform/esp/arduino_common/include/platform/esp/arduino_common/gps/gps_service.h @@ -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(); diff --git a/platform/esp/arduino_common/src/app_context_platform_bindings.cpp b/platform/esp/arduino_common/src/app_context_platform_bindings.cpp index 1fdf81a4..167dcf9a 100644 --- a/platform/esp/arduino_common/src/app_context_platform_bindings.cpp +++ b/platform/esp/arduino_common/src/app_context_platform_bindings.cpp @@ -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( 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(bundle.mesh_runtime.get()), *lora_board); return bundle; } diff --git a/platform/esp/arduino_common/src/gps/gps_service.cpp b/platform/esp/arduino_common/src/gps/gps_service.cpp index 0e99f99d..68bb279d 100644 --- a/platform/esp/arduino_common/src/gps/gps_service.cpp +++ b/platform/esp/arduino_common/src/gps/gps_service.cpp @@ -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());