windows蓝牙驱动开发-在蓝牙配置文件驱动程序中接受 L2CAP 连接
L2CAP 服务器配置文件驱动程序会响应来自远程设备的传入逻辑链接控制和适应协议 (L2CAP) 连接请求。 例如,PDA 的 L2CAP 服务器配置文件驱动程序将响应来自 PDA 的传入连接请求。
接收传入 L2CAP 连接请求
1. 若要接收来自特定 PSM 的任何远程设备的传入 L2CAP 连接请求,配置文件驱动程序应先生成并发送BRB_L2CA_REGISTER_SERVER 请求,并在请求的 _BRB_L2CA_REGISTER_SERVER 结构的 BtAddress 成员中指定 NULL,并 Psm 成员中指定 0。 发送 BRB_L2CA_REGISTER_SERVER 请求时,配置文件驱动程序还必须向蓝牙驱动程序堆栈注册 L2CAP 回调函数。 这使蓝牙驱动程序堆栈能够通知配置文件驱动程序有传入 L2CAP 连接请求。
然后,配置文件驱动程序应生成并发送BRB_REGISTER_PSM 请求,以便蓝牙驱动程序堆栈将接受请求注册的 PSM 的连接。 否则,蓝牙驱动程序堆栈将拒绝具有未知(未注册)连接请求的所有连接请求。
2. 若要接收来自特定远程设备/PSM 对的传入 L2CAP 连接请求,配置文件驱动程序应生成并发送BRB_L2CA_REGISTER_SERVER 请求,并在请求的随附 _BRB_L2CA_REGISTER_SERVER 结构的 BtAddress 成员中指定远程设备的地址,并在 Psm 成员中指定 PSM。 发送 BRB_L2CA_REGISTER_SERVER 请求时,配置文件驱动程序还必须向蓝牙驱动程序堆栈注册 L2CAP 回调函数。 这使蓝牙驱动程序堆栈能够通知配置文件驱动程序有传入 L2CAP 连接请求。
3. 配置文件驱动程序应发出 IOCTL_BTH_SDP_SUBMIT_RECORD。 然后,配置文件驱动程序可以注册描述配置文件驱动程序支持的服务的 SDP 记录,以便远程系统可以使用 SDP 发现新服务。
4. 当蓝牙驱动程序堆栈接收来自远程设备的传入 L2CAP 连接请求时,蓝牙驱动程序堆栈会调用配置文件驱动程序之前注册的 L2CAP 回调函数。 蓝牙驱动程序堆栈会将值 IndicationRemoteConnect 传递给回调函数的指示参数。
5. 若要响应传入连接请求,配置文件驱动程序应生成并发送BRB_L2CA_OPEN_CHANNEL_RESPONSE 请求。 服务器配置文件驱动程序使用从回调函数的 Parameters 参数中的蓝牙驱动程序堆栈传递的值来与远程设备协商连接设置。 根据使用此请求传递的 _BRB_L2CA_OPEN_CHANNEL 结构的 Response 成员的值,服务器配置文件驱动程序接受或拒绝连接请求。
6. 如果服务器配置文件驱动程序接受连接,则蓝牙驱动程序堆栈可以调用 _BRB_L2CA_OPEN_CHANNEL 结构的 Callback 成员中指定的 L2CAP 回调函数。 蓝牙驱动程序堆栈使用此函数通知服务器配置文件驱动程序有 L2CAP 连接更改。
特点
单个配置文件驱动程序可以通过生成和发送多个 BRB_L2CA_REGISTER_SERVER 请求来注册多个 L2CAP 服务器,从而注册来自多个、不同远程设备/PSM 对的传入 L2CAP 连接请求,并在请求的BtAddress 和 Psm 成员中指定唯一的远程设备地址和 PSM 对。
单个配置文件驱动程序可以注册以接收来自特定 PSM 的任何远程设备的传入 L2CAP 连接请求,并接收来自多个不同远程设备/PSM 对的传入 L2CAP 连接请求,方法是首先注册以接收来自特定 PSM 的任何远程设备的传入 L2CAP 连接请求,然后注册以接收来自特定远程设备/PSM 对的传入 L2CAP 连接请求,前提是注册了特定的 PSM 在第一步中未再次注册。
多个配置文件驱动程序无法注册以接收来自同一 PSM 的任何远程设备的传入 L2CAP 连接请求。 蓝牙驱动程序堆栈仅允许一个配置文件驱动程序接收来自特定 PSM 的任何远程设备的传入 L2CAP 连接请求。
配置文件驱动程序接受连接请求后,可以使用其他 BRB 通过新建立的 L2CAP 连接发送和接收数据。
若要停止接收远程设备 L2CAP 连接尝试的通知,则在配置文件驱动程序处理 IRP_MN_REMOVE_DEVICE 即插即用删除通知时,配置文件驱动程序应生成并发送BRB_L2CA_UNREGISTER_SERVER 请求,以注销服务器。
相关文章:
windows蓝牙驱动开发-在蓝牙配置文件驱动程序中接受 L2CAP 连接
L2CAP 服务器配置文件驱动程序会响应来自远程设备的传入逻辑链接控制和适应协议 (L2CAP) 连接请求。 例如,PDA 的 L2CAP 服务器配置文件驱动程序将响应来自 PDA 的传入连接请求。 接收传入 L2CAP 连接请求 1. 若要接收来自特定 PSM 的任何远程设备的传入 L2CAP 连…...
【原理图PCB专题】自制汉字转码工具,适配Allgero 17版本 Skill
众所周知,在使用Skill来编写Allegro控制脚本时如果程序的源码里是汉字,那么有可能会出现乱码。比如像下图这样的程序: 在Allegro中运行如下图所示: 那么如果我们需要让他转成正常的中文字符,就需要将字符转成GBK编码 打开自制小软件:中文与GBK编码互转V1…...
欧拉公式在信号处理中的魔法:调幅信号的生成与频谱分析
欧拉公式在信号处理中的魔法:调幅信号的生成与频谱分析 “数学不是枯燥的符号,而是宇宙的诗歌。” 当我们用欧拉公式解开调幅信号的频谱密码时,仿佛看到电磁波在时空中跳动的频率之舞。这篇博客将带你亲手触摸信号处理中的数学之美。 一、当欧拉公式遇见调幅信号:一场数学与…...
如何在Ubuntu中切换多个PHP版本
在Ubuntu环境下实现PHP版本的灵活切换,是众多开发者与系统管理员的重要技能之一。下面,我们将深入探讨如何在Ubuntu系统中安装、配置及管理多个PHP版本,确保您的开发环境随心所欲地适应各类项目需求。 开始前的准备 确保您的Ubuntu系统保持…...
基于opencv的HOG+角点匹配教程
1. 引言 在计算机视觉任务中,特征匹配是目标识别、图像配准和物体跟踪的重要组成部分。本文介绍如何使用 HOG(Histogram of Oriented Gradients,方向梯度直方图) 和 角点检测(Corner Detection) 进行特征匹…...
Linux线程概念与线程操作
Linux线程概念与线程操作 线程概念 前面提到进程程序代码和数据进程结构体,在线程部分就需要进一步更新之前的认识 进程实际上承担分配系统资源的基本实体,而线程是进程中的一个执行分支,是操作系统调度的基本单位 此处需要注意࿰…...
AI软件栈:LLVM分析(五)
数据流分析是编译优化、代码生成的关键理论。其数学基础是离散数学中的半格(Semi-Lattice)和格。半格与格不仅是编译优化和代码生成的重要理论基础,也是程序分析、验证及自动化测试的系统理论基础。 文章目录 格、半格与不动点格、半格与不动点 半格是指针对二元组 < S …...
Git指南-从入门到精通
代码提交和同步命令 流程图如下: 第零步: 工作区与仓库保持一致第一步: 文件增删改,变为已修改状态第二步: git add ,变为已暂存状态 bash $ git status $ git add --all # 当前项目下的所有更改 $ git add . # 当前目录下的所有更改 $ g…...
Linux 文件系统挂载
系列文章目录 Linux内核学习 Linux 知识(1) Linux 知识(2) WSL Ubuntu QEMU 虚拟机 Linux 调试视频 PCIe 与 USB 的补充知识 vscode 使用说明 树莓派 4B 指南 设备驱动畅想 Linux内核子系统 Linux 文件系统挂载 文章目录 系列文章…...
Qt QSpinBox 总结
Qt5 QSpinBox 总结 1. 基本特性 用途:用于输入和调整整数值,支持通过上下箭头、键盘输入或编程方式修改值。 默认范围:0 到 99,可通过 setRange(min, max) 自定义。 步长控制:setSingleStep(step) 设置单步增减值&a…...
【OJ项目】深入剖析题目接口控制器:功能、实现与应用
《深入剖析题目接口控制器:功能、实现与应用》 一、引言 在在线编程平台或竞赛系统中,题目管理和提交是核心功能之一。QuestionController 类作为控制器层,承担着处理与题目相关的各种请求的重要职责,包括题目的增删改查、题目提…...
周考考题(学习自用)
1.查询student表中name叫张某的信息 select * from student where name张某; 2.写出char和varchar类型的区别 1)char存储固定长度的字符串,varchar存储可变长度的字符串(在实际长度的字符串上加上一个字节用于存储字符串长度)&a…...
【matlab】大小键盘对应的Kbname
matlab中可以通过Kbname来识别键盘上的键。在写范式的时候,遇到一个问题,我想用大键盘上排成一行的数字按键评分,比如 Kbname(1) 表示键盘上的数字1,但是这种写法只能识别小键盘上的数字,无法达到我的目的,…...
LabVIEW与小众设备集成
在LabVIEW开发中,当面临控制如布鲁克OPUS红外光谱仪这类小众专业设备的需求,而厂家虽然提供了配套软件,但由于系统中还需要控制其他设备且不能使用厂商的软件时,必须依赖特定方法通过LabVIEW实现设备的控制。开发过程中࿰…...
Android 系统Service流程
主要用到的源码文件 /frameworks/base/core/java/android/app/ContextImpl.java 和ams通信。 /frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java 初始化Service,.管理服务 ActiveServices对象mServices /frameworks/base/services/core/…...
Gartner预测2025年网络安全正在进入AI动荡时期:软件供应链和基础设施技术堆栈中毒将占针对企业使用的人工智能恶意攻击的 70% 以上
Gartner 预测,网络安全正在进入 AI 动荡时期。安全和风险管理领导者必须根据早期生成式 AI 部署的失败以及 AI 代理清洗来评估即将到来的 AI 进展。 主要发现 随着各大企业开展大量人工智能采用和开发项目,应用安全弱点的暴露程度不断提高,包…...
华为最新OD机试真题-最长子字符串的长度(一)-Python-OD统一考试(E卷)
最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 给你一个字符串…...
HAL库框架学习总结
概述:HAL库为各种外设基本都配了三套 API,查询,中断和 DMA。 一、HAL库为外设初始化提供了一套框架,这里以串口为例进行说明,调用函数 HAL_UART_Init初始化串口,此函数就会调用 HAL_UART_MspInit࿰…...
基于Spring Integration的ESB与Kettle结合实现实时数据处理技术
一、方案概述 在当今数字化时代,企业面临着海量数据的实时处理与传输挑战。ESB(企业服务总线)作为系统集成的核心组件,承担着不同协议数据的接入与转换任务,而Kettle作为一款功能强大的ETL(Extract, Transform, Load)工具,在数据抽取、转换与加载方面表现出色。将ESB与…...
qt QOpenGLContext详解
1. 概述 QOpenGLContext 是 Qt 提供的一个类,用于管理 OpenGL 上下文。它封装了 OpenGL 上下文的创建、配置和管理功能,使得开发者可以在 Qt 应用程序中以平台无关的方式使用 OpenGL。通过 QOpenGLContext,可以轻松地创建和管理 OpenGL 上下…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
