可视化工具SDK, 适用于TWS一拖二耳机, Soundbar, Dongle等产品, 目前可支持使用AC700N和AC701N, AC708N等芯片. TWS耳机功能需求一般比较固定, 常用的功能和UI等可以直接通过可视化工具进行配置, 减少开发成本. 音频数据处理流程可通过工具流程图串接方式实现而不用修改SDK, 本文跟随代码浅析一下杰理JL701N可视化SDK
初始化
程序的入口, 在可视化SDK AC701N-1.0.0 中只能看到从setup.c文件的setup_arch()函数开始, 主要做了些内存初始化, 看门狗, 时钟初始化, IO口和debug口初始化等初始化操作
在dump了各种信息之后进入到app_main.c中的app_main()函数, 创建了一个app_core任务, os_start()起来任务调度会跑到app_task_loop()
在app_task_loop()中 首先是做了app_task_init()的初始化
这里面包括版本检查, 板子外围器件驱动初始化, 设备管理初始化等
app_task_init()的初始化
app_task_init()最后检查开机电压是否满足开机条件, 满足条件的情况对app_core线程发送APP_POWER_ON和GOTO_MODE, 一般情况进入POWERON模式, 插着充电线的情况进入idle充电模式
POWERON模式
目前代码中看到只有开机充电的时候会进入IDLE模式, 其他时间进入的是开机模式(POWERON). 接着调用app_send_message(), 给app线程发送POWER_ON的消息只是会进入led scene 处理, 可以在工具中led情景配置中设置并执行启动开机led灯效. 发送APP_MSG_GO_TO_MODE会进入app_goto_mode()的处理流程, 在app_mode_manager的 app_goto_mode()函数中会执行要切换的mode的enter函数
进入poweron mode的enter初始化poweron_mode_init()
POWERON模式主要播报开机poweron提示音, 让开机提示音播放结束再进入poweron_task_start()
poweron_task_start()进入BT模式
BT模式
同进入POWERON模式一样, 进入BT 模式的enter初始化bt_mode_init(), bt_mode_init()中进行了蓝牙协议栈, profile等蓝牙功能的初始化
进入到bt mode之后开机初始化就完成了, 接下来代码就在app_core线程app_task_loop()中一直等待接收事件消息
消息处理
官方说明的蓝牙模式消息处理流程如下图
任务里面区分四种消息类型处理, 分别为tws消息MSG_FROM_TWS、btstack消息MSG_FROM_BT_STACK, hci消息MSG_FROM_BT_HCI和应用消息MSG_FROM_APP. 四种消息都各种分配到对应函数处理, 处理完后还会将消息继续分发其他已注册的应用消息处理函数中处理, 之后消息会传到app_common_device_event_handler函数执行