Генерация системы координат BLE L2CAP и декодирование

В этом примере показано, как сгенерировать и декодировать системы координат 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

Системы координат 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 основанный на кредите режим управления потоками.

Проверяйте на установку пакета поддержки

% Check if the 'Communications Toolbox Library for the Bluetooth Protocol'
% support package is installed or not.
commSupportPackageCheck('BLUETOOTH');

L2CAP структурирует генерацию

Можно использовать функцию 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);

Декодирование системы координат L2CAP

Можно использовать функцию bleL2CAPFrameDecode, чтобы декодировать систему координат L2CAP. Этот функциональные выходные параметры следующая информация:

  1. status: Перечисление типа blePacketDecodeStatus, который указывает, было ли декодирование L2CAP успешно.

  2. 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 =

  5x2 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 =

  2x2 char array

    '01'
    '02'

Экспорт в файл PCAP

Сгенерированные системы координат экспортируются в файл 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');

Визуализация сгенерированных систем координат L2CAP

Можно открыть файл PCAP, содержащий сгенерированные системы координат L2CAP в пакете анализатор. Системы координат L2CAP, декодируемые пакетом соответствие анализатора стандартные совместимые системы координат L2CAP, сгенерированы Библиотекой Communications Toolbox™ для Протокола Bluetooth. Полученный анализ систем координат L2CAP показывают ниже.

  • Сигнализация о системе координат (кредит управления потоками)

  • B-система-координат (несущий PDU ATT)

  • Система координат LE (несущий динамическую полезную нагрузку канала)

Заключение

Этот пример продемонстрировал генерацию и декодирование систем координат L2CAP, заданных в стандарте Bluetooth [1]. Можно использовать пакет анализатор, чтобы просмотреть сгенерированные системы координат L2CAP.

Приложение

Этот пример использует следующие функции помощника:

Выбранная библиография

  1. SIG Bluetooth, спецификация v5.0 ядра Bluetooth: https://www.bluetooth.com /

  2. Программное обеспечение Wireshark: https://www.wireshark.org /

Для просмотра документации необходимо авторизоваться на сайте