蓝牙学习九(定向广播 ADV_DIRECT_IND)

一、简介

        广播类型有如下:

        非定向可连接广播ADV_IND)。可连接的非定向广播,表示当前设备可以接受任何设备的连接请求

        定向可连接广播ADV_DIRECT_IND)。可连接的定向广播,设备不能被主动扫描

        非定向不可连接广播ADV_NONCONN_IND)。不可连接的非定向广播,仅发送广播数据,而不被连接。设备不能被主动扫描

        非定向可发现不可连接广播ADV_DISCOVER_IND/ADV_SCAN_IND)。可扫描非定向广播,设备可以被发现。即可以发送广播数据,也可以响应扫描发送回应数据,但不能建立链接

        如果忘记了,可以回顾一下之前的文章:蓝牙学习四(广播)_蓝牙广播-CSDN博客

        本章主要介绍ADV_DIRECT_IND定向可连接广播

二、定向广播PDU

        当使用定向可连接广播时,链路层将发送定向广播数据包。也就是说,链路层将不会发送之前设置的广播内容,比如名字外貌等等。而是发送特定内容类型的广播帧。

        定向广播指示数据包中包含如下内容

        Access Address访问地址

        Packet HeaderPDU包头)   

        Advertising Address广播地址

        Target Address目标地址

       访问地址还是熟悉的0x8e89bed6通用访问地址

        PDU包头中包含了广播类型,和发送/接受地址类型。广播类型为ADV_DIRECT_IND定向可连接广播。

        广播地址为设备自身的MAC地址

        目标地址为定向要连接的目标设备的地址

        可连接定向广播类型允许主机响应广播事件,从而使得广播者和主机均进入连接状态。 可连接定向广播采用ADV_DIRECT_IND或者ADV_EXT_IND两种数据包类型,前者在主广播信道上发送,后者在主广播信道上发送并指向在副广播信道上发送的辅助广播AUX_ADV_IND数据包。       

三、ADV_DIRECT_IND

        ADV_DIRECT_IND广播类型使得发起者(主机)能在主广播物理信道上响应链接请求,从而建立ACL(异步无连接,一主多从之间的多点连接)连接。ADV_DIRECT_IND的PDU中包含发起者设备地址广播者设备地址仅寻址的发起者可通过向广播者发送CONNECT_IND数据包发起ACL连接。

        发起者在一个广播信道发送ADV_DIRECT_IND的数据包后,应在相同的广播信道上监听CONNECT_IND数据包,并忽略可能接收到的任何SCAN_REQ数据包。

        当广播者接收到包含其设备地址的CONNECT_IND数据包,且此PDU的设备地址与之前发送的ADV_DIRECT_IND数据包中包含的目标设备地址相同时,应退出广播状态,并切换到连接状态

        当广播者在该信道上没有接收到目标地址的CONNECT_IND时,应转移到下一个主广播物理信道上再次发送ADV_DIRECT_IND数据包,或者关闭广播事件

        ADV_DIRECT_IND中包含“high duty cycle(高占空比)”和“low duty cycle(低占空比)”两种模式。

        高占空比可连接定向广播,用于快速ACL连接/重连。该模式为高能耗以及高带宽占用广播模式,仅在需要快速建立连接时使用。

        低占空比可连接定向广播,用于慢速ACK连接/重连,或在不知道目标设备是否在通讯范围内使用。

3.1、low duty cycle

        在低占空比模式中,在两个ADV_DIRECT_IND数据包发送间隔应小于或等于10毫秒。广播事件应在广播间隔内关闭。

        全部主广播信道发送且未收到CONNECT_IND数据包的低占空比模式广播示意图如下图:

        下图为在第二个广播信道收到CONNECT_IND数据包的示意图: 

         使用wireshark抓取数据包如下图:

        可以看到,依次在37、38、39信道进行广播。且相邻信道到的广播周期在1毫秒左右

        且地占空比定向广播会一直广播广播周期在几十毫秒到几百毫秒

3.2、high duty cycle

         在高占空比模式中,在相同广播信道上发送两个ADV_DIRECT_IND数据包的时间间隔应小于或等于3.75毫秒。链路层在进入广播状态后1.28秒内退出广播状态

        使用wireshark抓数据包:

        可以看到,在两个37信道发送数据包的间隔为3.751毫秒。 

        从数据包中也可以看到广播的频率非常快

        整个广播事件只持续了1.28秒后就停止了。 

