蓝牙通信UUID

蓝牙低功耗BLE开发,无论是MCU端还是Android等APP端,都会涉及到一堆的UUID,对应着BLE协议栈GATT的Service、Characteristic、Descriptor。

开发者可以自定义这些128位的UUID,也可以采用Bluetooth SIG已定义的标准。

1.概念

    SDP协议让客户机的应用程序发现存在的服务器应用程序提供的服务以及这些服务的属性。SDP只提供发现服务的机制,不提供使用这些服务的方法。每个蓝牙设备都需要一个SDP Service,只做Client的蓝牙设备除外。

2.ServiceRecord

每一个Service利用ServiceRecord来表示(具有唯一的32bit的Handle),每一个ServiceRecord由若干ServiceAttribute组成,由下图表示:


 

每一个ServiceAttribute的结构由下图所示:


 

Attribute ID是由Assigned Value定义好的,例如Record Handle Attribute的ID为0x0000。

正因为SDP Record由许多Attribute组成,所以,可以把Record看成AtributeList,这在后面的SDP resposne中会常用到。

设备通过SDP request来访问这些record的相关信息。这里有个很好的SDP实例,如下:


 

Service Class ID List描述了Service的类型,如0x00000000代表SDP service

Protocol Descriptior List 列出了可能使用这种Service的protocol

 

3.Data Element

Data Element是在SDP中定义的一种数据结构,用来表示ServiceAttribute的Value域。每一个data element由Type+Size两部分组成。

Type的定义如下图:

    

 

Size的定义如下图:




 

4.Service Class

每一个Service都是ServiceClass的一个实例,一个Service Record就是一个Service Class的实例,Service Class可以表示一个Record里的所有Attribute。每一个Service Class有一个ID,包含在ServiceClassIDList这个Attribute的value里,称之为UUID。

 

5.UUID

一个全局惟一的标识符,128bit。为了节省存储和传输开销,UUID的一些位已经固定,出现了16bit和32bit的两种UUID。这些不同bit的UUID可以相互转化,如下式:


主从通信需要配置统一的128bit基础UUID和对应的接收发送属性UUID。

6. 蓝牙里面使用的常用的UUID:

 

#蓝牙串口服务

SerialPortServiceClass_UUID = '{00001101-0000-1000-8000-00805F9B34FB}'

 

LANAccessUsingPPPServiceClass_UUID = '{00001102-0000-1000-8000-00805F9B34FB}'

 

#拨号网络服务

DialupNetworkingServiceClass_UUID = '{00001103-0000-1000-8000-00805F9B34FB}'

 

#信息同步服务

IrMCSyncServiceClass_UUID = '{00001104-0000-1000-8000-00805F9B34FB}'

 

SDP_OBEXObjectPushServiceClass_UUID = '{00001105-0000-1000-8000-00805F9B34FB}'

 

#文件传输服务

OBEXFileTransferServiceClass_UUID = '{00001106-0000-1000-8000-00805F9B34FB}'

 

IrMCSyncCommandServiceClass_UUID = '{00001107-0000-1000-8000-00805F9B34FB}'

SDP_HeadsetServiceClass_UUID = '{00001108-0000-1000-8000-00805F9B34FB}'

CordlessTelephonyServiceClass_UUID = '{00001109-0000-1000-8000-00805F9B34FB}'

SDP_AudioSourceServiceClass_UUID = '{0000110A-0000-1000-8000-00805F9B34FB}'

SDP_AudioSinkServiceClass_UUID = '{0000110B-0000-1000-8000-00805F9B34FB}'

SDP_AVRemoteControlTargetServiceClass_UUID = '{0000110C-0000-1000-8000-00805F9B34FB}'

SDP_AdvancedAudioDistributionServiceClass_UUID = '{0000110D-0000-1000-8000-00805F9B34FB}'

SDP_AVRemoteControlServiceClass_UUID = '{0000110E-0000-1000-8000-00805F9B34FB}'

VideoConferencingServiceClass_UUID = '{0000110F-0000-1000-8000-00805F9B34FB}'

IntercomServiceClass_UUID = '{00001110-0000-1000-8000-00805F9B34FB}'

 

