藍牙核心技術概述(一):藍牙概述

藍牙,是一種支持設備短距離通訊(通常10m內)的無線電技術。能在包括移動電話、PDA、無線耳機、筆記本電腦、相關外設等衆多設備之間進行無線信息交換。利用「藍牙」技術,可以有效地簡化移動通訊終端設備之間的通訊,也可以成功地簡化設備與因特網Internet之間的通訊,從而數據傳輸變得更加迅速高效,爲無線通訊拓寬道路。藍牙採用分散式網絡結構以及快跳頻和短包技術,支持點對點及點對多點通訊,工做在全球通用的2.4GHz ISM(即工業、科學、醫學)頻段。其數據速率爲1Mbps。採用時分雙工傳輸方案實現全雙工傳輸html

  

 
一、無線射頻單元(Radio):負責數據和語音的發送和接收,特色是短距離、低功耗。藍牙天線通常體積小、重量輕,屬於微帶天線。
二、基帶或鏈路控制單元(LinkController):進行射頻信號與數字或語音信號的相互轉化,實現基帶協議和其它的底層鏈接規程。
三、鏈路管理單元(LinkManager):負責管理藍牙設備之間的通訊,實現鏈路的創建、驗證、鏈路配置等操做。
四、藍牙軟件協議實現:如上圖紫色部分,這個後面咱們作詳細說明。
 
 
 
 
(二)藍牙協議組成
 
2.1 藍牙協議架構

藍牙協議體系中的協議按SIG的關注程度分爲四層:android

1.核心協議:BaseBand、LMP、L2CAP、SDP; 
2.電纜替代協議:RFCOMM; 
3.電話傳送控制協議:TCS-Binary、AT命令集; 
4.選用協議:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。

除上述協議層外,規範還定義了主機控制器接口(HCI),它爲基帶控制器、鏈接管理器、硬件狀態和控制寄存器提供命令接口。在圖1中,HCI位於L2CAP的下層,但HCI也可位於L2CAP上層。ios

藍牙核心協議由SIG制定的藍牙專用協議組成。絕大部分藍牙設備都須要核心協議(加上無線部分),而其餘協議則根據應用的須要而定。總之,電纜替代協議、電話控制協議和被採用的協議在覈心協議基礎上構成了面向應用的協議。 編程

藍牙協議棧容許採用多種方法,包括 RFCOMM 和 Object Exchange (OBEX ), 在設備之間發送和接收文件。若是想發送和接收流數據(並且想採用傳統的串口應用程序,並給它加上藍牙支持),那麼 RFCOMM 更好。反過來,若是想發送對象數據以及關於負載的上下文和元數據,則 OBEX 最好。緩存

藍牙應用程序活動圖,以下:安全

 

2.1.1  串口仿真RFCOMM介紹服務器

藍牙—RFCOMM協議網絡

找到服務,RFCOMM是經過不一樣的頻道(channel)來提供不一樣的Profile的,因此須要找到要用的服務在設備上的哪一個頻道上,這是經過同一個軟件包裏的sdptool來完成的,就是SDP,服務發現協議 架構

 

2.2 藍牙profileapp

2.2.1 藍牙profile概述
 

  從3.0版本開始(聽說2.1也是支持的?TBD),藍牙纔開始支持BluetoothProfile。BluetoothProfile是藍牙設備間數據通訊的無線接口規範。想要使用藍牙無線技術,設備必須可以翻譯特定藍牙配置文件,配置文件定義了可能的應用.

    藍牙配置文件表達了通常行爲,藍牙設備能夠經過這些行爲與其餘設備進行通訊.
    藍牙技術定義了普遍的配置文件,描述了許多不一樣類型的使用安全.按藍牙規格中提供的指導,開發商可建立應用程序以用來與其餘符合藍牙規格的設備協同工做.在最低限度下,各配置文件規格應包含下列主題的相關信息.
    ① 與其餘配置文件的相關性
    ② 建議的用戶界面格式
    ③ 配置文件使用的藍牙協議堆棧的特定部分.
    爲執行其任務, 每一個配置文件都使用堆棧各層上的特定選項和參數.若須要,也可包括必需的服務記錄概要。ProfilesAPI層則分別對Audio、Data、Control等提供了不一樣的模塊。目前已規範有四大類、十三種協議規格。
 
  Bluetooth的一個很重要特性,就是全部的Bluetooth產品都無須實現所有的Bluetooth規範。爲了更容易的保持Bluetooth設備之間的兼容,Bluetooth規範中定義了Profile。 Profile定義了設備如何實現一種鏈接或者應用,你能夠把Profile理解爲鏈接層或者應用層協議。
 
