/* user_cmd.c - 蓝牙串口调试命令处理(采集终端) * * 通过 USART1 接收简单文本命令,用于现场调试: * RESET - 复位整机 * OTA - 重启进入 BootLoader 检查升级 * RECOVERY - WiFi模块 AT+RESTORE 忘掉已存热点(测试SmartConfig) + 复位 * INFO - 打印 MQTT 配置信息 * STATUS - 打印传感器在线掩码 * GPS/GPS0/GPS1 - GPS 定位查询/关闭/开启(重启生效) * LOG/LOGTRACE~LOGFATAL - 日志等级查询/设置(EEPROM 保存) * HELP - 显示支持命令 */ #include "user_cmd.h" #include "ble_at.h" #include "app_common.h" #include "24c02.h" #include "uart.h" #include "log.h" #include "network.h" #include "net_wifi.h" #include "esp8266.h" #include "sensor.h" #include "air780e.h" /* 本地命令字符串不区分大小写比较 */ static int cmd_is(const char *a, const char *b) { while (*a && *b) { char ca = *a, cb = *b; if (ca >= 'A' && ca <= 'Z') ca += 'a' - 'A'; if (cb >= 'A' && cb <= 'Z') cb += 'a' - 'A'; if (ca != cb) return 0; a++; b++; } return (*a == 0 && *b == 0); } void userCmdInit(void) { /* 无需额外初始化 */ } /* 处理 USART1 蓝牙调试命令 */ void process_usart1_command(void) { const char *cmd = USART1_GetCommand(); if (!cmd) return; /* GPS 定位开关:GPS 查询,GPS0=关闭,GPS1=开启,切换后自动重启生效 */ if (cmd_is(cmd, "GPS")) { log_info("> BT: GPS 定位 %s", g_gps_on ? "开启(GPS1)" : "关闭(GPS0)"); return; } if (cmd_is(cmd, "GPS0") || cmd_is(cmd, "GPS1")) { uint8_t on = (cmd[3] == '1') ? 1 : 0; if (on == g_gps_on) { log_info("> BT: 已是该状态,无需切换"); return; } gps_set_mode(on); log_warn("> BT: GPS 定位已切到 %s,重启生效...", on ? "开启" : "关闭"); HAL_Delay(200); NVIC_SystemReset(); return; } if (cmd_is(cmd, "RESET")) { log_warn("> USART1: 收到 RESET 命令,正在重启..."); HAL_Delay(100); NVIC_SystemReset(); } else if (cmd_is(cmd, "INFO")) { log_info("> BT INFO: 版本=%u, 服务器=%s:%d, 客户端=%s", MqttInfoStr.Ver, MqttInfoStr.ServerIP, MqttInfoStr.ServerPort, MqttInfoStr.ClientID); } else if (cmd_is(cmd, "STATUS")) { log_info("> BT STATUS: 传感器在线掩码=0x%03X", (unsigned)g_sensor_online); } else if (cmd_is(cmd, "OTA")) { log_info("> BT OTA: 重启进入 BootLoader 检查升级"); HAL_Delay(100); NVIC_SystemReset(); } else if (cmd_is(cmd, "RECOVERY")) { /* WiFi 模块 AT+RESTORE 恢复出厂(忘掉已保存的热点),用于测试 SmartConfig; * 仅 WiFi 通道激活时才操作模块(UART4 与 4G 共享接收缓冲, * 4G 模式下动 UART4 会干扰 4G 数据),随后整机复位走完整重连流程 */ if (NET_GetActiveBackend() == NET_BACKEND_WIFI) { log_warn("> BT RECOVERY: 已安排 WiFi 恢复出厂设置"); g_wifi_restore_req = 1; } else { log_warn("> BT RECOVERY: 4G 模式,不操作 WiFi 模块,仅重启"); HAL_Delay(100); NVIC_SystemReset(); } } else if (cmd_is(cmd, "BLESET")) { log_info("> BT: 强制重新设置蓝牙名称/UUID"); ble_force_setup(); } else if (cmd_is(cmd, "LOGTRACE")) { log_set_level(LOG_TRACE); log_info("> BT: 日志等级 TRACE"); } else if (cmd_is(cmd, "LOGDEBUG")) { log_set_level(LOG_DEBUG); log_info("> BT: 日志等级 DEBUG"); } else if (cmd_is(cmd, "LOGINFO")) { log_set_level(LOG_INFO); log_info("> BT: 日志等级 INFO"); } else if (cmd_is(cmd, "LOGWARN")) { log_set_level(LOG_WARN); log_info("> BT: 日志等级 WARN"); } else if (cmd_is(cmd, "LOGERROR")) { log_set_level(LOG_ERROR); log_info("> BT: 日志等级 ERROR"); } else if (cmd_is(cmd, "LOGFATAL")) { log_set_level(LOG_FATAL); log_info("> BT: 日志等级 FATAL"); } else if (cmd_is(cmd, "LOG")) { static const char *lvs[] = {"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"}; log_info("> BT: 当前日志等级 %s", lvs[(int)log_get_level()]); } else if (cmd_is(cmd, "HELP")) { log_info("BT CMD: RESET, INFO, STATUS, OTA, RECOVERY, BLESET, GPS, GPS0, GPS1, LOG, LOGTRACE, LOGDEBUG, LOGINFO, LOGWARN, LOGERROR, LOGFATAL, HELP"); } else { log_warn("> BT: 未知命令 %s", cmd); } }