diff --git a/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.cpp index 6766b5376c..2f55233e9f 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.cpp @@ -178,5 +178,44 @@ void SdCardChecks::checkAndReport(const Context &context, Report &reporter) #endif /* CONFIG_MODULES_TASK_WATCHDOG */ #endif /* __PX4_NUTTX */ + // Check if SDLOG parameters are set to non-default values while SD card logging is disabled + int32_t sdlog_backend = 0; + param_get(_param_sdlog_backend, &sdlog_backend); + const bool sdcard_logging_enabled = (sdlog_backend & 1) != 0; + + if (!sdcard_logging_enabled) { + // Check if any SDLOG parameter differs from its default + auto param_changed = [](param_t p) { + int32_t val, def; + return (param_get(p, &val) == 0 && param_get_default_value(p, &def) == 0 && val != def); + }; + + const bool sdlog_params_changed = (param_changed(_param_sdlog_mode) || + param_changed(_param_sdlog_profile) || + param_changed(_param_sdlog_mission) || + param_changed(_param_sdlog_dirs_max)); + + if (sdlog_params_changed) { + + /* EVENT + * @description + * SD logging parameters (SDLOG_*) have been modified, but SD card logging + * is not enabled in SDLOG_BACKEND. These parameters will have no effect. + * + * + * Either enable SD card logging in SDLOG_BACKEND, + * or reset the SDLOG parameters to their default values. + * + */ + reporter.healthFailure(NavModes::None, health_component_t::logging, + events::ID("check_sdlog_params_no_sdcard"), + events::Log::Warning, "SDLOG parameters ineffective without SD card logging"); + + if (reporter.mavlink_log_pub()) { + mavlink_log_warning(reporter.mavlink_log_pub(), "SDLOG parameters set but SD card logging disabled"); + } + } + } + #endif /* PX4_STORAGEDIR */ } diff --git a/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.hpp b/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.hpp index b8a0ac70bb..e599a6ab92 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.hpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.hpp @@ -55,6 +55,13 @@ private: #endif #endif + // SDLOG parameters are from logger module, access via param_find + param_t _param_sdlog_backend{param_find("SDLOG_BACKEND")}; + param_t _param_sdlog_mode{param_find("SDLOG_MODE")}; + param_t _param_sdlog_profile{param_find("SDLOG_PROFILE")}; + param_t _param_sdlog_mission{param_find("SDLOG_MISSION")}; + param_t _param_sdlog_dirs_max{param_find("SDLOG_DIRS_MAX")}; + DEFINE_PARAMETERS_CUSTOM_PARENT(HealthAndArmingCheckBase, (ParamInt) _param_com_arm_sdcard, (ParamBool) _param_com_arm_hardfault_check