传统蓝牙BR/EDR的搜索Inquiry
传统蓝牙BR/EDR的搜索Inquiry
一提到蓝牙想必大家都会随口而出蓝牙音乐、蓝牙免提电话等等蓝牙技术提供的这些功能,这也是用户使用蓝牙的目的。但所有这些功能得以正常使用,有一个必要条件——蓝牙搜索。操作蓝牙的这些功能必须得知道对端蓝牙设备的存在,再与之建立ACL连接,那这就离不开这期的主题,本篇文章就简单介绍下传统蓝牙搜索Inquiry。
蓝牙搜索协议简介
参考文件:蓝牙核心协议《Core_v5.0.pdf》,第二卷,F部分
搜索Inquiry顾名思义就是检测和收集周围环境中的蓝牙设备,根据询问的方式可分为 One-Time Inquiry(一次性询问) 和 Periodic inquiry(周期性询问) 两种搜索模式。需要周期性地搜索蓝牙设备的情况下才会采用周期性询问这种方式,但是由于该种模式使用的场景有限且对功耗是个不小的负担,所以现在市面上的蓝牙设备基本不采用这种搜索模式,接下来就主要介绍下一次性询问。
One-Time Inquiry:
步骤1:蓝牙Host通过命令HCI_Inquiry告知控制器Controller进入查询模式,用于发现周围环境中的其他蓝牙设备。
步骤2:蓝牙控制器Controller接收到上层开启搜索指令后将以指定的查询访问代码(IAC)和查询时长启动蓝牙基带搜索查询流程,对外发送ID包。周围环境中的蓝牙设备接收到ID包后会自己的设备信息封装到FHS包中做出响应,控制器解析FHS包获取所需的信息,并使用一个或多个查询结果事件将找到的设备相关信息返回给主机Host。
步骤3(a):如果主机Host希望停止搜索查询,则使用HCI_Inquiry_Cancel命令通知控制器Controller立即停止查询过程,控制器接收到指令就会停止对外发送ID包执行停止查询流程。
步骤3(b):如果主机Host没有主动停止查询,则控制器Controller会在查询上报的结果已达数量限制或者查询时长已到而停止查询,并将查询的完成事件上报给Host。
经过以上三步,一个完整的搜索查询Inquiry流程就完成了。对于流程中涉及到的HCI命令或事件再做如下说明:
1、 HCI_Inquiry
命令中三个参数的含义如下所示
LAP:上述步骤2中的查询访问代码就是从该值派生得到的,具体取值范围为是 0x9E8B00 ~ 0x9E8B3F,但是只有 0x9E8B00 和 0x9E8B33 这两个数值是有效的,其他值保留供将来使用。
- 0x9E8B33 代表一般/无限制查询访问代码(GIAC)
- 0x9E8B00 代表有限的专用查询访问代码(LIAC)
由于LIAC的使用有其局限性,所以参数LAP基本上都是使用GIAC这一固定参数。
详细介绍可以参考蓝牙SIG官网Assigned Numbers中的Baseband部分。
链接:https://www.bluetooth.com/specifications/assigned-numbers/baseband/
Inquiry_Length:查询模式的总持续时间,当此时间超时后查询将被停止,该参数的取值范围及对应的超时时间如下图:
Num_Responses:在查询停止之前可以接收的响应数,当响应数达到该值后,控制器Controller停止当前的查询,并上报Host查询完成事件。该参数的取值范围如下:
2、 上报查询的结果
在当前查询期间响应的蓝牙设备如果未被上报过且该设备没有被命令Set_Event_Filter过滤掉应始终以如下三种事件之一(Inquiry Result、Inquiry Result with RSSI或者Extended Inquiry Result)上报主机Host查询的结果,不管采用哪个事件上报Host,都是将查询到的设备信息告知主机。事件中具体包含什么信息感兴趣的同学可以执行查看具体协议中HCI COMMANDS AND EVENTS部分。主机协议栈依次接收到这些设备信息后,解析出相应的数据保存并上报蓝牙服务层。
如果搜索到的蓝牙设备在当前查询或查询期间已经被上报过,则该设备这次可能被上报,也可能不被上报,这取决于控制器Controller中的实现(对同一设备是只上报一次,还是只要设备响应就上报)。
最后随着HCI_Inquiry_Complete事件的上报,查询流程就完结了。那本篇传统蓝牙查询协议分享就到这,感兴趣的小伙伴欢迎私信留言一起讨论。
更多互联互通技术,欢迎关注微信公众号:Connectivity
传统蓝牙BR/EDR的搜索Inquiry相关推荐
- br模式edr模式_蓝牙BR/EDR 和Bluetooth Smart的十大重要区别
物理信道(Physical Channel) 所有的无线电通信都是发生在预先定义的信道之上,蓝牙也不例外.但Bluetooth Smart采用的信道却与蓝牙BR/EDR有些许不同,尤其是在Blueto ...
- 蓝牙BR/EDR和Bluetooth Smart的十大重要区别
蓝牙BR/EDR和Bluetooth Smart的十大重要区别 星期二, 12/08/2015 - 16:30 - zoe_liao 作者:任凯(蓝牙技术联盟亚太区技术项目经理) 导言:不论你是普通消 ...
- 图解蓝牙 BR/EDR 和BLE的区别
图解蓝牙BR/EDR 和BLE 区别
- ESP32 VHCI架构传统蓝牙设置scan mode,让设备能被搜索到
零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...
- br模式edr模式_BEX400-蓝牙协议分析仪BEX400 5.0+BR+EDR+BLE_蓝牙协议分析仪 Bluetooth-深圳市元锋科技有限公司...
蓝牙协议分析仪BEX400 5.0+BR+EDR+BLE 经典蓝牙协议分析仪BEX400 技术咨询: 深圳市元锋科技有限公司 Shenzhen Yuan Feng Technology Co., L ...
- 蓝牙Bluetooth BR/EDR 和 Bluetooth Smart 必需要知道的十个不同点
作为一个物联网创客或物联网.可穿戴从业者,对于蓝牙(Bluetooth®)一词肯定已经相当熟悉啦.随着物联网技术应用的普及,蓝牙技术也在快速的演进.对于当今蓝牙技术规格中的两大主要技术:Bluetoo ...
- linux蓝牙书籍,Linux蓝牙从入门到精通(BR/EDR)Baseband Introduction(一)General Description...
Baseband Introduction 蓝牙是一种短程宽带无线电技术,是实现语音和数据无线传输的全球开放性标准.它使用跳频扩谱(FHSS).时分多址(TDMA).码分多址(CDMA)等先进技术,在 ...
- 蓝牙协议栈模组在linux ubuntu 跑蓝牙协议栈 --传统蓝牙搜索演示以及实现原理
零. 概述 主要介绍下用Linux ubuntu虚拟机外接我们的蓝牙扩展版跑蓝牙协议栈的初始化以及搜索演示 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合 ...
- 蓝牙协议栈开发板 STM32F1 跑蓝牙协议栈 --传统蓝牙搜索演示以及实现原理
零. 概述 主要介绍下蓝牙协议栈开发板跑传统蓝牙搜索AT指令以及上位机操作步骤,以及原理 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝 ...
- 蓝牙架构(10)—— 5 安全概述(5.1 安全架构 5.2 BR / EDR安全简单配对 5.3 仅安全连接模式 5.4 LE安全)
Vol 1架构和术语概述 Part A 5 安全概述 Agenda: Part A 5 安全概述. 5.1 安全架构. 5.2 BR / EDR安全简单配对. 5.2.1安全目标. 5.2.2被动窃听 ...
最新文章
- 201521123030《Java程序设计》 第2周学习总结
- 大规模推荐Deep Retrieval
- Ubuntu下Topcoder配置
- SAP UI5 attachment绑相对url
- antd option宽度自适应_建议收藏:Axure手机自适应教程
- web_find()函数检查中文字符串失败的处理方法
- mysql 去重 性能比较_mysql 去重方法distinct 与 group by 性能比较 | 学步园
- vue+django2.0.2-rest-framework 生鲜项目(五)
- 高中计算机编程软件vb,高中年级VB程序设计全套教案.doc
- 怎么看计算机的硬盘牌子,硬盘序列号,详细教您怎么查看硬盘序列号
- 【学习笔记】人体姿态识别
- 怪物之心无法触发_《异度之刃2》稀有异刃力男怪物之心支线任务攻略
- mysql触发器安全吗_猎八哥浅谈MYSQL触发器
- SRCNN:Image Super-Resolution Using Deep Convolutional Networks
- endl 和 \n 的区别
- 科目二练习与考试点位总结
- 实验室真的需要智能LIMS系统吗?
- 开箱——Amazon Lightsail(远程云桌面)
- 使用Eclipse创建最简单的JavaWeb网页项目
- VScode受难记 - 0