В этом примере показано, как сгенерировать и декодировать системы координат Bluetooth® Low Energy L2CAP, пользующиеся Библиотекой Communications Toolbox™ для Протокола Bluetooth®.
Спецификация [1] Ядра Bluetooth включает версию Низкой энергии (LE) для беспроводных персональных сетей области с низкой ставкой, которая упоминается как Bluetooth низкая энергия (BLE) или Умный Bluetooth. Стек BLE состоит из: Типовой Профиль Атрибута (GATT), Протокол Атрибута (ATT), Протокол менеджера безопасности (SMP), Управление Логической ссылкой и Протокол (L2CAP) Адаптации, слой Link и Физический уровень. BLE был добавлен к стандарту для низких энергетических устройств, генерирующих небольшие количества данных, такие как предупреждения уведомления, используемые в таких приложениях как домашняя автоматизация, здравоохранение, фитнес и Интернет вещей (IoT).
Слой L2CAP в BLE соответствует более высокому подуровню i.e. Управление логической ссылкой (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
свойство 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 Read-only properties: No properties.
Сгенерируйте 'Команду' кредита управления потоками.
sigFrame = bleL2CAPFrame(cfgL2CAP);
Генерация B-системы-координат
Чтобы сгенерировать B-систему-координат (несущий PDU ATT), создайте bleL2CAPFrameConfig
объект с ChannelIdentifier
установите на '0004'
(ID канала ATT).
cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0004')
cfgL2CAP = bleL2CAPFrameConfig with properties: ChannelIdentifier: '0004' Read-only properties: No properties.
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' Read-only properties: No properties.
Система координат LE используется, чтобы передать полезную нагрузку динамических каналов. 2-байтовая полезная нагрузка используется в этом примере.
payload = ['01';'02'];
Сгенерируйте систему координат LE L2CAP с помощью полезной нагрузки и настройки.
leFrame = bleL2CAPFrame(cfgL2CAP, payload);
Можно использовать bleL2CAPFrameDecode
функционируйте, чтобы декодировать систему координат L2CAP. Этот функциональные выходные параметры следующая информация:
status
: Перечисление типа 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 Read-only properties: No properties.
Декодирование 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' Read-only properties: No properties. 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' Read-only properties: No properties. Payload carried by L2CAP LE-frame is: payload = 2x2 char array '01' '02'
Этот пример использует blePCAPWriter
возразите, чтобы экспортировать сгенерированный PDUs в файл с .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
функционируйте, чтобы записать весь BLE LL PDUs в файл PCAP. Постоянный timestamp
задает время получения PDU. В этом примере время получения - то же самое для всего PDUs.
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-система-координат (несущий PDU ATT)
Система координат LE (несущий динамическую полезную нагрузку канала)
Этот пример продемонстрировал генерацию и декодирование систем координат L2CAP, заданных в стандарте Bluetooth [1]. Можно использовать пакет анализатор, чтобы просмотреть сгенерированные системы координат L2CAP.
Пример использует эти функции:
bleL2CAPFrameConfig
: Создайте объект настройки для системы координат BLE L2CAP
bleL2CAPFrame
: Генерация системы координат BLE L2CAP
bleL2CAPFrameDecode
: Декодер системы координат BLE L2CAP
blePCAPWriter
: Создайте BLE PCAP или объект средства записи файла PCAPNG
Пример использует этого помощника:
helperBLEPrependAccessAddress: предварительно ожидает слой PDU ссылки с указателем
Bluetooth® Technology Website. "Технологический Веб-сайт Bluetooth | официальный сайт Технологии Bluetooth". Полученный доступ 8 июля 2020. https://www.bluetooth.com/.
"Development/LibpcapFileFormat - Wiki Wireshark". Полученный доступ 8 июля 2020. https://wiki.wireshark.org/Development/LibpcapFileFormat.
Группа, Tcpdump. "Репозиторий Общественности Tcpdump/Libpcap". Полученный доступ 8 июля 2020. https://www.tcpdump.org.