From f478d3d81d8043ddbb261b75d1e4a151fcc99c8d Mon Sep 17 00:00:00 2001 From: zwx Date: Wed, 27 Dec 2023 19:38:42 +0800 Subject: [PATCH] feat(openthread): integrate console command with ot command --- .../openthread/src/esp_openthread_cli.c | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/components/openthread/src/esp_openthread_cli.c b/components/openthread/src/esp_openthread_cli.c index 947bf892b9..6ce998a430 100644 --- a/components/openthread/src/esp_openthread_cli.c +++ b/components/openthread/src/esp_openthread_cli.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -20,8 +20,10 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "linenoise/linenoise.h" - -#define OT_CLI_MAX_LINE_LENGTH 256 +#include "esp_console.h" +#define OT_CLI_MAX_LINE_LENGTH 256 +#define ESP_CONSOLE_PREFIX "esp " +#define ESP_CONSOLE_PREFIX_LENGTH 4 static TaskHandle_t s_cli_task; @@ -63,7 +65,13 @@ esp_err_t esp_openthread_cli_input(const char *line) static void ot_cli_loop(void *context) { + int ret = 0; const char *prompt = "> "; + esp_console_config_t console_config = ESP_CONSOLE_CONFIG_DEFAULT(); + console_config.max_cmdline_length = OT_CLI_MAX_LINE_LENGTH; + + console_config.hint_color = -1; + ret = esp_console_init(&console_config); linenoiseSetMultiLine(true); linenoiseHistorySetMaxLen(100); @@ -78,9 +86,23 @@ static void ot_cli_loop(void *context) char *line = linenoise(prompt); if (line && strnlen(line, OT_CLI_MAX_LINE_LENGTH)) { printf("\r\n"); - esp_openthread_cli_input(line); + if (memcmp(line, ESP_CONSOLE_PREFIX, ESP_CONSOLE_PREFIX_LENGTH) == 0) { + esp_err_t err = esp_console_run(line + ESP_CONSOLE_PREFIX_LENGTH, &ret); + if (err == ESP_ERR_NOT_FOUND) { + printf("Unrecognized command\n"); + } else if (err == ESP_ERR_INVALID_ARG) { + // command was empty + printf("Command is empty\n"); + } else if (err == ESP_OK && ret != ESP_OK) { + printf("Command returned non-zero error code: 0x%x (%s)\n", ret, esp_err_to_name(ret)); + } else if (err != ESP_OK) { + printf("Internal error: %s\n", esp_err_to_name(err)); + } + } else { + esp_openthread_cli_input(line); + xTaskNotifyWait(0, 0, NULL, portMAX_DELAY); + } linenoiseHistoryAdd(line); - xTaskNotifyWait(0, 0, NULL, portMAX_DELAY); } linenoiseFree(line); }