#蓝牙传真服务

FaxServiceClass_UUID = '{00001111-0000-1000-8000-00805F9B34FB}'

 

HeadsetAudioGatewayServiceClass_UUID = '{00001112-0000-1000-8000-00805F9B34FB}'

WAPServiceClass_UUID = '{00001113-0000-1000-8000-00805F9B34FB}'

WAPClientServiceClass_UUID = '{00001114-0000-1000-8000-00805F9B34FB}'

 

#个人局域网服务

PANUServiceClass_UUID = '{00001115-0000-1000-8000-00805F9B34FB}'

 

#个人局域网服务

NAPServiceClass_UUID = '{00001116-0000-1000-8000-00805F9B34FB}'

 

#个人局域网服务

GNServiceClass_UUID = '{00001117-0000-1000-8000-00805F9B34FB}'

 

DirectPrintingServiceClass_UUID = '{00001118-0000-1000-8000-00805F9B34FB}'

ReferencePrintingServiceClass_UUID = '{00001119-0000-1000-8000-00805F9B34FB}'

ImagingServiceClass_UUID = '{0000111A-0000-1000-8000-00805F9B34FB}'

ImagingResponderServiceClass_UUID = '{0000111B-0000-1000-8000-00805F9B34FB}'

ImagingAutomaticArchiveServiceClass_UUID = '{0000111C-0000-1000-8000-00805F9B34FB}'

ImagingReferenceObjectsServiceClass_UUID = '{0000111D-0000-1000-8000-00805F9B34FB}'

SDP_HandsfreeServiceClass_UUID = '{0000111E-0000-1000-8000-00805F9B34FB}'

HandsfreeAudioGatewayServiceClass_UUID = '{0000111F-0000-1000-8000-00805F9B34FB}'

DirectPrintingReferenceObjectsServiceClass_UUID = '{00001120-0000-1000-8000-00805F9B34FB}'

ReflectedUIServiceClass_UUID = '{00001121-0000-1000-8000-00805F9B34FB}'

BasicPringingServiceClass_UUID = '{00001122-0000-1000-8000-00805F9B34FB}'

PrintingStatusServiceClass_UUID = '{00001123-0000-1000-8000-00805F9B34FB}'

 

#人机输入服务

HumanInterfaceDeviceServiceClass_UUID = '{00001124-0000-1000-8000-00805F9B34FB}'

 

HardcopyCableReplacementServiceClass_UUID = '{00001125-0000-1000-8000-00805F9B34FB}'

 

#蓝牙打印服务

HCRPrintServiceClass_UUID = '{00001126-0000-1000-8000-00805F9B34FB}'

 

HCRScanServiceClass_UUID = '{00001127-0000-1000-8000-00805F9B34FB}'

CommonISDNAccessServiceClass_UUID = '{00001128-0000-1000-8000-00805F9B34FB}'

VideoConferencingGWServiceClass_UUID = '{00001129-0000-1000-8000-00805F9B34FB}'

UDIMTServiceClass_UUID = '{0000112A-0000-1000-8000-00805F9B34FB}'

UDITAServiceClass_UUID = '{0000112B-0000-1000-8000-00805F9B34FB}'

AudioVideoServiceClass_UUID = '{0000112C-0000-1000-8000-00805F9B34FB}'

SIMAccessServiceClass_UUID = '{0000112D-0000-1000-8000-00805F9B34FB}'

PnPInformationServiceClass_UUID = '{00001200-0000-1000-8000-00805F9B34FB}'

GenericNetworkingServiceClass_UUID = '{00001201-0000-1000-8000-00805F9B34FB}'

GenericFileTransferServiceClass_UUID = '{00001202-0000-1000-8000-00805F9B34FB}'

GenericAudioServiceClass_UUID = '{00001203-0000-1000-8000-00805F9B34FB}'

GenericTelephonyServiceClass_UUID = '{00001204-0000-1000-8000-00805F9B34FB}'

