В этом примере показано, как сгенерировать и декодировать системы координат Bluetooth ® Low Energy L2CAP с помощью библиотеки Communications Toolbox™ для протокола Bluetooth ®.
Спецификация ядра Bluetooth [1] включает версию Low Energy (LE) для низкоскоростных беспроводных персональных сетей, которая упоминается как Bluetooth Low Energy (BLE) или Bluetooth Smart. Стек BLE состоит из: Generic Attribute Profile (GATT), ATT, SMP, L2CAP, канального уровня и физического уровня. BLE был добавлен к стандарту для устройств с низким энергопотреблением, генерирующих небольшие объемы данных, таких как оповещения об уведомлениях, используемые в таких приложениях, как автоматизация дома, здравоохранение, фитнес и Интернет вещей (IoT).
Слой L2CAP в BLE соответствует более высокому подслою, то есть логическому управлению ссылкой (LLC) слоя ссылки передачи данных в образце модели OSI. Это L2CAP выше PHY и канального слоя BLE. Спецификация BLE оптимизировала и упростила L2CAP по сравнению с классическим Bluetooth.
L2CAP в BLE отвечает за: (i) установление логического соединения (ii) мультиплексирование протокола (iii) сегментацию и повторную сборку (iv) управление потоком по 'динамическому' L2CAP каналу.
L2CAP слоя добавляет L2CAP основной заголовок к полезной нагрузке более высокого уровня и передает Данные Protocol Ссылки Unit (PDU) к Слою под ним.
L2CAP системы координат состоят из двух подкатегорий: Системы координат данных и системы координат сигнализации. В этих двух категориях систем координат существуют различные типы систем координат. Системы координат данных снова подразделяются на B-кадр (основная информационная система координат) и LE-кадр (информационную систему координат с низкой энергией). Каждый тип системы координат имеет свой формат.
Идентификатор канала (CID) является локальным именем, представляющим конечную точку логического канала на устройстве. Для протоколов, таких как ATT и SMP, эти каналы фиксируются Bluetooth Special Interest Group (SIG). Для профилей конкретного приложения, таких как Межсетевые протоколы Support Profile (IPSP) и профиль передачи объектов (OTP), эти каналы динамически распределяются.
Системы координат сигнализации используются с фиксированным логическим каналом, называемым сигнальным каналом ('0005'), и используются для логического установления соединения между одноранговыми устройствами с помощью механизма управления потоком, основанного на кредитовании LE. Эти системы координат сигнализации также используются для обновления параметров соединения (Slave latency, Connection timeout, Minimum интервал и Maximum интервал), когда процедура запроса параметров соединения не поддерживается на уровне ссылок.
Системы координат данных (B-кадры и LE-кадры) несут полезную нагрузку верхнего уровня как 'Information Payload' в его формате системы координат. B-кадры используются для передачи фиксированных каналов (ATT и SMP с фиксированными логическими каналами '0004' и '0006' соответственно) полезной нагрузки. LE-кадры используются для переноса полезной нагрузки через динамически созданные логические каналы для профилей конкретного приложения, таких как IPSP и OTP.
Этот пример иллюстрирует генерацию и декодирование следующих систем координат. Список других поддерживаемых систем координат сигнализации см. в CommandType
свойство bleL2CAPFrameConfig
объект.
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');
Можно использовать 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
Сгенерируйте команду 'Flow control credit'.
sigFrame = bleL2CAPFrame(cfgL2CAP);
Генерация B-кадра
Чтобы сгенерировать B-кадр (несущий ATT PDU), создайте bleL2CAPFrameConfig
объект с ChannelIdentifier
установлено на '0004'
(идентификатор канала ATT).
cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0004')
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0004'
B-кадр используется для передачи полезной нагрузки с верхнего уровня ATT. 5-байтовый блок ATT PDU используется в качестве полезной нагрузки в этом примере.
payload = ['04';'01';'00';'FF';'FF'];
Сгенерируйте L2CAP B-кадр с помощью полезной нагрузки и строения.
bFrame = bleL2CAPFrame(cfgL2CAP, payload);
Генерация LE-кадров
Чтобы сгенерировать LE-кадр, создайте bleL2CAPFrameConfig
объект с ChannelIdentifier
установлено на '0035'
.
cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0035')
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0035'
LE-кадр используется для передачи полезной нагрузки динамических каналов. В этом примере используется 2-байтовая полезная нагрузка.
payload = ['01';'02'];
Сгенерируйте L2CAP LE-кадр с помощью полезной нагрузки и строения.
leFrame = bleL2CAPFrame(cfgL2CAP, payload);
Можно использовать bleL2CAPFrameDecode
функция для декодирования L2CAP системы координат. Эта функция выводит следующую информацию:
status
: Перечисление типов blePacketDecodeStatus
, что указывает, было ли L2CAP декодирование успешным.
cfgL2CAP
: Объект строения L2CAP системы координат типа bleL2CAPFrameConfig
, который содержит декодированные свойства L2CAP.
Эта функция принимает в качестве входного сигнала L2CAP систему координат BLE.
Декодирование системы координат сигнализации
[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'
Этот пример использует blePCAPWriter
объект для экспорта сгенерированных PDU в файл с расширением.pcap или расширением.pcapng. Чтобы проанализировать и визуализировать этот файл, используйте анализатор пакетов третьей части, такой как Wireshark.
Формат 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
Создайте объект типа blePCAPWriter
и укажите имя файла захвата пакетов.
% Create the BLE PCAP Writer file object pcapObj = blePCAPWriter("FileName", "BLEL2CAPFrames");
Используйте write
функция для записи всех блоков PDU BLE LL в файл PCAP. Постоянная timestamp
задает время захвата PDU. В этом примере время захвата одинаково для всех PDU.
timestamp = 124800; % timestamp (in microseconds) % Write all the LL PDUs to the PCAP file for idx = 1:numel(llPackets) write(pcapObj, llPackets{idx}, timestamp, "PacketFormat", "bits"); end % Clear the object clear pcapObj;
Можно открыть файл PCAP, содержащий сгенерированные системы координат L2CAP, в анализаторе пакетов. Системы координат L2CAP, декодированные анализатором пакетов, соответствуют совместимым со стандартом системам координат L2CAP, сгенерированным библиотекой Communications Toolbox™ для протокола Bluetooth. Захваченный анализ систем координат L2CAP показан ниже.
Сигнализация системы координат (кредит управления потоком)
B-кадр (несущий ATT PDU)
LE-кадр (несущий динамическую полезную нагрузку канала)
Этот пример продемонстрировал генерацию и декодирование L2CAP систем координат, указанных в стандарте Bluetooth [1]. Можно использовать анализатор пакетов, чтобы просмотреть сгенерированные системы координат L2CAP.
В примере используются следующие функции:
bleL2CAPFrameConfig
: Создайте объект строения для L2CAP системы координат BLE
bleL2CAPFrame
: BLE L2CAP генерация системы координат
bleL2CAPFrameDecode
: BLE L2CAP система координат
blePCAPWriter
: Создайте BLE PCAP или PCAPNG файл средства записи объект
В примере используется этот вспомогательный модуль:
helperBLEPrependAccessAddress: заполняет PDU канального слоя адресом доступа
Веб-сайт Bluetooth ® Technology. Bluetooth Technology Website | Официальный сайт Bluetooth Technology. Доступ к 8 июля 2020 года. https://www.bluetooth.com/.
«Разработка/LibpcapFileFormat - Wireshark Wiki». Доступ к 8 июля 2020 года. https://wiki.wireshark.org/Development/LibpcapFileFormat.
Группа, The Tcpdump. «Общий репозиторий Tcpdump/Libpcap». Доступ к 8 июля 2020 года. https://www.tcpdump.org.