四、ADV_EXT_IND

        采用ADV_EXT_IND,发起者(主机)可以在副广播物理信道上响应连接请求,从而建立ACL连接。在此事件中,广播者每发送一个AUX_ADV_IND数据包后,均应在相同的付广播物理信道上监听是否有AUX_CONNECT_REQ数据包,并应忽略可能存在的任何AUX_SCAN_REQ数据包

        当隐私未激活时,广播者接收到包含其设备地址的AUX_CONNECT_REQ数据包,且发起者的设备地址包含在之前AUX_ADV_IND数据包中,广播者应在相同的副广播信道上响应包含此设备地址的AUX_CONNECT_RSP数据包。完成AUX_CONNECT_RSP数据包发送后,广播设备的链路层应退出广播模式,并进入连接状态。任何在副广播物理信道上接收到的AUX_SCAN_REQ数据包均应被忽略。

        广播事件中的两个ADV_EXT_IND数据包时间间隔应小于或等于10毫秒。广播事件应在广播间隔内关闭。

        副广播信道索引SAdv_idx在ADV_EXT_IND数据包中的AuxPtr字段中指明。

        下图为ADV_EXT_IND但未接收到AUX_CONNECT_REQ的情况

        下图为ADV_EXT_IND并在副广播信道索引上接收到AUX_CONNECT_REQ数据包

        因为目前还没有使用过 ADV_EXT_IND,所以这里不做实例分析。

参考:

低功耗蓝牙广播事件类型之可连接定向广播 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/514680.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python中批量修改文件名,去除某些内容

环境:Window10 Python3.9 PyCharm(2023.1.3) -------------------------------------****************** ** *********************----------------------------------------- 这是在Python中批量将指定文件夹下相似的文件名,提取文件名有效信息&am…

第二十一章 RabbitMQ

一、RabbitMQ 介绍 在介绍 RabbitMQ 之前,我们先来看下面一个电商项目的场景: - 商品的原始数据保存在数据库中,增删改查都在数据库中完成。 - 搜索服务数据来源是索引库(Elasticsearch),如果数据库商品…

35.Python从入门到精通—Python CGI编程 什么是CGI

35.从入门到精通:Python CGI编程 什么是CGI 网页浏览 CGI架构图 Web服务器支持及配置 第一个CGI程序 HTTP头部 Python CGI编程什么是CGI网页浏览CGI架构图Web服务器支持及配置第一个CGI程序HTTP头部 Python CGI编程 什么是CGI CGI是一种通用网关接口,它…

Java基础 - 代码练习

第一题&#xff1a;集合的运用&#xff08;幸存者&#xff09; public class demo1 {public static void main(String[] args) {ArrayList<Integer> array new ArrayList<>(); //一百个囚犯存放在array集合中Random r new Random();for (int i 0; i < 100; …

yolov9文献阅读记录

本文记录了yolov9文献的阅读过程&#xff0c;对主要内容进行摘选翻译&#xff0c;帮助理解原理和应用&#xff0c;包括摘要、主要贡献、网络结构、主要模块&#xff0c;问题描述和试验对比等内容。 文献摘要前言摘选主要贡献相关工作可逆性结构辅助监督 问题描述信息瓶颈原理可…

windows上配置Redis主从加哨兵模式实现缓存高可用

一、哨兵模式 哨兵&#xff08;sentinel&#xff09;是Redis的高可用性(High Availability)的解决方案&#xff1a;由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器。当主服务器进入下线状态时&#xff0c;sentinel可以将该主服务器下的某…

Appium如何自动判断浏览器驱动

问题&#xff1a;有的测试机chrome是这个版本&#xff0c;有的是另一个版本&#xff0c;怎么能让自动判断去跑呢&#xff1f;&#xff1f; 解决办法&#xff1a;使用appium的chromedriverExecutableDir和chromedriverChromeMappingFile 切忌使用chromedriverExecutableDir和c…

vue处理后端返回的日志

vue处理后端返回的日志&#xff0c;并保持日志内容最新&#xff08;滚动到最新内容&#xff09; 1、后端返回的日志格式如下所示&#xff0c;该如何处理成正常的文本换行 2、在获取日志的接口中做如下处理&#xff0c;把返回的/n替换成换行标签&#xff0c;并根据任务状态判断…

Python构建高效可扩展的Web应用程序库之aiohttp使用详解

概要 在Python异步编程领域中,aiohttp库以其强大的功能成为构建高效可扩展的Web应用程序的重要工具。它利用asyncio提供异步HTTP客户端和服务器功能,使其成为处理并发请求和优化性能的理想选择。在本全面指南中,将深入探讨aiohttp库,包括安装方法、特性、基本和高级功能、…

突破校园网限速:使用 iKuai 多拨分流负载均衡 + Clash 代理(内网带宽限制通用)

