一 基本概念

  蓝牙的连接过程是十分重要的,特别是做蓝牙的技术人员来说,这个是十分重要的。理它的流程,是一件必修课。虽然进入蓝牙行业很久了,以前没怎么系统化的做一些事情,趁此机会,就梳理一下这里面的内容吧。
  在paging流程结束之后,链接管理流程(LMP)一般就启动了,刚开始会完成时钟校准,版本,支持特性,名字和一些连接状态的初始化。paging 设备(设备A)会首先发起一个LMP_host_connection_req PDU.当另外一个设备(设备B)接收到这个消息时,会通知上层接收这个连接信息,设备B这时会相应的回一个接受连接(LMP accedpted PDU)或拒绝连接(LMP_not_accepted PDU)。 于此同时,如果这个从设备(slave)需要一个role switch, 它就会在接收到一个连接请求帧(LMP_host_connection_req PDU)之后,发送一个clock 偏转信息(LMP_slot_offset PDU)和 转换请求帧(LMP_switch_req PDU).如果role switch 成功,旧的slave设备会回复一个接受连接或者拒绝连接的命令。如果失败,对方就会发送一个拒绝role switch 的消息,原因码为(0x14)。
  如果发起paging 的设备接收到一个对方拒绝连接的消息。它就会立即发送(LMP_detach)通过发送一个来断开链接。
如果从设备接受了主设备的连接请求。蓝牙加密过程就有可能会被唤起(因为这个是可选项目,要根据主设备或者从设备的连接需求来定的)。如果没有加密的需求,主设备就会发送连接完成的消息给从设备,等两个设备都发送完连接完成的消息之后,系统底层的连接过程就算是结束了。整个流程如下图所示:

  

二 流程分析

  其实,蓝牙的链接流程比较复杂,和wifi相比,它多了很多可选项,这就导致看起来特别复杂。所以,在学习的时候,一定要有化繁为简的思维,从最简单的入手,下面的图就是完整的蓝牙连接流程图,如下所示。这个流程图向我们揭示了整个连接流程,乍一看,还是非常复杂的。假如你把这个流程分成两个步骤来看,就比较简单了,先看实线的部分,这个就是基本的连接过程,并且是必不可少的三个步骤。就是创建连接,连接请求,建立连接,断开连接四个步骤,每个步骤都是有请求和回复,这样理解就比较简单了。那些可选项,很多适合软件的关系不大的,重点只需要了解一下role switch和data flow。别的在有问题的时候,再翻一下协议栈看看估计就明白了,东西不多的。这样梳理一下,是不是你的蓝牙连接流程就清楚了?
  还有一个比较形象的描述,就像我们的销售美女拜访客户的过程:

第一回合:起动连接:

美女销售: 确认过眼神,是对的人。那就主动一点吧。先抛个媚眼,说声你好。
客户:环顾四周,好像是在给我说话呢。只能做个回答了。答应还是拒绝,就看人家对你的印象了。答应了,你好,请问有什么事情吗?
另外一种悲剧的结果:正在忙,不想理你,就直接回复了。不好意思,我不认识你。一口就回绝了。就没有后面的事情了。

第二个回合:连接请求:

美女销售: 我是XXX,什么公司的,想要根据什么产品的什么东西和你沟通一下啊,能否有时间,聊一下?
客户: 就看客户的心情了。老总答应了,那就会给个肯定的答复,可以接下来谈点事情了。
悲剧的结果:不好意思,我正在忙,改天你再来吧。谈话结束。

第三个回合:握手认识。

美女销售:伸出手,握手,算是认识了,接下来切入正题,开始谈业务了。
客户:握手,来会议室聊吧。

三 总结

  做了多年的协议,才发现协议的东西,很多都源于生活。其实,细想一下,本来就是这样子的。协议的作用就是为了方便人们沟通。它是人设计的,肯定很多东西都是基于人的思维和常用模式来做模型的。知道了这些,把生活中的场景和协议的场景对标起来,估计你很快就知道所谓的协议其实很简单了。虽然倒腾技术比较枯燥,假如你深入了进去,把产品当作你的孩子来看,估计会增添工作中多很多乐趣的。

 

