Files
ESPC3-wireless/app/app_info.c
LokLiang e9b5e42ef2 重构项目配置并添加对 SBDEMO 的支持
更新多个 ESP32 芯片(C2、C3、S3)
的版本配置为 SBDEMO
产品添加新的配置文件实现板卡和应用程序配置模块添加 CRC 实用函数修改系统日志以支持动态日志控制更新 Kconfig 和 sdkconfig 的默认设置以适应新产品
2025-02-21 10:38:22 +08:00

181 lines
6.2 KiB
C

#include "shell/sh.h"
#include "sh_vset.h"
#include "config/board_config.h"
#include "config/app_config.h"
#include "config/version.h"
#define CONFIG_SYS_LOG_LEVEL SYS_LOG_LEVEL_DBG
#define SYS_LOG_DOMAIN "FW-INFO"
#include "sys_log.h"
#define _YEAR ((((__DATE__[7] - '0') * 10 + (__DATE__[8] - '0')) * 10 + (__DATE__[9] - '0')) * 10 + (__DATE__[10] - '0'))
#define _MONTH ((__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n') ? 1 \
: (__DATE__[0] == 'F' && __DATE__[1] == 'e' && __DATE__[2] == 'b') ? 2 \
: (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r') ? 3 \
: (__DATE__[0] == 'A' && __DATE__[1] == 'p' && __DATE__[2] == 'r') ? 4 \
: (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y') ? 5 \
: (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n') ? 6 \
: (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l') ? 7 \
: (__DATE__[0] == 'A' && __DATE__[1] == 'u' && __DATE__[2] == 'g') ? 8 \
: (__DATE__[0] == 'S' && __DATE__[1] == 'e' && __DATE__[2] == 'p') ? 9 \
: (__DATE__[0] == 'O' && __DATE__[1] == 'c' && __DATE__[2] == 't') ? 10 \
: (__DATE__[0] == 'N' && __DATE__[1] == 'o' && __DATE__[2] == 'v') ? 11 \
: 12)
#define _DAY ((__DATE__[4] == ' ' ? 0 : __DATE__[4] - '0') * 10 + (__DATE__[5] - '0'))
SH_CMD_FN(_log1);
SH_CMD_FN(_log0);
SH_CMD_FN(_fw_info);
SH_CMD_FN(_licenseCode);
SH_CMD_FN(_boardcfgDump);
SH_CMD_FN(_boardcfgSave);
SH_DEF_CMD(
_register_cmd_hide,
SH_SETUP_CMD("syslogON", "Enable sys log", _log1, NULL), //
SH_SETUP_CMD("info", "Firmware information", _fw_info, NULL), //
SH_SETUP_CMD("licenseCode", "Set up new license code <code[16]>", _licenseCode, NULL), //
SH_SETUP_CMD("boardcfgDump", "Dump complete board configuration data", _boardcfgDump, NULL), //
SH_SETUP_CMD("boardcfgSave", "Store board configuration code", _boardcfgSave, NULL), //
);
SH_DEF_CMD(
_register_cmd,
SH_SETUP_CMD("log-off", "Disable sys log", _log0, NULL), //
);
void app_info_register(void)
{
sh_register_cmd_hide(&_register_cmd_hide);
sh_register_cmd(&_register_cmd);
}
SH_CMD_FN(_log1)
{
sh_hdl->disable_echo = false;
app_cfg_set_sys_log(true);
return 0;
}
SH_CMD_FN(_log0)
{
app_cfg_set_sys_log(false);
return 0;
}
SH_CMD_FN(_fw_info)
{
static char *const rf_tab[] = {
[DATA_BRIDGE_RF_MODE_OFF] = "off", // 设置数据桥接模式:关闭所有数据接口
[DATA_BRIDGE_RF_MODE_BLE] = "ble", // 设置数据桥接模式:仅使用 UART <==> BLE
[DATA_BRIDGE_RF_MODE_WIFI_AP] = "wifi-ap", // 设置数据桥接模式:仅使用 UART <==> WIFI(AP)
[DATA_BRIDGE_RF_MODE_WIFI_STA] = "wifi-sta", // 设置数据桥接模式:仅使用 UART <==> WIFI(STA)
};
char mac_buf[3];
memset(mac_buf, 0, sizeof(mac_buf));
printf("\r\n--------======== Firmware information ========--------\r\n");
printf("build time %04d-%02d-%02d %s\r\n", _YEAR, _MONTH, _DAY, __TIME__);
printf("release code " FW_RELEASE_CODE "\r\n");
printf("board name %s\r\n", g_cfg_board->board_name);
printf("firmware type %s\r\n", g_cfg_board->firmware_str);
printf("firmware ver %u.%u.%u\r\n", FW_VERSION_MAIN, FW_VERSION_MINOR, FW_VERSION_BUILD);
printf("platform %s\r\n", g_cfg_board->platform_str);
printf("ble name %s\r\n", g_cfg_app->device_name_ble);
printf("ble pawd %s\r\n", g_cfg_app->psPassword);
#if (CONFIG_BUILD_WIFI)
printf("wifi ap ssid %s\r\n", g_cfg_app->app_config_wifi_para.wifi_ap_ssid);
printf("wifi ap pawd %s\r\n", g_cfg_app->app_config_wifi_para.wifi_ap_password);
printf("wifi sta ssid %s\r\n", g_cfg_app->app_config_wifi_para.wifi_sta_ssid);
printf("wifi sta pawd %s\r\n", g_cfg_app->app_config_wifi_para.wifi_sta_password);
#endif
printf("rf mode %s\r\n", rf_tab[g_cfg_app->rf_mode]);
printf("mac ");
for (int i = 0; i < 6; i++)
{
memcpy(mac_buf, &g_cfg_app->dev_mac_str[i * 2], 2);
printf("%s%s", mac_buf, i < 5 ? ":" : "\r\n");
}
printf("license code ");
for (int i = 0; i < CONFIG_LICENSE_CODE_LENGTH; i++)
{
printf("%02X", g_license_code[i]);
}
printf("\r\n");
printf("END ------------\r\n");
return 0;
}
SH_CMD_FN(_licenseCode)
{
const uint8_t code_str_len = CONFIG_LICENSE_CODE_LENGTH * 2;
uint8_t license_code[CONFIG_LICENSE_CODE_LENGTH];
if (argc < 1)
{
printf("缺少参数 <code[%u]>\r\n", code_str_len);
return -1;
}
sh_parse_t pv = sh_parse_value(argv[0]);
switch (pv.type)
{
case _PARSE_TYPE_STRING: // 字符串
{
if (strlen(pv.value.val_string) != code_str_len)
{
printf("代码字符串长度为 %u 个字节,当前共 %u 字节\r\n", code_str_len, strlen(pv.value.val_string));
return -1;
}
break;
}
case _PARSE_TYPE_INTEGER: // 带符号整型
case _PARSE_TYPE_UNSIGNED: // 无符号整型
case _PARSE_TYPE_FLOAT: // 浮点
default:
printf("<code[%u]> 只支持字符串的十六进制格式表示\r\n", code_str_len);
return -1;
}
char code_str[5] = "0x00";
for (int i = 0; i < CONFIG_LICENSE_CODE_LENGTH; i++)
{
strncpy(&code_str[2], &argv[0][i * 2], 2);
pv = sh_parse_value(code_str);
if (pv.type != _PARSE_TYPE_UNSIGNED)
{
printf("十六进制字符串格式错误:\r\n%s\r\n", argv[0]);
for (int j = 0; j < i; j++)
{
printf(" ");
}
printf("^~\r\n");
return -1;
}
license_code[i] = pv.value.val_unsigned;
}
if (board_license_fresh(license_code) == 0)
{
_fw_info(sh_hdl, 0, NULL);
return 0;
}
else
{
return -1;
}
}
SH_CMD_FN(_boardcfgDump)
{
return board_cfg_dump(g_cfg_board);
}
SH_CMD_FN(_boardcfgSave)
{
return board_cfg_fresh(g_cfg_board);
}