APP下载

基于Android的蓝牙In-band ring功能的实现

2016-06-03陈媛媛

中国新通信 2016年8期
关键词:链路指令蓝牙

陈媛媛

【摘要】 蓝牙作为一种短距无线数据与语音传输的开放性全球规范,目前在整个世界范围内都得到了很广泛的应用。它可以支持便携式计算机、移动终端以及其他电子设备之间通过建立无线电空中接口相互通信,可以方便地进行数据和语音传输。Android是基于Linux的移动操作系统,目前在终端市场占据了70%的市场份额,应用相当广泛。本文通过研究Android系统以及蓝牙协议栈,在现有架构基础上平台实现了in-band ring功能。

【关键字】 蓝牙 Android in-band ring

一、引言

蓝牙(Bluetooth)技术规范由蓝牙特别兴趣小组(SIG)制订,在使用通用无线传输模块和数据通信协议的基础上,开发交互式服务和应用,多用于便携式通信设备。

整个蓝牙协议体系结构自上而下分为高端应用层、中间协议层和底层硬件模块,结构如图1所示。

蓝牙协议栈最上层为应用层,它对应于各种应用模型的剖面(Profile)。

中间协议层由逻辑链路控制与适配协议、服务发现协议、串口仿真协议和电话控制协议等规范组成。它是蓝牙协议栈的核心部分,主要实现了逻辑链路控制与适配协议实现数据的拆装、服务质量的控制和协议复用等功能,为上层协议的实现提供相应的基础。服务发现协议主要为上层应用程序提供一种发现网络中可用的服务及其特性的特殊机制;串口仿真协议是为运行在不同设备上的两个应用程序建立一条完整的通信路径,并保持两个设备之间有一个通信段;电话控制协议则提供蓝牙设备间话音和数据的呼叫控制指令[1]。

蓝牙射频、基带层和链路管理层构成蓝牙的底层模块。蓝牙射频用于实现数据位流的过滤和无线传输;基带层主要控制跳频和蓝牙数据信息帧的传输;链路管理层则用于建立和拆除链路,以及链接的安全和控制。它们共同为上层软件模块提供相应的访问接口。两个模块之间的数据的传输必须通过蓝牙主机控制器接口(HCI)的解释才能进行[2]。

其中免提协议(HFP) 属于蓝牙应用层profile,其中从上到下的协议栈层次如下图。本文所述的in-band ring功能是基于HFP协议来进行开发的。

二、 Android 蓝牙以及开发平台

2.1 Android 蓝牙

目前基于Linux内核的操作系统广泛采用蓝牙协议栈的Bluez,Android也不例外,但是Android4.2版本以后,谷歌开始采用通信机制更加完善的Bluedroid协议栈,目前高通平台采用的就是该协议栈。

2.2 开发平台和Android系统

本文调试的硬件是采用高通骁龙8X系列平台,该平台内置8核处理器,平台主芯片内封装了WCNSS子系统芯片,WCNSS子系统芯片属于三合一芯片wifi/bt/fm。

WCNSS子系统芯片与AP之间采用高通自定义的总线架构,其中蓝牙音频数据通过PCM接口传输。调试系统是基于Android5.1。

三、In-band ring功能

In-band ring功能定义了如何从AG端播放声音到HF端的协议和信令交互过程。其中AG端是指音频网关,本文指手机端;HF指免提设备,本文指蓝牙耳机或者车载等。声音是指通过发送的sco(面向同步连接)音频数据。目前sco音频广泛采用的是CVSD编码,而音频参数主要有sco和esco两大类,每个大类参数又包含了若干子类参数。音频参数主要由链路管理协议来进行配置。确保AG与HF音频能够能够正常传输。

通过该功能可以在来电时将AG端声音发送到HF端进行播放,在一些特定的场合可以方便地将来电人信息等转化为语音通知用户,可以大大提升用户体验。

3.1信令过程

AG与HF端信令交互主要通过AT指令进行。

首先AG与HF端连接后,HF端会发送AT+BRSF获取AG端支持情况,AG端在收到AT指令后会发送+BRSF携带支持的feature参数,其中in-band ring作为参数特征值会发送至HF端[3]。

