shuichan_new/STM32F103_App1/HardWare/USER_CMD/user_cmd.c

411 lines
16 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>
* WIFIRESET - 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>Ϣ
* SETMQTT <ID> <<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>> <<EFBFBD><EFBFBD><EFBFBD><EFBFBD>> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>д EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
* SETIP <ip> <port> - <EFBFBD>޸ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ/<EFBFBD>˿ڣ<EFBFBD>д EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
* MQTTINFO - <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ǰ MQTT <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* FACTORY - <EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EEPROM ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* SETWIFI ssid <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFi <EFBFBD>̶<EFBFBD><EFBFBD>ȵд EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
* WIFIINFO - <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ǰ WiFi <EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* WIFICLEAR - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SETWIFI <EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>ȵ<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϣ<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
* FEEDSTART Ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>KG - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼͶι<EFBFBD><EFBFBD><EFBFBD><EFBFBD> FEEDSTART 1.5<EFBFBD><EFBFBD>
* FEEDSTOP - ֹͣͶι<EFBFBD><EFBFBD>FEED - <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>
* HISTORY - <EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD>
* HELP - <EFBFBD><EFBFBD>ʾ֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
#include "user_cmd.h"
#include <stdlib.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"
#include "hlw8032.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();
}
/* <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>Сд<D0A1><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ׺<C7B0>Ƚϣ<C8BD>cmd <20><> prefix <20><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD> 1 */
static int cmd_prefix_is(const char *cmd, const char *prefix)
{
while (*prefix) {
char ca = *cmd, cb = *prefix;
if (ca == 0) return 0;
if (ca >= 'A' && ca <= 'Z') ca += 'a' - 'A';
if (cb >= 'A' && cb <= 'Z') cb += 'a' - 'A';
if (ca != cb) return 0;
cmd++; prefix++;
}
return 1;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD> "SETMQTT id user pass"<22><><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> cap-1 <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD> */
static int parse_tokens(const char *s, char t[][20], int cap)
{
int n = 0;
for (;;) {
while (*s == ' ') s++; /* <20><><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ո<EFBFBD> */
if (*s == 0) break;
if (n >= 3) return 4; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
int i = 0;
while (*s && *s != ' ' && i < cap - 1) t[n][i++] = *s++;
t[n][i] = 0;
n++;
}
return n;
}
/* У<><D0A3><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿա<C7BF><D5A1><EFBFBD><EFBFBD><EFBFBD> < cap<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD> */
static int token_valid(const char *t, int cap)
{
int len = (int)strlen(t);
if (len <= 0 || len >= cap) return 0;
for (const char *p = t; *p; p++) {
if (!((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z'))) return 0;
}
return 1;
}
/* WiFi <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ǿա<C7BF><D5A1><EFBFBD><EFBFBD><EFBFBD> < cap<61><70><EFBFBD>ɴ<EFBFBD>ӡ<EFBFBD>ǿո<C7BF><D5B8>ַ<EFBFBD> */
static int wifi_token_valid(const char *t, int cap)
{
int len = (int)strlen(t);
if (len <= 0 || len >= cap) return 0;
for (const char *p = t; *p; p++) {
if (*p < 0x21 || *p > 0x7E) return 0;
}
return 1;
}
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;
/* ȥ<><C8A5><EFBFBD><EFBFBD>β<EFBFBD>ո<EFBFBD><D5B8><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>뷨/APP <20><><EFBFBD>״<EFBFBD>β<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϸ<D0B6><CFB8><EFBFBD><EFBFBD><EFBFBD> */
while (*cmd == ' ') cmd++;
{
char *end = (char *)cmd + strlen(cmd);
while (end > cmd && (end[-1] == ' ' || end[-1] == '\r' || end[-1] == '\n')) *--end = 0;
if (*cmd == 0) 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;
}
/* <20>ۼƵ<DBBC><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣨EEPROM ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (cmd_is(cmd, "ENCLR")) {
hlw8032_clear();
log_warn("> BT: <20>ۼƵ<DBBC><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
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_prefix_is(cmd, "SETMQTT")) {
char args[3][20] = {{0}};
char *id = args[0], *user = args[1], *pass = args[2];
int n = parse_tokens(cmd + 7, args, 20);
if (n != 3 || !token_valid(id, sizeof(MqttInfoStr.ClientID)) ||
!token_valid(user, sizeof(MqttInfoStr.Username)) ||
!token_valid(pass, sizeof(MqttInfoStr.Passward))) {
log_warn("> BT: <20><>ʽ/<2F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3>÷<EFBFBD>: SETMQTT <ID> <<3C>û<EFBFBD><C3BB><EFBFBD>> <<3C><><EFBFBD><EFBFBD>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>19λ<39><CEBB>");
return;
}
strcpy(MqttInfoStr.ClientID, id);
strcpy(MqttInfoStr.Username, user);
strcpy(MqttInfoStr.Passward, pass);
MqttInfoStr.Magic = EEPROM_MAGIC;
eepromWriteData(0, &MqttInfoStr, MQTT_STRUCT_LEN);
log_info("> BT: <20><><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD> ID=%s <20>û<EFBFBD>=%s <20><><EFBFBD><EFBFBD>=%s<><73><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч...", id, user, pass);
HAL_Delay(1000); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
NVIC_SystemReset();
}
else if (cmd_prefix_is(cmd, "SETIP")) {
char args[3][20] = {{0}};
int port = 0, dots = 0;
int n = parse_tokens(cmd + 5, args, 20);
char *ip = args[0];
if (n == 2) port = atoi(args[1]);
for (const char *q = ip; *q; q++) {
if (*q == '.') dots++;
else if (*q < '0' || *q > '9') { dots = -1; break; }
}
if (n != 2 || dots != 3 || port < 1 || port > 65535) {
log_warn("> BT: <20><>ʽ<EFBFBD><CABD><EFBFBD>ԣ<EFBFBD><D4A3>÷<EFBFBD>: SETIP <ip> <port><3E><><EFBFBD><EFBFBD> SETIP 58.17.14.95 1880<38><30>");
return;
}
strcpy(MqttInfoStr.ServerIP, ip);
MqttInfoStr.ServerPort = (uint16_t)port;
MqttInfoStr.Magic = EEPROM_MAGIC;
eepromWriteData(0, &MqttInfoStr, MQTT_STRUCT_LEN);
log_info("> BT: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD> %s:%d<><64><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч...", ip, port);
HAL_Delay(1000);
NVIC_SystemReset();
}
else if (cmd_is(cmd, "MQTTINFO")) {
log_info("> BT MQTT: ״̬=%s", g_mqtt_configured ? "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" : "δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("> BT MQTT: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=%s:%d", MqttInfoStr.ServerIP, MqttInfoStr.ServerPort);
log_info("> BT MQTT: ID=%s <20>û<EFBFBD>=%s <20><><EFBFBD><EFBFBD>=%s <20>汾=%u",
MqttInfoStr.ClientID[0] ? MqttInfoStr.ClientID : "(<28><>)",
MqttInfoStr.Username[0] ? MqttInfoStr.Username : "(<28><>)",
MqttInfoStr.Passward[0] ? MqttInfoStr.Passward : "(<28><>)",
MqttInfoStr.Ver);
}
else if (cmd_is(cmd, "FACTORY")) {
/* <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ EEPROM д 0xFF<46><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/ģʽ/<2F><><EFBFBD><EFBFBD><EFBFBD>ۼƵ<DBBC>ȫ<EFBFBD><EFBFBD><E5A3A9>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"ȫ<EFBFBD>°<EFBFBD>"·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Magic <EFBFBD><EFBFBD>Ч -> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD> 0 */
log_warn("> BT: <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EEPROM...");
uint8_t ff[16];
memset(ff, 0xFF, sizeof(ff));
for (uint16_t addr = 0; addr < 256; addr += sizeof(ff)) {
eepromWriteData((uint8_t)addr, ff, sizeof(ff));
}
log_warn("> BT: <20><><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ");
HAL_Delay(500);
NVIC_SystemReset();
}
else if (cmd_prefix_is(cmd, "SETWIFI")) {
char args[3][20] = {{0}};
int n = parse_tokens(cmd + 7, args, 20);
if (n != 2 || !wifi_token_valid(args[0], 20) || !wifi_token_valid(args[1], 20)) {
log_warn("> BT: <20><>ʽ<EFBFBD><CABD><EFBFBD>ԣ<EFBFBD><D4A3>÷<EFBFBD>: SETWIFI <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ո<EFBFBD><D5B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>19λ<39><CEBB>");
return;
}
uint8_t buf[WIFI_CFG_STR_LEN];
uint8_t magic = WIFI_CFG_MAGIC;
eepromWriteData(WIFI_CFG_MAGIC_ADDR, &magic, 1);
memset(buf, 0, sizeof(buf)); strcpy((char *)buf, args[0]);
eepromWriteData(WIFI_CFG_SSID_ADDR, buf, sizeof(buf));
memset(buf, 0, sizeof(buf)); strcpy((char *)buf, args[1]);
eepromWriteData(WIFI_CFG_PASS_ADDR, buf, sizeof(buf));
log_info("> BT: WiFi <20>ȵ<EFBFBD><C8B5>ѱ<EFBFBD><D1B1><EFBFBD> '%s'<27><><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч...", args[0]);
HAL_Delay(1000);
NVIC_SystemReset();
}
else if (cmd_is(cmd, "WIFIINFO")) {
uint8_t magic = 0;
char ssid[WIFI_CFG_STR_LEN] = {0}, pass[WIFI_CFG_STR_LEN] = {0};
eepromReadData(WIFI_CFG_MAGIC_ADDR, &magic, 1);
if (magic == WIFI_CFG_MAGIC) {
eepromReadData(WIFI_CFG_SSID_ADDR, ssid, WIFI_CFG_STR_LEN);
eepromReadData(WIFI_CFG_PASS_ADDR, pass, WIFI_CFG_STR_LEN);
log_info("> BT WiFi: EEPROM <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>=%s <20><><EFBFBD><EFBFBD>=%s", ssid, pass);
} else {
log_info("> BT WiFi: δ<><CEB4><EFBFBD>ã<EFBFBD><C3A3>ñ<EFBFBD><C3B1><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD>ȵ<EFBFBD> '%s'<27><><EFBFBD><EFBFBD>SETWIFI <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD>", WIFI_SSID);
}
}
else if (cmd_is(cmd, "WIFICLEAR")) {
/* <20><><EFBFBD><EFBFBD> EEPROM <20><><EFBFBD><EFBFBD> SETWIFI <20><><EFBFBD>ã<EFBFBD>magic <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD>ȵ㣬<C8B5>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч */
uint8_t magic = 0;
eepromReadData(WIFI_CFG_MAGIC_ADDR, &magic, 1);
if (magic != WIFI_CFG_MAGIC) {
log_info("> BT: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB> SETWIFI <20><><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ǰ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>Ĭ<EFBFBD><C4AC> '%s'<27><>", WIFI_SSID);
return;
}
magic = 0xFF;
eepromWriteData(WIFI_CFG_MAGIC_ADDR, &magic, 1);
log_info("> BT: SETWIFI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC> '%s'<27><><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>...", WIFI_SSID);
HAL_Delay(1000);
NVIC_SystemReset();
}
else if (cmd_prefix_is(cmd, "FEEDSTART")) {
if (!g_feed_scale_on) { log_warn("> BT: <20><>ǰ<EFBFBD>޳<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>Ƽ̵<C6BC><CCB5><EFBFBD> 1 <20><><EFBFBD><EFBFBD> R1ON/R1OFF"); return; }
char args[3][20] = {{0}};
int n = parse_tokens(cmd + 9, args, 20);
float kg = (n == 1) ? (float)atof(args[0]) : 0.0f;
uint16_t w100 = (uint16_t)(kg * 10.0f + 0.5f);
if (n != 1 || kg <= 0.0f || w100 < FEED_SCALE_ONCEWT_MIN || w100 > FEED_SCALE_ONCEWT_MAX) {
log_warn("> BT: <20><>ʽ<EFBFBD><CABD><EFBFBD>ԣ<EFBFBD><D4A3>÷<EFBFBD>: FEEDSTART Ͷ<><CDB6><EFBFBD><EFBFBD>KG<4B><47>0.1~500.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD> FEEDSTART 1.5<EFBFBD><EFBFBD>");
return;
}
log_info("> BT: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼͶι %.1fKG", (double)kg);
feedScaleStart(w100);
}
else if (cmd_is(cmd, "FEEDSTOP")) {
feedScaleStop();
log_info("> BT: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣͶι");
}
else if (cmd_is(cmd, "FEED")) {
static const char *sts[] = {"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "Ͷι<EFBFBD><EFBFBD>", "Ͷι<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"};
FeedScaleState st = feedScaleGetState();
log_info("> BT FEED: ״̬=%s ʣ<><CAA3>=%.1fKG <20><><EFBFBD><EFBFBD>=%.1fKG <20>Ѽ<EFBFBD>=%.1fKG",
sts[(int)st],
(double)(feedScaleGetWeight() / 10.0f),
(double)(feedScaleGetOnceWeight() / 10.0f),
(double)(feedScaleGetReduced() / 10.0f));
}
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, "WIFIRESET")) {
/* 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 WIFIRESET: <20>Ѱ<EFBFBD><D1B0><EFBFBD> WiFi <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"); g_wifi_restore_req = 1;
} else {
log_warn("> BT WIFIRESET: 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, "HISTORY")) {
reset_log_print_history();
}
else if (cmd_is(cmd, "HELP")) {
log_info("===<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===");
log_info("RESET - ϵͳ<CFB5><CDB3>λ");
log_info("INFO - <20><>ӡ MQTT <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>");
log_info("MQTTINFO - <20><>ѯ MQTT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("SETMQTT ID <20>û<EFBFBD><C3BB><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("SETIP ip <20>˿<EFBFBD> - <20>޸ķ<DEB8><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ/<2F>˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("FACTORY - <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EEPROM ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>");
log_info("STATUS - <20><>ӡ<EFBFBD><D3A1>·<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>״̬");
log_info("R1ON/R1OFF~R4ON/R4OFF - <20><>·<EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>/<2F><>");
log_info("ALLON/ALLOFF - ȫ<><C8AB><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>/<2F><>");
log_info("OTA - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BootLoader <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("WIFICLEAR - <20><><EFBFBD><EFBFBD> SETWIFI <20><><EFBFBD>õ<EFBFBD><C3B5>ȵ㣬<C8B5>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϣ<EFBFBD><CFA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("WIFIRESET - WiFi ģ<><C4A3><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SmartConfig <20>Ѵ<EFBFBD><D1B4>ȵ㣩<C8B5><E3A3A9><EFBFBD><EFBFBD>λ");
log_info("BLESET - ǿ<><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/GATT UUID");
log_info("SCALE - <20><>ѯ<EFBFBD><D1AF>Ʒģʽ<C4A3><CABD>SCALE0 <20>޳<EFBFBD> / SCALE1 <20><><EFBFBD>ӣ<EFBFBD><D3A3>л<EFBFBD><D0BB><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("GPS - <20><>ѯ GPS <20><><EFBFBD>أ<EFBFBD>GPS0 <20><> / GPS1 <20><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("ENCLR - <20>ۼƵ<DBBC><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("SETWIFI <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> WiFi <20>̶<EFBFBD><CCB6>ȵ㣨<C8B5><E3A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("WIFIINFO - <20><>ѯ WiFi <20>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>");
log_info("FEEDSTART Ͷ<><CDB6><EFBFBD><EFBFBD>KG - <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʼͶι<CDB6><CEB9>FEEDSTOP ֹͣ<CDA3><D6B9>FEED <20><>ѯ״̬");
log_info("LOG - <20><>ѯ<EFBFBD><D1AF>־<EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>LOGTRACE~LOGFATAL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ϵ籣<CFB5>");
log_info("HISTORY - <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD> 10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ԭ<EFBFBD><D4AD>+<2B><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>");
log_info("HELP - <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("========= END =========");
}
else {
log_warn("> BT: δ֪<CEB4><D6AA><EFBFBD><EFBFBD> %s", cmd);
}
}