본문 바로가기
블루투스/SDP

SDP Service Attribute

by 테크쟁이 2022. 12. 20.
반응형

참고자료: https://www.bluetooth.com/specifications/specs/core-specification-5-3/

 

Bluetooth SDP에 대한 내용은 "Bluetooth SDP" 참고

UUID에 대한 내용은 "UUID" 참고

 

SDP Service Attribute 구조

SDP Service Attribute 구조

 

1. UNIVERSAL ATTRIBUTE DEFINITIONS

Attribute Name Attribute ID Attribute Value Type 설명
ServiceRecordHandle 0x0000 32-bit unsigned integer Service Record의 ID
0x00000001 ~  0x0000FFFF: RFU
ServiceClassIDList 0x0001 Data Element Sequence Data Element는 Service Class의 UUID이다.

최소한 Service Class UUID가 1개는 있어야 한다.

만약 description이 없으면, specific Service Class부터 general Service Class까지 순서대로 나열되어야 한다.

새로운 Service Class를 추가할 때는, 호환성 때문에, 기존 UUID 끝에 추가해야 한다.
ServiceRecordState 0x0002 32-bit unsigned integer Service Record에 포함된 Service Attribute가 추가/삭제/변경되면, 해당 값도 변경된다.
ServiceID 0x0003 UUID Service Record description에서 Service ID
ProtocolDescriptorList 0x0004 Data Element Sequence or
Data Element Alternative
Service Record description에 있는 Service에 access 하기 위해 사용하는, 하나 이상의 Protocol Stack을 나타낸다.

Data Element는 Protocol UUID이고, Parameter는 Protocol Version과 Connection-Port 번호이다.

예시 1. IrDA-like printer
- 1개 RFCOMM이 L2CAP 위에 존재
( ( L2CAP, PSM=RFCOMM ), ( RFCOMM, CN=1 ), ( PostscriptStream ) )

예시 2. IP Network Printing
- 1개 RFCOMM이 L2CAP 위에 존재

( ( L2CAP, PSM=RFCOMM ), ( RFCOMM, CN=2 ), ( PPP ), ( IP ), ( TCP ), ( IPP ) )

예시 3. Synchronization Protocol Descriptor
- 2개 RFCOMM이 L2CAP 위에 존재

( ( L2CAP, PSM=0x1001 ), ( RFCOMM, CN=1 ), ( Obex ), ( vCal ) ) 
( ( L2CAP, PSM=0x1003 ), ( RFCOMM, CN=1 ), ( Obex ), ( otherSynchronisationApplication ) )
AdditionalProtocolDescriptorList 0x000D Data Element Sequence Data Element는 ProtocolDescriptorList Element이다.

Data Element의 순서가 중요하기 때문에, AdditionalProtocolDescriptorList를 사용하는 Profile이 specify 해야 하고 fix 해야 한다.

ProtocolDescriptorList의 Service보다, 더 많은 Channel이 필요한 Service를 지원한다.

Service Record에 AdditionalProtocolDescriptorList가 포함되어 있으면, ProtocolDescriptorList도 있어야 한다.

예시는 "AdditionalProtocolDescriptorList 예시" 참고
BrowseGroupList 0x0005 Data Element Sequence Data Element는 Service Record가 포함된 browse group의 UUID이다.

최상위 browse group ID(PublicBrowseRoot)
- 00001002-0000-1000-8000-00805F9B34FB (UUID16: 0x1002)
LanguageBaseAttributeIDList 0x0006 Data Element Sequence 단일 Service Record에서, 여러 자연어로 사람이 읽을 수 있는 Attribute가 있으면, 각 자연어에 대한 base attribute ID가 할당되어야 한다.

Data Element는 3개의 16-bit unsigned integer 이다.
- 1st Element: ISO 639 자연어 ID (한국어: kor)
- 2nd Element: 자연어 encoding 방법 (UTF-8)
- 3rd Element: base attribute ID

Service ID offset을 포함한 base attribute ID의 범위는 0x0100 ~ 0x01FF이다.

Service Record에 사람이 읽을 수 있는 Attribute가 있으면, LanguageBaseAttributeIDList가 반드시 있어야 한다.

사람이 읽을 수 있는 Attribute
- ServiceName
- ServiceDescription
- ProviderName
ServiceInfoTimeToLive 0x0007 32-bit unsigned integer Service Record에 있는 information이 유효하고 변경되지 않은 시간(sec)을 나타낸다.
- SDP Server에서 검색된 시점부터 측정
- Service Record가 사용가능하다는 것과, 변경되지 않았다는 것을 보장하지는 않고, SDP Client가 SDP Record를 재확인할 때 사용하는 polling 주기를 결정하는데 사용된다.
ServiceAvailability 0x0008 8-bit unsigned integer 추가 연결이 가능한 SDP Client 갯수를 의미
- 0x00이 아니라고, Service가 사용 가능하다는 것을 보장하지는 않는다.

( 1 - ( current_number_of_clients / maximum_number_of_clients ) ) * 0xFF
- 0xFF: 연결된 SDP Client 없음
- 0x00: 연결 가능한 SDP Client가 모두 연결됨

