Этот пример показывает, как сгенерировать и декодировать кадры Bluetooth® Low Energy L2CAP, пользующиеся Библиотекой Communications Toolbox™ для Протокола Bluetooth®.
Спецификация [1] Ядра Bluetooth включает версию Низкой энергии (LE) для беспроводных персональных сетей области с низкой ставкой, которая упоминается как Bluetooth низкая энергия (BLE) или Умный Bluetooth. Стек BLE состоит из: Типичный Профиль Атрибута (GATT), Протокол Атрибута (ATT), Протокол менеджера безопасности (SMP), Управление Логической ссылкой и Протокол (L2CAP) Адаптации, слой Link и Физический уровень. BLE был добавлен к стандарту для низких энергетических устройств, генерирующих небольшие количества данных, такие как предупреждения уведомления, используемые в таких приложениях как домашняя автоматизация, здравоохранение, фитнес и Интернет вещей (IoT).
Слой L2CAP в BLE соответствует более высокому подуровню т.е. Управлению логической ссылкой (LLC) Слоя Канала передачи данных в эталонной модели OSI. L2CAP выше PHY и Слоя Ссылки BLE. Спецификация BLE оптимизирована и упрощенная L2CAP когда по сравнению с классическим Bluetooth.
L2CAP в BLE ответственен за: (i) установление логического соединения (ii) протокол, мультиплексирующий (iii) сегментация и повторная сборка (iv) управление потоками на 'динамический' канал L2CAP.
Слой L2CAP добавляет основной заголовок L2CAP в полезную нагрузку более высокого слоя и передает Модуль данных о протоколе (PDU) Слою Ссылки ниже его.
Кадры L2CAP состоят из двух подкатегорий: кадры Данных и Сигнальные кадры. Существуют различные типы кадров в этих двух категориях кадров. Кадры Данных снова подкатегоризированы в B-кадр (Кадр основной информации) и кадр LE (Низкий кадр информации об энергии). Каждый тип кадра имеет свой собственный формат.
Идентификатор канала (идентификация вызывающего абонента) является локальным именем, представляющим логическую конечную точку канала на устройстве. Для протоколов, таких как ATT и SMP, эти каналы фиксируются Специальной группой (SIG) Bluetooth. Для специализированных профилей, таких как Профиль поддержки межсетевого протокола (IPSP) и Объектный профиль передачи (OTP), динамически выделяются эти каналы.
Сигнальные кадры используются с фиксированным логическим каналом, названным, сигнализируя о канале ('0005'), и используются для установления логического соединения между равноправными устройствами с помощью LE основанный на кредите механизм управления потоками. Эти сигнальные кадры также используются для обновления параметров связи (Ведомая задержка, тайм-аут Связи, Минимальный интервал связи и Максимальный интервал связи), когда параметры связи запрашивают, чтобы процедура не была поддержана в Слое Ссылки.
Кадры данных (B-кадры и кадры LE) несут полезную нагрузку верхнего уровня как 'информационная Полезная нагрузка' в ее формате кадра. B-кадры используются, чтобы нести зафиксированные каналы (ATT и SMP с фиксированными логическими каналами '0004' и '0006' соответственно) полезная нагрузка. Кадры LE используются, чтобы нести полезную нагрузку через динамически созданные логические каналы для специализированных профилей, таких как IPSP и OTP.
Этот пример иллюстрирует генерацию и декодирование следующих кадров. Для списка других сигнальных поддерживаемых кадров смотрите свойство CommandType.
1. Кредит управления потоками: Этот сигнальный кадр передается, чтобы создать и сконфигурировать логический канал L2CAP между двумя устройствами.
2. B-кадры по фиксированным каналам (ATT, SMP, и т.д.): Этот кадр используется для переноса фиксированной полезной нагрузки каналов в основном режиме L2CAP.
3. Кадры LE по динамическим каналам (профилирует как IPSP, OTP, и т.д.): Этот кадр используется для переноса динамической полезной нагрузки каналов в LE основанный на кредите режим управления потоками.
Можно использовать функцию bleL2CAPFrame, чтобы сгенерировать кадр L2CAP. Эта функция признает, что настройка возражает bleL2CAPFrameConfig. Этот объект конфигурирует поля, требуемые для генерации кадра L2CAP.
Сигнализация о генерации кадра
Чтобы сгенерировать сигнальный кадр, создайте объект bleL2CAPFrameConfig с набором ChannelIdentifier
к '0005'
.
cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0005');
Сконфигурируйте поля:
% Command type cfgL2CAP.CommandType = 'Flow control credit'; % Source channel identifier cfgL2CAP.SourceChannelIdentifier = '0041'; % LE credits cfgL2CAP.Credits = 25
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0005' CommandType: 'Flow control credit' SignalIdentifier: '01' SourceChannelIdentifier: '0041' Credits: 25
Сгенерируйте 'Команду' кредита управления потоками.
sigFrame = bleL2CAPFrame(cfgL2CAP);
Генерация B-кадра
Чтобы сгенерировать B-кадр (несущий PDU ATT), создайте объект bleL2CAPFrameConfig с набором ChannelIdentifier
к '0004'
(ID канала ATT).
cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0004')
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0004'
B-кадр используется, чтобы передать полезную нагрузку от верхнего уровня ATT. 5-байтовый PDU ATT используется в качестве полезной нагрузки в этом примере.
payload = ['04';'01';'00';'FF';'FF'];
Сгенерируйте B-кадр L2CAP с помощью полезной нагрузки и настройки.
bFrame = bleL2CAPFrame(cfgL2CAP, payload);
Генерация кадра LE
Чтобы сгенерировать кадр LE, создайте объект bleL2CAPFrameConfig с набором ChannelIdentifier
к '0035'
.
cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0035')
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0035'
Кадр LE используется, чтобы передать полезную нагрузку динамических каналов. 2-байтовая полезная нагрузка используется в этом примере.
payload = ['01';'02'];
Сгенерируйте кадр LE L2CAP с помощью полезной нагрузки и настройки.
leFrame = bleL2CAPFrame(cfgL2CAP, payload);
Можно использовать функцию bleL2CAPFrameDecode, чтобы декодировать кадр L2CAP. Этот функциональные выходные параметры следующая информация:
состояние:
перечисление типа blePacketDecodeStatus, который указывает, было ли декодирование L2CAP успешно.
cfgL2CAP
: L2CAP структурирует объект настройки типа bleL2CAPFrameConfig, который содержит декодируемые свойства L2CAP.
Эта функция принимает кадр BLE L2CAP как вход.
Декодирование Сигнального кадра
[sigFrameDecodeStatus, cfgL2CAP] = bleL2CAPFrameDecode(sigFrame); % Observe the outputs % Decoding is successful if strcmp(sigFrameDecodeStatus, 'Success') fprintf('L2CAP decoding status is: %s\n\n', sigFrameDecodeStatus); fprintf('Received L2CAP signaling frame configuration is:\n'); cfgL2CAP % Decoding failed else fprintf('L2CAP decoding status is: %s\n', sigFrameDecodeStatus); end
L2CAP decoding status is: Success Received L2CAP signaling frame configuration is: cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0005' CommandType: 'Flow control credit' SignalIdentifier: '01' SourceChannelIdentifier: '0041' Credits: 25
Декодирование B-кадра
[bFrameDecodeStatus, cfgL2CAP, payload] = bleL2CAPFrameDecode(bFrame); % Observe the outputs % Decoding is successful if strcmp(bFrameDecodeStatus, 'Success') fprintf('L2CAP decoding status is: %s\n\n', bFrameDecodeStatus); fprintf('Received L2CAP B-frame configuration is:\n'); cfgL2CAP fprintf('Payload carried by L2CAP B-frame is:\n'); payload % Decoding failed else fprintf('L2CAP decoding status is: %s\n', bFrameDecodeStatus); end
L2CAP decoding status is: Success Received L2CAP B-frame configuration is: cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0004' Payload carried by L2CAP B-frame is: payload = 5×2 char array '04' '01' '00' 'FF' 'FF'
Декодирование кадра LE
[leFrameDecodeStatus, cfgL2CAP, payload] = bleL2CAPFrameDecode(leFrame); % Observe the outputs % Decoding is successful if strcmp(leFrameDecodeStatus, 'Success') fprintf('L2CAP decoding status is: %s\n\n', leFrameDecodeStatus); fprintf('Received L2CAP LE-frame configuration is:\n'); cfgL2CAP fprintf('Payload carried by L2CAP LE-frame is:\n'); payload % Decoding failed else fprintf('L2CAP decoding status is: %s\n', leFrameDecodeStatus); end
L2CAP decoding status is: Success Received L2CAP LE-frame configuration is: cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0035' Payload carried by L2CAP LE-frame is: payload = 2×2 char array '01' '02'
Сгенерированные кадры экспортируются в файл PCAP, который может анализироваться и визуализироваться со сторонним пакетом анализатор, такой как Wireshark [2]. Функция помощника helperBLEExportToPCAP генерирует файл PCAP, содержащий кадры BLE L2CAP, заключенные в пакете Слоя Ссылки.
Формат PCAP ожидает, что кадр L2CAP будет заключен в пакете Слоя Ссылки и также ожидает, что сгенерированный пакет будет предварительно ожидаться с указателем. Функция помощника helperBLEPrependAccessAddress предварительно ожидает указатель к сгенерированному пакету. Следующие команды генерируют файл PCAP для кадров L2CAP, сгенерированных в этом примере.
% Create a cell array of L2CAP frames l2capFrames = {sigFrame, bFrame, leFrame}; llPackets = cell(1, numel(l2capFrames)); for i = 1:numel(llPackets) % Add Link Layer header to the generated L2CAP frame cfgLLData = bleLLDataChannelPDUConfig('LLID', 'Data (start fragment/complete)'); llDataPDU = bleLLDataChannelPDU(cfgLLData, l2capFrames{i}); % Prepend access address. A 4-byte access address is used in this example llPackets{i} = helperBLEPrependAccessAddress(llDataPDU, '01234567'); end
Создайте файл PCAP для сгенерированных пакетов Слоя Ссылки.
% Export generated frames to a PCAP format helperBLEExportToPCAP(llPackets, 'BLEL2CAPFrames.pcap');
Можно открыть файл PCAP, содержащий сгенерированные кадры L2CAP в пакете анализатор. Кадры L2CAP, декодируемые пакетом соответствие анализатора стандартные совместимые кадры L2CAP, сгенерированы Библиотекой Communications Toolbox™ для Протокола Bluetooth. Полученный анализ кадров L2CAP показывают ниже.
Сигнализация о кадре (кредит управления потоками)
B-кадр (несущий PDU ATT)
Кадр LE (несущий динамическую полезную нагрузку канала)
Этот пример продемонстрировал генерацию и декодирование кадров L2CAP, заданных в стандарте Bluetooth [1]. Можно использовать пакет анализатор, чтобы просмотреть сгенерированные кадры L2CAP.
Этот пример использует следующие функции помощника:
SIG Bluetooth, спецификация v5.0 ядра Bluetooth: https://www.bluetooth.com/
Программное обеспечение Wireshark: https://www.wireshark.org/