主要内容

建模的蓝牙设备与心率概要文件

这个例子向您展示了如何建模蓝牙®低能量(LE)设备与心率概要文件(合)通过使用蓝牙®工具。

使用这个示例中,您可以:

  • 创建和配置蓝牙LE合客户机-服务器场景与智能手机客户端和一个手腕乐队与心率传感器服务器。

  • 配置客户端来执行服务和特性的发现。

  • 配置客户端,使特征从服务器接收通知。

  • 导出生成的协议数据单元(pdu)到一个文件.pcap扩展。

  • 可视化生成的pdu Wireshark等使用第三方包分析器(4]。

背景

蓝牙核心规范(2)包括一个低能量低速率无线个人区域网络版本,这被称为蓝牙低能量(蓝牙LE)或蓝牙智能。蓝牙LE堆栈包括:通用属性剖面(关贸总协定),属性协议(ATT),安全管理协议(SMP)、逻辑链路控制和适应协议(L2CAP),链路层(LL)和物理层(体育)。蓝牙LE添加到标准低能量的设备生成少量的数据,如通知警报在家庭自动化等应用程序使用,医疗、健身、和物联网(物联网)。

属性的协议

丙氨酸是建立在L2CAP层的蓝牙勒。ATT定义了一组协议数据单元(pdu)用于数据交换GATT-based概要文件。

通用属性配置文件

关贸总协定是一个服务框架使用ATT。关贸总协定处理请求或响应的生成基于应用程序的数据层或更高ATT PDU收到从较低的层。它存储的信息服务的形式,特点,和特征描述符。它使用一个客户端-服务器架构。

关贸总协定的术语:

  • 服务:服务是一个集合的数据和相关的行为来完成一个特定功能或特性。例子:心率服务,允许测量心率。

  • 特点:特征值用于服务及其权限。例如:心率测量特征包含信息测量心率值。

  • 特征描述符:描述符的行为特征。例子:一个客户特点配置描述符(有兴趣),描述了服务器是否已通知客户端包含特征值的响应。

  • GATT-Client:启动命令和请求到服务器,并接收响应,指示和通知发送的服务器。

  • GATT-Server:接受传入的命令和请求从客户端,并发送响应,指示和通知到客户端。

BLEGATTClientServerModel.png

心率概要

心率概要(合)3)是一种GATT-based低能量配置文件定义的蓝牙特别兴趣小组(团体)。合定义之间的通信的GATT-server心率传感器设备,如手腕乐队,和GATT-client,如智能手机或平板电脑。合广泛用于健身应用程序收集心率测量。

LE合蓝牙客户机-服务器场景

在这个场景中,GATT-server与心率传感器和一个手腕乐队GATT-client是智能手机。

%为GATT-server和GATT-client设备创建对象gattServer = helperBLEGATTServer;gattClient = helperBLEGATTClient;

最初,合客户端发现服务、特性、特征描述符定义的服务器。后发现,客户端订阅心率测量通知。

服务发现

客户执行服务发现操作的信息可用的服务。在服务发现,客户端调用“发现所有主要服务”通过发送一个阅读组类型的请求攻击力PDU。可用的服务及其相关的服务器响应处理通过发送一个阅读小组类型反应的攻击力PDU。一个处理是一个独特的标识符的属性动态分配的服务器。

客户端服务器请求服务

generateATTPDU目标函数生成一个ATT PDU对应于给定的子蓝牙核心规范中指定。

% Preallocate一个变量来存储生成的链路层数据包pcapPackets =细胞(9);数= 1;%配置关贸总协定在服务器端发现服务可用gattClient。子过程=“发现所有主要服务”;serviceDiscReqPDU = generateATTPDU (gattClient);%将应用程序数据(| serviceDiscReqPDU |)服务器% PHY[bleWaveform pcapPackets{数}]= helperBLETransmitData (serviceDiscReqPDU);数=计数+ 1;

接收客户端请求服务器

服务器接收到一个阅读组类型的请求从客户机并发送可用服务列表阅读组类型的反应攻击力PDU。

receiveData目标函数解码的PDU作为GATT-server并返回相应的PDU ATT PDU配置对象和适当的反应。

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[attServerRespPDU, serviceDiscReqCfg gattServer] = receiveData (gattServer receivedPDU);流(“收到了服务发现请求的服务器:\ n”)
收到服务发现请求在服务器:
serviceDiscReqCfg
serviceDiscReqCfg = bleATTPDUConfig属性:操作码:“阅读组类型请求”StartHandle:“0001”EndHandle:“飞行符”AttributeType:“2800”
%传输应用程序响应数据(| attServerRespPDU |)到客户机%通过体育[bleWaveform pcapPackets{数}]= helperBLETransmitData (attServerRespPDU);数=计数+ 1;