Bluetooth(蓝牙)连接过程分析的更多相关文章

  1. Windows 10下通过蓝牙连接iPhone个人热点进行共享上网

    出处:qiuyi21.cnblogs.com 1.iPhone开启个人热点 在iPhone中打开蓝牙,然后进入“个人热点”并打开开关,如果提示热点发射方式请选择蓝牙那项,然后停留在“个人热点”界面并且 ...

  2. android bluetooth蓝牙移植

    http://blog.csdn.net/zhengmeifu/article/details/7705172 前段时间移植神念系统需要使用到bluetooth功能,现将移植过程中碰到的问题简要列一下 ...

  3. 基于swift语言iOS8的蓝牙连接(初步)

    看过一些蓝牙App的事例,大体上对蓝牙的连接过程进行了了解.但是开始真正自己写一个小的BLE程序的时候就举步维艰了.那些模棱两可的概念在头脑中瞬间就蒸发了,所以还是决定从最基本的蓝牙连接过程进行.这里 ...

  4. iOS - Bluetooth 蓝牙

    1.蓝牙介绍 具体讲解见 蓝牙 技术信息 蓝牙协议栈 2.iBeacon 具体讲解见 Beacon iBeacon 是苹果公司 2013 年 9 月发布的移动设备用 OS(iOS7)上配备的新功能.其 ...

  5. UBUTUN 通过蓝牙连接Hoary和诺基亚手机

    通过蓝牙连接Hoary和诺基亚手机 这个how to已经用Hoary.诺基亚6630和一个道尔芯片(Dongle)蓝牙(Usb蓝牙)测试过了.通过这个How to,你可以:-通过蓝牙,从你的电脑发送文 ...

  6. 用蓝牙连接debian和诺基亚手机

    本方法已经用debian 4.0.诺基亚9300和一个hl-united牌子的USB蓝牙适配器测试过了,效果很好.             1.安装必要的软件包:   #apt-get install ...

  7. win7蓝牙连接手机蓝牙

    今天有个需求,需要win7 PC连接手机蓝牙,并发送文件到手机端.在此记录下过程. 准备: win7 电脑主机. CSR 蓝牙dongle. 手机 1. 打开蓝牙服务 方法:打开控制面板,找到“管理工 ...

  8. bluetooth 蓝牙协议和标准,配置

    Bluetooth 配置文件表达了一般行为,Bluetooth 设备可以通过这些行为与其它设备进行通信.Bluetooth 技术定义了广泛的配置文件,描述了许多不同类型的使用案例.为了使用 Bluet ...

  9. iOS关于蓝牙连接的简单介绍与使用

    下面是两台iPhone6连接同一台蓝牙设备的结果: **成功连接**** peripheral: <CBPeripheral: 0x1700f4500, identifier = 50084F6 ...

随机推荐

  1. jQuery写toTop(回到顶部)效果

    在通常的网站开发中,页面有时候会很长,尤其是一些电商网站,为了提高用户的体验效果,我们通常会增加一个回到顶部的按钮,这个按钮我们同城会使用fixed定位,将其定位在当前可视区域某一固定位置.这个效果用 ...

  2. 【JDK】JDK源码分析-LinkedHashMap

    概述 前文「JDK源码分析-HashMap(1)」分析了 HashMap 主要方法的实现原理(其他问题以后分析),本文分析下 LinkedHashMap. 先看一下 LinkedHashMap 的类继 ...

  3. 图解Redis之数据结构篇——压缩列表

    前言     同整数集合一样压缩列表也不是基础数据结构,而是 Redis 自己设计的一种数据存储结构.它有点儿类似数组,通过一片连续的内存空间,来存储数据.不过,它跟数组不同的一点是,它允许存储的数据 ...

  4. Git 服务使用搭建集合

    Git 服务使用搭建集合 一.本地Git 仓库搭建与使用 1.Git 概念介绍 版本控制系统 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.大部分时候我们使用最频繁的还是对源 ...

  5. webupload项目中使用

    目前项目需要一个多图上传的功能,使用LayUI并也是可以实现多图上传的,但是没有图片删除功能,参考了一下网上多图上传的插件,选择了WebUpload进行功能开发. 然而不幸的是,官方的插件并不带UI界 ...

  6. 佳木斯集训Day3

    D3是我的巅峰 D3的出题人毒瘤!!!T3放了一道莫队,我们全体爆炸,到现在只有一个奆老A掉了T3 据说lkh被晓姐姐D了 T1是个26进制数,当时在考场上想了好久才想到(太次了)注意需要处理一下溢出 ...

  7. PowerShell安装IIS

    Windows作web开发的同学,应该都会用到IIS服务器.比如在阿里云或是Azure上购买一台新的服务器,默认是没有安装IIS的(安装的镜像就带有IIS或是MySql的除外).届时需要安装IIS,安 ...

  8. DT-06 For MQTT

    感谢关注深圳四博智联科技有限公司产品!我公司提供完整的WiFi信号强度采集方案,包括WiFi信号采集.设备远程管理平台.智能终端应用等. Doit_MQTT透传固件基于乐鑫ESP_IOT_SDK使用C ...

  9. HelloDjango 第 07 篇:创作后台开启,请开始你的表演!

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在此之前我们完成了 django 博客首页视图的编写,我们希望首页展示发布的博客文章列 ...

  10. 并发模型与IO模型梳理

    并发模型 常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见.由于go语言的兴起,CSP模型也越来越受关注.基于锁的共享内存模型 ...