当前位置: 首页 > news >正文

【0x0043】HCI_Write_Inquiry_Scan_Type详解

目录

一、命令概述

二、命令格式及参数说明

2.1. HCI_Write_Inquiry_Scan_Type命令格式

2.2. Scan_Type

 2.3.具体格式示例

三、响应事件及参数说明

3.1. HCI_Command_Complete事件

3.2. Status

四、命令执行流程

4.1. 命令准备阶段

4.2. 命令传输阶段

4.3. 命令处理阶段

4.4. 结果反馈阶段

4.5. 主机响应阶段

4.6. 示例代码

 五、使用场景

5.1. 设备发现与配对

5.2. 连接状态管理

5.3. 低功耗管理

5.4. 安全与隐私

5.5. 特定环境下的设备发现优化

5.6. 蓝牙网络管理和优化

六、注意事项

6.1. 兼容性考虑

6.2. 性能影响

6.3. 错误处理

6.4. 安全考虑


HCI_Write_Inquiry_Scan_Type是蓝牙主机控制器接口(Host Controller Interface,HCI)中的一个命令,用于设置蓝牙设备的查询扫描(Inquiry Scan)类型。查询扫描是蓝牙设备用于发现周围其他蓝牙设备的一种机制。通过这个命令,主机可以控制蓝牙设备在查询扫描过程中的行为和特性。

一、命令概述

主要功能是设置本地蓝牙基本速率 / 增强数据速率(BR/EDR)控制器的查询扫描类型配置参数。它在蓝牙通信中起着关键的作用,因为查询扫描是蓝牙设备发现周围其他蓝牙设备的重要机制之一。通过这个命令,设备可以调整其在查询扫描过程中的行为,以适应不同的应用场景和需求。 

  • 控制设备可发现性:通过设置不同的查询扫描类型,可以控制蓝牙设备自身的可发现性程度。例如,在一般查询扫描模式下,设备更容易被其他设备发现,因为它持续扫描的时间较长,发出的查询请求也更多。而在有限查询扫描模式下,设备的可发现性相对较低,因为扫描时间较短。
  • 优化资源使用:不同的查询扫描类型对设备的资源消耗不同。有限查询扫描可以节省设备的电量和处理资源,因为它扫描的时间较短,减少了设备在扫描过程中的功耗和处理器占用。而一般查询扫描可能会消耗更多的资源,但能提供更全面的设备发现能力。
  • 适应不同应用场景:根据具体的应用需求,可以选择不同的查询扫描类型。例如,在需要快速连接到特定设备的场景下,可以使用有限查询扫描,以减少扫描时间并尽快进入连接建立阶段。而在需要广泛搜索周围设备的场景下,如蓝牙设备配对中心,一般查询扫描可能更合适。

二、命令格式及参数说明

2.1. HCI_Write_Inquiry_Scan_Type命令格式

HCI_Write_Inquiry_Scan_Type命令的格式通常遵循HCI(Host Controller Interface)命令包的通用结构。

具体参数可能因蓝牙规范版本的不同而有所差异,但一般包括以下内容:

  • HCI Packet Indicator:表示该数据包的类型。对于命令包,其值通常为0x01
  • Opcode(操作码):由OGF(Operation Group Field,操作组字段)和OCF(Operation Code Field,操作码字段)组成。
    • OGF:操作组字段,用于标识命令所属的操作组。对于HCI_Write_Inquiry_Scan_Type指令,OGF通常为0x03,表示该指令属于HCI Control and Baseband commands(HCI控制和基带命令)。
    • OCF:在OGF指定的组内,唯一标识该命令的字段。对于HCI_Write_Inquiry_Scan_Type命令,OCF的值是特定的,但可能因蓝牙规范版本而异。
  • Parameter Total Length(参数总长度):表示后续参数部分的字节数。对于HCI_Write_Inquiry_Scan_Type命令,参数长度通常为1字节(因为只包含一个扫描类型参数)。
  • Parameters(参数):紧接参数长度字段之后,包含实际要设置的扫描类型值。
    • Scan_Type:这是一个字节的参数,用于指定查询扫描类型。具体的取值和含义由蓝牙规范定义。

2.2. Scan_Type