在客户端收到服务器响应

receiveData目标函数解码的PDU作为GATT-client并返回相应的PDU ATT PDU配置对象和适当的回应,如果适用的话。

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[~,serviceDiscRespCfg] = receiveData (gattClient receivedPDU);gattClient。StartHandle = serviceDiscRespCfg.StartHandle;gattClient。EndHandle = serviceDiscRespCfg.EndHandle;%预期响应从服务器:| |或阅读组类型响应% | |错误响应如果比较字符串(serviceDiscRespCfg.Opcode“错误响应”)流(“收到错误响应在客户端:\ n”)serviceDiscRespCfg serviceDiscRespMsg = [“错误响应(“”serviceDiscRespCfg.ErrorMessage“‘)’];其他的流(“收到了服务发现反应在客户端:\ n”)serviceDiscRespCfg服务= helperBluetoothID.getBluetoothName (serviceDiscRespCfg.AttributeValue);serviceDiscRespMsg = [“服务发现的反应(“”服务“‘)’];结束
收到服务发现响应在客户端:
serviceDiscRespCfg = bleATTPDUConfig属性:操作码:“阅读组类型的回答让StartHandle:“0001”EndHandle:“0006”AttributeValue: [2 x2 char)

特征发现

服务由多个特征。为每个服务,有客户端和服务器之间交换信息的元素。每个信息元素可能包含描述符的行为。一个包含一个值及其相关特征描述符。发现服务后,客户执行特征发现了解在服务定义的特征。在特征发现,客户端调用发现所有服务”的特点通过发送“阅读类型请求”攻击力PDU。可用的服务器响应特征及其相关处理通过发送一个阅读类型反应的攻击力PDU。

客户端请求服务器特性

%配置关贸总协定客户发现所有可用的特性%的服务器gattClient。子过程=发现所有服务”的特点;chrsticDiscReqPDU = generateATTPDU (gattClient);%将应用程序数据(| chrsticDiscReqPDU |)服务器% PHY[bleWaveform pcapPackets{数}]= helperBLETransmitData (chrsticDiscReqPDU);数=计数+ 1;

接收客户端请求服务器

解码接收请求并返回列表中可用的特性阅读类型反应攻击力PDU。

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[chrsticDiscRespPDU, chrsticDiscReqCfg gattServer] = receiveData (gattServer receivedPDU);流(“收到特征发现请求服务器:\ n”)
收到特征发现请求的服务器:
chrsticDiscReqCfg
chrsticDiscReqCfg = bleATTPDUConfig属性:操作码:“阅读类型请求”StartHandle:“0001”EndHandle:“0006”AttributeType:“2803”
%传输应用程序响应数据(| chrsticDiscRespPDU |)%客户通过体育[bleWaveform pcapPackets{数}]= helperBLETransmitData (chrsticDiscRespPDU);数=计数+ 1;

在客户端收到服务器响应

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[~,chrsticDiscRespCfg] = receiveData (gattClient receivedPDU);%预期响应从服务器:|“阅读类型响应”|和|”错误%的回答让|如果比较字符串(chrsticDiscRespCfg.Opcode“错误响应”)流(“收到错误响应在客户端:\ n”)chrsticDiscRespCfg chrsticDescRespMsg = [“错误响应(“”chrsticDiscRespCfg.ErrorMessage“‘)’];其他的流(“收到特征发现反应在客户端:\ n”)attributeValueCfg = helperBLEDecodeAttributeValue (chrsticDiscRespCfg.AttributeValue,“特征”);attributeValueCfg chrsticDescRespMsg = [“发现响应特征(“”attributeValueCfg.CharacteristicType“‘)’];结束
收到特征发现响应在客户端:
attributeValueCfg = helperBLEAttributeValueConfig属性:AttributeType:“特点”BroadcastFlag:“假”ReadFlag:“假”WriteWithoutResponseFlag:“假”WriteFlag:“假”NotifyFlag:“真正的”IndicateFlag:“假”AuthenticatedSignedWritesFlag:“假”ExtendedPropertiesFlag:“假”CharacteristicValueHandle:“0003”CharacteristicType:“心率测量”

特征描述符的发现

一个特征可能由多个特征描述符。后发现的特点,客户执行特征描述符的发现学习描述符的列表及其处理。特征描述符中发现,客户端调用发现所有描述符的通过发送信息请求的攻击力PDU。可用的服务器响应特征描述符和它们相关的处理通过发送的信息反应的攻击力PDU。

客户端请求服务器特征描述符

