Просмотр исходного кода

CLI: log command argument (#1817)

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
Sergey Gavrilov 3 лет назад
Родитель
Сommit
e3a5df5959
1 измененных файлов с 32 добавлено и 1 удалено
  1. 32 1
      applications/services/cli/cli_commands.c

+ 32 - 1
applications/services/cli/cli_commands.c

@@ -143,11 +143,37 @@ void cli_command_log_tx_callback(const uint8_t* buffer, size_t size, void* conte
     xStreamBufferSend(context, buffer, size, 0);
     xStreamBufferSend(context, buffer, size, 0);
 }
 }
 
 
+void cli_command_log_level_set_from_string(FuriString* level) {
+    if(furi_string_cmpi_str(level, "default") == 0) {
+        furi_log_set_level(FuriLogLevelDefault);
+    } else if(furi_string_cmpi_str(level, "none") == 0) {
+        furi_log_set_level(FuriLogLevelNone);
+    } else if(furi_string_cmpi_str(level, "error") == 0) {
+        furi_log_set_level(FuriLogLevelError);
+    } else if(furi_string_cmpi_str(level, "warn") == 0) {
+        furi_log_set_level(FuriLogLevelWarn);
+    } else if(furi_string_cmpi_str(level, "info") == 0) {
+        furi_log_set_level(FuriLogLevelInfo);
+    } else if(furi_string_cmpi_str(level, "debug") == 0) {
+        furi_log_set_level(FuriLogLevelDebug);
+    } else if(furi_string_cmpi_str(level, "trace") == 0) {
+        furi_log_set_level(FuriLogLevelTrace);
+    } else {
+        printf("Unknown log level\r\n");
+    }
+}
+
 void cli_command_log(Cli* cli, FuriString* args, void* context) {
 void cli_command_log(Cli* cli, FuriString* args, void* context) {
-    UNUSED(args);
     UNUSED(context);
     UNUSED(context);
     StreamBufferHandle_t ring = xStreamBufferCreate(CLI_COMMAND_LOG_RING_SIZE, 1);
     StreamBufferHandle_t ring = xStreamBufferCreate(CLI_COMMAND_LOG_RING_SIZE, 1);
     uint8_t buffer[CLI_COMMAND_LOG_BUFFER_SIZE];
     uint8_t buffer[CLI_COMMAND_LOG_BUFFER_SIZE];
+    FuriLogLevel previous_level = furi_log_get_level();
+    bool restore_log_level = false;
+
+    if(furi_string_size(args) > 0) {
+        cli_command_log_level_set_from_string(args);
+        restore_log_level = true;
+    }
 
 
     furi_hal_console_set_tx_callback(cli_command_log_tx_callback, ring);
     furi_hal_console_set_tx_callback(cli_command_log_tx_callback, ring);
 
 
@@ -159,6 +185,11 @@ void cli_command_log(Cli* cli, FuriString* args, void* context) {
 
 
     furi_hal_console_set_tx_callback(NULL, NULL);
     furi_hal_console_set_tx_callback(NULL, NULL);
 
 
+    if(restore_log_level) {
+        // There will be strange behaviour if log level is set from settings while log command is running
+        furi_log_set_level(previous_level);
+    }
+
     vStreamBufferDelete(ring);
     vStreamBufferDelete(ring);
 }
 }