Scan_Type参数是蓝牙设备在进行扫描时的重要配置之一,它决定了设备如何接收和处理来自其他蓝牙设备的广播数据包。通过正确设置Scan_Type参数,可以优化设备发现过程,提高扫描效率,并降低功耗。

 Scan_Type 的大小为 1 个八位字节(octet),意味着这个参数占用 1 个字节的存储空间。

  • 0x00 - Standard Scan (default)标准扫描类型,通常也是默认的扫描类型。

    • 当 Scan_Type 设置为 0x00 时,蓝牙设备将执行标准扫描操作。具体的标准扫描行为可能包括在特定的时间间隔内监听蓝牙信号,以发现周围的蓝牙设备。这种扫描方式可能是一种较为常规的、平衡性能和功耗的扫描方式。
    • 作为默认值,在没有特殊需求的情况下,设备通常会使用标准扫描来进行设备发现和连接建立等操作。
  • 0x01 - Interlaced Scan交织扫描类型

    • 交织扫描可能涉及一种更为复杂的扫描策略,例如在不同的时间点或频率上交替进行不同类型的扫描操作,或者与其他设备的扫描行为进行协调以提高扫描效率和准确性。
    • 具体的交错扫描行为取决于蓝牙设备的实现和应用场景。这种扫描类型可能适用于特定的环境或需求,例如在高干扰环境中提高设备发现的准确性,或者在需要与多个设备进行协调扫描的情况下使用。
  • All other values - Reserved for future use:除了 0x00 和 0x01 之外的其他所有取值目前都被保留用于未来的使用。

 2.3.具体格式示例

假设我们使用的是蓝牙核心规范中定义的格式,并且OCF对于HCI_Write_Inquiry_Scan_Type命令是已知的(注意:实际OCF值需要查阅特定版本的蓝牙核心规范):

相关文章:

【0x0043】HCI_Write_Inquiry_Scan_Type详解

目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Write_Inquiry_Scan_Type命令格式 2.2. Scan_Type 2.3.具体格式示例 三、响应事件及参数说明 3.1. HCI_Command_Complete事件 3.2. Status 四、命令执行流程 4.1. 命令准备阶段 4.2. 命令传输阶段 4.3. 命令处理…...

飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 本文旨在详细介绍如何在飞牛云NAS上利用Docker部署WordPress&a…...

ctfshow-web入门-SSTI(web361-web368)上

