[杰理]蓝牙状态机设计与实现详解
这段代码实现了一个蓝牙应用的状态机,用于管理蓝牙应用在不同生命周期状态下的行为。状态机根据接收到的状态和意图(intent)执行相应的初始化、启动、暂停、恢复和销毁操作。
整体流程概述
状态机的核心是 switch(state)
结构,根据传入的状态执行不同的操作:
-
创建状态(
APP_STA_CREATE
)- 应用初始化时调用
- 播放开机提示音(根据配置)
-
启动状态(
APP_STA_START
)- 根据传入的意图(
it->action
)执行不同的启动逻辑 - 初始化蓝牙协议栈、TWS功能、按键事件处理等
- 根据传入的意图(
-
暂停状态(
APP_STA_PAUSE
)- 将蓝牙切换到后台运行模式
- 保存当前音量设置
-
恢复状态(
APP_STA_RESUME
)- 从后台恢复到前台运行
- 恢复之前保存的音量设置
-
停止状态(
APP_STA_STOP
)- 预留状态,当前为空实现
-
销毁状态(
APP_STA_DESTROY
)- 清理资源,退出蓝牙应用
各状态详细解析
1. 创建状态(APP_STA_CREATE
)
case APP_STA_CREATE:// 根据配置播放开机提示音STATUS *p_tone = get_tone_config();tone_play_index(p_tone->bt_init_ok, 1);break;
- 功能:应用创建时初始化基本设置
- 关键操作:获取提示音配置并播放初始化成功提示
2. 启动状态(APP_STA_START
)
根据不同的启动意图(it->action
)执行不同的逻辑: