Bluetooth協(xié)議棧學(xué)習(xí)之SDP
作者: Sam (甄峰) sam_code@hotmail.com
?
SDP(service discoveryprotocol:服務(wù)發(fā)現(xiàn)協(xié)議)提供了一個(gè)方法,讓應(yīng)用程序檢測哪些服務(wù)是可用的并探測這些可用服務(wù)的特性。
服務(wù)發(fā)現(xiàn)協(xié)議(SDP或BluetoothSDP)在藍(lán)牙協(xié)議棧中對藍(lán)牙環(huán)境中的應(yīng)用程序有特殊的含意,發(fā)現(xiàn)哪個(gè)服務(wù)是可用的和確定這些可用服務(wù)的特征。SDP定義了bluetoothclient發(fā)現(xiàn)可用bluetoothserver服務(wù)和它們的特征的方法。這個(gè)協(xié)議定義了客戶如何能夠?qū)ふ一谔囟▽傩缘姆?wù)而不讓客戶知道可用服務(wù)的任何知識。SDP提供發(fā)現(xiàn)新服務(wù)的方法,在當(dāng)客戶登錄到正在操作的藍(lán)牙服務(wù)器的一個(gè)區(qū)域時(shí)是可用的時(shí)。
?
SDP提供了一套SDP server和SDP client之間的通訊方法。 SDPserver維護(hù)著一個(gè)服務(wù)條目列表,這個(gè)列表存放著SDPserver對應(yīng)的服務(wù)以及服務(wù)特性。每個(gè)服務(wù)條目對應(yīng)一個(gè)單獨(dú)的服務(wù)。SDPclient可以通過發(fā)送請求得到SDP server維護(hù)的這個(gè)服務(wù)條目list.
?
如果SDPclient或者聯(lián)系于client之上的應(yīng)用程序決定使用某個(gè)service,則打開一個(gè)針對此服務(wù)的連接到服務(wù)提供者去使用此服務(wù)。SDP只是提供偵測service以及特性的方法,但不提供如何使用這些service的方法.
?
每個(gè)bluetooth device最多有一個(gè)SDP server. 如果某個(gè)device只作為client.則不需要擁有SDPserver.而一個(gè)bluetooth device可以同時(shí)為SDP client和SDP server.
?
服務(wù)條目(Service Record):
一個(gè)service就是某個(gè)實(shí)體提供一些信息,執(zhí)行某種動(dòng)作,或控制資源代表另一個(gè)實(shí)體。一個(gè)service可以由軟件,硬件或軟硬件結(jié)合提供。
SDP server維護(hù)的service條目包含在service record中。
SDP server中,每個(gè)service record由一個(gè)32位數(shù)與別的record區(qū)別。注意,只是在這個(gè)SDPserver內(nèi)。
?
當(dāng)SDP server添加或刪除某個(gè)service時(shí),不會主動(dòng)提供給client.
?
Service 屬性:
每個(gè)屬性描述一個(gè)service的特征。
service屬性包含兩部分:
attribute ID + attribute Value.
屬性ID是一個(gè)16bit的值,用來和Service record內(nèi)的其它屬性區(qū)別開來。
?
?
Service Class:
每個(gè)server是 service class的一個(gè)實(shí)例。serviceclass定義了service(此class的實(shí)例)的每個(gè)特性。屬性對應(yīng)attribute ID,屬性value的格式,
每個(gè)serviceclasss也指定為一個(gè)的標(biāo)識符。這個(gè)標(biāo)識符被包含在屬性ServiceClassIDList中。并描述為UUID。
?
?
Search forservice:
service search功能允許SDP client得到包含在service record 中的service屬性。
可以使用屬性的Universally Unique Identifiers1 (UUIDs)得到屬性。