Создание подключения клиента L2CAP к удаленному устройству
Драйвер профиля клиента L2CAP — это драйвер профиля, который запрашивает асинхронное подключение без подключения (ACL) к удаленному устройству. Если устройство принимает подключение, драйвер профиля клиента L2CAP получает уведомление о любых изменениях в подключении. Например, драйвер профиля клиента L2CAP может запросить подключение к удаленному принтеру, и после того, как принтер примет запрос, стек драйверов Bluetooth может уведомить драйвер профиля о том, что принтер отключен или удален.
Чтобы запросить подключение к устройству, драйвер профиля клиента L2CAP должен иметь сведения об удаленном устройстве, например мультиплексор протокола или службы (PSM), используемый устройством. Драйвер профиля клиента может получить эти сведения через DDIs протокола обнаружения служб (SDP) или через фиксированный PSM службы. Дополнительные сведения о том, как получить эти сведения, см. в разделе Доступ к сведениям о службе SDP.
Чтобы инициировать подключение L2CAP к удаленному устройству, после того как драйвер профиля клиента получает необходимые сведения об устройстве, он должен выполнить сборку и отправитьзапрос BRB_L2CA_OPEN_CHANNEL .
Когда драйвер профиля клиента создает запрос, он предоставляет указатель на структуру _BRB_L2CA_OPEN_CHANNEL в элементе Parameters.Others.Argument1 IRP, связанного с запросом. Эта структура содержит адрес Bluetooth для удаленного устройства, PSM, зарегистрированный для устройства, и дополнительные параметры конфигурации.
Если удаленное устройство принимает запрос на открытый канал, элементы OutResults и InResults структуры _BRB_L2CA_OPEN_CHANNEL содержат сведения о созданном подключении. Элемент OutResults задает параметры для исходящей половины канала, а член InResults — параметры для входящей половины канала.
Некоторые из значений конфигурации, передаваемых в структуру _BRB_L2CA_OPEN_CHANNEL, например элемент Mtu , используются для согласования подключения с удаленным устройством. Драйверы профилей клиентов должны предоставлять как можно более широкий диапазон, чтобы повысить вероятность успешного согласования каналов. Указание минимального размера единиц передачи сообщений (MTU), превышающего базовый минимальный размер MTU Bluetooth, следует выполнять только при крайней необходимости. Если согласование завершается сбоем, подключение завершится ошибкой.
Член IncomingQueueDepth структуры _BRB_L2CA_OPEN_CHANNEL указывает максимальное количество единиц mtu, которые будет получать стек драйверов Bluetooth, и помещать их в очередь на подключение до того, как стек драйверов Bluetooth начнет удалять их. Установка этого значения в очень небольшое число увеличивает вероятность потери данных, а установка очень большого числа увеличивает требования к памяти. Корпорация Майкрософт рекомендует установить для этого участника значение 10.
Если драйвер профиля больше не требует подключения L2CAP к удаленному устройству, он должен выполнить сборку и отправитьзапрос BRB_L2CA_CLOSE_CHANNEL .