❤ 經常使用的profile介紹請參考「藍牙Profile的概念和常見種類」,幾種種最基本的配置文件爲:
 
1.通用訪問配置文件(Generic Access Profile, GAP)
   
GAP是全部其餘配置文件的基礎,它定義了在藍牙設備間創建基帶鏈路的通用方法.除此以外,GAP還定義了下列內容:
 
   ① 必須在全部藍牙設備中實施的功能
   ② 發現和連接設備的通用步驟
   ③ 基本用戶界面術語.
 
GAP確保了應用程序和設備間的高度互操做性,還容許開發人員利用現有的定義更加容易地定義新的配置文件.GAP處理未鏈接的兩個設備間的發現和創建鏈接過程.此配置文件定義了一些通用的操做,這些操做可供引用GAP的配置文件,以及實施多個配置文件的設備使用.GAP確保了兩個藍牙設備可經過藍牙技術交換信息,以發現彼此支持的應用程序.不符合任何其餘藍牙配置文件的藍牙設備必須與GAP符合以確保基本的互操做性和共存.
 
2.服務發現應用配置文件(Service Discovery Application Profile, SDAP)
   
SDAP描述了應用程序如何使用SDP發現遠程設備上的服務.因爲GAP的要求,任何藍牙設備都應可以鏈接至其餘藍牙設備.基於此,SDAP要求任何應用程序都應當可以發現它要鏈接的其餘藍牙設備上的可用服務.此配置文件可承擔搜索已知和特定服務及通常的任務.SDAP涉及了稱爲「服務發現用戶應用程序」的一個應用程序,這是藍牙設備查找服務所必需的.此應用程序可與向/從其餘藍牙設備發送/接收服務查詢的SDP相接.SDAP依賴於GAP,並能夠從新使用部分GAP.
 
3.串行端口配置文件(Serial Port Profile, SPP)
   
SPP定義瞭如何設置虛擬串行端口及如何鏈接兩個藍牙設備.SPP基於ETSI TS 07.10規格,使用RFCOMM協議提供串行商品仿真.SPP提供了以無線方式替代現有的RS-232串行通訊應用程序和控制信號的方法.SPP爲DUN,FAX,HSP和LAN配置文件提供了基礎.此配置文件能夠支持最高128kb/s的數據率.SPP依賴於GAP.
 
4.通用對象交換配置文件(Generic Object Exchange Profile, GOEP)
   
GOEP可用於將對象從一個設備傳輸到另外一個設備.對象能夠是任意的.如:圖片,文檔,名片等.此配置文件定義了兩個角色:提供拉提或推送對象位置的服務器及啓動操做的客戶端.使用GOEP的應用程序假定鏈路和信道已按GAP的定義創建.GOEP依賴於串行端口配置文件.
GOEP爲使用OBEX協議的其餘配置文件提供了通用藍圖,併爲設備定義了客戶端和服務器角色.對於全部的OBEX事務.GOEP規定應由客戶端啓動全部事務.可是此配置文件並無描述應用程序就如何定義要交換的對象或如何實施交換.這些細節留給屬於GOEP的配置文件.即OPP,FTP和SYNC去完成.一般使用此配置文件的藍牙設備爲筆記本電腦,PDA,手機及智能電話.
 
