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

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线程概念与线程操作 线程概念 前面提到进程程序代码和数据进程结构体,在线程部分就需要进一步更新之前的认识 进程实际上承担分配系统资源的基本实体,而线程是进程中的一个执行分支,是操作系统调度的基本单位 此处需要注意&#xff0…...

AI软件栈:LLVM分析(五)

数据流分析是编译优化、代码生成的关键理论。其数学基础是离散数学中的半格(Semi-Lattice)和格。半格与格不仅是编译优化和代码生成的重要理论基础,也是程序分析、验证及自动化测试的系统理论基础。 文章目录 格、半格与不动点格、半格与不动点 半格是指针对二元组 < S …...

Git指南-从入门到精通

代码提交和同步命令 流程图如下&#xff1a; 第零步: 工作区与仓库保持一致第一步: 文件增删改&#xff0c;变为已修改状态第二步: git add &#xff0c;变为已暂存状态 bash $ git status $ git add --all # 当前项目下的所有更改 $ git add . # 当前目录下的所有更改 $ g…...

Linux 文件系统挂载

系列文章目录 Linux内核学习 Linux 知识&#xff08;1&#xff09; Linux 知识&#xff08;2&#xff09; WSL Ubuntu QEMU 虚拟机 Linux 调试视频 PCIe 与 USB 的补充知识 vscode 使用说明 树莓派 4B 指南 设备驱动畅想 Linux内核子系统 Linux 文件系统挂载 文章目录 系列文章…...

Qt QSpinBox 总结

Qt5 QSpinBox 总结 1. 基本特性 用途&#xff1a;用于输入和调整整数值&#xff0c;支持通过上下箭头、键盘输入或编程方式修改值。 默认范围&#xff1a;0 到 99&#xff0c;可通过 setRange(min, max) 自定义。 步长控制&#xff1a;setSingleStep(step) 设置单步增减值&a…...

【OJ项目】深入剖析题目接口控制器:功能、实现与应用

《深入剖析题目接口控制器&#xff1a;功能、实现与应用》 一、引言 在在线编程平台或竞赛系统中&#xff0c;题目管理和提交是核心功能之一。QuestionController 类作为控制器层&#xff0c;承担着处理与题目相关的各种请求的重要职责&#xff0c;包括题目的增删改查、题目提…...

周考考题(学习自用)

1.查询student表中name叫张某的信息 select * from student where name张某; 2.写出char和varchar类型的区别 1&#xff09;char存储固定长度的字符串&#xff0c;varchar存储可变长度的字符串&#xff08;在实际长度的字符串上加上一个字节用于存储字符串长度&#xff09;&a…...

【matlab】大小键盘对应的Kbname

matlab中可以通过Kbname来识别键盘上的键。在写范式的时候&#xff0c;遇到一个问题&#xff0c;我想用大键盘上排成一行的数字按键评分&#xff0c;比如 Kbname(1) 表示键盘上的数字1&#xff0c;但是这种写法只能识别小键盘上的数字&#xff0c;无法达到我的目的&#xff0c;…...

LabVIEW与小众设备集成

在LabVIEW开发中&#xff0c;当面临控制如布鲁克OPUS红外光谱仪这类小众专业设备的需求&#xff0c;而厂家虽然提供了配套软件&#xff0c;但由于系统中还需要控制其他设备且不能使用厂商的软件时&#xff0c;必须依赖特定方法通过LabVIEW实现设备的控制。开发过程中&#xff0…...

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 预测&#xff0c;网络安全正在进入 AI 动荡时期。安全和风险管理领导者必须根据早期生成式 AI 部署的失败以及 AI 代理清洗来评估即将到来的 AI 进展。 主要发现 随着各大企业开展大量人工智能采用和开发项目&#xff0c;应用安全弱点的暴露程度不断提高&#xff0c;包…...

华为最新OD机试真题-最长子字符串的长度(一)-Python-OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 给你一个字符串…...

HAL库框架学习总结

概述&#xff1a;HAL库为各种外设基本都配了三套 API&#xff0c;查询&#xff0c;中断和 DMA。 一、HAL库为外设初始化提供了一套框架&#xff0c;这里以串口为例进行说明&#xff0c;调用函数 HAL_UART_Init初始化串口&#xff0c;此函数就会调用 HAL_UART_MspInit&#xff0…...

基于Spring Integration的ESB与Kettle结合实现实时数据处理技术

一、方案概述 在当今数字化时代,企业面临着海量数据的实时处理与传输挑战。ESB(企业服务总线)作为系统集成的核心组件,承担着不同协议数据的接入与转换任务,而Kettle作为一款功能强大的ETL(Extract, Transform, Load)工具,在数据抽取、转换与加载方面表现出色。将ESB与…...

qt QOpenGLContext详解