만약 SDP Client 3개가 연결이 가능하면,
- 0개 SDP Client 연결됨: 0xFF
- 1개 SDP Client 연결됨: 0xAA
- 2개 SDP Client 연결됨: 0x55
- 3개 SDP Client 연결됨: 0x00
BluetoothProfileDescriptorList 0x0009 Data Element Sequence Data Element는 Service Record에 포함된 Bluetooth Profile의 descriptor이다.
- 1번째 Element: Bluetooth Profile UUID
- 2번째 Element: 16-bit Bluetooth Profile version number

16-bit Bluetooth Profile version number
- The higher-order 8 bits: major version
- The lower-order 8 bits: minor version

초기버전 포맷
- major version: 1
- minor version: 0
DocumentationURL 0x000A URL Service Record description에 있는 Service의 Documentation의 위치 URL
ClientExecutableURL 0x000B URL Service Record description에 있는 Service를 활용할 수 있는 Application의 위치 URL

SDP Client의 OS에 따라서 URL은 다르게 해석된다.

만약 URL이 "http://my.fake/public/*/client.exe" 이라면,
- WindowsCE SDP Client: "http://my.fake/public/sh3-microsoft-wince/client.exe"
- Windows 98 SDP Client: "http://my.fake/public/i86-microsoft-win98/client.exe"
IconURL 0x000C URL Service Record description에 있는 Service의 Icon의 위치 URL

SDP Client의 Application에 따라서 URL은 다르게 해석된다.

만약 URL이 "http://my.fake/public/icons/*" 이라면,
- 24 x 24 icons with 256 colors SDP Client: "http://my.fake/public/icons/24x24x8.png"
- 10 x 10 monochrome icons SDP Client: "http://my.fake/public/icons/10x10x1.png"

 

Attribute Name Attribute ID Offset Attribute Value Type 설명
ServiceName 0x0000 String Service Record에서 표현하는 Service 이름
- Icon과 함께 사용하여 Service를 설명할 수 있다.

Offset 0x0000은 LanguageBaseAttributeIDList Attribute에 포함된 attribute ID base에 추가되어야 한다.
ServiceDescription 0x0001 String Service에 대한 200 character 이하의 간단한 description

Offset 0x0001은 LanguageBaseAttributeIDList Attribute에 포함된 attribute ID base에 추가되어야 한다.
ProviderName 0x0002 String Service를 제공하는 사람이나 조직의 이름

Offset 0x0002은 LanguageBaseAttributeIDList Attribute에 포함된 attribute ID base에 추가되어야 한다.

 

2. SERVICEDISCOVERYSERVER SERVICE CLASS ATTRIBUTE DEFINITIONS

Attribute Name Attribute ID Attribute Value Type 설명
ServiceRecordHandle 0x0000 32-bit unsigned integer Service Record의 ID
0x00000001 ~  0x0000FFFF: RFU
ServiceClassIDList 0x0001 Data Element Sequence Service Class의 UUID로 구성된다.

최소한 Service Class UUID가 1개는 있어야 한다.

만약 description이 없으면, specific Service Class부터 general Service Class까지 순서대로 나열되어야 한다.

새로운 Service Class를 추가할 때는, 호환성 때문에, 기존 UUID 끝에 추가해야 한다.
VersionNumberList 0x0200 Data Element Sequence 16-bit unsigned integer로 구성된다.
- higher-order 8 bits: major version number field
- low-order 8 bits: minor version number field

초기 버전은 major version은 1 이고, minor version은 0 이다.

upward compatible 변경이면 minor version이 증가하고, upward incompatible 변경이면 major version이 증가한다.
ServiceDatabaseState 0x0201 32-bit unsigned integer SDP Server의 database에서 Service Record가 추가되거나 삭제되면, 해당 값은 변경된다.

SDP Client가 전 연결에서 사용하던 Service Record Handle을 사용하기 전에, Service Record가 삭제되어서 사용할 수 없는지 확인하기 위해, 해당 값을 query 해야 한다.

 

3. BROWSEGROUPDESCRIPTOR SERVICE CLASS ATTRIBUTE DEFINITIONS

Attribute Name Attribute ID Attribute Value Type 설명
ServiceClassIDList 0x0001 UUID Service Class의 UUID로 구성된다.

최소한 Service Class UUID가 1개는 있어야 한다.

만약 description이 없으면, specific Service Class부터 general Service Class까지 순서대로 나열되어야 한다.

새로운 Service Class를 추가할 때는, 호환성 때문에, 기존 UUID 끝에 추가해야 한다.

UUID는 BrowseGroupDescriptorServiceClassID를 나타낸다.
GroupID 0x0200 UUID Service Record의 description에 있는, browse group에 속한 Service를 찾을 때, 해당 UUID를 사용한다.
 
반응형

'블루투스 > SDP' 카테고리의 다른 글

AdditionalProtocolDescriptorList 예시  (0) 2022.12.22
Bluetooth SDP(Service Discovery Protocol)  (0) 2022.12.19