注意:藍牙1.1版本規範全部藍牙設備的最小實現必須支持通用訪問配置文件,服務發現應用配置文件和串行端口配置文件.
 
在兩臺電腦或者Labtop之間就能夠創建這種鏈接,以下圖所示: 
 
 

    SPP是基於RFCOMM的,spp 協議處於rfcomm的上層,spp的應用需走rfcomm層。若是你使用RFCOMM可以實現,那麼也就不須要使用SPP,而卻速度還會比SPP來作快,由於省略了採用profile的一些數據包頭等。不過,仍是推薦採用SPP來作,兼容性有保證,這也是爲何藍牙本質上數據和語音的傳送卻出現HFP,HSP,SPP,OPP等諸多具體應用profile的緣由。

 
 
 
2.2.2  藍牙profile框架
 

每一個attribute屬性被UUID(通用惟一標識符)惟一標識 ,UUID是標準128-bit格式的ID用來惟一標識信息。attributes 被 ATT 格式化characteristics和services形式進行傳送。

特徵(Characteristics)— 一個characteristics包含一個單獨的value值和0 –n個用來描述characteristic 值(value)的descriptors。一個characteristics能夠被認爲是一種類型的,相似於一個類。

描述符(descriptor)—descriptor是被定義的attributes,用來描述一個characteristic的值。例如,一個descriptor能夠指定一我的類可讀的描述中,在可接受的範圍裏characteristic值,或者是測量單位,用來明確characteristic的值。

服務(service)—service是characteristic的集合。例如,你能夠有一個所謂的「Heart RateMonitor」service,其中包括characteristic,如「heart rate measurement 」。你能夠在 bluetooth.org找到關於一系列基於GATT的profile和service。

 

如上圖所示:藍牙設備能夠包括多個Profile,一個Profile中有多個Service,一個Service中有多個Characteristic,一個Characteristic中包括一個value和多個Descriptor。

 

profile框架和android低功耗藍牙管理和使用簡介

 

 

2.3 藍牙4.0和4.1 
 
   
♪ 藍牙4.0實際是個三位一體的藍牙技術,它將傳統藍牙、低功耗藍牙和高速藍牙技術融合在一塊兒,這三個規格能夠組合或者單獨使用。也就是說 BLE是藍牙4.0增長的,以前沒有?(TBD)
藍牙4.0專門面向對成本和功耗都有較高要求的無線方案,其主打特性就是省電、省電、省電。極低的運行和待機功耗使得一粒鈕釦電池甚至可連續工做一年之久。它有低功耗、經典、高速三種協議模式。其中:高速藍牙主攻數據交換與傳輸;經典藍牙則以信息溝通、設備鏈接爲重點;低功耗藍牙以不需佔用太多帶寬的設備鏈接爲主。這三種協議規範可以互相組合搭配,從而適應更普遍的應用模式。正由於有了三種能夠互相組合搭配的協議,藍牙4.0所以成爲惟一一個綜合協議規範。它有着極低的運行和待機功耗。此外,低成本和跨廠商互操做性,3毫秒低延遲、AES-128加密等諸多特點,能夠用於計步器、心律監視器、智能儀表、傳感器物聯網等衆多領域,大大擴展藍牙技術的應用範圍。
 
♪ 藍牙4.1主打IOT(Internet Of Things全聯網),最新的藍牙4.1標準是個頗有前途的技術,其智能、低功耗、高傳輸速度、鏈接簡單的特性將適合用在許多新興設備上。
藍牙4.1設備能夠同時做爲發射方和接受方,而且能夠鏈接到多個設備上。舉個例子,智能手錶能夠做爲發射方向手機發射身體健康指數,同時做爲接受方鏈接到藍牙耳機、手環或其餘設備上。藍牙4.1使得批量數據能夠以更高的速率傳輸,固然這並不意味着能夠用藍牙高速傳輸流媒體視頻,這一改進的主要針對的仍是剛剛興起的可穿戴設備。例如已經比較常見的健康手環,其發送出的數據流並不大,經過藍牙4.1可以更快速地將跑步、游泳、騎車過程當中收集到。由於新標準加入了對IPv6專用通道聯機的支持,經過IPv6鏈接到網絡,實現與Wi-Fi相同的功能,解決可穿戴設備上網不易的問題。

 

