联网选择交互改方案B:倒计时内按键可反复切换选中项,重复按当前项立即确认,超时生效当前项
This commit is contained in:
parent
7cfb659699
commit
3cd34e6a2b
|
|
@ -63,7 +63,8 @@ static volatile uint8_t s_oled_boot_page = 0; /*
|
|||
|
||||
/*==== 开机联网方式选择(V1.7.1 新板按键): 10s 倒计时 ====
|
||||
* KEY1(PC6)=4G KEY2(PC7)=WiFi固定热点 KEY3(PB14)=SmartConfig 配网, 低电平=按下;
|
||||
* 超时未按 = EEPROM 记忆的上次选择(首次默认 4G); 选择变化才写 EEPROM(偏移130);
|
||||
* 倒计时内按不同键=切换选中项(可反复改), 重复按当前项=立即确认, 超时=当前选中项生效;
|
||||
* 初始选中项 = EEPROM 记忆的上次选择(首次默认 4G); 变化才写 EEPROM(偏移130);
|
||||
* 选定后不再自动切换通道, 连不上原地重试 */
|
||||
|
||||
/* 按键扫描: 返回 0=无 1~3=键号; 连续 2 次(约100ms)确认消抖 */
|
||||
|
|
@ -102,13 +103,12 @@ static uint8_t net_mode_select(void)
|
|||
|
||||
/* 第 3 行: 模式名从最左起 + 秒数紧随其后(不带"上次"前缀, 长模式名才放得下);
|
||||
* 标签只写一次, 之后每秒仅更新秒数(整行重写要读字库 IC, 会闪) */
|
||||
const char *label = names[mode];
|
||||
const char *label = names[mode]; /* 选中项, 按键切换时跟随更新 */
|
||||
oled_locate(3, 0); oled_print_line(label);
|
||||
uint8_t num_col8 = (uint8_t)((oled_text_w(label) + 7) / 8);
|
||||
|
||||
uint32_t start = HAL_GetTick();
|
||||
int last_sec = -1;
|
||||
int key = 0;
|
||||
for (;;) {
|
||||
uint32_t elapsed = HAL_GetTick() - start;
|
||||
int remain = (int)(10000u - elapsed) / 1000;
|
||||
|
|
@ -121,19 +121,25 @@ static uint8_t net_mode_select(void)
|
|||
oled_print(num);
|
||||
oled_print(" "); /* 清掉长尾 */
|
||||
}
|
||||
key = key_scan_once();
|
||||
if (key) break;
|
||||
int key = key_scan_once();
|
||||
if (key) {
|
||||
uint8_t cand = (uint8_t)(key - 1); /* 键1->0(4G) 键2->1(WiFi固定) 键3->2(配网) */
|
||||
if (cand == mode) break; /* 重复按当前项 = 立即确认 */
|
||||
mode = cand; /* 切换选中项, 倒计时继续 */
|
||||
log_info("> NET: 联网方式切换为 %s", names[mode]);
|
||||
label = names[mode];
|
||||
oled_locate(3, 0); oled_print_line(label); /* 换模式才重写整行 */
|
||||
num_col8 = (uint8_t)((oled_text_w(label) + 7) / 8);
|
||||
last_sec = -1; /* 强制立即刷新秒数 */
|
||||
}
|
||||
if (elapsed >= 10000u) break;
|
||||
bg_delay(50);
|
||||
}
|
||||
|
||||
if (key) {
|
||||
mode = (uint8_t)(key - 1); /* 键1->0(4G) 键2->1(WiFi固定) 键3->2(配网) */
|
||||
if (mode != saved) {
|
||||
eepromWriteData(EEPROM_NETMODE_ADDR, &mode, 1); /* 记忆本次选择 */
|
||||
}
|
||||
if (mode != saved) {
|
||||
eepromWriteData(EEPROM_NETMODE_ADDR, &mode, 1); /* 记忆本次选择 */
|
||||
}
|
||||
log_info("> NET: 联网方式选择: %s (%s)", names[mode], key ? "按键选定" : "超时默认");
|
||||
log_info("> NET: 联网方式确定: %s", names[mode]);
|
||||
oled_locate(3, 0); oled_print_line("已选:");
|
||||
oled_print((char *)names[mode]);
|
||||
bg_delay(800);
|
||||
|
|
|
|||
3
版本说明.md
3
版本说明.md
|
|
@ -22,7 +22,8 @@
|
|||
命令链路最终无应答即判离线并应答平台 `ext relay board offline`,下次命令自动重新探测恢复;
|
||||
断电恢复触发点不变(离线→上线比对 EEPROM 逐路补发)
|
||||
- **联网方式改为开机按键手动选择**(废除自动切换):欢迎页后 10s 倒计时,KEY1(PC6)=4G /
|
||||
KEY2(PC7)=WiFi 固定热点 / KEY3(PB14)=SmartConfig 配网;超时未按 = EEPROM 记忆的上次选择(首次默认 4G);
|
||||
KEY2(PC7)=WiFi 固定热点 / KEY3(PB14)=SmartConfig 配网;倒计时内按不同键**可反复切换选中项**,
|
||||
**重复按当前项=立即确认**,超时=当前选中项生效;初始选中项=EEPROM 记忆的上次选择(首次默认 4G);
|
||||
选择变化才写 EEPROM(偏移 130,复用原联网方式记忆字节);**选定后锁定通道,连不上原地重试,
|
||||
不再 4G↔WiFi 自动回退**(4G 无卡/无信号、WiFi 连不上均为每 10s 重试);
|
||||
WiFi 侧按模式限制连接方式:固定模式只连固定热点,配网模式只走已存 AP+SmartConfig;
|
||||
|
|
|
|||
Loading…
Reference in New Issue