Biu~哈喽大家好,今天我们来扯扯dan,聊聊人生吧。曾几何时,小编也想躺着沙发上,靠脸吃饭。想到妻妾成群,日渐消瘦的模样,犹如一盆冷水突然泼我脸上,“好恐怖啊!”
然后小编就开始发奋研究CSR ADK4.0,sink和source都是小编研究的对象。从4.0到现在的6.4,经过无数个加班努力,终于弄懂了一点点,很欣慰。
在ADK6.x中就没看到source的身影了,取而代之是earbud,这个不是source的进化版,而是sink的分身。“耳塞”,主要特色就是tws,包括tws plus,可以说是专门为tws耳机量身定做的一个工程。还有就是和sink框架不同,除了底层一些库以外,可以说是完全不同。有些人觉得开发难度加大了,但小编觉得好玩好多。
首先earbud没有配置工具。没有配置工具,没有配置工具,所有的UI、设置都是靠代码实现,Interesting!但整个框架,看上去还是很明了易懂的。那我们就开始聊聊框架吧。
- 它依旧沿用了message机制,各种任务之间通过消息传递,有点不同的是,这里有个tasklisk,就是一个消息触发了,会往多个task发,方便。
- 为了管理各种复杂的逻辑,还加了一个rules机制,这个机制是这个应用层的核心,大部分运行内容从这里出发,这里和sink的机制有很大的不同,小编认为,这很nice,了解完rules的东西基本了解完这个earbud的应用功能了,所以推荐看代码先从rules开始,这和sink不同,sink一般是从状态机下手,earbud就要两个配合一起看rules和sm。默默地你会发现,贼多状态机,每个协议一个状态机,每个功能模块一个状态机。
- 默认代码就集成了传感器部分,加速度和接近传感器,构成了一个叫physical 状态机。这部分的识别可以在整个运行系统里面体现到。主要是用到接近传感器,识别戴上和取下,代码里用的最多,还有些功能没有这个还不能用,这也是主状态机主要成员之一
- TWS,两个独立耳机通过无线连接形成一个整体,这之间少不了通讯。在sink中这个通讯只是传达简单的avrcp的控制指令。而在earbud,这个功能做了很大的提升,不仅可以传指令,还同步了状态,让两个独立耳机使用起来更像一个整体(因为延时关系,同步不及时会有很多问题,这部分开发时会慢慢体会到,嘻嘻嘻)除了同步的实现,代码中还有一个比较低调的使用,这个功能也是实现同步控制,但是不同于同步状态的是,它有没有同步那么多,那么复杂,就只是一条通知或一条指令,这部分后续博文会详细说说
评论
发芽韭菜
2021年3月4日
Biu~
2020年2月12日