%配置关贸总协定客户发现所有可用的特性%描述符在服务器上gattClient。子过程=发现所有描述符的;gattClient。StartHandle = dec2hex (hex2dec (chrsticDiscRespCfg.AttributeHandle) + 1, 4);chrsticDescDiscReqPDU = generateATTPDU (gattClient);%将应用程序数据(| chrsticDescDiscReqPDU |)到客户机%通过体育[bleWaveform pcapPackets{数}]= helperBLETransmitData (chrsticDescDiscReqPDU);数=计数+ 1;

接收客户端请求服务器

解码接收到的请求和返回的可用特征描述符的列表信息的反应攻击力PDU。

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[chrsticDescDiscRespPDU, chrsticDescDiscReqCfg gattServer] = receiveData (gattServer receivedPDU);流(“收到了特征描述符发现请求服务器:\ n”)
收到特征描述符的发现请求服务器:
chrsticDescDiscReqCfg
chrsticDescDiscReqCfg = bleATTPDUConfig属性:操作码:“信息请求StartHandle:“0003”EndHandle:“0006”
%传输应用程序响应数据(| chrsticDescDiscRespPDU |)%客户通过体育[bleWaveform pcapPackets{数}]= helperBLETransmitData (chrsticDescDiscRespPDU);数=计数+ 1;

在客户端收到服务器响应

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[~,chrsticDescDiscRespCfg] = receiveData (gattClient receivedPDU);%预期响应从服务器:| |和|错误信息的反应%的回答让|如果比较字符串(chrsticDescDiscRespCfg.Opcode“错误响应”)流(“收到错误响应在客户端:\ n”)chrsticDescDiscRespCfg chrsticDescDiscRespMsg = [“错误响应(“”chrsticDescDiscRespCfg.ErrorMessage“‘)’];其他的流(“收到了特征描述符发现响应在客户端:\ n”)chrsticDescDiscRespCfg描述符= helperBluetoothID.getBluetoothName (chrsticDescDiscRespCfg.AttributeType);chrsticDescDiscRespMsg = [的特征描述符发现反应(“描述符“‘)’];结束
收到特征描述符发现响应在客户端:
chrsticDescDiscRespCfg = bleATTPDUConfig属性:操作码:“信息响应格式:“16位”AttributeHandle:“0004”AttributeType:“2902”

订阅的通知

发现特征描述符后,客户端可以启用或禁用通知的特征值。要启用通知,客户端必须设置通知(第一位)客户特点配置描述符(有兴趣)价值通过调用“写特征值”子过程。

通知客户订阅服务器

%关贸总协定客户机配置为使心率的通知%测量特征gattClient。子过程=“写特征值”;gattClient。一个ttributeHandle = chrsticDescDiscRespCfg.AttributeHandle; gattClient.AttributeValue =“0100”;enableNotificationReqPDU = generateATTPDU (gattClient);%将应用程序数据(| enableNotificationReqPDU |)到客户机%通过体育[bleWaveform pcapPackets{数}]= helperBLETransmitData (enableNotificationReqPDU);数=计数+ 1;

接收客户端请求服务器

解码接收请求并发送响应写回应攻击力PDU。

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[enableNotificationRespPDU, enableNotificationReqCfg gattServer] = receiveData (gattServer receivedPDU);流(“收到了在服务器上启用通知请求:\ n”)
收到了在服务器上启用通知请求:
enableNotificationReqCfg
enableNotificationReqCfg = bleATTPDUConfig属性:操作码:“写请求”AttributeHandle:“0004”AttributeValue: [2 x2 char)
%传输应用程序响应数据(| enableNotificationRespPDU |)客户端通过PHY %[bleWaveform pcapPackets{数}]= helperBLETransmitData (enableNotificationRespPDU);数=计数+ 1;

在客户端收到服务器响应

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[~,enableNotificationRespCfg] = receiveData (gattClient receivedPDU);%预期响应从服务器:| |和|错误写响应%的回答让|如果比较字符串(enableNotificationRespCfg.Opcode“错误响应”)流(“收到错误响应在客户端:\ n”)enableNotificationRespCfg enableNotificRespMsg = [“错误响应(“”enableNotificationRespCfg.ErrorMessage“‘)’];其他的流(“启用通知收到响应客户端:\ n”)enableNotificationRespCfg enableNotificRespMsg =启用的通知(“心率测量”);结束
收到启用通知响应在客户端:
enableNotificationRespCfg = bleATTPDUConfig属性:操作码:“写的回答

通知客户机的心率测量值

当客户端启用通知特点,服务器定期通知特点的价值(心率测量)客户端。

合服务器通知后心率测量到客户端订阅。

服务器向客户端发送通知

notifyHeartRateMeasurement目标函数生成通知PDU蓝牙核心规范中指定。

