shichaog
这个作者很懒,什么都没留下…
展开
-
蓝牙之十五-bluedroid enable流程
这里代码剖析提出了android的HAL层之上代码的剖析,旨在android蓝牙协议栈的使用方法。 从安卓的bdt工具说起。当然了是基于bluedroid协议的。本文就是从bdt命令开始的。bdt命令触发了协议栈初始化:上图从左到右是bdt命令触发的调用关系,是更为详细用户空间的代码调用流程。当终端窗口输入enable命令时,bdt_enable()函数间接由proces原创 2016-10-05 11:33:02 · 5864 阅读 · 7 评论 -
蓝牙之三-StateMachine
蓝牙和wifi的管理上都使用到了状态机。该状态机属于分层状态机管理消息。一个状态对应于一个对象,并且状态必须实现>方法,可选的实现方法是,方法对应于构造和析构函数,它们被用于初始化和清理状态。方法返回状态的名称,缺省的方式是返回返回类名称,但是也许返回实例的名称是使用者更想要的方式,尤其是一个状态类具有多个实例的时候。当状态机使用创建后,方法用于创建状态层次,用于标识哪些是初始的状态。构造原创 2016-07-31 00:24:19 · 5577 阅读 · 4 评论 -
蓝牙bluetooth之二-源码分布
安卓6.0下源码分布情况如下:1.核心服务frameworks/base/services/core/java/com/android/server/BluetoothBluetoothManagerService.java BluetoothService.java 2. application & framework各种profile所在的目录packages/apps原创 2016-07-29 17:44:03 · 7555 阅读 · 1 评论 -
安卓蓝牙应用程序编写步骤
1.获得BluetoothAdapter,对任何Bluetooth Activity都需要先获得。获取方法是调用getDefaultAdapter()方法。 BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if (mBluetoothAdapter == null) { // De原创 2016-05-30 21:13:34 · 5156 阅读 · 1 评论 -
蓝牙 bluetooth-之一
BT,核心规范BT设备根据BT规范进行协议信息交换。系统核心规范是:radio(RF)协议,link(LC)控制协议,link(LM)管理协议以及 logical link control and adaptation protocol (L2CAP)。最底下的三层是,RF,LC,LM,它们通常被放在一起组成蓝牙的(BT controller)控制子系统,蓝牙控制子系统通过(HCI,Hos原创 2016-07-17 13:35:43 · 12276 阅读 · 1 评论 -
蓝牙之十八- bluetooth pair
蓝牙之十八- 蓝牙配对在蓝牙核心规范2.1之后,蓝牙配对除了传统的PIN Code Pairing方式外,新增了Secure Simple Pairing配对方式。根据核心规范4.2,简单配对主要有两种目的。蓝牙配对过程参考蓝牙核心规范4.2,卷1,part A,chapter 5.-简化配对流程 -提升安全性安全简单配对采用了四个关联的模型,这四个模式是数字比较(Numeric Comparis原创 2016-10-22 16:41:40 · 11895 阅读 · 1 评论 -
蓝牙之二十二-BLE
Bluetooth Low Energy(以下简称LE),使用2.4GHz ISM信号进行通信,采用跳频接收以抗干扰和衰减。频带和通道LE频带是2.4GHz-2483.5MHz,40channel,channel的中心频率是2402+K×2MHz,(K=0,...,39)发射器特性原创 2016-12-09 19:45:44 · 3675 阅读 · 1 评论 -
蓝牙之二十-设备类型
蓝牙设备在扫描时会发现设备的类型,蓝牙图标有耳机,打印机,电话等等。蓝牙协议栈里有一个叫做基带的字段。基带的分配编号指明查询访问码和设备/服务类别 (CoD) 字段。通用及设备特定的查询访问码 (DIAC)查询访问码 (IAC) 是寻找蓝牙设备和服务的第一个过滤层。定义多个 IAC 的主要目的是限制查看范围内的设备时响应的数量。有限查询访问码 (LIAC) 仅用于限原创 2016-12-05 17:04:51 · 23633 阅读 · 8 评论 -
蓝牙之二十一-蓝牙免弹窗配对
这篇文章的缘由来自于一个需求,就是将手机和手机的配对方式变成,变成手机的和蓝牙音箱的配对方式一样,也就是将一部手机的角色变成和蓝牙音箱一样。就拿前一篇博文一幅图来说。可以看到pc,手机,蓝牙音箱的图标是不同的,这在前一节里已经说明了,这是由COD字段决定的。/* Default class of device* {SERVICE_CLASS, MAJOR_CLASS, MINOR_C原创 2016-12-06 21:02:01 · 8617 阅读 · 1 评论 -
蓝牙之十-avrcp代码调用关系
这篇文章主要是原创 2016-08-12 10:30:07 · 10925 阅读 · 19 评论 -
蓝牙之十九-HFPclient
在高通平台和三星平台上调过这个功能,基于安卓6.0,该功能是将手机上的蓝牙功能用成和蓝牙耳机一样的功能。蓝牙电话和蓝牙音乐它们之间的差异较大,蓝牙电话要求实时性比较高,其和A2DP使用的物理通路并不一致,蓝牙电话走pcm物理通路,而蓝牙音乐走uart通路。关键词Hfpclient BT SCO ATA command在调试该功能时,最好能先测试一下,如下信号指标是否符合要求,以原创 2016-11-11 22:01:34 · 6954 阅读 · 3 评论 -
蓝牙之八-HFP
HFP在调试安卓的HFP client时遇到了如下问题: 其中有一个E提示,因为AT命令的错误,所有创建SLC失败,然后断开RFCOMM链接,表现出来的是已经配对的手机不停的断开重连。HFP协议 HFP(Hands-free Profile),让蓝牙设备可以控制电话,如接听、挂断、拒接、语音拨号等,拒接、语音拨号要视蓝牙耳机及电话是否支持。目前HFP的使用场景有...原创 2016-08-05 17:06:46 · 44047 阅读 · 4 评论 -
蓝牙之六-A2dp代码调用流程
上图描述的是蓝牙协议栈,通过该图,查看A2dp的代码在协议栈的调用流程。其分层架构如下: 1.蓝牙的系统服务service通过JNI与bluedroid协议栈进行通信。协议栈分为两层,Bluetooth Embedded System(BTE)和Bluetooth Application Layer(BTA)。这两层和framework层应用进行通信。 2.蓝牙服务通过Binder IPC通原创 2016-08-03 14:27:19 · 9246 阅读 · 1 评论 -
蓝牙之十六-测试认证
蓝牙测试认证这里使用的ROHDE&SCHWARZ的蓝牙测试仪器。bt 信令测试, 使用brcmbt输入hci命令控制DUT蓝牙,在仪器上检查波形是否符合标准。brcmbt --script /data/bt_tx# tx test file content[ 51 Fc 10 ]: 55 44 33 22 11 00 01 00 04 01 0F 62 04原创 2016-10-16 11:19:14 · 5061 阅读 · 0 评论 -
蓝牙之十七-bluedroid scan流程
扫描分为BR/EDR类型的设备和BLE类型的设备。BR/EDR类型设备扫描参数存在tBTA_DM_INQ结构体里,参数如下:查询模式(general or limited),查询的长(以1.28s为单位,最长1.28*10s),最大的查询响应量(0表示无限制响应)。查询过滤类型(清除,按设备类型过滤,按设备地址过滤)。原创 2016-10-16 22:35:44 · 5052 阅读 · 2 评论 -
蓝牙之十四 HFP profile
Profile依赖图中绘出了蓝牙profile结构和其依赖,profile之间可以存在依赖关系。根据图1可以知道Hands-Free Profile依赖于Serial Port Profile和Generic Access Profile。图1.1 蓝牙profileHFP协议栈 基带,LMP以及L2CAP是蓝牙OSI协议的第一和第二层。RFCOMM是蓝牙的模拟串口原创 2016-09-20 20:25:27 · 10158 阅读 · 0 评论 -
蓝牙之十三-HFPclient JNI层
JNI到app(JAVA)final class HeadsetClientStateMachine extends StateMachine {//静态块方法 static { classInitNative(); } private HeadsetClientStateMachine(HeadsetClientService原创 2016-08-23 19:19:42 · 2655 阅读 · 0 评论 -
蓝牙之十二-HFP app层
在android6中,HFP的app层代码位于:/packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient配置使能代码位于 bool name="profile_supported_hs_hfp">truebool> bool name="profile_supported_hfpclient">true原创 2016-08-23 19:18:16 · 5218 阅读 · 1 评论 -
蓝牙之十一 AVRCP协议
Profile简介Audio/Video Remote Control Profile(AVRCP)定义了蓝牙设备和audio/video控制功能通信的特点和过程。该Profile定义了AV/C数字命令控制集。命令和信息通过AVCTP(Audio/Video Control Transport Protocol)协议进行传输。浏览功能通过AVRCTP的第二个channel而不是AV/C。传原创 2016-08-16 10:06:51 · 51854 阅读 · 6 评论 -
蓝牙之九-AT命令
AT命令用于HF协议该命令使参考3GPP 27.007协议,以下是HFP规范。每个命令行只有一个命令AG侧默认不回显命令AG使用冗长的格式返回结果以下字符将被用于AT命令和返回结果格式中 表示回车 表示换行从HF发送到AG的命令格式是: 从AG返回给HF的OK命令格式是:OK从AG到HF的ERROR命令是:ERROR从AG到HF的结果命令原创 2016-08-06 14:51:53 · 17558 阅读 · 2 评论 -
蓝牙之七-蓝牙子系统启动
bluedroid蓝牙子系统启动过程1)init进程启动;2)Native服务启动;3)System server,Android服务启动;4)Home启动。JAVApackages\apps\Bluetooth\src\com\android\bluetooth\btservice\ AdapterService.javapublic class AdapterService extends Se原创 2016-08-03 17:01:28 · 5696 阅读 · 1 评论 -
蓝牙之四-Handler
Handler机制Handler允许用户发送和处理Message以及线程MessageQueue相关的可运行对象。每个Handler实例都对应一个单线程以及该线程的MessageQueue。当创建新的Handler时,该Handler将被绑定到该线程创建该Handler的Message queue上。从那时起,Handler可以发送message到MessageQueue,当message从Mess原创 2016-08-01 10:46:42 · 4153 阅读 · 0 评论 -
蓝牙之五-bludroid协议栈和厂商代码的交互
协议栈和厂商代码交互完整的蓝牙调用图 协议栈所在的目录是/system/bt;厂商代码所在的目录是hardware/broadcom/libbt。 这两个不同的目录反应的是协议栈和厂商固件的交互流程,它们通过hci层进行交互,在bluez时代hci层是在linux kernel实现的,bluedroid时代放在了android层实现。两者交互的主要目录是system/bt/hci。</syste原创 2016-08-03 10:29:32 · 6630 阅读 · 3 评论 -
蓝牙之二十三-beacon
本文基于Bluetooth SIG group资料。Beacon 2014年推出,ABI预测到2019年预计有2019将有6千万台设备。beacon用于个人定位,这些场景如百货商场,机场,办公室,博物馆等。这些场景中,beacon安装在固定的位置,手机上的API知道beacon的位置。BLE协议栈包括一个称为GAP(Generic Access Profile),GAP的负原创 2016-12-10 19:23:29 · 7748 阅读 · 4 评论