ARM平台上蓝牙协议栈Bluez的移植使用和配置(5)

发布时间:2021-06-11

ARM平台上蓝牙协议栈Bluez的移植使用和配置

]
DisableHFP=true

[A2DP]
SourceCount=2

配置好这些以后,使用 aplay -D bluetooth sample.wav 进行测试。

值得注意的是,使用Aplay打开蓝牙设备进行播放,需要有如下两个Alsa的plugin:

/usr/lib/alsa-lib/libasound_module_pcm_bluetooth.so
/usr/lib/alsa-lib/libasound_module_ctl_bluetooth.so

这两个so文件可以在bluez-utils 里面找到。需要注意他们和libasound 的版本匹配。

5.2 问题
在测试中发现,如果连接的耳机是由PC上的蓝牙适配器提供的AV耳机服务,那么配对可以完成,但是连接会失败,真正的耳机则没有这个问题,不知道是否是因为以上的方法还存在缺陷?尝试使用由DBUS发起命令的形式来连接PC的AV耳机服务,也是一样的问题。是否连接PC模拟的AV耳机服务,首先要切换设备的role?

没有测试Ctl接口

如何动态选择不同的耳机,而不是写死在脚本里?(这个想来估计是要自己基于Alsa的API编程处理,aplay无法直接完成测试)

播放大文件会出现under run错误,需要测试是由与波特率设置不够高造成,还是SBC编码效率不够,还是这个版本里存在的bug。

6 DUN的使用
Dun profile运行于rfcomm之上,主要是通过蓝牙接口暴露一个Modem的接口,用于提供拨号上网服务。
在这里所讨论的不是提供拨号上网服务本身,而是使用外部设备所提供的这个服务,进行网络连接。
6.1 系统配置
通常为了使用DUN,或者任何一个其它类型的Modem,我们会通过PPP协议来拨号和建立网络连接。
首先需要内核的支持,可以简单的把 device drivers -> Network device support 下面的PPP相关的内容全部选上。
其次,要编译应用层的PPP包,我的测试是基于ppp-2.4.4

主要的两个ppp配置文件:

/etc/ppp/peers/gprs:

/dev/rfcomm0
115200
defaultroute
usepeerdns
nodetach
noauth
local
debug
connect "/usr/sbin/chat -v -f /etc/ppp/chat-gprs"

/etc/ppp/chat-gprs:

TIMEOUT 10
ABORT 'BUSY'
ABORT 'NO ANSWER'
ABORT 'ERROR'
"" 'ATZ'
SAY 'Init....\n'
OK 'AT+CGDCONT=1,"IP","CMWAP"'
ABORT 'NO CARRIER'
SAY 'Dialing....\n'
OK 'ATD*99***1#'
CONNECT ''

前面一个配置文件基本就是那样了,后面一个,这两句要根据你的SIM卡的实际情况来处理:

OK 'AT+CGDCONT=1,"IP","CMWAP"'
OK 'ATD*99***1#'

这里我设置的是使用中国移动的CMWAP。

此外,使用CMWAP还需要设置你的浏览器的代理服务器:10.0.0.172 端口9201

6.2 连接步骤
首先是要查找提供dun服务的设备,将服务提供在哪个channel通道上。这可以通过sdptool来查看,在我的设备上查询的结果是在channel 1上:

~ # ./sdptoo
l browse 00:08:C6:77:A0:6C

Browsing 00:08:C6:77:A0:6C ...
Service Name: Dial-upnetworking
Service RecHandle: 0x10000
Service Class ID List

精彩图片

热门精选

大家正在看