文章目录 1. 简介2. iKuai 部署2.1 安装 VMware2.2 安装 iKuai(1) 下载固件(2) 安装 iKuai 虚拟机(3) 配置 iKuai 虚拟机(4) 配置 iKuai(5) 配置多拨分流 2.3 测试速度 3. Clash 部署3.1 准备工作(1) 配置磁盘分区(2) 安装 Docker(3) 安装 Clash(4) 设置代理 1. 简介 由于博主…

DETR【Transformer+目标检测】

End-to-End Object Detection with Transformers 2024 NVIDIA GTC&#xff0c;发布了地表最强的GPU B200&#xff0c;同时&#xff0c;黄仁勋对谈《Attention is All You Need》论文其中的7位作者&#xff0c;座谈的目的无非就是诉说&#xff0c;Transformer才是今天人工智能成…

vtk,ITK,DICOM3.0

(14 封私信 / 80 条消息) VTK ITK OPENCV&#xff0c;从图像处理的角度来说&#xff0c;哪种用的人多&#xff1f; - 知乎 (zhihu.com) 医学领域&#xff1a;通常要求使用ITK和VTK。 ITK做底层处理算法。 VTK做可视化显示。 ITK:Insight Segment and Regestration Toolkit …

链表之单链表

上一篇博客我们学习了线性表中的顺序表&#xff0c;这一篇博客让我们继续往下了解线性表的链表&#xff0c;链表分为好几种结构&#xff0c;活不多说&#xff0c;让我们开始学习吧&#xff01; 目录 1.链表 2.链表的结构 3.单链表的实现 1.链表 1.概念&#xff1a;它是一种物…

【QT入门】 自定义标题栏界面qss美化+按钮功能实现

往期回顾&#xff1a; 【QT入门】 鼠标按下和移动事件实现无边框窗口拖动-CSDN博客【QT入门】 设计实现无边框窗口拉伸的公用类-CSDN博客【QT入门】对无边框窗口自定义标题栏并实现拖动和拉伸效果-CSDN博客 【QT入门】 自定义标题栏界面qss美化按钮功能实现 一、最终效果 二、…

Linux简单介绍

Linux简单介绍 编译器VMware虚拟机Ubuntu——LinuxOS为什么使用LinuxOS&#xff1f; 目录结构Windows目录结构Linux操作系统home是不是家目录&#xff1f; Linux常用命令终端命令行提示符与权限切换命令tab 作用&#xff1a;自动补全上下箭头pwd命令ls命令mkdir命令touch命令rm…

Vue 大文件切片上传实现指南包会,含【并发上传切片,断点续传,服务器合并切片,计算文件MD5,上传进度显示,秒传】等功能

Vue 大文件切片上传实现指南 背景 在Web开发中&#xff0c;文件上传是一个常见的功能需求&#xff0c;尤其是当涉及到大文件上传时&#xff0c;为了提高上传的稳定性和效率&#xff0c;文件切片上传技术便显得尤为重要。通过将大文件切分成多个小块&#xff08;切片&#xff0…

小程序滑动删除组件+全选批量删除组件+附源码

小程序滑动删除组件全选批量删除组件附源码 说明 使用 uni-app、uview 组件开发&#xff0c;全端&#xff08;微信小程序、QQ小程序、抖音小程序等等&#xff09; 支持滑动删除组件、支持左滑删除、长按进入批量删除、全选删除、长按弹窗删除、 组件式开发&#xff0c;文章…

LabVIEW太赫兹波扫描成像系统

LabVIEW太赫兹波扫描成像系统 随着科技的不断发展&#xff0c;太赫兹波成像技术因其非电离性、高穿透性和高分辨率等特点&#xff0c;在生物医学、材料质量无损检测以及公共安全等领域得到了广泛的应用。然而&#xff0c;在实际操作中&#xff0c;封闭性较高的信号采集软件限制…

Leetcode 674. 最长连续递增序列

心路历程&#xff1a; 这道题和递增子序列的一样&#xff0c;由于题目中要求连续&#xff0c;实际上会让状态转移更加简单&#xff0c;因为候选的动作集合相当于更小了。 状态&#xff1a;nums的区间[0, i]&#xff0c;第i个元素和第i-1个元素的大小关系 动作&#xff1a;是否…

Vue3_2024_7天【回顾上篇watch常见的后两种场景】___续

Vue3中监听多条数据的两种使用 1.watch【使用上一章写法&#xff0c;监听两个属性&#xff0c;然后执行相应操作…】 2.watchEffect【相对于使用watch&#xff0c;watchEffect默认页面初始加载&#xff0c;有点类似加配置&#xff1a;立即执行 immediate】 代码&#xff1a; …