nongye/STM32F103_App1/HardWare/USER_CMD/user_cmd.c

119 lines
4.2 KiB
C
Raw Permalink Normal View History

/* user_cmd.c - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC>նˣ<D5B6>
*
* ͨ<EFBFBD><EFBFBD> USART1 <EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* RESET - <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* OTA - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BootLoader <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* RECOVERY - WiFiģ<EFBFBD><EFBFBD> AT+RESTORE <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD>ȵ<EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SmartConfig) + <EFBFBD><EFBFBD>λ
* INFO - <EFBFBD><EFBFBD>ӡ MQTT <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* STATUS - <EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* GPS/GPS0/GPS1 - GPS <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ѯ/<EFBFBD>ر<EFBFBD>/<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
* LOG/LOGTRACE~LOGFATAL - <EFBFBD><EFBFBD>־<EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD>ѯ/<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>EEPROM <EFBFBD><EFBFBD><EFBFBD>
* HELP - <EFBFBD><EFBFBD>ʾ֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
#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"
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>Сд<D0A1>Ƚ<EFBFBD> */
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)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> */
}
/* <20><><EFBFBD><EFBFBD> USART1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void process_usart1_command(void)
{
const char *cmd = USART1_GetCommand();
if (!cmd) return;
/* GPS <20><>λ<EFBFBD><CEBB><EFBFBD>أ<EFBFBD>GPS <20><>ѯ<EFBFBD><D1AF>GPS0=<3D>رգ<D8B1>GPS1=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч */
if (cmd_is(cmd, "GPS")) {
log_info("> BT: GPS <20><>λ %s", g_gps_on ? "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(GPS1)" : "<EFBFBD>ر<EFBFBD>(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: <20><><EFBFBD>Ǹ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>");
return;
}
gps_set_mode(on);
log_warn("> BT: GPS <20><>λ<EFBFBD><CEBB><EFBFBD>е<EFBFBD> %s<><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч...", on ? "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" : "<EFBFBD>ر<EFBFBD>");
HAL_Delay(200);
NVIC_SystemReset();
return;
}
if (cmd_is(cmd, "RESET")) {
log_warn("> USART1: <20>յ<EFBFBD> RESET <20><><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
HAL_Delay(100);
NVIC_SystemReset();
}
else if (cmd_is(cmd, "INFO")) {
log_info("> BT INFO: <20>汾=%u, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=%s:%d, <20>ͻ<EFBFBD><CDBB><EFBFBD>=%s",
MqttInfoStr.Ver, MqttInfoStr.ServerIP,
MqttInfoStr.ServerPort, MqttInfoStr.ClientID);
}
else if (cmd_is(cmd, "STATUS")) {
log_info("> BT STATUS: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=0x%03X", (unsigned)g_sensor_online);
}
else if (cmd_is(cmd, "OTA")) {
log_info("> BT OTA: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BootLoader <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
HAL_Delay(100);
NVIC_SystemReset();
}
else if (cmd_is(cmd, "RECOVERY")) {
/* WiFi ģ<><C4A3> AT+RESTORE <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ㣩<C8B5><E3A3A9><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD> SmartConfig<69><67>
* <EFBFBD><EFBFBD> WiFi ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ų<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>UART4 <EFBFBD><EFBFBD> 4G <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD>
* 4G ģʽ<EFBFBD><EFBFBD> UART4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4G <EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (NET_GetActiveBackend() == NET_BACKEND_WIFI) {
log_warn("> BT RECOVERY: <20>Ѱ<EFBFBD><D1B0><EFBFBD> WiFi <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"); g_wifi_restore_req = 1;
} else {
log_warn("> BT RECOVERY: 4G ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFi ģ<><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
HAL_Delay(100);
NVIC_SystemReset();
}
}
else if (cmd_is(cmd, "BLESET")) {
log_info("> BT: ǿ<><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/UUID");
ble_force_setup();
}
else if (cmd_is(cmd, "LOGTRACE")) { log_set_level(LOG_TRACE); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> TRACE"); }
else if (cmd_is(cmd, "LOGDEBUG")) { log_set_level(LOG_DEBUG); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> DEBUG"); }
else if (cmd_is(cmd, "LOGINFO")) { log_set_level(LOG_INFO); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> INFO"); }
else if (cmd_is(cmd, "LOGWARN")) { log_set_level(LOG_WARN); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> WARN"); }
else if (cmd_is(cmd, "LOGERROR")) { log_set_level(LOG_ERROR); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> ERROR"); }
else if (cmd_is(cmd, "LOGFATAL")) { log_set_level(LOG_FATAL); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> FATAL"); }
else if (cmd_is(cmd, "LOG")) {
static const char *lvs[] = {"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"};
log_info("> BT: <20><>ǰ<EFBFBD><C7B0>־<EFBFBD>ȼ<EFBFBD> %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: δ֪<CEB4><D6AA><EFBFBD><EFBFBD> %s", cmd);
}
}