2026-08-10 21:18:36 +08:00
/* ble_at.c - HLK-B40 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <CDB8> ģ<EFBFBD> <C4A3> AT <20> <> <EFBFBD> <EFBFBD>
*
* <EFBFBD> <EFBFBD> <EFBFBD> ߣ <EFBFBD> ģ <EFBFBD> <EFBFBD> PC5 ( <EFBFBD> <EFBFBD> <EFBFBD> ܰ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ) <EFBFBD> ӵ <EFBFBD> Ƭ <EFBFBD> <EFBFBD> PB0 <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> AT ģ ʽ <EFBFBD> <EFBFBD> PB0 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 s <EFBFBD> <EFBFBD> <EFBFBD> ͷ ţ <EFBFBD> <EFBFBD> ֲ <EFBFBD> Ҫ <EFBFBD> <EFBFBD> 0.5 ~ 3 s <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģ ʽ <EFBFBD> <EFBFBD> AT ģ ʽ <EFBFBD> · <EFBFBD> <EFBFBD> <EFBFBD> AT + TS = 1 <EFBFBD> <EFBFBD>
* <EFBFBD> ϵ <EFBFBD> Ĭ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģ ʽ <EFBFBD> <EFBFBD>
*/
# include "ble_at.h"
# include "uart.h"
# include "log.h"
# include "main.h"
# include "system.h"
# include "24c02.h"
# include "stdio.h"
# include "string.h"
# define BLE_PC5_PORT GPIOB
# define BLE_PC5_PIN GPIO_PIN_0
2026-08-22 22:35:11 +08:00
/* BT_RST(PA7)<29> <> <EFBFBD> ߵ <EFBFBD> ƽ <EFBFBD> <C6BD> λģ<CEBB> 飬Ĭ<E9A3AC> ϵ͵<CFB5> ƽ <EFBFBD> <C6BD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> system.c <20> ѳ<EFBFBD> ʼ <EFBFBD> <CABC> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> <EFBFBD> ͣ<EFBFBD> */
# define BLE_RST_PORT GPIOA
# define BLE_RST_PIN GPIO_PIN_7
# define BLE_RST_HIGH() HAL_GPIO_WritePin(BLE_RST_PORT, BLE_RST_PIN, GPIO_PIN_SET)
# define BLE_RST_LOW() HAL_GPIO_WritePin(BLE_RST_PORT, BLE_RST_PIN, GPIO_PIN_RESET)
2026-08-10 21:18:36 +08:00
# define BLE_PC5_LOW() HAL_GPIO_WritePin(BLE_PC5_PORT, BLE_PC5_PIN, GPIO_PIN_RESET)
# define BLE_PC5_HIGH() HAL_GPIO_WritePin(BLE_PC5_PORT, BLE_PC5_PIN, GPIO_PIN_SET)
/* EEPROM <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> úõ<C3BA> <C3B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 132~157<35> <37> 26B<36> <42> <EFBFBD> ܿ<EFBFBD> <DCBF> <EFBFBD> <EFBFBD> <EFBFBD> ռ <EFBFBD> ã<EFBFBD> */
# define BLE_CACHE_ADDR 132
2026-08-20 09:57:02 +08:00
# define BLE_POWER_ADDR 158 /* EEPROM<4F> <4D> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> õķ<C3B5> <C4B7> 书<EFBFBD> ʣ<EFBFBD> 132~157 <20> <> <EFBFBD> ƻ<EFBFBD> <C6BB> <EFBFBD> , 160 <20> <> ־<EFBFBD> ȼ<EFBFBD> <C8BC> <EFBFBD> */
2026-08-10 21:18:36 +08:00
# define BLE_CACHE_LEN 26
/* PB0 <20> <> ©<EFBFBD> <C2A9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͷ<EFBFBD> ʱ<EFBFBD> <CAB1> ģ<EFBFBD> <C4A3> PC5 <20> ڲ<EFBFBD> <DAB2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָߵ <D6B8> ƽ */
void ble_at_init ( void )
{
GPIO_InitTypeDef g = { 0 } ;
__HAL_RCC_GPIOB_CLK_ENABLE ( ) ;
BLE_PC5_HIGH ( ) ;
g . Pin = BLE_PC5_PIN ;
g . Mode = GPIO_MODE_OUTPUT_OD ;
g . Pull = GPIO_NOPULL ;
g . Speed = GPIO_SPEED_FREQ_LOW ;
HAL_GPIO_Init ( BLE_PC5_PORT , & g ) ;
BLE_PC5_HIGH ( ) ;
}
static void ble_delay ( uint32_t ms )
{
while ( ms > = 100 ) {
HAL_Delay ( 100 ) ;
IWDG_Feed ( ) ;
ms - = 100 ;
}
if ( ms ) HAL_Delay ( ms ) ;
}
/* <20> <> <EFBFBD> <EFBFBD> USART1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
static void ble_flush_rx ( void )
{
while ( USART1_GetCommand ( ) ! = NULL ) { }
}
/* <20> <> <EFBFBD> <EFBFBD> AT <20> <> <EFBFBD> <EFBFBD> ȴ<EFBFBD> <C8B4> <EFBFBD> <EFBFBD> <EFBFBD> Ӧ<EFBFBD> 𣨰<EFBFBD> <F0A3A8B0> <EFBFBD> ƥ<EFBFBD> <C6A5> <EFBFBD> Ӵ<EFBFBD> <D3B4> <EFBFBD> <EFBFBD> <EFBFBD> 0=<3D> ɹ<EFBFBD> */
static int ble_at_cmd ( const char * cmd , const char * expect , int timeout_ms )
{
char line [ 64 ] ;
int n = snprintf ( line , sizeof ( line ) , " %s \r \n " , cmd ) ;
ble_flush_rx ( ) ;
HAL_UART_Transmit ( & huart1 , ( uint8_t * ) line , n , 500 ) ;
int t = timeout_ms / 50 ;
while ( t - - > 0 ) {
ble_delay ( 50 ) ;
const char * resp = USART1_GetCommand ( ) ;
if ( resp ) {
if ( strstr ( resp , expect ) ) {
log_info ( " > BLE AT: %s " , resp ) ;
return 0 ;
}
if ( strstr ( resp , " ERROR " ) ) {
log_warn ( " > BLE AT Ӧ<> <D3A6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : %s " , resp ) ;
return - 1 ;
}
}
}
log_warn ( " > BLE AT <20> <> ʱ: %s " , cmd ) ;
return - 1 ;
}
/* <20> ϵ<EFBFBD> ִ<EFBFBD> <D6B4> һ <EFBFBD> Σ<EFBFBD> <CEA3> <EFBFBD> AT ģʽ <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʋ<EFBFBD> ѯ/<2F> <> <EFBFBD> <EFBFBD> Ϊ BLE_NAME <20> <> <20> <> Ҫʱ<D2AA> <CAB1> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> Ч<EFBFBD> <D0A7>
* <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> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AT <EFBFBD> <EFBFBD> <EFBFBD> ڣ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> APP <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ײ <EFBFBD> <EFBFBD> AT <EFBFBD> <EFBFBD> <EFBFBD> */
void ble_setup_name ( void )
{
char cmd [ 48 ] ;
2026-08-20 09:57:02 +08:00
/* EEPROM <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> <D0A3> <EFBFBD> <EFBFBD> <EFBFBD> +<2B> <> <EFBFBD> ʶ<EFBFBD> <CAB6> ԣ<EFBFBD> <D4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AT <20> <> <EFBFBD> ̣<EFBFBD> <CCA3> 㴰<EFBFBD> ڣ<EFBFBD> <DAA3> <EFBFBD> <EFBFBD> <EFBFBD> APP <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
2026-08-10 21:18:36 +08:00
char cache [ BLE_CACHE_LEN ] = { 0 } ;
eepromReadData ( BLE_CACHE_ADDR , cache , BLE_CACHE_LEN ) ;
cache [ BLE_CACHE_LEN - 1 ] = 0 ;
2026-08-20 09:57:02 +08:00
uint8_t pwr_cache = 0xFF ;
eepromReadData ( BLE_POWER_ADDR , & pwr_cache , 1 ) ;
if ( strcmp ( cache , BLE_NAME ) = = 0 & & pwr_cache = = BLE_TX_POWER ) {
log_info ( " > BLE: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ѻ<EFBFBD> <D1BB> <EFBFBD> (%s/<2F> <> <EFBFBD> <EFBFBD> %d)<29> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , BLE_NAME , BLE_TX_POWER ) ;
2026-08-10 21:18:36 +08:00
return ;
}
2026-08-22 22:35:11 +08:00
/* <20> <> Ӳ<EFBFBD> <D3B2> λһ <CEBB> <D2BB> ģ<EFBFBD> 飨PA7 <20> <> <EFBFBD> <EFBFBD> 100ms<6D> <73> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֹģ<D6B9> <C4A3> ״̬<D7B4> 쳣ʱ PC5 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AT ģʽ <C4A3> <CABD>
* ֻ <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> 㴰 <EFBFBD> ڲ <EFBFBD> <EFBFBD> <EFBFBD> Ӱ <EFBFBD> <EFBFBD> */
BLE_RST_HIGH ( ) ;
ble_delay ( 100 ) ;
BLE_RST_LOW ( ) ;
ble_delay ( 1500 ) ; /* <20> <> ģ<EFBFBD> <C4A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
2026-08-22 20:20:53 +08:00
/* AT <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ھ <EFBFBD> <DABE> <EFBFBD> <EFBFBD> <EFBFBD> ־<EFBFBD> <D6BE> UART1 <20> <> ģ<EFBFBD> 鹲<EFBFBD> ã<EFBFBD> <C3A3> <EFBFBD> ־<EFBFBD> ֽڻ<D6BD> <DABB> <EFBFBD> Ⱦģ<C8BE> <C4A3> <EFBFBD> <EFBFBD> AT <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
log_mute ( 1 ) ;
2026-08-10 21:18:36 +08:00
2026-08-22 20:20:53 +08:00
/* <20> <> AT ģʽ <C4A3> <CABD> <EFBFBD> <EFBFBD> ѯ<EFBFBD> <D1AF> ǰ<EFBFBD> <C7B0> <EFBFBD> ƣ<EFBFBD> <C6A3> <EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> PC5 <20> <> <EFBFBD> ԣ<EFBFBD> <D4A3> <EFBFBD> <EFBFBD> <EFBFBD> 3 <20> <> */
2026-08-10 21:18:36 +08:00
const char * cur = NULL ;
2026-08-22 20:20:53 +08:00
for ( int round = 0 ; round < 3 & & ! cur ; round + + ) {
BLE_PC5_LOW ( ) ;
ble_delay ( 1100 ) ; /* <20> <> <EFBFBD> <EFBFBD> 1s <20> <> AT ģʽ */
BLE_PC5_HIGH ( ) ;
ble_delay ( 600 ) ; /* <20> <> ģ<EFBFBD> <C4A3> <EFBFBD> л<EFBFBD> <D0BB> <EFBFBD> AT ģʽ */
ble_flush_rx ( ) ;
HAL_UART_Transmit ( & huart1 , ( uint8_t * ) " AT+NAME=? \r \n " , 12 , 500 ) ;
int t = 30 ;
while ( t - - > 0 & & ! cur ) {
ble_delay ( 50 ) ;
cur = USART1_GetCommand ( ) ;
}
2026-08-10 21:18:36 +08:00
}
2026-08-22 20:20:53 +08:00
if ( ! cur ) {
log_mute ( 0 ) ;
log_warn ( " > BLE: 3 <20> <> AT <20> <> <EFBFBD> <EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> δ<EFBFBD> <CEB4> /<2F> <> <EFBFBD> ֻ<EFBFBD> ռ <EFBFBD> <D5BC> /PC5 δ<> <CEB4> <EFBFBD> ͣ<EFBFBD> " ) ;
return ;
}
if ( strstr ( cur , BLE_NAME ) & & pwr_cache = = BLE_TX_POWER ) {
2026-08-20 09:57:02 +08:00
/* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 빦<EFBFBD> ʶ<EFBFBD> <CAB6> <EFBFBD> ȷ<EFBFBD> <C8B7> ֱ<EFBFBD> ӻ<EFBFBD> <EFBFBD> <CDB8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> κ<EFBFBD> <CEBA> <EFBFBD> <EFBFBD> <EFBFBD> */
2026-08-10 21:18:36 +08:00
ble_at_cmd ( " AT+TS=1 " , " OK " , 1500 ) ;
2026-08-22 20:20:53 +08:00
log_mute ( 0 ) ;
log_info ( " > BLE: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> %s<> <73> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " , BLE_NAME ) ;
2026-08-10 21:18:36 +08:00
return ;
}
2026-08-22 20:20:53 +08:00
if ( strstr ( cur , BLE_NAME ) ) {
2026-08-20 09:57:02 +08:00
/* <20> <> <EFBFBD> ƶԵ<C6B6> <D4B5> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> ˣ<EFBFBD> ֻ<EFBFBD> <D6BB> <EFBFBD> 跢<EFBFBD> 书<EFBFBD> <E4B9A6> */
snprintf ( cmd , sizeof ( cmd ) , " AT+RFPOWER=%d " , BLE_TX_POWER ) ;
ble_at_cmd ( cmd , " OK " , 1500 ) ;
ble_at_cmd ( " AT+REBOOT=1 " , " OK " , 1500 ) ;
uint8_t p = BLE_TX_POWER ;
eepromWriteData ( BLE_POWER_ADDR , & p , 1 ) ;
2026-08-22 20:20:53 +08:00
log_mute ( 0 ) ;
2026-08-20 09:57:02 +08:00
log_info ( " > BLE: <20> <> <EFBFBD> 书<EFBFBD> <E4B9A6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ %d " , BLE_TX_POWER ) ;
return ;
}
2026-08-10 21:18:36 +08:00
/* <20> <> Ҫ<EFBFBD> <D2AA> <EFBFBD> ã<EFBFBD> <C3A3> <EFBFBD> AT+NAME<4D> <45> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 3 <20> Σ<EFBFBD> <CEA3> <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> <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> ֱ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ´ ο <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> IJ <EFBFBD> ѯ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> <EFBFBD> */
int ok = - 1 ;
for ( int i = 0 ; i < 3 & & ok ! = 0 ; i + + ) {
snprintf ( cmd , sizeof ( cmd ) , " AT+NAME=%s " , BLE_NAME ) ;
ok = ble_at_cmd ( cmd , " OK " , 1500 ) ;
}
if ( ok = = 0 ) {
# if BLE_UUID_CUSTOM
/* ˳<> <CBB3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <CDB8> GATT UUID<49> <44> FFE0/FFE1<45> <31> <EFBFBD> <EFBFBD> ͨ<EFBFBD> <CDA8> BLE <20> <> <EFBFBD> <EFBFBD> APP <20> <> <EFBFBD> <EFBFBD> */
snprintf ( cmd , sizeof ( cmd ) , " AT+UUIDS=%s " , BLE_UUID_SERVICE ) ;
ble_at_cmd ( cmd , " OK " , 1500 ) ;
snprintf ( cmd , sizeof ( cmd ) , " AT+UUIDR=%s " , BLE_UUID_TX ) ;
ble_at_cmd ( cmd , " OK " , 1500 ) ;
snprintf ( cmd , sizeof ( cmd ) , " AT+UUIDW=%s " , BLE_UUID_RX ) ;
ble_at_cmd ( cmd , " OK " , 1500 ) ;
# endif
2026-08-20 09:57:02 +08:00
/* ˳<> <CBB3> <EFBFBD> <EFBFBD> <EFBFBD> ÷<EFBFBD> <C3B7> 书<EFBFBD> <E4B9A6> */
snprintf ( cmd , sizeof ( cmd ) , " AT+RFPOWER=%d " , BLE_TX_POWER ) ;
ble_at_cmd ( cmd , " OK " , 1500 ) ;
2026-08-10 21:18:36 +08:00
/* <20> ֲ<EFBFBD> ˵<EFBFBD> <CBB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ч<EFBFBD> <D0A7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģ<EFBFBD> <C4A3> ʹ <EFBFBD> <CAB9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ч<EFBFBD> <D0A7>
* ģ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ĭ <EFBFBD> Ͼ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģ ʽ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ٷ <EFBFBD> AT + TS = 1 */
for ( int i = 0 ; i < 2 ; i + + ) {
if ( ble_at_cmd ( " AT+REBOOT=1 " , " OK " , 1500 ) = = 0 ) break ;
}
eepromWriteData ( BLE_CACHE_ADDR , ( void * ) BLE_NAME , strlen ( BLE_NAME ) + 1 ) ;
2026-08-20 09:57:02 +08:00
{
uint8_t p = BLE_TX_POWER ;
eepromWriteData ( BLE_POWER_ADDR , & p , 1 ) ;
}
2026-08-22 20:20:53 +08:00
log_mute ( 0 ) ;
log_info ( " > BLE: <20> <> <EFBFBD> <EFBFBD> /UUID/<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
2026-08-10 21:18:36 +08:00
} else {
ble_at_cmd ( " AT+TS=1 " , " OK " , 1500 ) ; /* ȷ<> <C8B7> <EFBFBD> ص<EFBFBD> <EFBFBD> <CDB8> */
2026-08-22 20:20:53 +08:00
log_mute ( 0 ) ;
log_warn ( " > BLE: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʧ<EFBFBD> ܣ<EFBFBD> ģ<EFBFBD> <C4A3> δ<EFBFBD> ӻ<EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> 쳣<EFBFBD> <ECB3A3> " ) ;
2026-08-10 21:18:36 +08:00
}
}
/* ǿ<> <C7BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <D6B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ã<EFBFBD> <C3A3> <EFBFBD> <EFBFBD> <EFBFBD> BLESET <20> <> <EFBFBD> <EFBFBD> <EEB4A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 建<EFBFBD> <E5BBBA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> */
void ble_force_setup ( void )
{
eepromWriteData ( BLE_CACHE_ADDR , " " , 1 ) ;
ble_setup_name ( ) ;
}