linux下bluetooth程式設計(七)SDP協議

Vincent_Song發表於2011-09-17
 

Service Discovery Protocol(SDP)提供一種能力,讓應用程式有方法發現哪種服務可用以及這種服務的特性。

服務發現協議(SDP或Bluetooth SDP)在藍芽協議棧中對藍芽環境中的應用程式有特殊的含意,發現哪個服務是可用的和確定這些可用服務的特徵。SDP定義了bluetooth client發現可用bluetooth server服務和它們的特徵的方法。這個協議定義了客戶如何能夠尋找基於特定屬性的服務而不讓客戶知道可用服務的任何知識。SDP提供發現新服務的方法,在當客戶登入到正在操作的藍芽伺服器的一個區域時是可用的時。

 

Service discovery機制提供client應用程式偵測server應用程式提供的服務的能力,並且能夠得到服務的特性。服務的品質包含服務type或服務class.

 

SDP也提供SDP server與SDP client之間的通訊。SDP server維護著一個服務條目(service record)列表.每個服務條目描述一個單獨的服務屬性。 SDP client可以通過傳送SDP request來得到服務條目

 

如果一個client或者依附於client之上的應用程式決定使用某個service. 它建立一個單獨的連線到service提供者。 SDP 只提供偵測Service的機制,但不提供如何利用這些Service的機制。Sam覺得,這裡其實是說:SDP只提供偵測Service的辦法,但如何用,SDP不管。

 

每個Bluetooth Device最多隻能擁有一個SDP Server。如果一個Bluetooth Device只擔任Client,那它不需要SDP Server。但一個Bluetooth Device可以同時擔當SDP Server和SDP client.

 

 

Service Record(Service 條目)

一個service是一個實體為另一個實體提供資訊,執行動作或控制資源。一個service可以由軟體,硬體或軟硬體結合提供。

 

所有的Service資訊都包含於一個Service Record內。一個Service Record 包含一個Service attribute(Service屬性) list.

在一個SDP Server內,每個Service Record擁有一個32-bit的唯一性資料。通常,這個唯一性只是在每個SDP Server內部。 如果SDP Server S1 和SDP Server S2擁有同樣的一個Service Record。那他們在不同SDP Sever內的獨特數值並不一定相同。

 

SDP在SDP Server增加或減少Service Record時,並不會通知SDP client.

 

 

Service Attribute(Service 屬性):

每個Service屬性描述servcie的特性.一個Service Attribute由2部分:

Attribute ID + Attribute Value。

Attribute ID:16-bit無符號整數,用於區別一個Service Record內的其它屬性。

Attribute Value:Attribute值。

 

 

Service Class:

每個Service 都是某個Service Class的例項. Service Class定義了Service Record中包含的Service 屬性。屬性ID,屬性值都被定義好了。

每個Service Class也有一個獨特ID。這個Service Class識別符號包含在屬性值ServiceClassIDList屬性中。並描繪為UUID。自從Service Record中的屬性格式以及含義依賴於Service Class後,ServiceClassIDList屬性變得非常重要。

 

 

Searching For Service:

Service Search transaction(事務?)允許client得到Service Record Handle。一旦SDP Client得到Service Record Handle,它就可以請求這個Record內具體屬性的值。

如果某個屬性值UUID,則可以通過查詢UUID查到這個屬性。 

UUID: universally unique identifier.(唯一性識別符號)

 

 

SDP協議棧使用request/response模式工作,每個傳輸過程包括一個request protocol data unit(PDU)和一個response PDU. SDP使用L2CAP連線傳輸資料。在傳送Request PDU但未收到Response PDU之前,不能向同一個server再傳送Request PDU。

 

 

 PDU:protocol Data unit

 

 

 PDU ID:用來識別PDU。

 

TransactionID:

用來識別Request PUD以及Response PUD。並用來對比某個Response PUD是否對應著Request PUD。

相關文章