CSR8675项目实战:BlueHiFi蓝牙音乐收发器
为了方便大家学习,现与我爱蓝牙网联合推出【QCC300x/CSR867x/QCC30xx/QCC51xx开发板】。
技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠独家学习资料)
——————————正文分割线———————————–
1. 引言
蓝牙音乐收发器是一种包含了蓝牙发射器和蓝牙接收器两种工作状态的蓝牙设备,这两种状态可以通过按键或其他方式比较方便地切换,是一种性价比很高的产品形态。
目前市面上主流方案是高通的CSR8675,其支持aptx/aptx-ll/aptxhd/aac等多种编解码格式。CSR8675的ADK提供了source(蓝牙发射器)和sink(蓝牙接收器)这两个例程,如果能将两个例程整合起来,即是一个蓝牙收发器的产品。
客户的需求要更进一步,蓝牙收发器需要支持串口控制,支持USB DFU升级等。
2. 主要功能
功能 | 描述 |
---|---|
蓝牙发射 | AUX 2CH ⇒ BT(SBC/AptX/aptxHD) |
与最近的蓝牙设备配对 | |
蓝牙接收 | BT(SBC/AAC/Aptx/AptxHD) ⇒ I2S 48K/24bit/2CH ⇒ I2S to AUX ES9023 |
串口控制 | 发射接收模式切换 |
进入配对/退出配对 | |
获取连接状态 | |
音量控制 | |
上下曲/播放暂停 | |
修改设备名称 | |
当前播放歌曲时长/歌曲名称/播放状态 | |
固件升级 | USB DFU升级 |
系统框图如下:
3. 项目难点
需要将source例程的代码文件添加到sink例程,然后屏蔽掉与AGHFP相关的代码,添加aghfp库到sink的工程属性,解决掉aghfp和hfp库的冲突。
编译完成后还需要注意,当编译结果显示stack size > 160时,有很大概率程序时不能运行的。此时需要查看map文件找到占用stack过多的函数。下图可以看出app_msg_hander占用了40的stack,显然是不正常的,就需要单独优化。
在完成上述工作后,需要将source和sink的初始化代码用bootmode模式区分。原本sink的bootmode可以沿用,需要为source创建一个新的Bootmode。每次启动时根据bootmode来选择启用发射还是接收模式。
最后我们如果需要配置source模式的config tool,可以重点看一下ps_read_user函数,通过修改这个函数,可以将配置通过程序来修改。
4. 总结和展望
通过蓝牙收发器的案子,让我加深了对bluestack与VM之间关系的理解。sink和source例程是在bluestack基础上搭建的功能集合,bluestack才是CSR方案的核心,而HCI层是通用的接口,这也解释了为何高通的firmware不开放代码,因为一旦开放这层代码,高通就对方案失去了掌控能力,ADK也就失去了生命力。
很遗憾蓝牙音乐收发器还不能移植到ADK6以上的版本,因为高通没有提供dsp的编码库。从这点也可以看出高通的产品规划是非常到位的,为了尽量拉长每个产品的生命力,使一些特殊功能只在某些平台上能够实现,值得我们在规划产品时充分借鉴。
CSR8675项目实战:BlueHiFi蓝牙音乐收发器相关推荐
- 【Java项目实战】在线音乐播放器(从需求到产品完整解析)
准备工作必看:[Java项目实战]在线音乐播放器(前期准备) 核心功能 登录.注册 上传音乐 删除某一个音乐信息 删除选中的音乐信息 查询音乐(包含查找指定/模糊匹配的音乐) 添加音乐到"喜 ...
- [MAUI 项目实战] 手势控制音乐播放器(一): 概述与架构
这是一篇系列博文.请关注我,学习更多.NET MAUI开发知识! [MAUI 项目实战] 手势控制音乐播放器(一): 概述与架构 [MAUI 项目实战] 手势控制音乐播放器(二): 手势交互 [MAU ...
- Qt项目实战:MP3音乐播放器
音乐播放器逻辑 首先通过打开文件,获取文件夹下mp3文件的名字,将其存入QTableWidget控件下,通过双击QTableWidget空间中的内容,播放相应的mp3音乐文件,同时通过使用QMed ...
- CSR8675项目实战:BlueBrowsing蓝牙播放器
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- CSR8675项目实战:BlueEarphone 左右声道各10个Speaker EQ
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- [MAUI 项目实战] 手势控制音乐播放器(四):圆形进度条
文章目录 关于图形绘制 创建自定义控件 使用控件 创建专辑封面 项目地址 我们将绘制一个圆形的音乐播放控件,它包含一个圆形的进度条.专辑页面和播放按钮. 关于图形绘制 使用MAUI的绘制功能,需要Mi ...
- [MAUI 项目实战] 手势控制音乐播放器(二): 手势交互
文章目录 原理 交互实现 容器控件 手势开始 手势运行 手势结束 使用控件 拖拽物 创建pit集合 项目地址 原理 定义一个拖拽物,和它拖拽的目标,拖拽物可以理解为一个平底锅(pan),拖拽目标是一个 ...
- Android蓝牙音乐(基于Android10)
Android蓝牙音乐 项目背景: 展示蓝牙音乐信息(歌曲名称.播放进度.歌手.歌词等等)和控制操作蓝牙音乐 1.监听蓝牙设备状态 注意点 :需要动态注册广播,和动态申请权限,不然会接收不到广播 cl ...
- 基于QT平台的手持媒体播放器项目实战视频教程下载
分享一套关于在QT平台的手持媒体播放器项目实战的视频教程,Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架. 它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工 ...
最新文章
- 重塑云上的 Java 语言
- FreeRTOS(四)——内存管理
- 希捷硬盘固件修复工具_电脑升级高速硬盘后的差异竟如此大!酷鱼510性能实测...
- 在gitee下使用git克隆企业仓库
- VC++ 串行化编程实例
- Prthon编码和解码/is 和 ==
- 揭秘视频千倍压缩背后的技术原理之预测技术
- mysql偏移注入_移位溢注:告别靠人品的偏移注入
- 《学C编程也可以卡通一点》一1.7变量的类型
- java四则运算,计算器的实现
- 29. Element ownerDocument 属性
- uniapp中引入colorUI
- excel单元格格式设置
- 笔记木计算机自动关机怎么办,为什么笔记本电脑自动关机 笔记本电脑自动关机解决方法...
- Smartbi报表工具实现并查询(不去重)
- SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-003-Pizza例子的基本流程
- JDK1.8新特性(八):还在重复写空指针检查代码?赶紧使用Optional吧!
- 基于HBuilderX创建移动app项目并利用mui实现简单页面跳转
- 欢迎来到Jsp编程课时十——Servlect+Jsp基础回顾。
- Angular(一)
热门文章
- BI和大数据的区别在哪里?
- 基础练习21- Sine之舞(python答案)
- 生产线标准工时怎么算?工厂管理者必须要知道的
- 游戏运营 ---没用
- 从零开始学Python练习题(一)
- Flask结合werobot实现微信公众号自动回复
- 2017c语言考核册答案,2017年C语言考试试题附答案
- java 监听鼠标点击_java 事件监听 - 鼠标
- 双象空间前方交会代码_基于联觉效应的VR交互式图形与图像混合建模
- C语言结构体工资缴税,C语言进阶-第11~13讲:结构体实践(成绩处理个税计算器之码数分离)...