From 9a54a0af138fd01b80435d7f5e32e3a4c8014465 Mon Sep 17 00:00:00 2001 From: Felipe Neves Date: Wed, 15 Apr 2020 13:57:01 -0300 Subject: [PATCH] gdbstub: added task state information on qThreadExtraInfo command --- components/esp_gdbstub/src/gdbstub.c | 45 +++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/components/esp_gdbstub/src/gdbstub.c b/components/esp_gdbstub/src/gdbstub.c index f15be617f..b67ae273a 100644 --- a/components/esp_gdbstub/src/gdbstub.c +++ b/components/esp_gdbstub/src/gdbstub.c @@ -177,6 +177,15 @@ static bool get_task_handle(size_t index, TaskHandle_t *handle) return true; } +static eTaskState get_task_state(size_t index) +{ + if (index >= s_scratch.task_count) { + return eInvalid; + } + + return s_scratch.tasks[index].eState; +} + /** Get the index of the task running on the current CPU, and save the result */ static void find_paniced_task_index(void) { @@ -280,6 +289,13 @@ static void handle_qsThreadInfo_command(const unsigned char* cmd, int len) /** qThreadExtraInfo requests the thread name */ static void handle_qThreadExtraInfo_command(const unsigned char* cmd, int len) { + uint8_t task_state_string_index = 0; + const char task_state_string[][] = "Running", + "Ready", + "Blocked", + "Suspended", + "Invalid"; + cmd += sizeof("qThreadExtraInfo,") - 1; int task_index = esp_gdbstub_gethex(&cmd, -1); TaskHandle_t handle; @@ -293,7 +309,34 @@ static void handle_qThreadExtraInfo_command(const unsigned char* cmd, int len) esp_gdbstub_send_hex(*task_name, 8); task_name++; } - /** TODO: add "Running" or "Suspended" and "CPU0" or "CPU1" */ + + esp_gdbstub_send_hex(' ', 8); + + eTaskState state = get_task_state(task_index); + switch (state) { + case eRunning: + task_state_string_index = 0; + break; + case eReady: + task_state_string_index = 1; + break; + case eBlocked: + task_state_string_index = 2; + break; + case eSuspended: + task_state_string_index = 3; + break; + default: + task_state_string_index = 4; + break; + } + + const char* buffer = &task_state_string[task_state_string_index][0]; + while (*buffer) { + esp_gdbstub_send_hex(*buffer, 8); + buffer++; + } + esp_gdbstub_send_end(); }