Android中bluetooth的架構

2021-07-02 07:39:49 字數 1464 閱讀 4094

既然我們想要系統地進行分析一下

android的

bluetooth,那麼就有必要首先來從總體架構上看一下

bluetooth在

android中是處於哪些層次,做到手中有槍,心裡不慌。

bluetooth從總體來看,基本的架構圖如下:

這張圖是我拷貝的網上的乙份介紹bluetooth的ppt上,他應該也是出於某乙份大牛之手,可惜的是我並沒有能夠找到具體的出處,若有人看到可以告訴我一下。

從這張圖可以看到,在最上層是一些profile:

l  gap(general access profile):定義了bluetooth建立基帶鏈路的通用方法,以保證兩個bluetooth裝置能夠相互通訊。這一塊在android**中並沒有很明顯的體現。

l  sdp(service discovery profile):他用來發現對方bluetooth所支援的service。比如說,我連線乙個耳機,那麼這個耳機究竟是只能打**,還是既能打**又能聽**,抑或是只能聽**,這都是通過sdp來發現,所以,它貫穿於我們最開始的資訊互動流程中。

l  headset/handsfree:這兩個profile是用來實現打**相關的內容的。

l  rfcomm:這是乙個基本的profile,很多應用都是基於它上面實現的,比如說我們檔案的傳輸(opp,object push profile),當然上面說headset/handsfree,其實準確的說也是在rfcomm層之上的。

在中間framework層,主要實現了各種api,這些api最終都是要通過jni層調入到下面來具體實現的。當然,他們還承擔著接受底層訊息的重任,這些訊息也是要最終反饋到ui層的。

jni層之下以及kernel層之上是bluez層(或者準確的說,其實bluez層是橫跨jni層之下和kernel層的,如圖中綠色框所示)。jni層和bluez的通訊是通過dbus來實現的,至今為止我都沒有能夠理解dbus最終的實現原理,不過沒關係,在後面我們和大家再一起到原始碼中去學習學習這一塊。

kernel層之下就是我們的bluetooth的晶元介面driver,這張圖裡面是使用的uart進行資料的傳輸的,後期我們也就以uart為主來詳細進行分析。當然,還有別的介面,比如usb等等。

這張圖還有幾個地方需要注意的:

一是最左邊的btpower on/off。一般而言,這是在bluetooth開啟/關閉的時候用於power的設定的。我看到的基本都是通過rfkill來進行power的加上和去除的。

二是hciattach直接到tty裝置的通路,這也是在bluetooth開啟/關閉的時候對晶元進行一些各個廠家的初始化所需要的。

大體上來說,這張圖也就解釋清楚了,希望各位能夠從總體上對藍芽的架構有個初步的了解,這對我們後面去看bluetooth的**實現是很有好處的。當然,這裡面還有很多對我們來說陌生的名詞,沒關係,現在陌生後期看多了估計我們就會明白了。

android 中layout weight的作用

layout weight 用於給乙個線性布局中的諸多檢視的重要度賦值。所有的檢視都有乙個layout weight值,預設為零,意思是需要顯示多大的檢視就佔據多大的螢幕空 間。若賦乙個高於零的值,則將父檢視中的可 用空間分割,分割大小具體取決於每乙個檢視layout weight 值以及該值在當前...

Android中LayoutParams的用法

寧願做過了後悔,也不要錯過了後悔。本講內容 layoutparams的用法 一 layoutparams的認識 從官方文件可知layoutparams繼承於android.view.viewgroup.layoutparams.layoutparams相當於乙個layout的資訊包,它封裝了layo...

android中layout weight的理解

例如 xmlns android android layout width fill parent android layout height wrap content android background 00ff00 android weightsum 0 android orientation...