V1.5: 蓝牙AT设置加固(AT窗口静音日志防污染+进AT模式3轮重试)
This commit is contained in:
parent
1198ca6763
commit
3d3311b130
|
|
@ -43,8 +43,17 @@ void log_set_level(LogLevel level)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Output log message via USART1 (HAL) */
|
/* Output log message via USART1 (HAL) */
|
||||||
|
static volatile uint8_t s_log_mute = 0;
|
||||||
|
|
||||||
|
/* AT 窗口静音:BLE 模块与日志共用 UART1,AT 交互期间日志字节会污染模块命令解析 */
|
||||||
|
void log_mute(uint8_t on)
|
||||||
|
{
|
||||||
|
s_log_mute = on;
|
||||||
|
}
|
||||||
|
|
||||||
static void _log_print(LogLevel level, const char *tag, const char *fmt, va_list args)
|
static void _log_print(LogLevel level, const char *tag, const char *fmt, va_list args)
|
||||||
{
|
{
|
||||||
|
if (s_log_mute) return;
|
||||||
if (current_level <= level) {
|
if (current_level <= level) {
|
||||||
char buf[256];
|
char buf[256];
|
||||||
int len = vsnprintf(buf, sizeof(buf) - 2, fmt, args);
|
int len = vsnprintf(buf, sizeof(buf) - 2, fmt, args);
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,8 @@ typedef enum {
|
||||||
void log_set_level(LogLevel level); /* 改等级并落 EEPROM */
|
void log_set_level(LogLevel level); /* 改等级并落 EEPROM */
|
||||||
void log_load_level(void);
|
void log_load_level(void);
|
||||||
LogLevel log_get_level(void); /* 开机读取保存的日志等级 */
|
LogLevel log_get_level(void); /* 开机读取保存的日志等级 */
|
||||||
void log_lock_init(void); /* 日志互斥锁初始化(调度器启动前调用一次) */
|
void log_lock_init(void);
|
||||||
|
void log_mute(uint8_t on); /* AT 窗口静音(BLE 设置期间暂停日志输出) */ /* 日志互斥锁初始化(调度器启动前调用一次) */
|
||||||
|
|
||||||
void log_debug(const char *fmt, ...);
|
void log_debug(const char *fmt, ...);
|
||||||
void log_info(const char *fmt, ...);
|
void log_info(const char *fmt, ...);
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,12 @@ void ble_setup_name(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 查询当前名称 */
|
/* AT 窗口内静音日志:UART1 与模块共用,日志字节会污染模块的 AT 命令解析 */
|
||||||
|
log_mute(1);
|
||||||
|
|
||||||
|
/* 进 AT 模式并查询当前名称:无应答则重新拉 PC5 再试,最多 3 轮 */
|
||||||
|
const char *cur = NULL;
|
||||||
|
for (int round = 0; round < 3 && !cur; round++) {
|
||||||
BLE_PC5_LOW();
|
BLE_PC5_LOW();
|
||||||
ble_delay(1100); /* 拉低 1s 进 AT 模式 */
|
ble_delay(1100); /* 拉低 1s 进 AT 模式 */
|
||||||
BLE_PC5_HIGH();
|
BLE_PC5_HIGH();
|
||||||
|
|
@ -107,26 +112,34 @@ void ble_setup_name(void)
|
||||||
|
|
||||||
ble_flush_rx();
|
ble_flush_rx();
|
||||||
HAL_UART_Transmit(&huart1, (uint8_t *)"AT+NAME=?\r\n", 12, 500);
|
HAL_UART_Transmit(&huart1, (uint8_t *)"AT+NAME=?\r\n", 12, 500);
|
||||||
const char *cur = NULL;
|
|
||||||
int t = 30;
|
int t = 30;
|
||||||
while (t-- > 0 && !cur) {
|
while (t-- > 0 && !cur) {
|
||||||
ble_delay(50);
|
ble_delay(50);
|
||||||
cur = USART1_GetCommand();
|
cur = USART1_GetCommand();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (cur && strstr(cur, BLE_NAME) && pwr_cache == BLE_TX_POWER) {
|
if (!cur) {
|
||||||
/* 名称与功率都正确:直接回透传,不动任何设置 */
|
log_mute(0);
|
||||||
log_info("> BLE: 名称已是 %s,无需设置", BLE_NAME);
|
log_warn("> BLE: 3 轮 AT 均无应答(模块未接/被手机占用/PC5 未拉低)");
|
||||||
ble_at_cmd("AT+TS=1", "OK", 1500);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (cur && strstr(cur, BLE_NAME)) {
|
|
||||||
|
if (strstr(cur, BLE_NAME) && pwr_cache == BLE_TX_POWER) {
|
||||||
|
/* 名称与功率都正确:直接回透传,不动任何设置 */
|
||||||
|
ble_at_cmd("AT+TS=1", "OK", 1500);
|
||||||
|
log_mute(0);
|
||||||
|
log_info("> BLE: 名称已是 %s,无需设置", BLE_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (strstr(cur, BLE_NAME)) {
|
||||||
/* 名称对但功率变了:只重设发射功率 */
|
/* 名称对但功率变了:只重设发射功率 */
|
||||||
snprintf(cmd, sizeof(cmd), "AT+RFPOWER=%d", BLE_TX_POWER);
|
snprintf(cmd, sizeof(cmd), "AT+RFPOWER=%d", BLE_TX_POWER);
|
||||||
ble_at_cmd(cmd, "OK", 1500);
|
ble_at_cmd(cmd, "OK", 1500);
|
||||||
ble_at_cmd("AT+REBOOT=1", "OK", 1500);
|
ble_at_cmd("AT+REBOOT=1", "OK", 1500);
|
||||||
uint8_t p = BLE_TX_POWER;
|
uint8_t p = BLE_TX_POWER;
|
||||||
eepromWriteData(BLE_POWER_ADDR, &p, 1);
|
eepromWriteData(BLE_POWER_ADDR, &p, 1);
|
||||||
|
log_mute(0);
|
||||||
log_info("> BLE: 发射功率已设置为 %d", BLE_TX_POWER);
|
log_info("> BLE: 发射功率已设置为 %d", BLE_TX_POWER);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -149,9 +162,6 @@ void ble_setup_name(void)
|
||||||
ble_at_cmd(cmd, "OK", 1500);
|
ble_at_cmd(cmd, "OK", 1500);
|
||||||
snprintf(cmd, sizeof(cmd), "AT+UUIDW=%s", BLE_UUID_RX);
|
snprintf(cmd, sizeof(cmd), "AT+UUIDW=%s", BLE_UUID_RX);
|
||||||
ble_at_cmd(cmd, "OK", 1500);
|
ble_at_cmd(cmd, "OK", 1500);
|
||||||
log_info("> BLE: 名称与 UUID 已设置完成");
|
|
||||||
#else
|
|
||||||
log_info("> BLE: 名称已设置为 %s", BLE_NAME);
|
|
||||||
#endif
|
#endif
|
||||||
/* 顺带设置发射功率 */
|
/* 顺带设置发射功率 */
|
||||||
snprintf(cmd, sizeof(cmd), "AT+RFPOWER=%d", BLE_TX_POWER);
|
snprintf(cmd, sizeof(cmd), "AT+RFPOWER=%d", BLE_TX_POWER);
|
||||||
|
|
@ -167,9 +177,12 @@ void ble_setup_name(void)
|
||||||
uint8_t p = BLE_TX_POWER;
|
uint8_t p = BLE_TX_POWER;
|
||||||
eepromWriteData(BLE_POWER_ADDR, &p, 1);
|
eepromWriteData(BLE_POWER_ADDR, &p, 1);
|
||||||
}
|
}
|
||||||
|
log_mute(0);
|
||||||
|
log_info("> BLE: 名称/UUID/功率已设置完成");
|
||||||
} else {
|
} else {
|
||||||
log_warn("> BLE: 设置名称失败(模块未接或应答异常)");
|
|
||||||
ble_at_cmd("AT+TS=1", "OK", 1500); /* 确保回到透传 */
|
ble_at_cmd("AT+TS=1", "OK", 1500); /* 确保回到透传 */
|
||||||
|
log_mute(0);
|
||||||
|
log_warn("> BLE: 设置名称失败(模块未接或应答异常)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -202,3 +202,5 @@
|
||||||
过程:DWT 硬件观察点抓到合法写点无误,定位为原中断接收路径在特定时序下字节丢失
|
过程:DWT 硬件观察点抓到合法写点无误,定位为原中断接收路径在特定时序下字节丢失
|
||||||
- 恢复 OLED 防烧屏像素偏移(每10s 右移 0/2/4px),并修复左侧残留(移位前先写空格清腾空列)
|
- 恢复 OLED 防烧屏像素偏移(每10s 右移 0/2/4px),并修复左侧残留(移位前先写空格清腾空列)
|
||||||
- OLED 偏移幅度加大到 0~24px(5 档),按内容宽度自动钳位不越界,左侧腾空列全量清空
|
- OLED 偏移幅度加大到 0~24px(5 档),按内容宽度自动钳位不越界,左侧腾空列全量清空
|
||||||
|
- 蓝牙 AT 设置加固:AT 窗口内静音日志(UART1 与模块共用,日志字节会污染模块命令解析);
|
||||||
|
进 AT 模式+查询无应答时重新拉 PC5 重试,最多 3 轮
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue