在蓝牙配置文件驱动程序中接受 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 的连接。 否则,蓝牙驱动程序堆栈将拒绝具有未知(未注册)连接请求的所有连接请求。 有关 PSM 的详细信息,请参阅 _BRB_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 连接请求,并在请求的BtAddressPsm 成员中指定唯一的远程设备地址和 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 请求,以注销服务器。

有关通知和回调函数的详细信息,请参阅支持蓝牙事件通知