本發(fā)明涉及Android系統(tǒng),特別涉及Android智能設(shè)備快速連接藍牙的方法。
背景技術(shù):
傳統(tǒng)的Android藍牙協(xié)議棧,只有在Android系統(tǒng)完全啟動之后才能正常使用。Android系統(tǒng)啟動階段,主要完成Android系統(tǒng)復(fù)位初始化啟動和Android系統(tǒng)核心服務(wù)加載,然后可以運行、響應(yīng)用戶操作。目前大多數(shù)電視廠商的電視系統(tǒng),在Android并未完成所有啟動進程前,可以實現(xiàn)播放電視畫面,但此時藍牙遙控器并不能正常使用。此外在recovery系統(tǒng)下,藍牙遙控器也無法正常使用。recovery系統(tǒng)是Android系統(tǒng)進行修復(fù)、升級的一個子系統(tǒng),僅僅包含native藍牙服務(wù)程序進程。由于Android系統(tǒng)中藍牙的架構(gòu)組成方式,藍牙必須要在JAVA虛擬機運行后,由JAVA代碼的進程啟動。所以在recovery系統(tǒng)下無法使用藍牙功能。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是:提供一種Android智能設(shè)備快速連接藍牙的方法,解決Android系統(tǒng)未完成啟動時藍牙遙控器不可用的問題,同時解決recovery系統(tǒng)下藍牙功能不可用問題。
為解決上述問題,本發(fā)明采用的技術(shù)方案是:在Android系統(tǒng)根目錄下的init.rc中注冊native藍牙服務(wù),native藍牙服務(wù)進程在開機時啟動,完成對本機藍牙模塊和藍牙協(xié)議棧的初始化,創(chuàng)建新進程監(jiān)聽GATT連接信息,并在藍牙遙控器請求連接時自動連接,并在Android系統(tǒng)啟動完成后,Android系統(tǒng)中Bluetooth進程查找到藍牙服務(wù)程序并進行binder通訊,兼容android系統(tǒng)藍牙流程。
進一步的,本發(fā)明的具體步驟如下:
(1)創(chuàng)建一個采用c代碼編譯的native藍牙服務(wù)程序;
(2)在Android系統(tǒng)根目錄下的init.rc中注冊一個藍牙服務(wù);當(dāng)init進程解析rc文件時啟動native藍牙服務(wù)程序;
(3)native藍牙服務(wù)程序啟動后,加載藍牙驅(qū)動,創(chuàng)建與原藍牙服務(wù)程序通訊的binder,改造原藍牙服務(wù)程序,由調(diào)用bluedroid改為和native藍牙服務(wù)程序之間進行通訊;
(4)藍牙驅(qū)動加載完成后,獲取bluedroid的句柄,分別調(diào)用init和enable函數(shù)來初始化協(xié)議棧并打開藍牙功能;
(5)新創(chuàng)建進程監(jiān)聽GATT連接信息,并在藍牙遙控器請求連接時自動連接;
(6)Android上層應(yīng)用調(diào)用藍牙接口時,bluetooth服務(wù)與native藍牙服務(wù)程序使用binder通訊,傳遞函數(shù)調(diào)用關(guān)系與參數(shù);協(xié)議棧的回調(diào)函數(shù)也由native藍牙服務(wù)經(jīng)binder傳遞到bluetooth服務(wù)。
進一步的,步驟(3)使用shell腳本執(zhí)行insmod命令加載藍牙驅(qū)動,并檢測是否加載完成采用Android系統(tǒng)標(biāo)準(zhǔn)的加載驅(qū)動方式。
進一步的,通過在代碼中使用access函數(shù)查看藍牙驅(qū)動節(jié)點文件是否存在,來判定驅(qū)動是否已經(jīng)加載,并通過打開藍牙驅(qū)動節(jié)點文件來判定驅(qū)動是否加載完成。
進一步的,如果藍牙驅(qū)動設(shè)備節(jié)點文件不存在,等待一段時間再做檢測,仍然不存在,則重新加載驅(qū)動;如果打開藍牙驅(qū)動節(jié)點失敗,則等待一段時間再次執(zhí)行讀取,嘗試一定次數(shù)后仍然失敗則結(jié)束當(dāng)前進程,由init進程重啟native藍牙服務(wù)程序。
具體的,藍牙遙控器請求連接時自動連接的方法為:第一次有藍牙遙控器按鍵輸出時,由協(xié)議棧完成自動回連,創(chuàng)建對應(yīng)的input節(jié)點;當(dāng)再次有藍牙遙控器按鍵輸出時,協(xié)議棧將數(shù)據(jù)發(fā)送到uhid,由kernel實現(xiàn)按鍵寫入到對應(yīng)的input節(jié)點。
本發(fā)明的有益效果是:本專利提出的快速連接藍牙設(shè)備的方法,能夠有效改善在智能電視等Android智能設(shè)備開機啟動后,因為Android系統(tǒng)完全啟動時間長,電視系統(tǒng)響應(yīng)藍牙遙控器操作等待時間長的問題,以及在在recovery系統(tǒng)下無法響應(yīng)藍牙遙控器的問題。
具體實施方式
下面以解決“Android智能電視啟動快速開機TV界面顯示,而Android系統(tǒng)未完成啟動時藍牙遙控器不可用的問題,同時解決recovery系統(tǒng)下藍牙功能不可用問題”為例對本發(fā)明進行具體說明。
1、創(chuàng)建一個藍牙native服務(wù)。由于Android系統(tǒng)啟動初期完全運行c代碼,為了提前實現(xiàn)對藍牙設(shè)備的支持,需要使用c代碼編譯藍牙服務(wù)程序,即藍牙native服務(wù);在init.rc文件中注冊該服務(wù),當(dāng)init進程啟動后,用fork函數(shù)創(chuàng)建藍牙native服務(wù)進程。該進程為root組,無需專門設(shè)置優(yōu)先級。Android系統(tǒng)啟動過程中,解析到init.rc文件中藍牙native服務(wù)相關(guān)字段時,開始運行native服務(wù)。藍牙native服務(wù)進程運行后,使用shell腳本執(zhí)行insmod命令加載藍牙驅(qū)動,并檢測是否加載完成采用Android系統(tǒng)標(biāo)準(zhǔn)的加載驅(qū)動方式。通過在代碼中使用access函數(shù)查看藍牙驅(qū)動節(jié)點文件是否存在,來判定驅(qū)動是否已經(jīng)加載,并通過open藍牙驅(qū)動節(jié)點文件來判定驅(qū)動是否加載完成。如果藍牙驅(qū)動設(shè)備節(jié)點文件不存在,等待1秒再做檢測,仍然不存在,則重新加載驅(qū)動;如果open藍牙驅(qū)動節(jié)點失敗,則等待500毫秒再次執(zhí)行read,嘗試20次后仍然失敗則結(jié)束當(dāng)前進程。由init進程重啟藍牙native服務(wù)。
2、當(dāng)驅(qū)動加載完成后,初始化android系統(tǒng)的藍牙協(xié)議棧。使用Android系統(tǒng)HAL方式,加載藍牙協(xié)議棧庫,獲取bluedroid的句柄,分別調(diào)用init和enable函數(shù)來初始化協(xié)議棧,之后藍牙協(xié)議棧就運行在藍牙native服務(wù)進程中。
3、新創(chuàng)建線程偵聽GATT連接信息。創(chuàng)建線程使用sBluetoothGattInterface->client->register_client,偵聽GATT連接信息,當(dāng)藍牙遙控器有配對請求時,藍牙協(xié)議??梢詫⑦b控器信息發(fā)送到偵聽進程中,從而觸發(fā)藍牙遙控器配對。
4、當(dāng)解析到連接請求是藍牙遙控器時,觸發(fā)藍牙連接,進而啟動藍牙遙控器相關(guān)的服務(wù)程序,使藍牙遙控器可以正常使用藍牙連接。藍牙遙控器發(fā)送的數(shù)據(jù),由藍牙協(xié)議棧通過UHID交給Linux內(nèi)核處理,此過程是Android系統(tǒng)上藍牙HID類型設(shè)備的標(biāo)準(zhǔn)流程。具體的來說,藍牙自動連接可以采用如下方法:
第一次有藍牙遙控器按鍵輸出時,由協(xié)議棧完成自動回連,創(chuàng)建對應(yīng)的input節(jié)點;當(dāng)再次有藍牙遙控器按鍵輸出時,協(xié)議棧將數(shù)據(jù)發(fā)送到uhid,由kernel實現(xiàn)按鍵寫入到對應(yīng)的input節(jié)點。
5、Android系統(tǒng)啟動完成后,Android系統(tǒng)中Bluetooth進程通過servicemanager查找到native藍牙服務(wù)并進行binder通訊,保留Bluetooth進程所有函數(shù),更改調(diào)用藍牙協(xié)議棧庫的方式為使用binder調(diào)用藍牙native進程對應(yīng)的函數(shù),實現(xiàn)Bluetooth進程與native服務(wù)進程通訊,兼容android系統(tǒng)藍牙流程。
Android上層應(yīng)用調(diào)用藍牙接口時,bluetooth服務(wù)與native藍牙服務(wù)程序使用binder通訊,傳遞函數(shù)調(diào)用關(guān)系與參數(shù);協(xié)議棧的回調(diào)函數(shù)也由native藍牙服務(wù)經(jīng)binder傳遞到bluetooth服務(wù)。
采用本方案后,藍牙遙控器可以在android系統(tǒng)開機過程中提前7秒左右使用,避免開機時TV界面下遙控器不可操作;同時增加了recovery模式下對藍牙遙控器的支持。
以上描述了本發(fā)明的基本原理和主要的特征,說明書的描述只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會有各種變化和改進,這些變化和改進都落入要求保護的本發(fā)明范圍內(nèi)。