---
id: v4-1865-wifi-hotspot-mode
title: Reuse TM1100 Second Internal WiFi Module / Hotspot 3-Mode (V4-1865)
doc_type: design-record
status: delivered
last_updated: 2026-05-29
sources:
  - { type: jira, ref: "V4-1865", url: "https://tvunetworks.atlassian.net/browse/V4-1865" }
  - { type: jira, ref: "FB-7775", url: "https://tvunetworks.atlassian.net/browse/FB-7775" }
figma:
  file: rJJjWWs51n2iFOlCIC7aYG
  nodes:
    - { id: "6601:2", label: "Config-T page — V4-1865 Reuse WiFi Module", url: "https://www.figma.com/design/rJJjWWs51n2iFOlCIC7aYG/Config-T---Local-UI---v7.7---8.0--20240220?node-id=6601-2" }
---

# Feature Design Record — Reuse TM1100 Second Internal WiFi Module / Hotspot 3-Mode (V4-1865)

> 据 handoff 回填（docs/handoffs/2026-05-29 / 06-01 / 06-02）。Config-T 端已交付，LCD 端待开工。

- **JIRA**：[V4-1865](https://tvunetworks.atlassian.net/browse/V4-1865)　**Scope**：Config-T（已交付）+ V4 LCD（待）
- **Owner(dev)**：Config-T → Bonnie / Danner Dai　**PM**：Trevor Yao　**Designer**：Nancy Zeng
- **Status**：Config-T 已交付（Trevor 2026-06-01 review pass）；LCD 待开工　**日期**：2026-05-29 起

## 1. 问题与根因
让 TM1100 的 Hotspot 模块可切换为第二个 WLAN client，即「Hotspot 模块复用」。**架构关键**：硬件不是有 2 个内置 WiFi 模块，而是 Hotspot 模块可切换工作模式 → 3-mode 模型：**Disable / Hotspot / WiFi**（Mode = WiFi 时该模块作第二 WLAN client）。

## 2. Scope & Non-goals
- In：Config-T web 端 + LCD 触屏端的 Mode 切换 UI。
- Non-goals：不影响 CC/WebR 访问 ConfigT（已验证 Hotspot 关闭后仍可访问）。

## 3. Baseline 参考
Config-T 文件 `rJJjWWs51n2iFOlCIC7aYG` page `6601:2`（F0-F5 三态）。LCD 端参考 Touch Screen `0054ib0nLmt27bC3QlGDl7`。

## 4. 设计 — 状态与指示模型
3-mode（Disable / Hotspot / WiFi）用 **single-select radio**（不用 dropdown，M22 design intent：让用户清晰看到当前 mode）。Mode = single source of truth，决定 WiFi 段是否出现 Module 2。

## 5. UX 交付
M23 canonical 双语交付卡（navy + 4px cyan / Layout A-逐行）+ Jira widget（M23.8 hyperlink）+ 流程连线（F3→F4→F5 + F5→F2 跨行）。详见 handoff v2/v4/v5。

## 6. 决策记录
3-mode model / Mode=SSOT / radio 不 dropdown / hide-not-dim / M23 canonical。详见 handoff。

## 7. 依赖 / 待办
LCD 端是否 expand V4-1865 还是开新 ticket — 待 Trevor 回复（FB-7775 #244776）。

## 8. 交付链接
- Config-T Figma page `6601:2`
- Handoff：[v1](../handoffs/2026-05-29-v4-1865-mockup-handoff.md) / [v2](../handoffs/2026-06-01-v4-1865-mockup-v2-handoff.md) / [LCD pickup](../handoffs/2026-06-02-v4-1865-lcd-pickup.md)

## 9. 路由与评审
- Reviewer：Trevor Yao（已 review Config-T，pass）　Owner：Bonnie / Danner（开发）
- FB-7775 评论链有完整 context。

## 10. Revision Log

### 2026-09-11 · 补 Mode 切换失败态（D1–D7）

**来源**：[Slack thread 2026-09-09](https://tvunetworks.slack.com/archives/C021E1BNTPF/p1788947469888169?thread_ts=1788937060.213829&cid=C021E1BNTPF)（winniyang 报现象 → youngzhang 定根因 → dannerdai 问 UI 流程）。

**起因（现场事实）**：TM1000V4 84503 + dial patch 187new wifi。模块被当 WiFi 用过、**WiFi 服务随后被关闭**（= WiFi 段最上面那个 `WiFi:` 开关，owner 2026-09-11 确认；实测 `6602:2819` Content 帧首行 `6602:2832`），再切回 Hotspot 时：状态机已记 `H2W=0` / 显示 `enabled`，但**驱动层没重建 AP 接口、没挂回 `br10`** ⇒ `hotspotgetinfo` 查不到 `ssid`/`password` ⇒ 页面 Name 框拿不到值。

**⚠️ 原交付稿的缺口**：§4 的 3-mode 模型只画了「确认 → 切换 → 落到目标模式」，**没有失败分支**；6 条切换文案全是「确认前」文案，其中 `WiFi → Hotspot` 那条直接假设「WLAN 客户端断开、模块改为广播 hotspot」。本次现场恰好撞在这个缺口上。

**决策**（全集与依据见 [plan §2](../plans/2026-09-11-mode-switch-failure-state-plan.md)）：

| # | 决策 |
|---|---|
| D1 | **WiFi 服务关闭状态下，模块必须仍能切回 Hotspot** —— Mode 是模块角色的 SSOT，`WiFi:` 开关只管服务开关、不决定模块归属。不支持即死锁（热点是本地扫码进 Config-T 的唯一入口）|
| D2 | **⛔ 不置灰 Hotspot 选项、不提示「先开 WiFi」** —— 不把实现约束推给用户 |
| D3 | **Mode 回显取实际生效状态，不取状态机意图值**。Hotspot 生效判据 = `hotspotgetinfo` 返回得出 `ssid` + `password` |
| D4 | **切换失败 / 超时 ⇒ Mode 回退到原模式 + error 提示**，⛔ 不停在目标模式让参数字段空着 |
| D5 | **不新增 retry 按钮** —— Mode 单选组本身就是重试入口 |
| D6 | **关 `WiFi:` 开关时不额外提示「模块仍占 WiFi 角色」** —— owner 2026-09-11 拍定：Hotspot 模式那里就看得到 |
| D7 | 留痕形态走 **§M23.17 逻辑更新块**（既有卡下方同级 navy + 橙边框），**不删不改既有 PRD / UX 卡** |

**本轮交付（Config-T 端，page `6601:2` / Section `6703:1116`）**：

| 交付件 | node |
|---|---|
| F6 失败态帧 | [`8753:1140`](https://www.figma.com/design/rJJjWWs51n2iFOlCIC7aYG/?node-id=8753-1140) —— clone F5 + 库 `Message / error / L`（`8753:1552`）**`x=420.5, y=24`** 页面顶部居中（落位说明见下）|
| caption | `8753:1460` |
| UX 交付卡 | [`8757:1244`](https://www.figma.com/design/rJJjWWs51n2iFOlCIC7aYG/?node-id=8757-1244) 1280×747（Why / Changes / Interaction / Acceptance）|
| 逻辑更新块（M23.17）| [`8758:1244`](https://www.figma.com/design/rJJjWWs51n2iFOlCIC7aYG/?node-id=8758-1244) 1280×274 |
| 文案真源 | [`lcd-message-strings.md` §5](lcd-message-strings.md)（两端共用同一条参数化串）|

**⚠️ 提示落位终值 `x=420.5, y=24`（页面顶部、水平居中于页面壳 `Frame 29`，中心 640=640）—— ⛔ 此前写的 `y=235` 已作废**（owner 2026-09-11 看 mockup 后拍定「错误的提示应该在顶部，当前的位置不对」）。

- **`y=235`（Hotspot 段标题同行）不行**：渲染图上它成了那个折叠标题的附属徽标，且压住该行的展开/收起热区。
- **⚠️ 旧否决意见的射程被放大了**：此前写的是「提示落位的判据不是『页面顶部』」，但实测**只有 `y≈155`（紧贴第一个分区 `LAN Setting` y≈150 上方）那一档不行** —— 它是被就近读成 LAN Setting 的错误。`y=24` 浮在顶栏之上、不沾任何分区，归属歧义消失。⇒ **否决一个具体值时别把整个方向一起否掉。**
- **`y=24` 逐字形复核**：完整覆盖顶栏 `Live`（587..621）· `File`（683..713）· `Router`（775..830），**无半截字**；`General`（874..942）· `Advanced`（1004..1085）· Tab 栏（@y90）· Hotspot 分区内容全部可见。这就是标准浮层行为。

**失败文案终值（owner 2026-09-11 定 Q1）**：`Couldn't switch to {target} — mode stays {current}. Retry later.` —— 不说原因、但给下一步。Config-T 侧节点 `I8753:1552;4798:1714;8753:1578` 实测 **439×45 单行**（宽度上限由 LCD 480 屏宽决定，两端共用同一条串）。⛔ `Try again later.` 装不下（480×66 折两行）。逐候选实测表见 [`lcd-message-strings.md` §5.2](lcd-message-strings.md)。

**Jira 收尾（2026-09-11 结案，⛔ 与此前写的待办不同）**：

- **本单不回复、不转 assignee** —— 直读实况：V4-1865 **status = Done（已关闭）**、**assignee 早已是 Bonnie Zhou**。此前那条「待办：Jira 回复 + assignee 转 Bonnie Zhou」**基于两个错误前提**（以为单还开着、以为 assignee 还没转），已作废。
- 失败态设计的 Jira 落点 = **[V4-2466](https://tvunetworks.atlassian.net/browse/V4-2466)**（winni 2026-09-09 开的现象单，To Do / Danner Dai，本轮唯一还在跑的单）。🔴 **但最终一条都没发** —— owner 2026-09-11 逐字「不用回复 JIRA」⇒ 本需求**不发任何 Jira 评论**，三个单都不发、assignee 也不动。⛔ 这是终态不是暂缓，别下一轮当待办捡回来；草稿存档见 [plan §11](../plans/2026-09-11-mode-switch-failure-state-plan.md)。
- ⚠️ **代价（如实登记）**：本单上没有任何指向失败态设计的线索。日后从 V4-1865 找失败态设计会找不到，须先到 V4-2466。要不要补指路评论 / 建关联，待 owner 另行决定。

**LCD 端孪生**：见 [V4-2318 design-record §Revision Log](2026-06-02-v4-2318-internal-wifi-module-mode-lcd-design-record.md)。
