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 请求。

相关推荐
阿白的白日梦16 小时前
winget基础管理---更新/修改源为国内源
windows
埃博拉酱5 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
唐宋元明清21885 天前
.NET 本地Db数据库-技术方案选型
windows·c#
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
tryCbest5 天前
Windows环境下配置pip镜像源
windows·pip
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
百事牛科技5 天前
保护文档安全:PDF限制功能详解与实操
windows·pdf
一个人旅程~5 天前
如何用命令行把win10/win11设置为长期暂停更新?
linux·windows·经验分享·电脑
一个假的前端男5 天前
[特殊字符] Flutter 安装完整指南 Windows—— 2026最新版
windows·flutter
倚肆6 天前
在 Windows Docker 中安装并配置 Nginx (映射 Windows 端口与路径)
windows·nginx·docker