目录 1、web361 2、web362 3、web363 4、web364 5、web365 6、web366 7、web367 8、web368 1、web361 测试一下存在 SSTI 注入 方法很多 (1)使用子类可以直接调用的函数来打 payload1: ?name{{.__class__.__base__.__subclasses__…...

pyinstaller+upx给python GUI程序添加自定义图标

一、在线.ico图标生成 windows用48x48尺寸 https://www.ico51.cn/ 二、upx打包图标工具 https://upx.github.io/ 三、UI文件生成py代码 pyside2-uic window.ui > window.py 四、打包命令 1、–icon:这个是.ico图标路径 2、–upx-dir:upx打包工…...

LeetCode【0034】在排序数组中查找元素的第一个和最后一个位置

本文目录 1 中文题目2 求解方法:左右边界二分查找2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存…...

react-markdown内容宽度溢出和换行不生效问题

情景复现: 解决办法,添加样式进行限制 /* index.css */ .markdown-container {word-break: break-word; /* 强制长单词断行 */white-space: pre-wrap; /* 保留空白符序列,但是正常地进行换行 */overflow-wrap: break-word; /* 在长单词或…...

uniapp 上传 base64 图片

在图片裁剪时候返回的是base64文件 需要上传到obs一般出现在h5网页端 可以直接使用 js 原始解决 应该只可以在h5浏览器内使用 // 提取 Base64 编码部分 const base64Data e.tempFilePath.replace(/^data:image\/(\w);base64,/, ""); // 将 Base64 编码转换为 Arra…...

让Git走代理

有时候idea提交代码或者从github拉取代码,一直报错超时或者:Recv failure: Connection was reset,下面记录一下怎么让git走代理从而访问到github。 1.打开梯子 2.打开网络和Internet设置 3.设置代理 记住这个地址和端口 4.打开git bash终端 输入以下内容 git c…...

通义千问API调用测试 (colab-python,vue)

文章目录 代码(来自官网)colab中用python测试Qwen2.5在官网上查看并确定过期时间这里看到我的免费额度到25年5月在同一个页面,点击API示例 前端调用直接在前端调用的优缺点以vue为例(代码是基于官网node.js的代码转换而来&#xf…...

H3C ER8300G2-X未授权导致信息泄露漏洞(CVE-2024-32238)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

随手记:简单实现纯前端文件导出(XLSX)

1.需求背景: 由于导入需要经过后端存储数据库,所以导入还是和后端联调 但是简单的前端导出有部分是可以直接给到用户 xlsx插件简介 xlsx插件(通常指的是SheetJS/js-xlsx)是一个强大的JavaScript库,它允许你在浏览器…...

SwiftUI 高级开发教程系列 - 第 3 章:数据持久化

在现代应用中,数据持久化是一项非常重要的功能,它使得应用的数据可以在重启后依然保留,提升用户体验。SwiftUI 提供了多种数据持久化方法,包括使用 UserDefaults 保存简单数据和 Core Data 进行更复杂的数据管理。本章将详细讲解这两种技术的用法,并展示如何在 SwiftUI 项…...

代码随想录第二十四天| 93.复原IP地址 78.子集 90.子集II

93. 复原IP地址 题目描述 给定一个只包含数字的字符串 s,复原它并返回所有可能的有效 IP 地址格式。 一个有效的 IP 地址 由四个整数部分组成,每部分的取值范围是 0-255,每个部分不能包含前导零。 解题思路 这道题目要求我们将一个数字字…...

Linux编程:基于 Unix Domain Socket 的进程/线程间通信实时性优化

文章目录 0. 引言1. 使用 epoll 边缘触发模式非不要不选择阻塞模式边缘触发(ET)模式优点示例 2. 使用实时调度策略3. CPU 绑定4. 使用无锁缓冲区5. 优化消息传递的大小和频率6. 使用 SO_RCVTIMEO 和 SO_SNDTIMEO7. 示例代码其他阅读 0. 引言 前几天被问…...

PET-文件包含-FINISHED

include发生错误报warning,继续执行。require发生错误直接error,不继续执行 无视扩展名,只要能解析,就能当可执行文件执行,哪怕文件后缀或没后缀 1 条件竞争 pass17 只需要知道tmp的路径。把xieshell.jpg上传&…...

《WebGL编程指南》书籍分享

在这个数字化时代,WebGL作为一门前沿的图形渲染技术,为网页带来了前所未有的交互体验。今天,我很荣幸向大家分享一本关于学习WebGL的书籍——《Webgl编程指南》 电子版下载链接: https://pan.baidu.com/s/1eTX2Y5ynYH0pUQRf0Jcbow?...

go T 泛型

目录 1、类型约束 2、泛型函数 3、泛型结构体 4、泛型接口 5、以接口作为类型约束 关键词:泛型、类型参数、类型约束 Go 语言在 1.18 版本引入了泛型(Generics)特性,可以编写更通用、可复用的代码,泛型可以用于&a…...

React的基础API介绍(二)

目录 useStateuseState 的基本原理1. 状态在函数组件中的引入2. useState 的工作机制3. Hook 状态与组件渲染 useState 的使用方法1. 基本用法2. 多个状态变量3. 更新状态 注意事项与最佳实践1. 状态更新可能是异步的2. 不要直接修改状态3. 更新对象或数组状态4. 避免闭包陷阱 …...

远程开发测试必看:如何在群晖NAS上运行网页版Ubuntu

文章目录 前言1. 下载Docker-Webtop镜像2. 运行Docker-Webtop镜像3. 本地访问网页版Linux系统4. 群晖NAS安装Cpolar工具5. 配置异地访问Linux系统6. 异地远程访问Linux系统7. 固定异地访问的公网地址 前言 本文将详细讲解如何在群晖NAS上部署docker-webtop,并利用c…...

JAVA题目笔记(十五)经典算法题

一、按要求排序 要求:定义数组并存储一些女朋友对象,利用Arrays中的sort方法进行排序 属性包括:姓名,年龄,身高 按照年龄大小进行排序,年龄一样按照身高排序,身高一样按照姓名字母进行排序。…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...