android 蓝牙hf编程,基于Android蓝牙Inband ring功能实现.doc
基于Android蓝牙Inband ring功能实现基于Android蓝牙Inband ring功能实现【摘要】 蓝牙作为一种短距无线数据与语音传输的开放性全球规范,目前在整个世界范围内都得到了很广泛的应用。它可以支持便携式计算机、移动终端以及其他电子设备之间通过建立无线电空中接口相互通信,可以方便地进行数据和语音传输。Android是基于Linux的移动操作系统,目前在终端市场占据了70%的市场
基于Android蓝牙Inband ring功能实现
基于Android蓝牙Inband ring功能实现
【摘要】 蓝牙作为一种短距无线数据与语音传输的开放性全球规范,目前在整个世界范围内都得到了很广泛的应用。它可以支持便携式计算机、移动终端以及其他电子设备之间通过建立无线电空中接口相互通信,可以方便地进行数据和语音传输。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设置supportfea
更多推荐
所有评论(0)