windows蓝牙驱动开发-支持蓝牙事件通知

当配置文件驱动程序打开与远程设备的连接时,它应自行注册,以在连接关闭时或对连接做出任何其他更改时收到通知。 此外,当配置文件驱动程序自行注册以接受传入连接时,它必须能够在远程设备尝试连接到它时收到通知。

使用面向同步连接 (SCO) 的连接实现和注册 SCO 回调函数的配置文件驱动程序。 客户端配置文件驱动程序会在请求连接到远程设备时注册相应的回调函数。

当 SCO 配置文件驱动程序发出 BRB_SCO_OPEN_CHANNEL BRB 时,它会在 BRB 的相应 _BRB_SCO_OPEN_CHANNEL 结构的 Callback 成员中指定指向其 SCO 回调函数的指针。 如果远程设备接受 SCO 连接请求,则蓝牙驱动程序堆栈可以在发生对 SCO 连接的更改时通过该回调函数将通知发送到配置文件驱动程序。

使用逻辑链接控制器和适应协议 (L2CAP) 连接的配置文件驱动程序会实现并注册 L2CAP 回调函数。

当 L2CAP 配置文件驱动程序发出 BRB_L2CA_OPEN_CHANNEL BRB 时,它会在 BRB 的相应 _BRB_L2CA_OPEN_CHANNEL 结构的 Callback 成员中指定指向其 L2CAP 回调函数的指针。 如果远程设备接受 L2CAP 连接请求,则蓝牙驱动程序堆栈可以在发生对 L2CAP 连接的更改时通过该回调函数将通知发送到配置文件驱动程序。

同样,当配置文件驱动程序自行注册以接受传入(L2CAP、SCO)连接请求时,它必须注册回调函数,才能在远程设备尝试连接到它时收到通知。

使用 L2CAP 的配置文件驱动程序会在 _BRB_L2CA_REGISTER_SERVER 结构的 IndicationCallback 成员中指定其 L2CAP 回调函数。 然后,蓝牙驱动程序堆栈可以调用回调函数,以在远程设备尝试启动与配置文件驱动程序的 L2CAP 连接时通知配置文件驱动程序。

使用 L2CAP 的配置文件驱动程序会在 _BRB_SCO_REGISTER_SERVER 结构的 IndicationCallback 成员中指定其 L2CAP 回调函数。 然后,蓝牙驱动程序堆栈可以调用回调函数,以在远程设备尝试启动与配置文件驱动程序的 SCO 连接时通知配置文件驱动程序。

配置文件驱动程序注册适当的回调函数后,蓝牙驱动程序堆栈还可以在打开的连接中发生事件时通知配置文件驱动程序。

配置文件驱动程序可以注册同一回调函数,以发送有关打开的通道和尝试连接到它的远程设备的通知。

对于 L2CAP 连接,L2CAP 回调函数接受三个参数:

  • 为 L2CAP 连接定义的上下文。 对于 BRB_L2CA_REGISTER_SERVER 请求,此上下文是在随该请求一起传递的 _BRB_L2CA_REGISTER_SERVER 结构的 IndicationCallbackContext 成员中传递的值。 对于 BRB_L2CA_OPEN_CHANNEL 或 BRB_L2CA_OPEN_CHANNEL_RESPONSE 请求,此上下文是在随该请求一起传递的 _BRB_L2CA_OPEN_CHANNEL 结构的 CallbackContext 成员中传递的值;
  • 来自 INDICATION_CODE 枚举的值,指示传入 L2CAP 连接或绑定状态更改的通知事件的类型;
  • 指向包含与通知事件关联的参数的 INDICATION_PARAMETERS 结构的指针;

在 L2CAP 回调函数的 Indication 参数中传递的值用于指定配置文件驱动程序应使用的 Parameters 参数的 Parameters 联合中的哪个联合成员。

