✨ feat(linx): 完成语音链路与本地唤醒接入 - #219
Conversation
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
56300aa to
5235d85
Compare
| } | ||
| const std::string normalized_scanned_ssid( | ||
| NormalizeSsid(std::string_view(reinterpret_cast<const char*>(access_point.ssid), ssid_size))); | ||
| if (normalized_scanned_ssid.rfind(normalized_configured_ssid, 0) == 0 || |
There was a problem hiding this comment.
[P1] Do not match SSIDs by prefix after normalization
This treats any normalized SSID that starts with (or is started by) the configured value as the same network. For example, configured Home matches HomeGuest, and non-ASCII/punctuation-only SSIDs can normalize to an empty string and match the first scanned AP. The code then overwrites the STA configuration with that unrelated AP and retries with the original password, potentially connecting to the wrong network or persistently failing startup. Use an exact match (or a narrowly defined, user-confirmed fallback) instead of prefix matching.
| xTaskCreate(&Runtime::WakeTaskEntry, "voicelife_wake", 4096, this, 5, &wake_task_); | ||
| if (task_status != pdPASS) return Status::Error(ErrorCode::kInternal, "创建唤醒控制任务失败"); | ||
| } | ||
| const Status standby_status = wake_gate_->StartStandby(); |
There was a problem hiding this comment.
[P1] Restore standby after transport loss or wake failures
Standby is entered only once during startup. If the WebSocket disconnects while a capture is active, VoiceSession moves to kStarting but does not stop the WakeGateAudioInput; the gate remains forwarding_ == true and its detector stays stopped. When the provider reconnects, the session becomes ready, but no later code calls StartStandby(). The same permanent loss of local wake occurs when NotifyLocalWakeWord() or BeginCapture() fails in WakeTask. Handle these failure/reconnect paths by stopping cloud capture and re-arming the wake detector, otherwise one transient network error disables wake-word operation until reboot.
5235d85 to
a181173
Compare
|
@fennoai # 角色设定
你执行交叉校验:文档描述 和 代码/硬件实际设计 是否对齐;文档漏项;设计与业务需求冲突;边界场景缺失;可量产/可落地风险;兼容性隐患;资料前后自相矛盾全部揪出。 强制输出规则
接下来 |
Review 结论结论先说:这不是“42/42 主机测试通过就能交付”的 PR。主机契约通过,但实板启动、模型装载、联网恢复、唤醒并发和业务持久化仍有硬伤。按要求列出交叉校验结果:
验证结果
总评Review 整体结论:P0/P1 重灾区在模型交付与启动链路、分区/烧录资料、Wi-Fi/OTA 安全、WSS 生命周期、唤醒门控并发和日程持久化。当前不允许进入下一阶段,不允许打样交付或现场验收宣称“语音闭环完成”。 整改顺序必须固定为:先修 P0 并完成真实板启动/模型装载,再修 WSS/唤醒状态机和离线恢复,随后接入真实持久化与 MCP 端到端,最后补齐硬件受控资料和量产/现场验收证据。 |
0f611b7 to
0bfab43
Compare
811fb10 to
d344e89
Compare
为本地唤醒、播报结束和待机恢复增加脱敏生命周期事件,验收采集器现在会拒绝乱序事件和失败事件。\n\n主机测试与 ESP32-S3 Profile 构建用于验证证据字段不影响运行链路。
移除汇报文档、过程文档入口和与 Linx 语音链路无关的探针变更,仅保留功能代码、必要测试与实际 Profile 依赖。
b097ae8 to
21a77ed
Compare
提高有界事件队列容量并提升事件 worker 优先级,避免真人语音突发帧使 Linx Transport 溢出并误报 Provider 失败。
变更
验证
验收边界
真实人声 STT/MCP/TTS/播放闭环和唤醒词识别留到明日现场验收;本 PR 不包含语音内容、凭据、设备身份或串口原始日志。