藍牙設備通信方法及裝置的制造方法
【技術領域】
[0001]本發明涉及通信領域,具體而言,涉及一種藍牙設備通信方法及裝置。
【背景技術】
[0002]安卓(Android)從版本4.3 (API 18)開始支持藍牙低能耗(BLE)技術,并提供了用于應用程序查找設備、查詢服務及和讀/寫特的接口,使用BLE顯著減少了在設備間連接和傳輸數據的功耗,這使得Android應用程序與具有低功耗的要求BLE設備進行通信,如近距離傳感器、心臟速率顯示器、健身設備等等。
[0003]BLE設備間是基于GATT協議來進行通信的,通信中涉及到Service、Characteristic及Descriptor,每個BLE設備包含多個Service,每個Service包含多個Characteristic,每個Characteristic又包含多個Descriptor。當掃描到需要連接的BLE設備后,需要通過唯一標識符(Universally Unique Identifier,UUID)確認唯一的需要連接的Service,在通過UUID來獲取讀取、寫入、通知的Characteristic,獲取到所需的三個Characteristic后,需要從通知Characteristic中通過UUID獲取通知的Descriptor,告訴設備在有數據變化后需要通知應用程序。
[0004]以上對BLE設備(下文中稱為藍牙設備)之間通信的描述中所有數據的傳輸全是通過廣播完成的,Android的API中只記載了簡單的使用過程,而對重復請求、一個請求沒有處理完成就發起另一個請求、請求超時等都沒有提供解決方案,所以按照Android提供的API來進行開發時,在一些由于代碼問題或者其它異常情況時顯得捉襟見肘。
【發明內容】
[0005]本發明的主要目的在于公開了一種藍牙設備通信方法及裝置,以至少解決相關技術中藍牙設備之間通信,存在重復請求、一個請求沒有處理完成就發起另一個請求的問題。
[0006]根據本發明的一個方面,提供了一種藍牙設備通信方法。
[0007]根據本發明的藍牙設備通信方法包括:當本端的藍牙設備發起通信請求時,將上述通信請求與當前隊列中的請求進行對比,確定上述隊列中是否存在與上述通信請求相同的請求;如果上述隊列中不存在與上述通信請求相同的請求,則將上述通信請求插入上述隊列中等待執行;判斷當前是否存在未完成的請求,在不存在未完成的請求時,從上述隊列的棧底將待執行請求取出并執行,啟動線程開始與對端的藍牙設備通信。
[0008]根據本發明的另一方面,提供了一種藍牙設備通信裝置。
[0009]根據本發明的藍牙設備通信裝置包括:對比模塊,用于當本端的藍牙設備發起通信請求時,將上述通信請求與當前隊列中的請求進行對比,確定上述隊列中是否存在與上述通信請求相同的請求;插入模塊,用于在上述隊列中不存在與上述通信請求相同的請求時,將上述通信請求插入上述隊列中等待執行;第一處理模塊,用于判斷當前是否存在未完成的請求,在不存在未完成的請求時,從上述隊列的桟底將待執行請求取出并執行,啟動線程開始與對端的藍牙設備通信。
[0010]通過本發明,采用本發明提供的技術方案,有效地解決了因發起重復請求造成的設備回調多次響應給調用者,造成調用者無法區分是哪一次請求結果的問題。此外,也解決了一個請求還未完成就發起另一個請求導致設備測量失敗問題。
【附圖說明】
[0011]圖1是根據本發明實施例的藍牙設備通信方法的流程圖;
[0012]圖2是根據本發明優選實施例的藍牙設備通信方法的流程圖;
[0013]圖3是根據本發明實施例的藍牙設備通信裝置的結構框圖;以及
[0014]圖4是根據本發明優選實施例的藍牙設備通信裝置的結構框圖。
【具體實施方式】
[0015]下面結合說明書附圖對本發明的具體實現方式做一詳細描述。
[0016]圖1是根據本發明實施例的藍牙設備通信方法的流程圖。如圖1所示,該藍牙設備通信方法包括:
[0017]步驟SlOl:當本端的藍牙設備發起通信請求時,將上述通信請求與當前隊列中的請求進行對比,確定上述隊列中是否存在與上述通信請求相同的請求;
[0018]步驟S103:如果上述隊列中不存在與上述通信請求相同的請求,則將上述通信請求插入上述隊列中等待執行;
[0019]步驟S105:判斷當前是否存在未完成的請求,在不存在未完成的請求時,從上述隊列的棧底將待執行請求取出并執行,啟動線程開始與對端的藍牙設備通信。
[0020]采用圖1所示的方法,有效地解決了因發起重復請求造成的設備回調多次響應給調用者,造成調用者無法區分是哪一次請求結果的問題。此外,也解決了一個請求還未完成就發起另一個請求導致設備測量失敗問題。
[0021 ] 其中,上述藍牙設備可以為近距離傳感器、心臟速率顯示器、健身設備等。
[0022]優選地,在步驟S105中,啟動線程開始與對端的藍牙設備通信時,還包括以下處理:啟動定時器;在上述定時器超時前,判斷是否收到上述對端的藍牙設備返回的數據;在接收到上述響應時,將上述待執行請求從上述隊列中移除,重置上述定時器,回調上述對端的藍牙設備返回的數據。
[0023]優選地,在啟動上述定時器之后,還可以包括以下處理:通過檢測確定上述定時器超時;將上述待執行請求從上述隊列中移除,并回調請求超時。
[0024]優選地,上述藍牙設備可以為以下至少之一:近距離傳感器、心臟速率顯示器、健身設備。
[0025]在優選實施過程中,當本端的藍牙設備的應用程序掃描到藍牙設備后開始發起通信請求,當接收到一個請求時管理器將它與現有請求隊列中的請求進行對比,如果隊列中存在同一個未完成的請求則不將請求放入隊列中,否則將請求加入隊列中等待執行。在管理器中接收到第一個請求時啟動一個線程,用于執行該請求,在管理器中設置一個定時器(Timer)用于定時檢查請求的執行情況,如果達到規定的超時前應用接收到設備回應則將請求從隊列中移除并且重置Timer,然后將數據回調給調用者;如果達到設置的超時時間仍沒有收到設備回應,則將請求從隊列中移除并回調請求超時給調用者。
[0026]以下結合圖2進一步描述上述優選實施方式。
[0027]圖2是根據本發明優選實施例的藍牙設備通信方法的流程圖。如圖2所示,該藍牙設備通信方法包括:
[0028]步驟S201:管理器收到通信請求。
[0029]步驟S203:管理器將該通信請求與當前隊列中的請求進行對比,確定上述隊列中是否存在與上述通信請求相同的請求。如果是,執行步驟S207,否則,執行步驟S205。
[0030]步驟S2