对于 SCO 连接,SCO 回调函数接受三个参数:

  • 为 SCO 连接定义的上下文。 对于 BRB_SCO_REGISTER_SERVER 请求,此上下文是在随该请求一起传递的 _BRB_SCO_REGISTER_SERVER 结构的 IndicationCallbackContext 成员中传递的值。 对于 BRB_SCO_OPEN_CHANNEL 或 BRB_SCO_OPEN_CHANNEL_RESPONSE 请求,此上下文是在随该请求一起传递的 _BRB_SCO_OPEN_CHANNEL 结构的 CallbackContext 成员中传递的值;
  • 来自 SCO_INDICATION_CODE 枚举的值,指示传入 SCO 连接或绑定状态更改的通知的类型;
  • 指向包含与通知事件关联的参数的 SCO_INDICATION_PARAMETERS 结构的指针;

在 SCO 回调函数的 Indication 参数中传递的值用于指定配置文件驱动程序应使用的 Parameters 参数的 Parameters 联合中的哪个联合成员。

处理即插即用移除 IRP

配置文件驱动程序应沿着将由蓝牙驱动程序堆栈立即处理的堆栈向下传递所有 IRP_MN_SURPRISE_REMOVAL IRP。 在处理意外移除 IRP 的过程中,请勿尝试关闭任何打开的通道。 不要在收到意外移除 IRP 后生成并发送任何将数据发送到基础无线电的更多 BR。 但是,配置文件驱动程序可以在处理意外移除 IRP 时执行其他清理。

在蓝牙驱动程序堆栈收到意外移除 IRP 后,它会将 ScoIndicationRemoteDisconnect 传递给由配置文件驱动程序在生成并发送了 BRB_SCO_OPEN_CHANNEL 或 BRB_SCO_OPEN_CHANNEL_RESPONSE 请求时指定的 SCO 回调函数,以关闭当前打开的任何 SCO 通道。 同样,蓝牙驱动程序堆栈会将 IndicationRemoteDisconnect 传递给由配置文件驱动程序在生成并发送了 BRB_L2CA_OPEN_CHANNEL 或 BRB_L2CA_OPEN_CHANNEL_RESPONSE 请求时指定的 L2CAP 回调函数,以关闭当前打开的所有 L2CAP 通道。

在处理 IRP_MN_REMOVE_DEVICE IRP 时,配置文件驱动程序应注销所有服务器。 若要注销 SCO 服务器,配置文件驱动程序应生成并发送BRB_SCO_UNREGISTER_SERVER 请求。 若要注销 L2CAP 服务器,配置文件驱动程序应生成并发送 BRB_L2CA_UNREGISTER_SERVER 请求。

相关推荐
网络探索者7 分钟前
DirectX修复工具(DirectX Repair)官网免费下载
windows
星星点灯50821 分钟前
盛铂科技FlexDDS-NG:12通道相位连续DDS信号发生器,400MHz高频输出赋能量子光学与超冷原子研究
驱动开发·科技·测试工具·量子计算·模块测试·射频工程
心灵宝贝1 小时前
SQLyog一款被遗忘的MySQL管理利器深度解析
windows
Doris Liu.8 小时前
如何检测代码注入(Part 2)
windows·python·安全·网络安全·网络攻击模型
bjxiaxueliang8 小时前
一文详解QT环境搭建:Windows使用CLion配置QT开发环境
开发语言·windows·qt
小麦嵌入式15 小时前
Linux驱动开发实战(九):Linux内核pinctrl_map详解与优势分析
linux·c语言·汇编·驱动开发·stm32·嵌入式硬件·硬件工程
郁大锤16 小时前
如何在 Windows 上安装与配置 Tomcat
java·windows·tomcat
松树戈19 小时前
windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享【实操&常见问题解决思路】
linux·windows·ubuntu·ssh
〆、风神20 小时前
策略模式与元数据映射模式融合 JSR 380 验证规范实现枚举范围校验
windows·spring·策略模式
开开心心就好20 小时前
开启智能生活新篇:免费 APP 实现家电万能操控
java·windows·python·微信·pdf·生活·软件需求