%重置随机数生成器的种子rng默认的%使用传感器测量心率值(为心生成一个随机数%的速度测量值)randi heartRateMeasurementValue = ((65 95));%通知心率测量[gattServer, notificationPDU] = notifyHeartRateMeasurement (gattServer,heartRateMeasurementValue);%将应用程序数据(| notificationPDU |)到客户端% PHY[bleWaveform pcapPackets{数}]= helperBLETransmitData (notificationPDU);数=计数+ 1;

在客户端接收服务器通知

%解码收到蓝牙LE波形和检索应用程序%的数据receivedPDU = helperBLEDecodeData (bleWaveform);%解码收到ATT PDU并生成响应PDU,如果适用的话[~,notificationCfg] = receiveData (gattClient receivedPDU);流(“在客户端收到通知:\ n”)
在客户端收到通知:
%解码接收到的心率测量特征值heartRateCharacteristicValue = helperBLEDecodeAttributeValue (notificationCfg.AttributeValue,“心率测量”);heartRateCharacteristicValue
heartRateCharacteristicValue = helperBLEAttributeValueConfig属性:AttributeType:“心率测量”HeartRateValueFormat:“UINT8”SensorContactStatus:“接触检测”EnergyExpendedFieldFlag:“现在,单位:千焦耳”RRIntervalFieldFlag:“礼物”HeartRateValue: 90 EnergyExpended: 100 RRInterval: 10
heartRateMeasurementValue = heartRateCharacteristicValue.HeartRateValue;%可视化LE关贸总协定蓝牙客户机-服务器模型helperBLEVisualizeHRPFrame (serviceDiscRespMsg chrsticDescRespMsg,chrsticDescDiscRespMsg、enableNotificRespMsg heartRateMeasurementValue);

图勒心率蓝牙包含11轴对象。坐标轴对象1包含3对象类型的图像,文本。坐标轴对象2包含对象类型的图像,文本。坐标轴对象3包含2对象类型的图像,文本。坐标轴对象2 4包含对象类型的图像,文本。轴5包含2图像类型的对象,对象的文本。坐标轴对象2 6包含对象类型的图像,文本。坐标轴对象7包含2对象类型的图像,文本。坐标轴对象2 8包含对象类型的图像,文本。坐标轴对象9包含2对象类型的图像,文本。 Axes object 10 contains 4 objects of type image, text. Axes object 11 contains 2 objects of type image, text.

出口PCAP文件

这个示例使用blePCAPWriter对象生成的pdu导出到文件中.pcap扩展或.pcapng扩展。分析和可视化这个文件,使用第三部分Wireshark等数据包分析器。

创建一个对象的类型blePCAPWriter并指定数据包捕获文件的名字。

%创建蓝牙LE PCAP作家file对象pcapObj = blePCAPWriter (“文件名”,“bluetoothLEHRP”);

使用目标函数编写所有的蓝牙LE pdu PCAP文件。常数时间戳指定PDU的捕获时间。在这个例子中,所有的pdu的捕获时间一样。

时间戳= 124800;%时间(以微秒为单位)%写所有的pdu PCAP文件idx = 1:元素个数(pcapPackets)写(pcapObj, pcapPackets {idx},时间戳,“PacketFormat”,“位”);结束%的对象清晰的pcapObj;流(“开放bluetoothLEHRP pcap文件生成”。pcap”协议分析仪查看生成的框架。\ n”)
打开bluetoothLEHRP pcap文件生成”。pcap”协议分析仪查看生成的框架。

可视化生成的攻击力pdu

自生成的心跳数据包符合蓝牙标准,您可以打开、分析和可视化PCAP文件使用第三方包分析器等Wireshark [4]。这些数字所示的数据使用心率概要文件包中生成这个例子。

  • 服务发现请求

  • 服务发现响应

  • 通知心率测量值

结论

这个例子演示了蓝牙勒设备的建模与心率概要文件使用关贸总协定的客户机-服务器场景中指定的蓝牙核心规范(2]。您可以使用一个数据包分析器来查看生成的框架。

附录

本例使用这些助手:

选定的参考书目

  1. 蓝牙®技术的网站。“蓝牙技术网站|蓝牙技术”的官方网站。一个ccessed November 29, 2021.https://www.bluetooth.com/。

  2. 蓝牙特别兴趣小组(团体)。“蓝牙核心规范”5.3版。https://www.bluetooth.com/。

  3. 蓝牙特别兴趣小组(团体)。“心率概要”1.0版。https://www.bluetooth.com/。

  4. “发展/ LibpcapFileFormat - Wireshark Wiki。”2021年11月29日访问。https://www.wireshark.org

  5. 集团Tcpdump。“Tcpdump / Libpcap公共存储库。”2021年11月29日访问。https://www.tcpdump.org。

  6. Tuexen, m .“PCAP下一代(Pcapng)捕获文件格式。2021。https://www.ietf.org/。

另请参阅

功能

对象

相关的话题