shuichan_old/V1.5/STM32F103_App1/HardWare/USER_CMD/user_cmd.c

172 lines
6.3 KiB
C
Raw Normal View History

/* user_cmd.c - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6>
*
* ͨ<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/OTA - <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>״̬
* R1ON ~ R4OFF - <EFBFBD><EFBFBD>·<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ALLON / ALLOFF - ȫ<EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><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 "relay.h"
#include "24c02.h"
#include "uart.h"
#include "log.h"
#include "network.h"
#include "net_wifi.h"
#include "esp8266.h"
#include "reset_log.h"
#include "feed_scale.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);
}
/* ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӿ<EFBFBD><D3BF>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>ϱ<EFBFBD>״̬ */
static void relay_set(uint8_t ch, uint8_t on)
{
if (ch < 1 || ch > 4) return;
relaySet(ch, on);
log_info("> BT: SW%d %s", ch, on ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>");
eepromWriteData(102, &MqttInfoStr.Relay_State[0], 7);
relayRequestReport();
}
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;
/* <20><>Ʒģʽ<C4A3><CABD>ѯ/<2F>л<EFBFBD><D0BB><EFBFBD>SCALE <20><>ѯ<EFBFBD><D1AF>SCALE0=<3D><>·<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>(<28>޳<EFBFBD>)<29><>SCALE1=<3D><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч */
if (cmd_is(cmd, "SCALE")) {
log_info("> BT: <20><>Ʒģʽ %s", g_feed_scale_on ? "SCALE1 <20><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>(<28><><EFBFBD><EFBFBD>)" : "SCALE0 <20><>·<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>(<28>޳<EFBFBD>)");
return;
}
if (cmd_is(cmd, "SCALE0") || cmd_is(cmd, "SCALE1")) {
uint8_t on = (cmd[5] == '1') ? 1 : 0;
if (on == g_feed_scale_on) {
log_info("> BT: <20><><EFBFBD>Ǹ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>");
return;
}
feed_scale_set_mode(on);
log_warn("> BT: <20><>Ʒģʽ<C4A3><CABD><EFBFBD>е<EFBFBD> %s<><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч...", on ? "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)" : "<EFBFBD><EFBFBD>·<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>(<28>޳<EFBFBD>)");
reset_log_mark(RSN_CMD_RESET);
HAL_Delay(200);
NVIC_SystemReset();
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>");
reset_log_mark(RSN_CMD_RESET);
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>...");
reset_log_mark(RSN_CMD_RESET);
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, "R1ON")) { relay_set(1, 1); }
else if (cmd_is(cmd, "R1OFF")) { relay_set(1, 0); }
else if (cmd_is(cmd, "R2ON")) { relay_set(2, 1); }
else if (cmd_is(cmd, "R2OFF")) { relay_set(2, 0); }
else if (cmd_is(cmd, "R3ON")) { relay_set(3, 1); }
else if (cmd_is(cmd, "R3OFF")) { relay_set(3, 0); }
else if (cmd_is(cmd, "R4ON")) { relay_set(4, 1); }
else if (cmd_is(cmd, "R4OFF")) { relay_set(4, 0); }
else if (cmd_is(cmd, "ALLON")) {
relay_set(1, 1); relay_set(2, 1); relay_set(3, 1); relay_set(4, 1);
}
else if (cmd_is(cmd, "ALLOFF")) {
relay_set(1, 0); relay_set(2, 0); relay_set(3, 0); relay_set(4, 0);
}
else if (cmd_is(cmd, "STATUS")) {
log_info("> BT STATUS: SW1=%s, SW2=%s, SW3=%s, SW4=%s",
MqttInfoStr.Relay_State[1] ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>",
MqttInfoStr.Relay_State[2] ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>",
MqttInfoStr.Relay_State[3] ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>",
MqttInfoStr.Relay_State[4] ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>");
}
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>");
reset_log_mark(RSN_CMD_OTA);
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>");
reset_log_mark(RSN_CMD_RECOVERY);
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, R1ON/R1OFF~R4ON/R4OFF, ALLON, ALLOFF, OTA, RECOVERY, BLESET, SCALE, SCALE0, SCALE1, GPS, GPS0, GPS1, LOG, LOGTRACE, LOGDEBUG, LOGINFO, LOGWARN, LOGERROR, LOGFATAL, HELP");
}
else {
log_warn("> BT: δ֪<CEB4><D6AA><EFBFBD><EFBFBD> %s", cmd);
}
}