藍牙4.0和藍牙4.1的比較
 
 
 
 
2.3.1 藍牙4.0低功耗(BLE)
 
 
① 低功耗藍牙Bluetooth Low Energy(BLE)是藍牙4.0增長的。(?TBD) ,蘋果系列都支持4.0.
② Android4.3(API級別18)引入內置平臺支持BLE的central角色,同時提供API和app應用程序用來發現設備,查詢服務,和讀/寫characteristics。與傳統藍牙( ClassicBluetooth)不一樣,藍牙低功耗(BLE)的目的是提供更顯著的低功耗。這使得Android應用程序能夠和具備低功耗的要求BLE設備,如接近傳感器,心臟速率監視器,健身設備等進行通訊。
③ BLE低功耗藍牙軟件有2個主要組成: OSAL操做系統抽象層和 HAL硬件抽象層,多個Task任務和事件在OSAL管理下工做,而每一個任務和事件又包括3個組成:BLE 協議棧,profiles和應用程序。
 
BLE藍牙協議棧結構
 
分爲兩部分:控制器和主機。對於4.0之前的藍牙,這兩部分是分開的。全部profile(姑且稱爲劇本吧,用來定義設備或組件的角色)和應用都建構在GAP或GATT之上。下面由結構圖的底層組件開始介紹。 
 
 

通用屬性規範(GATT)—GATTprofile是一個通用規範用於在BLE鏈路發送和接收被稱爲「屬性(attributes)」的數據片。目前全部的低功耗應用 profile都是基於GATT。

藍牙SIG定義了許多profile用於低功耗設備。Profile(配置文件)是一個規範,規範了設備如何工做在一個特定的應用場景。注意:一個設備能夠實現多個profile。例如,一個設備能夠包含一個心臟監測儀和電池電平檢測器。

 

主從機鏈接創建過程:

 

2.3.2 藍牙4.0(BLE)主從通訊透傳模塊
 

    低功耗藍牙模塊主透傳協議是針對低功耗藍牙模塊從透傳協議設計的,經過本協議模塊可替代手機設備與從透傳協議模塊鏈接,實現透傳功能或直驅控制功能。此協議模塊可用做從透傳協議模塊開發過程當中的輔助工具。

    BLE主透傳協議模塊(如下簡稱MTTM)能夠工做在透傳模式(TTM)或指令模式(CM)。

    MTTM上電啓動後,處於待機模式(SBM),此時處於空閒狀態,無睡眠,須要用戶經過AT指令控制模塊鏈接從設備。在成功與從設備創建連接後,MTTM會自動查找從設備的透傳通道,若是從設備屬於BLE從透傳協議模塊(如下簡稱STTM),MTTM默認進入透傳模式,不然默認進入指令模式。

  透傳模式下,用戶CPU能夠經過模塊的通用串口與STTM進行雙向通信。從MTTM串口輸入的數據將轉發到STTM,並從STTM的串口輸出;從STTM輸入的數據將轉發到MTTM,並從MTTM的串口輸出,從而實現透明傳輸功能,用戶數據的具體含義由上層應用程序自行定義。 

 

透傳中數據的格式也是profile,或藍牙標準profile或自定義simple profile。基本結構依然是:

一、profile  
  profile能夠理解爲一種規範,一個標準的通訊協議,它存在於從機中。藍牙組織規定了一些標準的profile,例如 HID OVER GATT ,防丟器 ,心率計等。每一個profile中會包含多個service,每一個service表明從機的一種能力。
