设备生命周期知识
本文只记录 Speaker/Mic 设备的创建、启用、禁用、销毁流程。Source/Sink 双端 IPC 交互见 audio-source-sink-architecture.md,事件类型定义见 audio-event-pipeline.md。
设备状态机
| 状态 | 枚举值 | 触发条件 | 允许操作 |
|---|---|---|---|
| STATUS_IDLE | 0 | 初始化/销毁完成 | EnableDevice |
| STATUS_READY | 1 | SetUp完成 | Start |
| STATUS_START | 2 | Start完成 | Pause/Stop |
| STATUS_STOP | 3 | Stop完成 | Restart/Release |
状态流转锚点:services/common/audioparam/audio_status.h:21-26
启用流程(EnableDevice)
| 阶段 | Source端锚点 | Sink端锚点 | 关键动作 |
|---|---|---|---|
| 注册设备 | managersource/daudio_source_manager.cpp:CreateAudioDevice |
managersink/daudio_sink_manager.cpp:CreateAudioDevice |
创建DAudioSourceDev/DAudioSinkDev |
| 建立控制通道 | audiocontrol/controlsource/daudio_source_dev_ctrl_mgr.cpp:SetUp |
audiocontrol/controlsink/daudio_sink_dev_ctrl_mgr.cpp:SetUp |
创建DAudioSourceCtrlTrans |
| 建立数据通道 | managersource/dspeaker_dev.cpp:SetUp |
audioclient/spkclient/dspeaker_client.cpp:SetUp |
创建AudioRenderer/Capturer |
| 通知HDF | audiohdiproxy/daudio_hdi_handler.cpp:RegisterAudioDevice |
同上 | 注册分布式音频驱动 |
正确顺序:CreateDevice → SetUp控制通道 → SetUp数据通道 → RegisterHDF。顺序错误会导致设备不可用。
禁用流程(DisableDevice)
| 阶段 | Source端锚点 | Sink端锚点 | 关键动作 |
|---|---|---|---|
| 释放数据通道 | managersource/dspeaker_dev.cpp:Release |
audioclient/spkclient/dspeaker_client.cpp:Release |
停止AudioRenderer/Capturer |
| 释放控制通道 | audiocontrol/controlsource/daudio_source_dev_ctrl_mgr.cpp:Release |
audiocontrol/controlsink/daudio_sink_dev_ctrl_mgr.cpp:Release |
关闭控制传输 |
| 注销HDF | audiohdiproxy/daudio_hdi_handler.cpp:UnRegisterAudioDevice |
同上 | 移除分布式音频驱动 |
| 删除设备 | managersource/daudio_source_manager.cpp:DeleteAudioDevice |
managersink/daudio_sink_manager.cpp:ClearAudioDev |
从audioDevMap移除 |
反模式/修改前检查
- 禁止在设备未完全启用时调用Start。检查AudioStatus是否为STATUS_READY。
- 禁止跳过控制通道直接建立数据通道。检查CTRL_OPENED事件是否已收到。
- 禁止在销毁流程中遗漏UnRegisterAudioDevice。检查HDF驱动是否已移除。
- 禁止直接删除audioDevMap中的设备对象。必须通过EventHandler异步删除。
测试指引
- 启用流程变更:使用
DAudioSourceDevTest/DAudioSinkDevTest。 - 控制通道变更:使用
DAudioSourceCtrlTransTest/DAudioSinkCtrlTransTest。 - HDF交互变更:使用
DAudioHdiHandlerTest。 - 涉及真实设备组网时,补充两台设备间Speaker/Mic启用验证证据。