129 lines
4.7 KiB
C
129 lines
4.7 KiB
C
|
|
/* 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"
|
|||
|
|
|
|||
|
|
/* <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;
|
|||
|
|
|
|||
|
|
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, "LOG_TRACE")) { log_set_level(LOG_TRACE); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> TRACE"); }
|
|||
|
|
else if (cmd_is(cmd, "LOG_DEBUG")) { log_set_level(LOG_DEBUG); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> DEBUG"); }
|
|||
|
|
else if (cmd_is(cmd, "LOG_INFO")) { log_set_level(LOG_INFO); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> INFO"); }
|
|||
|
|
else if (cmd_is(cmd, "LOG_WARN")) { log_set_level(LOG_WARN); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> WARN"); }
|
|||
|
|
else if (cmd_is(cmd, "LOG_ERROR")) { log_set_level(LOG_ERROR); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> ERROR"); }
|
|||
|
|
else if (cmd_is(cmd, "LOG_FATAL")) { log_set_level(LOG_FATAL); log_info("> BT: <20><>־<EFBFBD>ȼ<EFBFBD> FATAL"); }
|
|||
|
|
else if (cmd_is(cmd, "LOG")) { log_info("> BT: <20><>ǰ<EFBFBD><C7B0>־<EFBFBD>ȼ<EFBFBD> %d", (int)log_get_level()); }
|
|||
|
|
else if (cmd_is(cmd, "HELP")) {
|
|||
|
|
log_info("CMD: RESET, INFO, STATUS, R1ON/R1OFF~R4ON/R4OFF, ALLON, ALLOFF, OTA, RECOVERY, HELP");
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
log_warn("> BT: δ֪<CEB4><D6AA><EFBFBD><EFBFBD> %s", cmd);
|
|||
|
|
}
|
|||
|
|
}
|