一個關(guān)于藍牙4.0的智能硬件Demo詳解

文件目錄

整個文件主要包含四大塊,每一塊的功能都是獨立開的,不過當中卻又設(shè)計不足的地方,希望各位能夠積極fork,貢獻代碼!

QWSDiscovery

這個文件是功能的核心,主要負責和系統(tǒng)的CoreBluetooth溝通,比如掃描設(shè)備,連接,斷開等操作。其中維護了一個設(shè)備列表,使用設(shè)備的uuid來唯一識別。在這個文件中,同時也定義了通知和錯誤類型,方便處理與設(shè)備之間的信息交流。

QWSBleHelper

用心的讀者一定發(fā)現(xiàn),在我們的每一個viewController中,只要與藍牙功能相關(guān),那他一定維護了一個helper。在這里我稱這個頁面為監(jiān)護人,智能設(shè)備就像是一個孩子,很多孩子在幼兒園里,我只關(guān)心我的孩子,而這個helper就像幼兒園老師,他負責告知我們孩子在校的情況,也可以讓我和孩子直接溝通。

helper中會維護兩個集合,一個是我關(guān)心的設(shè)備集合,一個是即將斷開的設(shè)備集合。并不是連接成功的設(shè)備就會加入到這個集合中,只有監(jiān)護人發(fā)出了與這個設(shè)備相關(guān)的請求(比如說,連接,獲取信息等),這個時候,hepler可以判定這個設(shè)備是被監(jiān)護人關(guān)心的,從而這個設(shè)備有信息更新的時候,他會告知所有監(jiān)護這個設(shè)備的監(jiān)護人。

在這里之所以即將斷開的設(shè)備集合是為了,在監(jiān)護人發(fā)出斷開請求之后,仍然能夠清晰的告知監(jiān)護人該設(shè)備的狀態(tài)信息,等到真正斷開連接之后通知到每一個監(jiān)護人。

QWSBleHandler

這個文件顧名思義,就是一些代理方法。設(shè)計中是將他加入到helper中,當helper收到設(shè)備發(fā)來的信息時,通過代理將信息拆解并封裝模型通知到所有監(jiān)護人,寫在這里純粹只是為了看起來更加清晰,分擔一下各個文件的代碼壓力。

QWSDevControlService

繼承NSObject,封裝的智能硬件設(shè)備的模型。 對于智能硬件設(shè)備來講,單單一個CBPeripheral(CoreBluetooth里的對象)是遠遠不夠的。我們可能需要為他豐富更多的擴展信息,比如這個設(shè)備是否自動重連,是否需要斷開后連接,是否認證,重連次數(shù),版本號等,當然也可以繼承CBPeripheral,但這里我覺得將CBPeripheral作為其一個屬性會比較清晰。

這個對象會維護自己所有的讀寫操作,不管外界發(fā)來什么指令信息,他都能根據(jù)自己當前的狀態(tài),該報錯報錯,該執(zhí)行執(zhí)行,并將結(jié)果反饋給每一個監(jiān)護人。

圖解說明

1.智能設(shè)備與移動端的關(guān)系

Paste_Image.png

我們的Discovery在最頂層,不會參與與設(shè)備的直接交互,所有的收發(fā)數(shù)據(jù)都是經(jīng)過系統(tǒng)的框架實現(xiàn)。

2.監(jiān)護人與孩子的關(guān)系

Paste_Image.png

圖中的連線很多,可能很迷糊,同一種顏色的連線代表數(shù)據(jù)交互,看helper里關(guān)心的設(shè)備,可以明顯理解,只有關(guān)心這個設(shè)備才會收到這個設(shè)備的信息。

每一個viewController維護一個helper,通過NSNotificationCenter廣播所有操作的結(jié)果,并告知每一個關(guān)心這個設(shè)備的viewController。

簡言之,就是監(jiān)護人接不接受這個通知,或者老師發(fā)不發(fā)送這個消息給監(jiān)護人。有一點需要明白的是,不管監(jiān)護人想不想收到這個設(shè)備的消息,這個設(shè)備都是會廣播自己的信息的,只是helper會判斷這個孩子是不是你的~

以上就是這個Demo的設(shè)計思路,當然Demo中仍有很多不足,之所以不敢稱之為kit,是因為它確實沒有達到kit的封裝能力與效果,畢竟這只是一個Demo,他只是簡單體現(xiàn)了一個設(shè)計思路,并不能達到通用的效果,因為在智能硬件這一塊,每個產(chǎn)品的協(xié)議,屬性都會有所差異,不可能做到通用的效果。希望和大家有更深入的交流與學習!

最后回顧一下上篇文章的地址:iOS-BLE藍牙開發(fā)持續(xù)更新

以及這個說了很久的Demo地址:一個iOS BLE藍牙學習的Demo

ps:

在這里也順便介紹一下近期看到的一篇關(guān)于BLE開發(fā)的kit(MPBluetoothKit iOS藍牙框架),作者很詳細的將系統(tǒng)的CoreBluetooth的代理都用block實現(xiàn)了,看起來更加清晰與實用,也希望各位能夠多多關(guān)注,共同學習。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內(nèi)容