Android中的Serializable、Parcelable">Android中的Serializable、Parcelable
1525
2025-03-31
1、TI BLE profile詳解
BLE 協(xié)議棧的 GATT 層是設計用于應用程序在兩個連接設備之間的數(shù)據(jù)通信。
從 GATT 層的角度看,當設備連接后,將充當一下兩種角色中的一個:
GATT Client —— 從 GATT 服務器讀/寫數(shù)據(jù)的設備
GATT Server —— 包含客戶端需要讀/寫的數(shù)據(jù)的設備
GATT Client 和 Server 的角色完全獨立于 BLE 的鏈路層的 slave 和 master 的角色,或 GAP 層 peripheral 和 central 的角色。
一個 slave 可以是 GATT Client 或 GATT Server,一個 master 同樣可以是 GATT Client 或 GATT Server。
一個 GATT Server 可以有多個完成一個特定的功能或特性 GATT Server 組成。
在 SimpleBLEPeripheral(從機) 應用程序中有三個 GATT 服務:
Mandatory GAP Service —— 這個服務包含設備和訪問信息,比如設備名稱和供應商和產(chǎn)品標識,是一個部分的 BLE 協(xié)議棧,需要每個設備按照 BLE 協(xié)議棧規(guī)范。
Mandatory GATT Service ——這個服務包含有關服務器,是 BLE 的一部分協(xié)議棧,它要求每個 BLE 服務器設備按照 BLE 規(guī)范。
SimpleGATTProfile Service ——這個服務是一個示例配置文件,供測試和演示。
什么是 Profile?
為了更容易的保持 Bluetooth 設備之間的兼容, Bluetooth 規(guī)范中定義了Profile。
Profile 定義了設備如何實現(xiàn)一種連接或者應用,你可以把 Profile 理解為連接層或者應用層協(xié)議。
Bluetooth 的一個很重要特性,就是所有的 Bluetooth 產(chǎn)品都無須實現(xiàn)全部 的 Bluetooth 規(guī)范,你可根據(jù)所需要的產(chǎn)品實現(xiàn)需要的 Profile,不必給開發(fā)帶來更大的開銷。
這就是說當需要利用藍牙提供數(shù)據(jù)傳輸功能時就必須建立對應的 Profile, TI 的 BLE 協(xié)議棧為我們提供了部分 Profile,其中一部分是非標準的 Profile。
其中非標準的有 SimpleGATTProfile 和 SimpleKeysProfile,我們將通過對這兩個 Profile 的介紹及實驗來了解 Profile 的特性和使用。
每個 Profile 初始化其響應的服務和內(nèi)部寄存器。GATT 服務器將整個服務加到屬性表中,并為每個屬性分配唯一的句柄,GATT Profile 用于存儲和處理 GATT 服務器中的數(shù)據(jù)。
一個GATT服務器通過一個稱為屬性表的表格組織數(shù)據(jù),這些數(shù)據(jù)就是真正用于發(fā)送的數(shù)據(jù)。
屬性包括:UUID、handle、Characteristic Values
handle:屬性在GATT表中的索引,一個設備中每一個屬性的句柄都是唯一的;
UUID:包含屬性表中數(shù)據(jù)類型的信息,是理解屬性表中的值得每一個字節(jié)的意義的關鍵信息;
在一個GATT表中可能有許多屬性,但這些屬性可能有相同的UUID。
2、Android Bluetooth Profile詳解
SPP Serial Port Profile
A2DP Advanced Audio Distribution Profile
AVRCP Audio/Video Remote Control Profile
HID Human Interface Device Profile
HFP Hands-Free Profile
其中Media相關度比較大的是A2DP和AVRCP,做數(shù)據(jù)通信經(jīng)常用到SPP
Bluetooth Profile的概念
Profile定義了一種基于藍牙的應用,每個Profile規(guī)范主要包括針對開發(fā)者的接口,消息的格式和標準(例如音頻壓縮),使用藍牙協(xié)議棧的組件等。
每一種Profile對應于一個UUID,Bluetooth種UUID的概念類似于TCP/IP中端口的概念,每一個UUID運行一種服務。
Bluetooth通過SDP(Service Discovery Protocol)來發(fā)現(xiàn)配對設備的所支持的Profile。
在Bluetooth Device的SDP Servie Daemon中,保存有支持的Service List和連接的Session等信息,SDP Client利用這些信息來完成Profile的發(fā)現(xiàn)和鑒別。
特殊說明的是,Bluetooth中比較基礎的Profile有Generic Access Profile (GAP)和上述的SDP,此外,SPP通常作為其他Profile的實現(xiàn)基礎。
Bluetooth UUID的概念
UUID的概念應用很普遍,是一種分布式(更確切說是局部式?)的ID生成方式。上述每種Profile均對應一個或多個UUID(同一Profile內(nèi)不同UUID也對應不同的service)。
在Bluetooth SIG中已定義的Profile的UUID均采用如下方式生成:
BASE_UUID + uuid16 << 96 或 BASE_UUID + uuid32 << 96
其中,BASE_UUID為:
BASE_UUID 00000000-0000-1000-8000-00805F9B34FB
因此,Bluetooth SIG預定義的UUID僅在后32位(實際為96~112位)發(fā)生變化
例如,
A2DP_UUID 0000110B-0000-1000-8000-00805F9B34FB
在android的logcat種經(jīng)??吹?0805F9B34FB的字串
SPP
SPP是Android唯一完全開放的Bluetooth Profile,在Offical Tutorial中也采用00000000-0000-1000-8000-00805F9B34FB作為SPP的UUID。
事實上,SPP通信是一個很基本的方式,UUID完全可以自定義,但Device雙方必須事先共享UUID。
具體實現(xiàn)上,SPP的編程方式非常接近于linux的Tcp socket. 一些共同的問題如client接入之后處理,另開線程等等都非常類似。
A2DP
A2DP是做音頻和多媒體方面遇到比較多的一個Profile,在Android中已經(jīng)包含了A2DP對應的API(大部為@hide)。需要自己用reflection的方式來獲得對應的API。
相關的API與Android API Level的對應關系隨后總結。
HID
HID是標準的鍵盤、鼠標等的輸入輸出,例如可以用這個Profile來實現(xiàn)一些簡單的遠程按鍵控制。
Android種HID的事件捕獲與backKey等等方式相同,可以在使用View.OnKeyListener的onKey來捕獲對應的keyCode。
AVRCP
AVRCP主要是對應一些媒體播放控制,基本可以等價于HID,例如PC的“多媒體鍵盤”上的音量鍵、播放暫停鍵等。
AVRCP事件可以看成HID的特殊情況,具體在Android的keybord layout中定義按鍵的具體含義。
HFP
在車載種經(jīng)常用到的Profile,音頻部分類似于A2DP,支持HFP和A2DP的設備,Bluetooth在藍牙打開的情況下會自動連接。
Android IoT
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。