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

相关推荐
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies1 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
kakakahahahaha2 天前
Windows C盘空间不足的安全清理与迁移流程
windows·电脑·笔记本电脑·软件需求·c盘清理
做咩啊~2 天前
远程连接提示:身份验证错误,要求的函数不受支持
windows
百事牛科技2 天前
PPT只读怎么取消?四种情况分别处理
windows·powerpoint
熊明才2 天前
WSL2 网络突然瘫痪(Network is unreachable / 没有 eth0)最短修复指南(2026年9月20日亲测可用)
linux·windows·wsl2
离凌寒3 天前
一、关于linux开发板上移植ubuntu根文件系统并配置桌面环境笔记记录
驱动开发·单片机
临期冰淇淋3 天前
Unisoc 展锐平台Camera摄像头分辨率适配
linux·c语言·驱动开发
Rsingstarzengjx3 天前
第二十八章 Linux 并发与竞争实验
驱动开发·嵌入式硬件·stm32mp157
xbzb3 天前
Windows 启动故障修复知识整理:蓝屏 / 无限重启 / 盘符 X / 无 PE 盘
windows