1. 概述 QOpenGLContext 是 Qt 提供的一个类&#xff0c;用于管理 OpenGL 上下文。它封装了 OpenGL 上下文的创建、配置和管理功能&#xff0c;使得开发者可以在 Qt 应用程序中以平台无关的方式使用 OpenGL。通过 QOpenGLContext&#xff0c;可以轻松地创建和管理 OpenGL 上下…...

信息时代个人知识管理:从碎片化信息到结构化洞察的实践指南

1. 信息海洋中的航行&#xff1a;从碎片到洞察我们正漂浮在一片前所未有的信息海洋里。每天&#xff0c;无数的邮件、通知、文章、帖子像潮水般涌来&#xff0c;我们则像一个个拾贝者&#xff0c;快乐地捡拾着那些零碎的趣闻和知识的金块。这种感觉很奇妙&#xff0c;不是吗&am…...

告别RAM焦虑:手把手教你用MicroBlaze BootLoader把大程序塞进QSPI Flash和DDR3

突破FPGA内存瓶颈&#xff1a;MicroBlaze大型程序加载实战指南 当你的MicroBlaze项目从简单的控制逻辑升级到需要文件系统、网络协议栈甚至实时操作系统时&#xff0c;代码体积的膨胀速度往往超出预期。那些曾经足够用的BRAM资源突然变得捉襟见肘——这就像试图在智能手机上运行…...

从键盘到5G模组:深入浅出聊聊USB那些五花八门的‘设备类’(HID/CDC/MSC)

从键盘到5G模组&#xff1a;深入浅出聊聊USB那些五花八门的‘设备类’&#xff08;HID/CDC/MSC&#xff09; 当你在键盘上敲下字符、用U盘拷贝文件&#xff0c;或是通过4G模块联网时&#xff0c;背后都有一群看不见的"协议翻译官"在忙碌——它们就是USB设备类&#x…...

用MATLAB复现机载雷达杂波频谱:从Morchin模型到LFM信号仿真的保姆级教程

MATLAB实战&#xff1a;机载雷达杂波频谱建模与LFM信号仿真全解析 雷达信号处理工程师常面临一个经典难题&#xff1a;如何将教科书中的杂波理论转化为可运行的代码&#xff1f;本文将以Morchin模型为核心&#xff0c;手把手带你完成从地/海杂波建模到LFM雷达回波仿真的完整链路…...

别再为Canvas跨域头疼了!手把手教你用UniApp H5搞定网络图片转Base64并生成海报(附完整代码)

UniApp H5开发实战&#xff1a;Canvas跨域图片处理与海报生成全攻略 在移动端H5开发中&#xff0c;Canvas绘制网络图片并生成分享海报是个常见需求&#xff0c;但跨域问题往往让开发者头疼不已。本文将带你深入理解Canvas的CORS限制本质&#xff0c;对比两种主流解决方案的技术…...

Ubuntu 22.04 LTS 安装 NVIDIA 驱动保姆级教程:告别 Nouveau 报错,一步到位

Ubuntu 22.04 LTS 终极NVIDIA驱动安装指南&#xff1a;从原理到实战 刚接触Ubuntu的新手用户&#xff0c;在安装NVIDIA驱动时往往会遇到各种报错&#xff0c;尤其是经典的"Nouveau in use"错误。本文将带你深入理解驱动冲突的底层原理&#xff0c;并提供一套完整的解…...

别再在循环里写Thread.sleep()了!IntelliJ IDEA这个告警到底在说什么?

循环中的Thread.sleep()&#xff1a;为什么IntelliJ IDEA警告你正在"忙等待"&#xff1f; 在IntelliJ IDEA中编写Java代码时&#xff0c;你是否遇到过这样的警告&#xff1a;"Call to Thread.sleep() in a loop, probably busy-waiting"&#xff1f;这个看…...

告别枯燥理论:用51单片机和DAC0832做个迷你音乐合成器,汇编语言实现《小星星》

用51单片机和DAC0832打造迷你音乐合成器&#xff1a;汇编语言实现《小星星》全解析 在嵌入式系统学习的道路上&#xff0c;很多初学者都会遇到一个共同的问题&#xff1a;如何将枯燥的理论知识转化为有趣的实际应用&#xff1f;今天&#xff0c;我们就来打破常规&#xff0c;用…...

为什么你的Windows任务栏需要一次彻底的美学革命?

为什么你的Windows任务栏需要一次彻底的美学革命&#xff1f; 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否曾经盯着Windows桌面…...

ITR9909反射光电管实测:10cm检测距离怎么来的?手把手教你做距离-电压曲线

ITR9909反射光电管深度测评&#xff1a;从原理到实战的距离-电压曲线构建指南 在工业自动化、机器人导航和智能家居领域&#xff0c;反射式光电检测管因其非接触式检测特性而广受欢迎。ITR9909作为一款性能优异的反射式红外光电管&#xff0c;其标称的10cm检测距离背后隐藏着怎…...