二、service
  service能夠理解爲一個服務,在ble從機中,經過有多個服務,例如電量信息服務、系統信息服務等,每一個service中又包含多個characteristic特徵值。每一個具體的characteristic特徵值纔是ble通訊的主題。好比當前的電量是80%,因此會經過電量的characteristic特徵值存在從機的profile裏,這樣主機就能夠經過這個characteristic來讀取80%這個數據
三、characteristic
  characteristic特徵值,ble主從機的通訊均是經過characteristic來實現,能夠 理解爲一個標籤,經過這個標籤能夠獲取或者寫入想要的內容。
四、UUID
  UUID,統一識別碼,咱們剛纔提到的service和characteristic,都須要一個惟一的uuid來標識
 
每一個從機都會有一個叫作profile的東西存在,無論是上面的自定義的simpleprofile,仍是標準的防丟器profile,他們都是由一些列service組成,而後每一個service又包含了多個characteristic,主機和從機之間的通訊,均是經過characteristic來實現。
實際產品中, 每一個藍牙4.0的設備都是經過服務和特徵來展現本身的,服務和特徵都是用UUID來惟一標識的。一個設備必然包含一個或多個服務,每一個服務下面又包含若干個特徵。特徵是與外界交互的最小單位。 藍牙設備硬件廠商一般都會提供他們的設備裏面各個服務(service)和特徵(characteristics)的功能,好比哪些是用來交互(讀寫),哪些可獲取模塊信息(只讀)等。好比說,一臺藍牙4.0設備,用特徵A來描述本身的出廠信息,用特徵B來與收發數據等。
 
 
4.0中profile的存在是幹嗎用的呢,只是一種組織形式存在? 

服務和特徵都是用UUID來惟一標識的,UUID的概念若是不清楚請自行google,國際藍牙組織爲一些很典型的設備(好比測量心跳和血壓的設備)規定了標準的service UUID(特徵的UUID比較多,這裏就不列舉了)

 
4.0 BLE數據傳輸可參考下述系列:
 
 

(三)Android Bluetooth 架構

一、面向庫的架構視圖
 
 
二、面向進程的架構視圖
 
 

參考 藍牙4.0 For IOS

iOS 有兩個框架支持藍牙與外設鏈接。

一個是 ExternalAccessory。從ios3.0就開始支持,也是在iphone4s出來以前用的比較多的一種模式,可是它有個很差的地方,External Accessory須要拿到蘋果公司的MFI認證。

另外一個框架則是本文要介紹的CoreBluetooth,在藍牙4.0出來以後(注意,硬件上要4s以上,系統要ios6以上才能支持4.0),蘋果開放了BLE通道,專門用於與BLE設備通信(由於它的API都是基於BLE的)。這個不須要MFI,而且如今不少藍牙設備都支持4.0,因此也是在IOS比較推薦的一種開發方法。現CoreBluetooth在的開發幾乎所有基於該框架,本節只介紹CoreBluetooth。

 

1,CoreBluetooth介紹

CoreBluetooth框架的核心實際上是兩個東西,peripheral和central, 能夠理解成外設和中心。對應他們分別有一組相關的API和類,以下圖所示:

若是你要編程的設備是手機的central,那麼你大部分用到peripheral API。反之亦然,設備是peripheral,iphone手機是central,因此將大部分使用central API。使用peripheral編程的例子也有不少,好比像用一個ipad和一個iphone通信,ipad能夠認爲是central,iphone端是peripheral,這種狀況下在iphone端就要使用上圖右邊部分的類來開發了。

做爲一箇中心(central)要實現完整的通信,通常要通過這樣幾個步驟:

(1)創建中心角色— 
(2)掃描外設(discover)(經過接收從設備廣播來掃描、發現設備,得到peripheral ID)—       
  a, 若是數據中已經和某些藍牙設備綁定,可使用BluetoothAdapter.getBondedDevices();方法得到已經綁定的藍牙設備列表。經過指定特定的peripheral的UUID,central只會discover這個特定的設備。 
  b, 搜索周圍的藍牙設備受用BluetoothAdapter.startDiscovery()方法 
  c, 搜索到的藍牙設備都是經過廣播返回,so..。須要註冊廣播接收器來得到已經搜索到的藍牙設備
