6 Commits

Author SHA1 Message Date
a3a476f857 feat: Phase 6 软退出方案 C+ — 修复待命音无声 + 唤醒重连失败
问题(上次提交 d5239cf 之后实测):
1. EnterIdleHibernate 触发的 LeaveRoom() 顺手关闭了 codec output:
   LeaveRoom → on_audio_channel_closed_ → player_pipeline_close → EnableOutput(false)
   导致后续 PlaySound(P3_KAKA_DAIMING) 入队后 AudioLoop 写不出声音,
   WaitForAudioPlayback 3 秒超时退出, 用户听不到待命音。
2. LeaveRoom 调用 volc_rtc_destroy 后 rtc_handle_ = nullptr,
   WakeFromHibernate → ToggleChatState → OpenAudioChannel 直接返回 false,
   触发 2 秒重试循环, 同时每次失败回退 idle 都重新 PlaySound,
   codec 状态震荡产生杂音, 服务端 AI 任务也无法重新加入房间。

方案 C+ 修复:
- Protocol::LeaveRoom() 新增 bool notify_closed=true 参数 (默认行为不变)。
- VolcRtcProtocol::LeaveRoom(notify_closed):
  * 只 volc_rtc_stop, 不 volc_rtc_destroy, 保留 rtc_handle_ 供唤醒复用。
  * notify_closed=false 时跳过 on_audio_channel_closed_, 不连带关 codec。
- EnterIdleHibernate:
  * 调用 LeaveRoom(false) → codec output 保留。
  * 手动 background_task_->WaitForCompletion + 清空队列 + 关麦克风。
  * SetDeviceState(idle) 后 PlaySound 真正能播出来。
  * WaitForAudioPlayback 完才 player_pipeline_close (这里再正常关 output)。
- WakeFromHibernate:
  * 先放下 hibernating_ 让 AudioLoop guard 通过, 再 ToggleChatState。
  * 因 rtc_handle_ 仍有效, OpenAudioChannel 走 volc_rtc_start 重启路径,
    on_audio_channel_opened_ 回调重开 player_pipeline + 灌 200ms silence。

编译: kapi.bin 0x2e6330 (3.04MB), 分区 42% 空闲。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 17:43:29 +08:00
60a2c7b068 1、所有日志和上报数据的MAC地址从WiFi MAC改为蓝牙MAC(eFuse读取,无需启动蓝牙);
2、电量上报扩展为设备状态上报,新增is_online/volume/brightness字段;
3、新增RTC火山引擎连接状态追踪(检测kDeviceStateDialog);
4、新增重启前上报设备离线状态(OnBeforeRestart虚方法);
5、重命名BATTERY_REPORT为DEVICE_STATUS_REPORT(Kconfig/变量/函数/日志);
6、对齐服务端接口:URL端口和路径修正,JSON字段名battery_level改为battery,移除wifi_rssi;

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 14:38:31 +08:00
94067d4adc 1、本次修改了关于BluFi关键字的日志和方法名称替换为Ble关键字 2026-02-10 15:00:57 +08:00
77c7283d09 重构蓝牙配网: 替换BluFi为自定义GATT Server,修复手机蓝牙不可见问题
核心改动:
- bluetooth_provisioning: 使用 esp_ble_gap_config_adv_data_raw() 原始广播
  替代 BluFi API,采用自定义 GATT Server (Service 0xABF0, Write 0xABF1,
  Notify 0xABF2) 实现二进制配网协议,保留全部WiFi配网业务逻辑
- ble_service: 广播包名称移至 Scan Response,避免超31字节限制;
  GAP事件改用位掩码确保 adv_data 和 scan_rsp 都完成后再启动广播
- application: BLE JSON 服务从 Application 移至 WifiBoard 管理,
  HandleBleJsonCommand 改为接收 BleJsonService 引用参数
- wifi_board: 新增 StartBleJsonProvisioning(),配网入口切换回
  StartBluFiProvisioning() 使用重构后的 GATT Server
- 蓝牙设备名统一为 "Airhub_Ble"
- 配网模式下跳过电量上报,避免无WiFi时HTTP请求失败
- 新增 tests/ble_provision_test.py 配网协议测试脚本

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:32:55 +08:00
ea5050309e 修正了分压系数:根据满电电压4.2V和ADC读数更新电池电量 2026-01-29 10:06:38 +08:00
a54773f71a Kapi_RTC版本初始化 2026-01-20 16:55:17 +08:00