当AG端有来电时,会发送+ciev指令,并携带call的参数发送到HF端。然后需要由AG段发起Audio连接,HF端接受连接请求,建立Audio连接后,由AG端发送音频数据,HF端收到音频数据后进行播放。

当HF端发送ATA或者AT+CHUP指令以及AG端CALL进入idle或者active后,AG需要先停止发送该音频流数据,进行对应指令操作[4]。

3.2Android端实现

蓝牙开启后,Bluedroid会进行初始化操作,其中HFP会初始化AG端的服务,对AG支持的功能进行设置,以便HF端进行获取。协议占会调用initializeFeaturesNative设置supportfeature,in-band ring属性设置完成后,协议栈会调用BTA_AgRegister(BTIF_HF_SERVICES, BTIF_HF_ SECURITY,btif_features, p_service_names, bthf_hf_id[i]);来对AG端的支持的feature进行注册。

当AG与HF配对完成后,耳机端会通过RFCOMM链路向手机端发送AT+BRSF指令,手机端检测到该指令后就会将设置后的feature返回。来告知耳机端手机支持的功能。其中就包含有in-band ring参数。当AG端有来电时,telephoneservice会调用蓝牙HFP服务中的phoneStateChangeNative 接口来通知耳机端有来电。协议栈则是通过AT指令的方式将该信息发送至耳机端。

完成上述步骤后,根据in-bandring协议,需要进行AudioConnection。协议中的音频连接就是指sco连接。音频连接一般是在AG端在发送完+cie指令后,然后调用conn ectAudioNative(getByteAddress(mCurrentDevice))發起连接请求,HF接收连接请求后,AG协议栈会有连接完成的回调通知上层,上层服务再通过Auidostatechange广播通知其他模块,做其他处理。而监听到音频连接完成的状态后,可以添加自定义的声音播放,声音就会通过sco连接传到耳机端。在Android系统中sco链路属于通话链路,只支持voice类型的声音数据,因此在播放时需要先设置音频流类型或者降低采样频率的方式才能通过sco链路进行传输。本处采用的是TTS语音引擎,引擎初始化时设置音频参数设置为voice类型后进行播放。

播放过程中,手机端需要监测AG端call的状态以及耳机端发过来的指令来结束声音播放或者断开音频连接。当AG端的call状态进入active状态时需要终止声音播放,避免与语音声音重叠,当call进入idle状态时,则中断声音播放,同时断开音频连接。

四、结果与性能

为测试该功能的实际使用效果以及兼容性,本文选取了市面上主流的蓝牙耳机和车载设备进行测试。耳机品牌包括三星,飞利浦,蓝玄,捷布朗等品牌,车载则选取了飞歌,佳艺田,骏歌等车载。并对各种来电场景进行测试。

来电情况下,耳机和车载端能够清晰发出AG端自定义的音效,并且能够消除原先厂家的在HF端的提示音效。在进行挂断和接听后,AG端自定义音效能够正常停止,不影响正常通话和挂断。in-band ring功能正常实现。

兼容性测试方面,83%耳机和车载能够正常实现inband ring功能。只有个别型号存在兼容性问题。达到了预期效果。

五、总结

本文介绍了蓝牙无线通信协议栈以及Android蓝牙实现架构, 在研究了蓝牙in-band ring协议基础上,基于现有Android蓝牙架构,通过修改开源协议栈以及上层应用逻辑。比较完整地实现了蓝牙 in-band ring协议功能,并达到了预期效果。

参 考 文 献

[1] 金纯 林金朝 万宝红.蓝牙协议及其源代码分析.国防工业出版社,2006

[2] 米勒.蓝牙核心技术:全球无线通信开放规范的权威性指南.机械工业出版社,2001

[3] Bluetooth SIG.Core Specification of the Bluetooth 2.0 +EDR,2004

[4] Bluetooth SIG.HANDS-FREE PROFILE 1.5,2007

猜你喜欢

链路指令蓝牙
一样,不一样
《单一形状固定循环指令G90车外圆仿真》教案设计
帮你轻松找到AirPods的神奇工具
新机研制中总装装配指令策划研究
一种IS?IS网络中的链路异常检测方法、系统、装置、芯片
基于热备份提升微波站点传输稳定性
无线连接的飞跃 蓝牙技术4.2揭密
蓝牙4.0落地加速
蓝牙4.0:更快速更节能
太空第一人