Тонкости использования L2CAP в реализации профиля HID.
Профиль HID использует протокол управления логической связью и адаптацией (Logical Link Control and Adaptation Protocol – L2CAP).
Для полноценной работы профиля обязательным условием является использование 2х или более каналов L2CAP для передачи и приема пакетов управления и данных.
Хост, для bluetooth HID, открывает 2 канала L2CAP: канал управления и канал данных. Для того, что бы использовать 2 разных канала (а каналы назначаются динамически), профиль HID использует 2 различных протокольных/сервисных мультиплексора (PSM — Protocol/Service Multiplexer).
Значения этих PSM однозначно определены в спецификации «Assigned Numbers»:
— для канала управления: 0х0011;
— для канала данных (в HID он называется канал прерываний): 0х0013.
Различия в реализации L2CAP для стеков Broadcom и Microsoft.
Мобильные устройства на базе ОС Windows Mobile в основном используют один из 2х стеков:
— стек от Broadcom;
— стек от Microsoft.
Broadcom в своем SDK для стека, предоставляет интерфейсы для работы с L2CAP:
— CL2CapIf — класс для установки значений PSM и регистрации этих значений в протоколе L2CAP;
— CL2CapConn — класс, управляющий соединениями L2CAP.
Благодаря наличию этих двух классов управление протоколом L2CAP не вызывает никаких затруднений, чего не скажешь о…
Microsoft, которая в своем SDK не предоставляет API для работы с L2CAP :(.
У этой фирмы несколько другой подход к тому, как реализовать протокол L2CAP, а именно Microsoft предлагает использовать так называемый Bluetooth Stack Extension Layer, позволяющий расширять базовую функциональность её стека через написание потокового драйвера. Вот об этом хорошо написано в MSDN, и если еще приложить чуток терпения, то окажется, что в Windows CE Embedded 5.0 есть уже готовый пример Installable Stream Driver именно для L2CAP.
У себя в реализации я использовал готовый пример, только адаптировал его для конкретного применения.
Благодарю за внимание и успехов в изучении технологии 😉