### 回答1: Android中的蓝牙UUID是用来唯一标识蓝牙设备或服务的一种标识符。UUID通常是一个128位的数字,可以用来识别蓝牙设备上的服务或特征,并实现设备之间的通信。 在Android中,蓝牙设备的UUID通常是由16进制表示的,可以分成两种类型:标准UUID和自定义UUID。标准UUID是由蓝牙SIG(蓝牙特别兴趣小组)定义的,用于识别通用的蓝牙服务。自定义UUID是由开发者自己定义的,用于识别自定义的蓝牙服务或特征。 在Android中,蓝牙UUID的作用非常重要。当使用蓝牙进行设备之间的通信时,首先需要确保两个设备使用相同的UUID来识别服务或特征。只有相同的UUID,设备才能正确地识别和连接到对方,并进行数据的传输和交互。 在开发Android应用程序时,开发者可以使用UUID类来生成蓝牙UUIDUUID类提供了几种静态方法,可以生成不同类型的蓝牙UUID,如随机UUID、基于名称的UUID等。开发者可以根据自己的需求选择合适的方法来生成蓝牙UUID,并将其用于设备之间的通信。 总之,Android中的蓝牙UUID是用来唯一标识蓝牙设备或服务的一种标识符。它在设备之间的蓝牙通信中起着至关重要的作用,确保设备能够正确识别和连接到对方,并进行数据的传输和交互。 ### 回答2: Android蓝牙UUID(Universally Unique Identifier)是一个用于唯一标识蓝牙设备或服务的字符串。它的作用是确保在蓝牙通信中不会发生冲突,并且能够准确地识别和连接到目标设备或服务。 在Android中,UUID由128位的16进制数字组成。它可以被分为两种类型:标准UUID和自定义UUID。 标准UUID是由蓝牙SIG(Bluetooth Special Interest Group)预定义的一些常见服务或特性所使用的。例如,0x1101是蓝牙串口通信(SPP)的标准UUID。使用标准UUID的好处是可以确保设备之间的互操作性,并且可以在不同的Android设备上进行广泛的使用。 除了标准UUID外,开发者还可以在应用程序中定义自己的UUID。这些自定义UUID在应用程序中独一无二,并且可以被用于特定的蓝牙服务或特性。例如,如果开发者创建了一个用于传输文件的蓝牙服务,他可以定义一个唯一的UUID来标识该服务。 在Android中,获取设备或服务的UUID是非常重要的。它可以用于设备之间的配对和连接,并且可以确保数据的安全性和准确性。开发者可以使用Android的蓝牙API来获取蓝牙设备的UUID,并将其用于蓝牙通信的不同阶段,例如发现设备、连接设备和交换数据。 总之,Android蓝牙UUID是一个用于标识蓝牙设备或服务的唯一字符串。它可以是标准UUID或自定义UUID,它们在蓝牙通信过程中起着关键的作用。开发者可以使用Android的蓝牙API来获取和使用UUID,以实现设备之间的蓝牙通信。 ### 回答3: 在Android中,蓝牙UUID(Universally Unique Identifier)是用来唯一标识蓝牙服务或特征的。UUID是一个128位长的数字,用十六进制表示。Android的蓝牙UUID由两部分组成:基本UUID和16位的UUID。 基本UUID蓝牙特殊产生的32位数,用于生成蓝牙列表上的唯一标识符。每个蓝牙服务或特征都有一个基本UUID。 16位UUID是在基本UUID的基础上进行自定义的,用于标识特定的蓝牙服务或特征。16位UUID是由用户自定义的UUID与基本UUID结合而成,确保每个蓝牙服务或特征都有唯一的标识符。 通过使用UUID,Android的蓝牙设备可以在发现和连接蓝牙设备时进行标识。例如,当一个设备作为服务器提供蓝牙服务时,它会公开一个UUID。其他设备可以搜索附近的蓝牙设备并通过UUID连接到该设备。 在开发Android应用程序时,开发人员可以使用UUID来建立蓝牙连接、发送和接收数据等。在创建蓝牙连接时,设备之间必须使用相同的UUID才能成功连接,这样确保了设备之间的通信准确性。 总之,Android的蓝牙UUID是用于唯一标识蓝牙服务和特征的标识符,通过UUID可以实现设备之间的连接和通信。通过合理地使用蓝牙UUID,可以更好地管理蓝牙设备的连接和数据传输。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值