2026-09-04 20:09:04 +08:00
/* 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"
2026-09-04 21:08:56 +08:00
# include "ext_relay.h"
2026-09-04 20:09:04 +08:00
# 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 ) ; }
2026-09-04 21:08:56 +08:00
else if ( cmd_is ( cmd , " R5ON " ) ) { ext_relay_cmd ( 1 , 1 , NULL ) ; } /* 485 <20> <> չ<EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <EFBFBD> <EFBFBD> */
else if ( cmd_is ( cmd , " R5OFF " ) ) { ext_relay_cmd ( 1 , 0 , NULL ) ; }
else if ( cmd_is ( cmd , " R6ON " ) ) { ext_relay_cmd ( 2 , 1 , NULL ) ; }
else if ( cmd_is ( cmd , " R6OFF " ) ) { ext_relay_cmd ( 2 , 0 , NULL ) ; }
else if ( cmd_is ( cmd , " R7ON " ) ) { ext_relay_cmd ( 3 , 1 , NULL ) ; }
else if ( cmd_is ( cmd , " R7OFF " ) ) { ext_relay_cmd ( 3 , 0 , NULL ) ; }
else if ( cmd_is ( cmd , " R8ON " ) ) { ext_relay_cmd ( 4 , 1 , NULL ) ; }
else if ( cmd_is ( cmd , " R8OFF " ) ) { ext_relay_cmd ( 4 , 0 , NULL ) ; }
2026-09-04 20:09:04 +08:00
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> " ) ;
2026-09-04 21:08:56 +08:00
if ( ext_relay_online ( ) ) {
uint8_t m = ext_relay_state_mask ( ) ;
log_info ( " > BT STATUS: <20> <> չ<EFBFBD> <D5B9> SW5=%s, SW6=%s, SW7=%s, SW8=%s (<28> <> <EFBFBD> <EFBFBD> =%02X) " ,
( m & 1 ) ? " <EFBFBD> <EFBFBD> " : " <EFBFBD> <EFBFBD> " ,
( m & 2 ) ? " <EFBFBD> <EFBFBD> " : " <EFBFBD> <EFBFBD> " ,
( m & 4 ) ? " <EFBFBD> <EFBFBD> " : " <EFBFBD> <EFBFBD> " ,
( m & 8 ) ? " <EFBFBD> <EFBFBD> " : " <EFBFBD> <EFBFBD> " ,
ext_relay_fault_mask ( ) ) ;
} else {
log_info ( " > BT STATUS: <20> <> չ<EFBFBD> <D5B9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> /δ<> <CEB4> " ) ;
}
2026-09-04 20:09:04 +08:00
}
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> 4 G <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ջ <EFBFBD> <EFBFBD> 壬
* 4 G ģ ʽ <EFBFBD> ¶ <EFBFBD> UART4 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4 G <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 ) ;
}
}