(3)鏈接外設(connect)(根據peripheral ID鏈接指定的外設)— 
(4)掃描外設中的服務和特徵(discover)(一個設備裏的服務和特徵每每比較多,通常會在發現服務和特徵的回調裏經過service、characteristic UUID去匹配咱們關心那些)— 
(5)與外設作數據交互(explore and interact)— 
(6)斷開鏈接(disconnect)。

 

2, 設備ID描述DID

    每一個與蘋果設備兼容的藍牙接入都必須:支持藍牙設備ID描述,1.3版本或者更高;使用藍牙SIG分配的Assigned Numbers文檔中的公司標識做爲他的Vendor ID值,也就是VID,若是生產商沒有藍牙SIG公司標識,那麼藍牙HID描述接入可能會使用USB Implementers Forum分配的VID;使用他的VID值來標識最終的產品生產商;使用版本值來惟一標識軟件的版本;使用ProductID值惟一標識產品。Device ID描述使得蘋果產品可以識別遠程的藍牙接入,該信息能夠用來在與遠程接入交互的時候鏈接藍牙描述間的交替互操做。所以Device ID中的信息記錄很是重要。

    理想狀況下,這兩個設備應該有不一樣的產品ID。可是,當他們擁有徹底相同的硬件、軟件和特性的時候擁有相同的ProductID也是能夠容許的。若是他們有任何的不一樣,就都應該有不一樣的Product ID。

 

3,IOS的藍牙低功耗

    藍牙4.0標準引入了藍牙低功耗,一種針對有限電池資源的藍牙接入的無線技術。若是支持藍牙低功耗的話,接入點須要支持下面的這些特性。(這裏更多的是藍牙芯片商要作的事情)

角色

藍牙接入須要實現藍牙4.0標準中定義的外圍角色

廣告通道

藍牙接入須要在全部三個廣告通道中針對每一個廣告事件進行廣告

廣告PDU

藍牙接入須要使用以下廣告PDU中的一個:ADV_IND;ADV_NOCONN_IND;ADV_SCAN_IND。其中ADV_DIRECT_IND不推薦使用。

廣告數據

由藍牙接入發送的廣告信息應該至少包含藍牙4.0標準中包含的以下信息:Flags;TX Power Level;Local Name;Services。若是須要下降電量消耗或者並非全部的廣告數據都適合放入到廣告PDU中的時候,接入點可能將Local Name和TX Power Level數據方知道SCAN_RSP PDU中。須要注意的是根據它的狀態,蘋果產品可能不會老是執行激活掃描。主要的服務應該老是放在廣告PDU中進行廣告。次要的服務不該該進行廣告。對於接入點不重要的服務信息可能會由於廣告PDU中的空間不足而被忽略。廣告數據和SCAN_RSP PDU中的掃描響應數據應該遵循藍牙4.0標準中的格式。

廣告間隔

藍牙接入的廣告間隔應該慎重考慮,由於他會影響到發現和鏈接的性能。對於低功耗的接入,電池資源也應該被考慮在內。爲了可以被蘋果產品發現,藍牙接入應該首先使用推薦的廣告間隔20ms,並持續至少30秒。若是在這30秒內沒有被發現,那麼接入點可能會選擇節省電池電量而後增長廣告間隔,蘋果推薦使用以下依次延長的事件間隔來發現藍牙接入點:645 ms;768 ms;961 ms;1065 ms;1294 ms

鏈接參數

藍牙接入負責用來LE鏈接的鏈接參數。接入點須要請求合適的鏈接參數來在合適的時候發送一個L2CAP鏈接參數跟新請求。若是他沒有符合以下規則,那麼鏈接參數請求可能會被拒絕:Interval Max * (Slave Latency + 1) ≤ 2 seconds;Interval Min ≥ 20 ms;Interval Min + 20 ms ≤ Interval Max;Slave Latency ≤ 4;connSupervisionTimeout ≤ 6 seconds以及Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout。蘋果設備不會讀取或者使用Peripheral Preferred Connection Parameters特性中的參數。

