Added git versions.
This commit is contained in:
parent
8efd5fdbff
commit
2b77c01125
4 changed files with 228 additions and 174 deletions
|
|
@ -21,13 +21,15 @@ idf_component_register(
|
||||||
"vfs"
|
"vfs"
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(generate_git_version ALL
|
target_compile_definitions(${COMPONENT_LIB} PRIVATE HAS_SYSTEMK_GIT_VERSION)
|
||||||
|
|
||||||
|
add_custom_target(generate_git_versions ALL
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
|
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
|
||||||
-DOUTPUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/git_version.h
|
-DOUTPUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/git_versions.h
|
||||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/generate_git_version.cmake
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/generate_git_versions.cmake
|
||||||
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/git_version.h
|
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/git_versions.h
|
||||||
)
|
)
|
||||||
|
|
||||||
add_dependencies(${COMPONENT_LIB} generate_git_version)
|
add_dependencies(${COMPONENT_LIB} generate_git_versions)
|
||||||
target_include_directories(${COMPONENT_LIB} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
target_include_directories(${COMPONENT_LIB} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
#include "linenoise/linenoise.h"
|
#include "linenoise/linenoise.h"
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "git_version.h" // Generated during the build process.
|
#include "git_versions.h" // Generated during the build process.
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
@ -64,7 +64,6 @@ static void print_usage(void)
|
||||||
" system mac - Show MAC addresses\n"
|
" system mac - Show MAC addresses\n"
|
||||||
" system hostname [name]- Show/set hostname\n"
|
" system hostname [name]- Show/set hostname\n"
|
||||||
" system version - Show firmware version\n"
|
" system version - Show firmware version\n"
|
||||||
" system idf-version - Show ESP-IDF version\n"
|
|
||||||
" system factory-reset - Clear NVS and restart\n"
|
" system factory-reset - Clear NVS and restart\n"
|
||||||
" system reboot - Reboot the device\n");
|
" system reboot - Reboot the device\n");
|
||||||
}
|
}
|
||||||
|
|
@ -73,7 +72,7 @@ static int system_cmd_chip_info(void)
|
||||||
{
|
{
|
||||||
esp_chip_info_t chip_info;
|
esp_chip_info_t chip_info;
|
||||||
esp_chip_info(&chip_info);
|
esp_chip_info(&chip_info);
|
||||||
|
|
||||||
printf("Chip Information:\n");
|
printf("Chip Information:\n");
|
||||||
printf(" Model: %s\n", CONFIG_IDF_TARGET);
|
printf(" Model: %s\n", CONFIG_IDF_TARGET);
|
||||||
printf(" Cores: %d\n", chip_info.cores);
|
printf(" Cores: %d\n", chip_info.cores);
|
||||||
|
|
@ -83,7 +82,7 @@ static int system_cmd_chip_info(void)
|
||||||
(chip_info.features & CHIP_FEATURE_BT) ? "BT " : "",
|
(chip_info.features & CHIP_FEATURE_BT) ? "BT " : "",
|
||||||
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE " : "",
|
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE " : "",
|
||||||
(chip_info.features & CHIP_FEATURE_IEEE802154) ? "802.15.4 " : "");
|
(chip_info.features & CHIP_FEATURE_IEEE802154) ? "802.15.4 " : "");
|
||||||
|
|
||||||
uint32_t flash_size;
|
uint32_t flash_size;
|
||||||
if (esp_flash_get_size(NULL, &flash_size) == ESP_OK)
|
if (esp_flash_get_size(NULL, &flash_size) == ESP_OK)
|
||||||
{
|
{
|
||||||
|
|
@ -91,7 +90,7 @@ static int system_cmd_chip_info(void)
|
||||||
flash_size / (1024 * 1024),
|
flash_size / (1024 * 1024),
|
||||||
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "(embedded)" : "(external)");
|
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "(embedded)" : "(external)");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,15 +98,15 @@ static int system_cmd_uptime(void)
|
||||||
{
|
{
|
||||||
int64_t uptime_us = esp_timer_get_time();
|
int64_t uptime_us = esp_timer_get_time();
|
||||||
int64_t uptime_s = uptime_us / 1000000;
|
int64_t uptime_s = uptime_us / 1000000;
|
||||||
|
|
||||||
int days = uptime_s / 86400;
|
int days = uptime_s / 86400;
|
||||||
int hours = (uptime_s % 86400) / 3600;
|
int hours = (uptime_s % 86400) / 3600;
|
||||||
int minutes = (uptime_s % 3600) / 60;
|
int minutes = (uptime_s % 3600) / 60;
|
||||||
int seconds = uptime_s % 60;
|
int seconds = uptime_s % 60;
|
||||||
|
|
||||||
printf("Uptime: %d days, %02d:%02d:%02d\n", days, hours, minutes, seconds);
|
printf("Uptime: %d days, %02d:%02d:%02d\n", days, hours, minutes, seconds);
|
||||||
printf(" (%lld seconds)\n", uptime_s);
|
printf(" (%lld seconds)\n", uptime_s);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -116,56 +115,77 @@ static int system_cmd_tasks(void)
|
||||||
#if (configUSE_TRACE_FACILITY == 1)
|
#if (configUSE_TRACE_FACILITY == 1)
|
||||||
uint32_t task_count = uxTaskGetNumberOfTasks();
|
uint32_t task_count = uxTaskGetNumberOfTasks();
|
||||||
TaskStatus_t *task_array = malloc(task_count * sizeof(TaskStatus_t));
|
TaskStatus_t *task_array = malloc(task_count * sizeof(TaskStatus_t));
|
||||||
|
|
||||||
if (task_array == NULL)
|
if (task_array == NULL)
|
||||||
{
|
{
|
||||||
printf("Failed to allocate memory for task list\n");
|
printf("Failed to allocate memory for task list\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t total_runtime;
|
uint32_t total_runtime;
|
||||||
task_count = uxTaskGetSystemState(task_array, task_count, &total_runtime);
|
task_count = uxTaskGetSystemState(task_array, task_count, &total_runtime);
|
||||||
|
|
||||||
printf("Tasks (%lu total):\n", task_count);
|
printf("Tasks (%lu total):\n", task_count);
|
||||||
printf("%-16s %5s %8s %5s", "Name", "State", "Priority", "Stack");
|
printf("%-16s %5s %6s %11s %8s", "Name", "State", "Core", "Priority", "Stack");
|
||||||
#if (configGENERATE_RUN_TIME_STATS == 1)
|
#if (configGENERATE_RUN_TIME_STATS == 1)
|
||||||
printf(" %s", "CPU%%");
|
printf(" %7s", "CPU%");
|
||||||
#endif
|
#endif
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("-----------------------------------------------------------\n");
|
printf("----------------------------------------------------------------\n");
|
||||||
|
|
||||||
for (uint32_t i = 0; i < task_count; i++)
|
for (uint32_t i = 0; i < task_count; i++)
|
||||||
{
|
{
|
||||||
const char *state_str;
|
const char *state_str;
|
||||||
switch (task_array[i].eCurrentState)
|
switch (task_array[i].eCurrentState)
|
||||||
{
|
{
|
||||||
case eRunning: state_str = "RUN "; break;
|
case eRunning:
|
||||||
case eReady: state_str = "READY"; break;
|
state_str = "RUN ";
|
||||||
case eBlocked: state_str = "BLOCK"; break;
|
break;
|
||||||
case eSuspended: state_str = "SUSP "; break;
|
case eReady:
|
||||||
case eDeleted: state_str = "DEL "; break;
|
state_str = "READY";
|
||||||
default: state_str = "? "; break;
|
break;
|
||||||
|
case eBlocked:
|
||||||
|
state_str = "BLOCK";
|
||||||
|
break;
|
||||||
|
case eSuspended:
|
||||||
|
state_str = "SUSP ";
|
||||||
|
break;
|
||||||
|
case eDeleted:
|
||||||
|
state_str = "DEL ";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
state_str = "? ";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t stack_remaining = task_array[i].usStackHighWaterMark;
|
uint32_t stack_remaining = task_array[i].usStackHighWaterMark;
|
||||||
|
|
||||||
printf("%-16s %5s %8u %5lu",
|
BaseType_t affinity = xTaskGetCoreID(task_array[i].xHandle);
|
||||||
task_array[i].pcTaskName,
|
|
||||||
state_str,
|
printf("%-16s %5s ", task_array[i].pcTaskName, state_str);
|
||||||
task_array[i].uxCurrentPriority,
|
|
||||||
stack_remaining);
|
if (affinity == tskNO_AFFINITY)
|
||||||
|
{
|
||||||
|
printf("%6s", "ANY");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%6d", (int)affinity);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" %11u %8lu", task_array[i].uxCurrentPriority, stack_remaining);
|
||||||
|
|
||||||
#if (configGENERATE_RUN_TIME_STATS == 1)
|
#if (configGENERATE_RUN_TIME_STATS == 1)
|
||||||
float cpu_percent = 0.0;
|
float cpu_percent = 0.0;
|
||||||
if (total_runtime > 0)
|
if (total_runtime > 0)
|
||||||
{
|
{
|
||||||
cpu_percent = (100.0 * task_array[i].ulRunTimeCounter) / total_runtime;
|
cpu_percent = (100.0 * task_array[i].ulRunTimeCounter) / total_runtime;
|
||||||
}
|
}
|
||||||
printf(" %5.1f%%", cpu_percent);
|
printf(" %6.1f%%", cpu_percent);
|
||||||
#endif
|
#endif
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
free(task_array);
|
free(task_array);
|
||||||
#else
|
#else
|
||||||
printf("Task listing not available (configUSE_TRACE_FACILITY not enabled)\n");
|
printf("Task listing not available (configUSE_TRACE_FACILITY not enabled)\n");
|
||||||
|
|
@ -177,24 +197,48 @@ static int system_cmd_tasks(void)
|
||||||
static int system_cmd_reset_reason(void)
|
static int system_cmd_reset_reason(void)
|
||||||
{
|
{
|
||||||
esp_reset_reason_t reason = esp_reset_reason();
|
esp_reset_reason_t reason = esp_reset_reason();
|
||||||
|
|
||||||
printf("Reset reason: ");
|
printf("Reset reason: ");
|
||||||
switch (reason)
|
switch (reason)
|
||||||
{
|
{
|
||||||
case ESP_RST_UNKNOWN: printf("Unknown\n"); break;
|
case ESP_RST_UNKNOWN:
|
||||||
case ESP_RST_POWERON: printf("Power-on reset\n"); break;
|
printf("Unknown\n");
|
||||||
case ESP_RST_EXT: printf("External pin reset\n"); break;
|
break;
|
||||||
case ESP_RST_SW: printf("Software reset\n"); break;
|
case ESP_RST_POWERON:
|
||||||
case ESP_RST_PANIC: printf("Exception/panic\n"); break;
|
printf("Power-on reset\n");
|
||||||
case ESP_RST_INT_WDT: printf("Interrupt watchdog\n"); break;
|
break;
|
||||||
case ESP_RST_TASK_WDT: printf("Task watchdog\n"); break;
|
case ESP_RST_EXT:
|
||||||
case ESP_RST_WDT: printf("Other watchdog\n"); break;
|
printf("External pin reset\n");
|
||||||
case ESP_RST_DEEPSLEEP: printf("Deep sleep reset\n"); break;
|
break;
|
||||||
case ESP_RST_BROWNOUT: printf("Brownout reset\n"); break;
|
case ESP_RST_SW:
|
||||||
case ESP_RST_SDIO: printf("SDIO reset\n"); break;
|
printf("Software reset\n");
|
||||||
default: printf("Code %d\n", reason); break;
|
break;
|
||||||
|
case ESP_RST_PANIC:
|
||||||
|
printf("Exception/panic\n");
|
||||||
|
break;
|
||||||
|
case ESP_RST_INT_WDT:
|
||||||
|
printf("Interrupt watchdog\n");
|
||||||
|
break;
|
||||||
|
case ESP_RST_TASK_WDT:
|
||||||
|
printf("Task watchdog\n");
|
||||||
|
break;
|
||||||
|
case ESP_RST_WDT:
|
||||||
|
printf("Other watchdog\n");
|
||||||
|
break;
|
||||||
|
case ESP_RST_DEEPSLEEP:
|
||||||
|
printf("Deep sleep reset\n");
|
||||||
|
break;
|
||||||
|
case ESP_RST_BROWNOUT:
|
||||||
|
printf("Brownout reset\n");
|
||||||
|
break;
|
||||||
|
case ESP_RST_SDIO:
|
||||||
|
printf("SDIO reset\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("Code %d\n", reason);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -203,12 +247,12 @@ static int system_cmd_ram(void)
|
||||||
size_t free_heap = esp_get_free_heap_size();
|
size_t free_heap = esp_get_free_heap_size();
|
||||||
size_t min_free_heap = esp_get_minimum_free_heap_size();
|
size_t min_free_heap = esp_get_minimum_free_heap_size();
|
||||||
size_t largest_block = heap_caps_get_largest_free_block(MALLOC_CAP_DEFAULT);
|
size_t largest_block = heap_caps_get_largest_free_block(MALLOC_CAP_DEFAULT);
|
||||||
|
|
||||||
printf("Heap Memory:\n");
|
printf("Heap Memory:\n");
|
||||||
printf(" Free: %u bytes (%.2f KB)\n", free_heap, free_heap / 1024.0);
|
printf(" Free: %u bytes (%.2f KB)\n", free_heap, free_heap / 1024.0);
|
||||||
printf(" Minimum free: %u bytes (%.2f KB)\n", min_free_heap, min_free_heap / 1024.0);
|
printf(" Minimum free: %u bytes (%.2f KB)\n", min_free_heap, min_free_heap / 1024.0);
|
||||||
printf(" Largest free block: %u bytes (%.2f KB)\n", largest_block, largest_block / 1024.0);
|
printf(" Largest free block: %u bytes (%.2f KB)\n", largest_block, largest_block / 1024.0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -220,17 +264,17 @@ static int system_cmd_flash(void)
|
||||||
printf("Failed to get flash size\n");
|
printf("Failed to get flash size\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Flash Information:\n");
|
printf("Flash Information:\n");
|
||||||
printf(" Total size: %lu bytes (%.2f MB)\n", flash_size, flash_size / (1024.0 * 1024.0));
|
printf(" Total size: %lu bytes (%.2f MB)\n", flash_size, flash_size / (1024.0 * 1024.0));
|
||||||
|
|
||||||
const esp_partition_t *running = esp_ota_get_running_partition();
|
const esp_partition_t *running = esp_ota_get_running_partition();
|
||||||
if (running)
|
if (running)
|
||||||
{
|
{
|
||||||
printf(" Running partition: %s (offset 0x%lx, size %lu KB)\n",
|
printf(" Running partition: %s (offset 0x%lx, size %lu KB)\n",
|
||||||
running->label, running->address, running->size / 1024);
|
running->label, running->address, running->size / 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -239,27 +283,29 @@ static int system_cmd_partition(void)
|
||||||
printf("Partition Table:\n");
|
printf("Partition Table:\n");
|
||||||
printf("%-16s %-10s %-10s %10s %10s\n", "Label", "Type", "SubType", "Offset", "Size");
|
printf("%-16s %-10s %-10s %10s %10s\n", "Label", "Type", "SubType", "Offset", "Size");
|
||||||
printf("------------------------------------------------------------------------\n");
|
printf("------------------------------------------------------------------------\n");
|
||||||
|
|
||||||
esp_partition_iterator_t it = esp_partition_find(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, NULL);
|
esp_partition_iterator_t it = esp_partition_find(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, NULL);
|
||||||
|
|
||||||
while (it != NULL)
|
while (it != NULL)
|
||||||
{
|
{
|
||||||
const esp_partition_t *part = esp_partition_get(it);
|
const esp_partition_t *part = esp_partition_get(it);
|
||||||
|
|
||||||
const char *type_str = "?";
|
const char *type_str = "?";
|
||||||
if (part->type == ESP_PARTITION_TYPE_APP) type_str = "app";
|
if (part->type == ESP_PARTITION_TYPE_APP)
|
||||||
else if (part->type == ESP_PARTITION_TYPE_DATA) type_str = "data";
|
type_str = "app";
|
||||||
|
else if (part->type == ESP_PARTITION_TYPE_DATA)
|
||||||
|
type_str = "data";
|
||||||
|
|
||||||
printf("%-16s %-10s 0x%-8x 0x%08lx %8lu KB\n",
|
printf("%-16s %-10s 0x%-8x 0x%08lx %8lu KB\n",
|
||||||
part->label,
|
part->label,
|
||||||
type_str,
|
type_str,
|
||||||
part->subtype,
|
part->subtype,
|
||||||
part->address,
|
part->address,
|
||||||
part->size / 1024);
|
part->size / 1024);
|
||||||
|
|
||||||
it = esp_partition_next(it);
|
it = esp_partition_next(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_partition_iterator_release(it);
|
esp_partition_iterator_release(it);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -267,13 +313,13 @@ static int system_cmd_partition(void)
|
||||||
static int system_cmd_heap_caps(void)
|
static int system_cmd_heap_caps(void)
|
||||||
{
|
{
|
||||||
printf("Heap by Capability:\n");
|
printf("Heap by Capability:\n");
|
||||||
|
|
||||||
size_t internal_free = heap_caps_get_free_size(MALLOC_CAP_INTERNAL);
|
size_t internal_free = heap_caps_get_free_size(MALLOC_CAP_INTERNAL);
|
||||||
size_t internal_total = heap_caps_get_total_size(MALLOC_CAP_INTERNAL);
|
size_t internal_total = heap_caps_get_total_size(MALLOC_CAP_INTERNAL);
|
||||||
printf(" Internal: %u / %u bytes free (%.1f%%)\n",
|
printf(" Internal: %u / %u bytes free (%.1f%%)\n",
|
||||||
internal_free, internal_total,
|
internal_free, internal_total,
|
||||||
internal_total > 0 ? 100.0 * internal_free / internal_total : 0);
|
internal_total > 0 ? 100.0 * internal_free / internal_total : 0);
|
||||||
|
|
||||||
size_t spiram_free = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
|
size_t spiram_free = heap_caps_get_free_size(MALLOC_CAP_SPIRAM);
|
||||||
size_t spiram_total = heap_caps_get_total_size(MALLOC_CAP_SPIRAM);
|
size_t spiram_total = heap_caps_get_total_size(MALLOC_CAP_SPIRAM);
|
||||||
if (spiram_total > 0)
|
if (spiram_total > 0)
|
||||||
|
|
@ -281,36 +327,36 @@ static int system_cmd_heap_caps(void)
|
||||||
printf(" SPIRAM: %u / %u bytes free (%.1f%%)\n",
|
printf(" SPIRAM: %u / %u bytes free (%.1f%%)\n",
|
||||||
spiram_free, spiram_total, 100.0 * spiram_free / spiram_total);
|
spiram_free, spiram_total, 100.0 * spiram_free / spiram_total);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t dma_free = heap_caps_get_free_size(MALLOC_CAP_DMA);
|
size_t dma_free = heap_caps_get_free_size(MALLOC_CAP_DMA);
|
||||||
size_t dma_total = heap_caps_get_total_size(MALLOC_CAP_DMA);
|
size_t dma_total = heap_caps_get_total_size(MALLOC_CAP_DMA);
|
||||||
printf(" DMA capable: %u / %u bytes free (%.1f%%)\n",
|
printf(" DMA capable: %u / %u bytes free (%.1f%%)\n",
|
||||||
dma_free, dma_total,
|
dma_free, dma_total,
|
||||||
dma_total > 0 ? 100.0 * dma_free / dma_total : 0);
|
dma_total > 0 ? 100.0 * dma_free / dma_total : 0);
|
||||||
|
|
||||||
size_t exec_free = heap_caps_get_free_size(MALLOC_CAP_EXEC);
|
size_t exec_free = heap_caps_get_free_size(MALLOC_CAP_EXEC);
|
||||||
size_t exec_total = heap_caps_get_total_size(MALLOC_CAP_EXEC);
|
size_t exec_total = heap_caps_get_total_size(MALLOC_CAP_EXEC);
|
||||||
printf(" Executable: %u / %u bytes free (%.1f%%)\n",
|
printf(" Executable: %u / %u bytes free (%.1f%%)\n",
|
||||||
exec_free, exec_total,
|
exec_free, exec_total,
|
||||||
exec_total > 0 ? 100.0 * exec_free / exec_total : 0);
|
exec_total > 0 ? 100.0 * exec_free / exec_total : 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int system_cmd_stats(void)
|
static int system_cmd_stats(void)
|
||||||
{
|
{
|
||||||
printf("=== System Statistics ===\n\n");
|
printf("=== System Statistics ===\n\n");
|
||||||
|
|
||||||
system_cmd_uptime();
|
system_cmd_uptime();
|
||||||
printf("\n");
|
printf("\n");
|
||||||
system_cmd_ram();
|
system_cmd_ram();
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
uint32_t task_count = uxTaskGetNumberOfTasks();
|
uint32_t task_count = uxTaskGetNumberOfTasks();
|
||||||
printf("Active tasks: %lu\n\n", task_count);
|
printf("Active tasks: %lu\n\n", task_count);
|
||||||
|
|
||||||
system_cmd_reset_reason();
|
system_cmd_reset_reason();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -318,7 +364,7 @@ static int system_cmd_coredump(void)
|
||||||
{
|
{
|
||||||
esp_core_dump_summary_t summary;
|
esp_core_dump_summary_t summary;
|
||||||
esp_err_t err = esp_core_dump_get_summary(&summary);
|
esp_err_t err = esp_core_dump_get_summary(&summary);
|
||||||
|
|
||||||
if (err == ESP_ERR_NOT_FOUND)
|
if (err == ESP_ERR_NOT_FOUND)
|
||||||
{
|
{
|
||||||
printf("No coredump found in flash\n");
|
printf("No coredump found in flash\n");
|
||||||
|
|
@ -329,71 +375,55 @@ static int system_cmd_coredump(void)
|
||||||
printf("Failed to read coredump: %s\n", esp_err_to_name(err));
|
printf("Failed to read coredump: %s\n", esp_err_to_name(err));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Coredump found:\n");
|
printf("Coredump found:\n");
|
||||||
printf(" Program counter: 0x%08lx\n", summary.exc_pc);
|
printf(" Program counter: 0x%08lx\n", summary.exc_pc);
|
||||||
printf(" Exception cause: %lu\n", summary.ex_info.exc_cause);
|
printf(" Exception cause: %lu\n", summary.ex_info.exc_cause);
|
||||||
printf(" Exception vaddr: 0x%08lx\n", summary.ex_info.exc_vaddr);
|
printf(" Exception vaddr: 0x%08lx\n", summary.ex_info.exc_vaddr);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int system_cmd_sleep(int argc, char **argv)
|
|
||||||
{
|
|
||||||
if (argc < 3)
|
|
||||||
{
|
|
||||||
printf("Usage: system sleep <milliseconds>\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sleep_ms = atoi(argv[2]);
|
|
||||||
printf("Entering light sleep for %d ms...\n", sleep_ms);
|
|
||||||
|
|
||||||
esp_sleep_enable_timer_wakeup(sleep_ms * 1000);
|
|
||||||
esp_light_sleep_start();
|
|
||||||
|
|
||||||
printf("Woke up from sleep\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int system_cmd_mac(void)
|
static int system_cmd_mac(void)
|
||||||
{
|
{
|
||||||
uint8_t mac[6];
|
uint8_t mac[6];
|
||||||
|
|
||||||
printf("MAC Addresses:\n");
|
printf("MAC Addresses:\n");
|
||||||
|
|
||||||
if (esp_read_mac(mac, ESP_MAC_WIFI_STA) == ESP_OK)
|
if (esp_read_mac(mac, ESP_MAC_WIFI_STA) == ESP_OK)
|
||||||
{
|
{
|
||||||
printf(" WiFi STA: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
printf(" WiFi STA: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (esp_read_mac(mac, ESP_MAC_WIFI_SOFTAP) == ESP_OK)
|
if (esp_read_mac(mac, ESP_MAC_WIFI_SOFTAP) == ESP_OK)
|
||||||
{
|
{
|
||||||
printf(" WiFi AP: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
printf(" WiFi AP: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (esp_read_mac(mac, ESP_MAC_BT) == ESP_OK)
|
if (esp_read_mac(mac, ESP_MAC_BT) == ESP_OK)
|
||||||
{
|
{
|
||||||
printf(" BT: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
printf(" BT: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (esp_read_mac(mac, ESP_MAC_ETH) == ESP_OK)
|
if (esp_read_mac(mac, ESP_MAC_ETH) == ESP_OK)
|
||||||
{
|
{
|
||||||
printf(" Ethernet: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
printf(" Ethernet: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
typedef struct {
|
typedef struct
|
||||||
|
{
|
||||||
const char **hostname_out;
|
const char **hostname_out;
|
||||||
bool success;
|
bool success;
|
||||||
} hostname_get_ctx_t;
|
} hostname_get_ctx_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct
|
||||||
|
{
|
||||||
const char *hostname_in;
|
const char *hostname_in;
|
||||||
esp_err_t result;
|
esp_err_t result;
|
||||||
} hostname_set_ctx_t;
|
} hostname_set_ctx_t;
|
||||||
|
|
@ -402,7 +432,7 @@ static esp_err_t get_hostname_tcpip(void *ctx)
|
||||||
{
|
{
|
||||||
hostname_get_ctx_t *context = (hostname_get_ctx_t *)ctx;
|
hostname_get_ctx_t *context = (hostname_get_ctx_t *)ctx;
|
||||||
esp_netif_t *netif = esp_netif_next_unsafe(NULL);
|
esp_netif_t *netif = esp_netif_next_unsafe(NULL);
|
||||||
|
|
||||||
if (netif)
|
if (netif)
|
||||||
{
|
{
|
||||||
esp_netif_get_hostname(netif, context->hostname_out);
|
esp_netif_get_hostname(netif, context->hostname_out);
|
||||||
|
|
@ -412,7 +442,7 @@ static esp_err_t get_hostname_tcpip(void *ctx)
|
||||||
{
|
{
|
||||||
context->success = false;
|
context->success = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -420,7 +450,7 @@ static esp_err_t set_hostname_tcpip(void *ctx)
|
||||||
{
|
{
|
||||||
hostname_set_ctx_t *context = (hostname_set_ctx_t *)ctx;
|
hostname_set_ctx_t *context = (hostname_set_ctx_t *)ctx;
|
||||||
esp_netif_t *netif = esp_netif_next_unsafe(NULL);
|
esp_netif_t *netif = esp_netif_next_unsafe(NULL);
|
||||||
|
|
||||||
if (netif)
|
if (netif)
|
||||||
{
|
{
|
||||||
context->result = esp_netif_set_hostname(netif, context->hostname_in);
|
context->result = esp_netif_set_hostname(netif, context->hostname_in);
|
||||||
|
|
@ -429,7 +459,7 @@ static esp_err_t set_hostname_tcpip(void *ctx)
|
||||||
{
|
{
|
||||||
context->result = ESP_ERR_NOT_FOUND;
|
context->result = ESP_ERR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -440,17 +470,16 @@ static int system_cmd_hostname(int argc, char **argv)
|
||||||
const char *hostname = NULL;
|
const char *hostname = NULL;
|
||||||
hostname_get_ctx_t ctx = {
|
hostname_get_ctx_t ctx = {
|
||||||
.hostname_out = &hostname,
|
.hostname_out = &hostname,
|
||||||
.success = false
|
.success = false};
|
||||||
};
|
|
||||||
|
|
||||||
esp_err_t err = esp_netif_tcpip_exec(get_hostname_tcpip, &ctx);
|
esp_err_t err = esp_netif_tcpip_exec(get_hostname_tcpip, &ctx);
|
||||||
|
|
||||||
if (err != ESP_OK)
|
if (err != ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Failed to access network interface: %s\n", esp_err_to_name(err));
|
printf("Failed to access network interface: %s\n", esp_err_to_name(err));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx.success)
|
if (ctx.success)
|
||||||
{
|
{
|
||||||
if (hostname)
|
if (hostname)
|
||||||
|
|
@ -468,20 +497,19 @@ static int system_cmd_hostname(int argc, char **argv)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
hostname_set_ctx_t ctx = {
|
hostname_set_ctx_t ctx = {
|
||||||
.hostname_in = argv[2],
|
.hostname_in = argv[2],
|
||||||
.result = ESP_FAIL
|
.result = ESP_FAIL};
|
||||||
};
|
|
||||||
|
|
||||||
esp_err_t err = esp_netif_tcpip_exec(set_hostname_tcpip, &ctx);
|
esp_err_t err = esp_netif_tcpip_exec(set_hostname_tcpip, &ctx);
|
||||||
|
|
||||||
if (err != ESP_OK)
|
if (err != ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Failed to access network interface: %s\n", esp_err_to_name(err));
|
printf("Failed to access network interface: %s\n", esp_err_to_name(err));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx.result == ESP_ERR_NOT_FOUND)
|
if (ctx.result == ESP_ERR_NOT_FOUND)
|
||||||
{
|
{
|
||||||
printf("No network interface available\n");
|
printf("No network interface available\n");
|
||||||
|
|
@ -494,32 +522,22 @@ static int system_cmd_hostname(int argc, char **argv)
|
||||||
{
|
{
|
||||||
printf("Failed to set hostname: %s\n", esp_err_to_name(ctx.result));
|
printf("Failed to set hostname: %s\n", esp_err_to_name(ctx.result));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int system_cmd_version(void)
|
static int system_cmd_version(void)
|
||||||
{
|
{
|
||||||
const esp_app_desc_t *app_desc = esp_app_get_description();
|
const esp_app_desc_t *app_desc = esp_app_get_description();
|
||||||
|
|
||||||
printf("Firmware Information:\n");
|
printf("Firmware Information:\n");
|
||||||
printf(" Version: %s\n", app_desc->version);
|
printf(" Version: %s\n", app_desc->version);
|
||||||
printf(" Project: %s\n", app_desc->project_name);
|
printf(" Project: %s\n", app_desc->project_name);
|
||||||
printf(" IDF version: %s\n", app_desc->idf_ver);
|
printf(" IDF version: %s\n", app_desc->idf_ver);
|
||||||
printf(" SystemK version: %s\n", SYSTEMK_VERSION_STRING);
|
printf(" SystemK version: %s (%s)\n", SYSTEMK_VERSION_STRING, SYSTEMK_GIT_COMMIT_HASH_SHORT);
|
||||||
printf(" Git commit: %s\n", GIT_COMMIT_HASH_LONG);
|
printf(" Git commit: %s\n", GIT_COMMIT_HASH_LONG);
|
||||||
printf(" Compile time: %s %s\n", app_desc->date, app_desc->time);
|
printf(" Compile time: %s %s\n", app_desc->date, app_desc->time);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int system_cmd_idf_version(void)
|
|
||||||
{
|
|
||||||
printf("ESP-IDF Version: %s\n", IDF_VER);
|
|
||||||
printf(" Major: %d\n", ESP_IDF_VERSION_MAJOR);
|
|
||||||
printf(" Minor: %d\n", ESP_IDF_VERSION_MINOR);
|
|
||||||
printf(" Patch: %d\n", ESP_IDF_VERSION_PATCH);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -527,23 +545,23 @@ static int system_cmd_factory_reset(void)
|
||||||
{
|
{
|
||||||
printf("WARNING: This will erase all NVS data!\n");
|
printf("WARNING: This will erase all NVS data!\n");
|
||||||
printf("Type 'yes' to confirm: ");
|
printf("Type 'yes' to confirm: ");
|
||||||
|
|
||||||
char confirm[10];
|
char confirm[10];
|
||||||
if (fgets(confirm, sizeof(confirm), stdin) == NULL)
|
if (fgets(confirm, sizeof(confirm), stdin) == NULL)
|
||||||
{
|
{
|
||||||
printf("\nCancelled\n");
|
printf("\nCancelled\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove newline
|
// Remove newline
|
||||||
confirm[strcspn(confirm, "\n")] = 0;
|
confirm[strcspn(confirm, "\n")] = 0;
|
||||||
|
|
||||||
if (strcmp(confirm, "yes") != 0)
|
if (strcmp(confirm, "yes") != 0)
|
||||||
{
|
{
|
||||||
printf("Cancelled\n");
|
printf("Factory reset cancelled.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Erasing NVS...\n");
|
printf("Erasing NVS...\n");
|
||||||
esp_err_t err = nvs_flash_erase();
|
esp_err_t err = nvs_flash_erase();
|
||||||
if (err != ESP_OK)
|
if (err != ESP_OK)
|
||||||
|
|
@ -551,11 +569,11 @@ static int system_cmd_factory_reset(void)
|
||||||
printf("Failed to erase NVS: %s\n", esp_err_to_name(err));
|
printf("Failed to erase NVS: %s\n", esp_err_to_name(err));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Factory reset complete. Rebooting...\n");
|
printf("Factory reset complete. Rebooting...\n");
|
||||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||||
esp_restart();
|
esp_restart();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -595,16 +613,12 @@ static int cmd_system(int argc, char **argv)
|
||||||
return system_cmd_stats();
|
return system_cmd_stats();
|
||||||
if (!strcmp(argv[1], "coredump"))
|
if (!strcmp(argv[1], "coredump"))
|
||||||
return system_cmd_coredump();
|
return system_cmd_coredump();
|
||||||
if (!strcmp(argv[1], "sleep"))
|
|
||||||
return system_cmd_sleep(argc, argv);
|
|
||||||
if (!strcmp(argv[1], "mac"))
|
if (!strcmp(argv[1], "mac"))
|
||||||
return system_cmd_mac();
|
return system_cmd_mac();
|
||||||
if (!strcmp(argv[1], "hostname"))
|
if (!strcmp(argv[1], "hostname"))
|
||||||
return system_cmd_hostname(argc, argv);
|
return system_cmd_hostname(argc, argv);
|
||||||
if (!strcmp(argv[1], "version"))
|
if (!strcmp(argv[1], "version"))
|
||||||
return system_cmd_version();
|
return system_cmd_version();
|
||||||
if (!strcmp(argv[1], "idf-version"))
|
|
||||||
return system_cmd_idf_version();
|
|
||||||
if (!strcmp(argv[1], "factory-reset"))
|
if (!strcmp(argv[1], "factory-reset"))
|
||||||
return system_cmd_factory_reset();
|
return system_cmd_factory_reset();
|
||||||
if (!strcmp(argv[1], "reboot"))
|
if (!strcmp(argv[1], "reboot"))
|
||||||
|
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
execute_process(
|
|
||||||
COMMAND git rev-parse --short HEAD
|
|
||||||
WORKING_DIRECTORY ${SOURCE_DIR}
|
|
||||||
OUTPUT_VARIABLE GIT_HASH_SHORT
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
execute_process(
|
|
||||||
COMMAND git rev-parse HEAD
|
|
||||||
WORKING_DIRECTORY ${SOURCE_DIR}
|
|
||||||
OUTPUT_VARIABLE GIT_HASH_LONG
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
# Check for uncommitted changes
|
|
||||||
execute_process(
|
|
||||||
COMMAND git diff-index --quiet HEAD --
|
|
||||||
WORKING_DIRECTORY ${SOURCE_DIR}
|
|
||||||
RESULT_VARIABLE GIT_DIRTY
|
|
||||||
)
|
|
||||||
|
|
||||||
# If GIT_DIRTY is non-zero, there are local modifications
|
|
||||||
if(NOT GIT_DIRTY EQUAL 0)
|
|
||||||
set(GIT_HASH_SHORT "${GIT_HASH_SHORT}+")
|
|
||||||
set(GIT_HASH_LONG "${GIT_HASH_LONG}+")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
file(WRITE ${OUTPUT_FILE}
|
|
||||||
"#ifndef GIT_VERSION_H
|
|
||||||
#define GIT_VERSION_H
|
|
||||||
#define GIT_COMMIT_HASH_SHORT \"${GIT_HASH_SHORT}\"
|
|
||||||
#define GIT_COMMIT_HASH_LONG \"${GIT_HASH_LONG}\"
|
|
||||||
#endif
|
|
||||||
")
|
|
||||||
72
components/Serial_Console/generate_git_versions.cmake
Normal file
72
components/Serial_Console/generate_git_versions.cmake
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
# Main repository hashes
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse --short HEAD
|
||||||
|
WORKING_DIRECTORY ${SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_HASH_SHORT
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse HEAD
|
||||||
|
WORKING_DIRECTORY ${SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_HASH_LONG
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check for uncommitted changes in main repo
|
||||||
|
execute_process(
|
||||||
|
COMMAND git diff-index --quiet HEAD --
|
||||||
|
WORKING_DIRECTORY ${SOURCE_DIR}
|
||||||
|
RESULT_VARIABLE GIT_DIRTY
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT GIT_DIRTY EQUAL 0)
|
||||||
|
set(GIT_HASH_SHORT "${GIT_HASH_SHORT}+")
|
||||||
|
set(GIT_HASH_LONG "${GIT_HASH_LONG}+")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# SystemK hashes
|
||||||
|
set(SYSTEMK_PATH "${SOURCE_DIR}/components/SystemK")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse --short HEAD
|
||||||
|
WORKING_DIRECTORY ${SYSTEMK_PATH}
|
||||||
|
OUTPUT_VARIABLE SYSTEMK_HASH_SHORT
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
RESULT_VARIABLE SYSTEMK_RESULT
|
||||||
|
)
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse HEAD
|
||||||
|
WORKING_DIRECTORY ${SYSTEMK_PATH}
|
||||||
|
OUTPUT_VARIABLE SYSTEMK_HASH_LONG
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check for uncommitted changes in SystemK.
|
||||||
|
execute_process(
|
||||||
|
COMMAND git diff-index --quiet HEAD --
|
||||||
|
WORKING_DIRECTORY ${SYSTEMK_PATH}
|
||||||
|
RESULT_VARIABLE SYSTEMK_DIRTY
|
||||||
|
)
|
||||||
|
|
||||||
|
# Handle the case where SystemK doesn't exist or is not a git repo.
|
||||||
|
if(SYSTEMK_RESULT EQUAL 0)
|
||||||
|
if(NOT SYSTEMK_DIRTY EQUAL 0)
|
||||||
|
set(SYSTEMK_HASH_SHORT "${SYSTEMK_HASH_SHORT}+")
|
||||||
|
set(SYSTEMK_HASH_LONG "${SYSTEMK_HASH_LONG}+")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(SYSTEMK_HASH_SHORT "unknown")
|
||||||
|
set(SYSTEMK_HASH_LONG "unknown")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(WRITE ${OUTPUT_FILE}
|
||||||
|
"#ifndef GIT_VERSION_H
|
||||||
|
#define GIT_VERSION_H
|
||||||
|
#define GIT_COMMIT_HASH_SHORT \"${GIT_HASH_SHORT}\"
|
||||||
|
#define GIT_COMMIT_HASH_LONG \"${GIT_HASH_LONG}\"
|
||||||
|
#define SYSTEMK_GIT_COMMIT_HASH_SHORT \"${SYSTEMK_HASH_SHORT}\"
|
||||||
|
#define SYSTEMK_GIT_COMMIT_HASH_LONG \"${SYSTEMK_HASH_LONG}\"
|
||||||
|
#endif
|
||||||
|
")
|
||||||
Loading…
Add table
Add a link
Reference in a new issue