3434
3535#include " sysutil_camera.h"
3636#include " sysutil_config.h"
37+ #include " sysutil_debug.h"
3738#include " sysutil_hostname.h"
3839#include " sysutil_protocol.h"
3940#include " sysutil_status.h"
@@ -175,6 +176,23 @@ void sync_settings_from_files() {
175176 }
176177 }
177178
179+ if (auto disable_openhd =
180+ extract_bool_field (content, " disable_openhd_service" );
181+ disable_openhd.has_value ()) {
182+ config.disable_openhd_service = *disable_openhd;
183+ changed = true ;
184+ }
185+ if (auto debug = extract_bool_field (content, " debug" );
186+ debug.has_value ()) {
187+ config.debug_enabled = *debug;
188+ changed = true ;
189+ } else if (auto debug_enabled =
190+ extract_bool_field (content, " debug_enabled" );
191+ debug_enabled.has_value ()) {
192+ config.debug_enabled = *debug_enabled;
193+ changed = true ;
194+ }
195+
178196 // sbc field is currently ignored as platform detection handles it.
179197 }
180198 remove_file_if_exists (json_path.c_str ());
@@ -283,6 +301,8 @@ std::string build_settings_response() {
283301 const bool gen_enable_last_known_position =
284302 config.gen_enable_last_known_position .value_or (false );
285303 const int gen_rf_metrics_level = config.gen_rf_metrics_level .value_or (0 );
304+ const bool disable_openhd_service =
305+ config.disable_openhd_service .value_or (false );
286306
287307 std::ostringstream out;
288308 out << " {\" type\" :\" sysutil.settings.response\" ,\" ok\" :true"
@@ -328,7 +348,9 @@ std::string build_settings_response() {
328348 << " ,\" microhard_telemetry_port\" :" << microhard_telemetry_port
329349 << " ,\" gen_enable_last_known_position\" :"
330350 << (gen_enable_last_known_position ? " true" : " false" )
331- << " ,\" gen_rf_metrics_level\" :" << gen_rf_metrics_level << " }\n " ;
351+ << " ,\" gen_rf_metrics_level\" :" << gen_rf_metrics_level
352+ << " ,\" disable_openhd_service\" :"
353+ << (disable_openhd_service ? " true" : " false" ) << " }\n " ;
332354 return out.str ();
333355}
334356
@@ -341,6 +363,7 @@ std::string handle_settings_update(const std::string& line) {
341363
342364 bool changed = false ;
343365 bool hostname_related_change = false ;
366+ bool debug_changed = false ;
344367 if (auto reset_requested = extract_bool_field (line, " reset_requested" );
345368 reset_requested.has_value ()) {
346369 config.reset_requested = *reset_requested;
@@ -513,11 +536,33 @@ std::string handle_settings_update(const std::string& line) {
513536 config.gen_rf_metrics_level = *gen_rf_metrics_level;
514537 changed = true ;
515538 }
539+ if (auto disable_openhd_service =
540+ extract_bool_field (line, " disable_openhd_service" );
541+ disable_openhd_service.has_value ()) {
542+ config.disable_openhd_service = *disable_openhd_service;
543+ changed = true ;
544+ }
545+ if (auto debug = extract_bool_field (line, " debug" ); debug.has_value ()) {
546+ config.debug_enabled = *debug;
547+ changed = true ;
548+ debug_changed = true ;
549+ } else if (auto debug_enabled =
550+ extract_bool_field (line, " debug_enabled" );
551+ debug_enabled.has_value ()) {
552+ config.debug_enabled = *debug_enabled;
553+ changed = true ;
554+ debug_changed = true ;
555+ }
516556
517557 bool ok = true ;
518558 if (changed) {
519559 ok = write_sysutil_config (config);
520560 }
561+ if (ok && debug_changed) {
562+ const bool restart_openhd =
563+ !config.disable_openhd_service .value_or (false );
564+ (void )apply_openhd_debug_marker (config.debug_enabled , restart_openhd);
565+ }
521566 if (ok && hostname_related_change) {
522567 apply_hostname_if_enabled ();
523568 }
0 commit comments