隱私

藍牙接入應該在任何狀況下都可以知足Resovable Private Address。由於私隱方面的考慮,蘋果設備將會使用藍牙4.0標準中定義的隨機設備地址。

受權

藍牙接入不須要請求特殊的受權,如配對、認證或加密等來發現服務和特性。只有在獲取特性值或者描述值的時候可能會須要特殊的受權。9

配對

藍牙接入不該該請求配對。若是處於安全考慮,接入點須要與Central創建綁定關係,外圍可使用Insufficient Authentication錯誤碼在必要的時候拒絕ATT請求。所以蘋果設備可能會須要按照既定的安流程程來執行過程。配對可能會須要基於蘋果產品的用戶認證。

服務

通用接入描述服務:藍牙接入應該實現按照藍牙標準4.0中的Device Name特性

通用屬性描述服務:只有當接入有能力在生命週期內更改他的服務的時候,該接入點才須要實現Service Changed特性。蘋果產品可使用Service Changed服務特性來決定它是否可使用以前讀取的或者緩存的來自設備的信息。

設備信息服務:藍牙接入應該實現設備信息服務。服務的UUID不該該包含在廣告數據當中。以下的特性須要被支持:Manufacturer Name String;Model Number String;Firmware Revision String;Software Revision String

 

4,IOS APP開發 的藍牙操縱API

    手機APP要想得到藍牙設備的一些額外的信息如電量或者操做藍牙設備,必須經過IOS API。那麼IOS底層必然有某種方式來與藍牙設備交互。 那麼電量經過什麼來讀寫呢?自定義 service characteristic?

任何免提的藍牙耳機均可以在iOS設備的狀態欄中顯示一個用來標識他電池電量的圖標。這個特性被全部的iOS設備所支持,包括iPhone、iPod和iPad。耳機的藍牙知識經過兩個iOS藍牙HFP AT命令:HFP Command AT+XAPL

 

HFP命令AT+XAPL

  • 描述:容許經過耳機自定義AT命令
  • 發起者:耳機
  • 格式:AT+XAPL=[vendorID]-[productID]-[version],[features]
  • 參數:
    • vendorID: 標識生產商的vendor ID的十六進制表示,可是沒有0x前綴
    • productID: 標識生產生的product ID的十六進制表示,可是沒有0x前綴
    • version: 軟件的版本
    • features: 用10進制標識的位標識:
      • 1 = 耳機支持電池電量報告
      • 2 = 耳機暫停或者正在充電
      • 其餘值保留
  • 例子: AT+XAPL=ABCD-1234-0100,3
  • 響應: +XAPL=iPhone,[features]

HFP命令AT+IPHONEACCEV

  • 描述:報告耳機的狀態變動
  • 發起者:耳機
  • 格式:AT+IPHONEACCEV=[Number of key/value pairs ],[key1 ],[val1 ],[key2 ],[val2 ],...
  • 參數:
    • Number of key/value pairs : 接下來參數的數量
    • key: 被報告狀態變化的類型
      • 1 = 電量等級
      • 2 = 暫停狀態
    • val: 更改的值
      • Battery events:0-9之間數字的字符串 A string value between '0' and '9'.
      • Dock state: 0 = undocked, 1 = docked.
  • Example: AT+IPHONEACCEV=1,1,3
 
 
(五)硬件接口
 
 通常藍牙芯片經過UART、USB、SDIO、I2S、PcCard和主控芯片通訊。以下圖所示,經過UART和主控芯片通訊。
 
 
 

最後叮囑:你們有好的的藍牙通訊的資料連接在下面留言分享下~多謝♪(^∇^*) 

相關文章
相關標籤/搜索