藍(lán)牙適配器及其通信方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及藍(lán)牙通信領(lǐng)域,尤其涉及一種藍(lán)牙適配器及其通信方法。
【背景技術(shù)】
[0002]藍(lán)牙(Bluetooth)是一種無線技術(shù)標(biāo)準(zhǔn),使用2.4—2.485GHz的ISM波段的UHF無線電波,可實(shí)現(xiàn)固定設(shè)備、移動設(shè)備和樓宇個人域網(wǎng)之間的短距離數(shù)據(jù)交換。現(xiàn)有技術(shù)中,終端可以通過CCID接口采用CCID協(xié)議與讀卡器進(jìn)行通信,但是要實(shí)現(xiàn)不具備藍(lán)牙功能的終端與藍(lán)牙讀卡器之間的通信,就需要使用藍(lán)牙適配器,而不具備藍(lán)牙功能的終端又不能使用CCID協(xié)議與藍(lán)牙適配器直接通信,需要在不具備藍(lán)牙功能的終端上安裝藍(lán)牙驅(qū)動,對于用戶來說,使用起來極為不方便,且藍(lán)牙驅(qū)動的穩(wěn)定性不好,影響用戶體驗(yàn)。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是克服現(xiàn)有技術(shù)的缺陷,提供一種藍(lán)牙適配器及其通信方法。
[0004]本發(fā)明方法是通過下述技術(shù)方案實(shí)現(xiàn)的:
[0005]—方面本發(fā)明提供一種藍(lán)牙適配器的通信方法,所述方法包括:
[0006]步驟S1、藍(lán)牙適配器初始化,向上位機(jī)聲明為CCID設(shè)備;
[0007]步驟S2、所述藍(lán)牙適配器判斷是否接收到上位機(jī)下發(fā)的CCID指令,是則執(zhí)行步驟S3,否則重新執(zhí)行步驟S2;
[0008]步驟S3、所述藍(lán)牙適配器將上位機(jī)下發(fā)的CCID指令轉(zhuǎn)換為藍(lán)牙協(xié)議數(shù)據(jù),發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)給藍(lán)牙讀卡器;
[0009]步驟S4、所述藍(lán)牙適配器等待藍(lán)牙讀卡器的應(yīng)答,若接收到藍(lán)牙讀卡器返回的應(yīng)答則將藍(lán)牙讀卡器返回的應(yīng)答轉(zhuǎn)換為CCID協(xié)議數(shù)據(jù),向上位機(jī)發(fā)送所述CCID協(xié)議數(shù)據(jù),返回步驟S2,若接收超時則向上位機(jī)返回錯誤碼,返回步驟S2 ;
[0010]所述方法還包括:當(dāng)所述藍(lán)牙適配器接收到藍(lán)牙讀卡器發(fā)送的卡插拔消息時向上位機(jī)發(fā)送提示信息。
[0011 ] 進(jìn)一步地,所述步驟S3具體包括:
[0012]步驟al、所述藍(lán)牙適配器對上位機(jī)下發(fā)的CCID指令添加藍(lán)牙協(xié)議頭得到藍(lán)牙協(xié)議數(shù)據(jù);
[0013]步驟a2、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù);
[0014]更進(jìn)一步地,所述步驟S3還包括:
[0015]步驟a0、所述藍(lán)牙適配器判斷上位機(jī)下發(fā)的CCID指令的長度是否超過最大傳輸單元,若未超過則執(zhí)行所述步驟al,若超過則根據(jù)最大傳輸單元對上位機(jī)下發(fā)的CCID指令分包,依次對每個指令數(shù)據(jù)包添加藍(lán)牙協(xié)議頭得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)。
[0016]或者,進(jìn)一步地,所述步驟S3具體包括:
[0017]步驟bl、所述藍(lán)牙適配器計算上位機(jī)下發(fā)的CCID指令的CRC校驗(yàn)位,對上位機(jī)下發(fā)的CCID指令添加藍(lán)牙協(xié)議頭和所述CRC校驗(yàn)位,得到藍(lán)牙協(xié)議數(shù)據(jù);
[0018]步驟b2、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù);
[0019]更進(jìn)一步地,所述步驟S3還包括:
[0020]步驟b0、所述藍(lán)牙適配器判斷上位機(jī)下發(fā)的CCID指令的長度是否超過最大傳輸單元,若未超過則執(zhí)行所述步驟bl,若超過則根據(jù)最大傳輸單元對上位機(jī)下發(fā)的CCID指令分包,分別計算每個指令數(shù)據(jù)包的CRC校驗(yàn)位,依次對每個指令數(shù)據(jù)包添加藍(lán)牙協(xié)議頭和CRC校驗(yàn)位得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)。
[0021 ] 進(jìn)一步地,所述步驟S4具體包括:
[0022]步驟Cl、所述藍(lán)牙適配器等待接收藍(lán)牙讀卡器返回的應(yīng)答,若接收到則執(zhí)行步驟c2,若接收超時則向上位機(jī)返回錯誤碼,返回步驟S2 ;
[0023]步驟c2、所述藍(lán)牙適配器獲取應(yīng)答中的HCI層有效載荷和L2CAP層有效載荷,根據(jù)獲取到的HCI層有效載荷和L2CAP層有效載荷判斷應(yīng)答的長度是否合法,若合法則執(zhí)行步驟c3,若不合法則向上位機(jī)返回錯誤碼,返回步驟S2 ;
[0024]步驟c3、所述藍(lán)牙適配器獲取應(yīng)答中的有效數(shù)據(jù)和CRC校驗(yàn)位,根據(jù)CRC校驗(yàn)位對有效數(shù)據(jù)進(jìn)行CRC校驗(yàn),若校驗(yàn)通過則將有效數(shù)據(jù)返回給上位機(jī),返回步驟S2,若校驗(yàn)未通過則向上位機(jī)返回錯誤碼,返回步驟S2。
[0025]或者,進(jìn)一步地,所述步驟S4具體包括:
[0026]步驟dl、所述藍(lán)牙適配器等待接收藍(lán)牙讀卡器返回的應(yīng)答,若接收到則執(zhí)行步驟d2,若接收超時則向上位機(jī)返回錯誤碼,返回步驟S2 ;
[0027]步驟d2、所述藍(lán)牙適配器獲取應(yīng)答中的HCI層有效載荷和L2CAP層有效載荷,根據(jù)獲取到的HCI層有效載荷和L2CAP層有效載荷判斷應(yīng)答的長度是否合法,若合法則執(zhí)行步驟d3,若不合法則向上位機(jī)返回錯誤碼,返回步驟S2 ;
[0028]步驟d3、所述藍(lán)牙適配器獲取應(yīng)答中的有效數(shù)據(jù),將有效數(shù)據(jù)返回給上位機(jī),返回步驟S2。
[0029]另一方面,本發(fā)明提供一種藍(lán)牙適配器,具體包括:
[0030]初始化模塊,用于初始化所述藍(lán)牙適配器,向上位機(jī)聲明所述藍(lán)牙適配器為CCID設(shè)備;
[0031]指令接收模塊,用于接收上位機(jī)下發(fā)的CCID指令;
[0032]指令發(fā)送模塊,用于當(dāng)指令接收模塊接收到上位機(jī)下發(fā)的CCID指令時,將上位機(jī)下發(fā)的CCID指令轉(zhuǎn)換為藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù);
[0033]應(yīng)答接收模塊,用于接收藍(lán)牙讀卡器的應(yīng)答,以及在接收超時時向上位機(jī)返回錯誤碼;
[0034]應(yīng)答發(fā)送模塊,用于當(dāng)所述應(yīng)答接收模塊接收到藍(lán)牙讀卡器的應(yīng)答時,將藍(lán)牙讀卡器的應(yīng)答轉(zhuǎn)換為CCID協(xié)議數(shù)據(jù),向上位機(jī)返回所述CCID協(xié)議數(shù)據(jù);
[0035]事件檢查模塊,用于在接收到藍(lán)牙讀卡器發(fā)送的卡插拔消息時向上位機(jī)發(fā)送提示
?目息O
[0036]進(jìn)一步地,所述指令發(fā)送模塊具體用于:對上位機(jī)下發(fā)的CCID指令添加藍(lán)牙協(xié)議頭得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù);
[0037]更進(jìn)一步地,所述指令發(fā)送模塊具體用于:判斷上位機(jī)下發(fā)的CCID指令的長度是否超過最大傳輸單元,若未超過則對上位機(jī)下發(fā)的CCID指令添加藍(lán)牙協(xié)議頭得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù);若超過則按照最大傳輸單元對上位機(jī)下發(fā)的CCID指令分包,依次對每個指令包添加藍(lán)牙協(xié)議頭,得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)。
[0038]或者,進(jìn)一步地,所述指令發(fā)送模塊具體用于:計算上位機(jī)下發(fā)的CCID指令的CRC校驗(yàn)位,對上位機(jī)下發(fā)的CCID指令添加藍(lán)牙協(xié)議頭和CRC校驗(yàn)位得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù);
[0039]更進(jìn)一步地,所述指令發(fā)送模塊具體用于:判斷上位機(jī)下發(fā)的CCID指令的長度是否超過最大傳輸單元,若未超過則計算上位機(jī)下發(fā)的CCID指令的CRC校驗(yàn)位,對上位機(jī)下發(fā)的CCID指令添加藍(lán)牙協(xié)議頭和CRC校驗(yàn)位得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù);若超過則按照最大傳輸單元對上位機(jī)下發(fā)的CCID指令分包,計算各指令包的CRC校驗(yàn)位,依次對每個指令包添加藍(lán)牙協(xié)議頭和CRC校驗(yàn)位,得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)。
[0040]進(jìn)一步地,所述應(yīng)答發(fā)送模塊具體用于:當(dāng)所述應(yīng)答接收模塊接收到藍(lán)牙讀卡器的應(yīng)答時,獲取應(yīng)答接收模塊接收到的應(yīng)答中的HCI層有效載荷和L2CAP層有效載荷,根據(jù)獲取到的HCI層有效載荷和L2CAP層有效載荷判斷應(yīng)答接收模塊接收到的應(yīng)答的長度是否合法,若不合法則向上位機(jī)返回錯誤碼,若合法則獲取所述應(yīng)答中的有效數(shù)據(jù)和CRC校驗(yàn)位,根據(jù)CRC校驗(yàn)位對有效數(shù)據(jù)進(jìn)行CRC校驗(yàn),若校驗(yàn)未通過則向上位機(jī)返回錯誤碼,若校驗(yàn)通過則將有效數(shù)據(jù)作為CCID協(xié)議數(shù)據(jù)返回給上位機(jī)。
[0041]或者,進(jìn)一步地,所述應(yīng)答接收模塊具體用于:當(dāng)所述應(yīng)答接收模塊接收到藍(lán)牙讀卡器的應(yīng)答時,獲取應(yīng)答接收模塊接收到的應(yīng)答中的HCI層有效載荷和L2CAP層有效載荷,根據(jù)獲取到的HCI層有效載荷和L2CAP層有效載荷判斷應(yīng)答接收模塊接收到的應(yīng)答的長度是否合法,若不合法則向上位機(jī)返回錯誤碼,若合法則獲取應(yīng)答中的有效數(shù)據(jù),將有效數(shù)據(jù)作為CCID協(xié)議數(shù)據(jù)返回給上位機(jī)。
[0042]本發(fā)明的有益效果在于:通過本發(fā)明提供的藍(lán)牙適配器可以實(shí)現(xiàn)不具備藍(lán)牙功能的終端與藍(lán)牙讀卡器之間的通信,通信過程中終端可以采用CCID協(xié)議與藍(lán)牙適配器進(jìn)行通信,無需在終端上安裝藍(lán)牙驅(qū)動,可以提高使用的方便性,避免藍(lán)牙驅(qū)動不穩(wěn)定帶來的問題。
【附圖說明】
[0043]為了更清楚的說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0044]圖1為本發(fā)明實(shí)施例1提供的一種藍(lán)牙適配器的通信方法的流程圖;
[0045]圖2為本發(fā)明實(shí)施例1中提供的藍(lán)牙適配器與藍(lán)牙讀卡器建立連接的具體方法流程圖;
[0046]圖3為本發(fā)明實(shí)施例1中提供的藍(lán)牙適配器與藍(lán)牙讀卡器建立連接的另一具體方法流程圖;
[0047]圖4為本發(fā)明實(shí)施例1中提供的藍(lán)牙適配器搜索藍(lán)牙讀卡器的具體流程圖;
[0048]圖5為本發(fā)明實(shí)施例2提供的一種藍(lán)牙適配器的通信方法的流程圖;
[0049]圖6為本發(fā)明實(shí)施例3提供的一種藍(lán)牙適配器的通信方法的流程圖;
[0050]圖7為本發(fā)明實(shí)施例4提供的一種藍(lán)牙適配器的結(jié)構(gòu)方框圖。
【具體實(shí)施方式】
[0051]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0052]實(shí)施例1
[0053]本實(shí)施例提供一種藍(lán)牙適配器的通信方法,本實(shí)施例中的藍(lán)牙適配器用于與上位機(jī)和藍(lán)牙讀卡器進(jìn)行通信,本實(shí)施例中的藍(lán)牙適配器與上位機(jī)采用CCID協(xié)議進(jìn)行通信,與藍(lán)牙讀卡器采用藍(lán)牙協(xié)議進(jìn)行通信,如圖1所示,所述方法具體包括:
[0054]步驟101、藍(lán)牙適配器初始化,向上位機(jī)聲明為CCID設(shè)備,搜索藍(lán)牙讀卡器,與藍(lán)牙讀卡器建立連接,提示連接結(jié)果;
[0055]本實(shí)施例中,藍(lán)牙適配器搜索藍(lán)牙讀卡器之前,還可以包括:藍(lán)牙適配器檢查是否有已存儲的藍(lán)牙讀卡器的設(shè)備信息,若有則獲取已存儲的藍(lán)牙讀卡器的設(shè)備信息,根據(jù)獲取到的設(shè)備信息與藍(lán)牙讀卡器建立連接,提示連接結(jié)果;若沒有則搜索藍(lán)牙讀卡器,與搜索到的藍(lán)牙讀卡器建立連接,提示連接結(jié)果;相應(yīng)地,當(dāng)藍(lán)牙適配器與藍(lán)牙讀卡器建立連接以后還包括:藍(lán)牙適配器存儲藍(lán)牙讀卡器的設(shè)備信息。
[0056]本實(shí)施例中,如圖2所示,藍(lán)牙適配器搜索藍(lán)牙讀卡器可以具體包括:
[0057]步驟1-1、藍(lán)牙適配器發(fā)送搜索指令;
[0058]步驟1-2、藍(lán)牙適配器等待藍(lán)牙設(shè)備應(yīng)答,若接收到藍(lán)牙設(shè)備的應(yīng)答則執(zhí)行步驟1-3,若接收超時則執(zhí)行步驟1-4 ;
[0059]步驟1-3、藍(lán)牙適配器從藍(lán)牙設(shè)備的應(yīng)答中獲取藍(lán)牙設(shè)備的MAC地址,返回步驟1-2 ;
[0060]例如,本實(shí)施例中,藍(lán)牙設(shè)備的應(yīng)答為Ox 04 02 OF 01 EB 6A IA 52 DE 8C 0102 04 04 24 61 6D E5 (小端存儲方式),其中第5_10個字節(jié)為藍(lán)牙設(shè)備的MAC地址,藍(lán)牙設(shè)備的MAC地址具體為0x8C DE 52 IA 6A EB0
[0061]步驟1-4、藍(lán)牙適配器判斷是否有獲取到的MAC地址,是則執(zhí)行步驟1-5,否則未搜索到藍(lán)牙讀卡器;
[0062]步驟1-5、藍(lán)牙適配器向MAC地址對應(yīng)的藍(lán)牙設(shè)備發(fā)送獲取設(shè)備名稱請求,接收藍(lán)牙設(shè)備的應(yīng)答,獲取藍(lán)牙設(shè)備應(yīng)答中的藍(lán)牙設(shè)備的設(shè)備名稱,將藍(lán)牙設(shè)備的設(shè)備名稱與藍(lán)牙設(shè)備的MAC地址對應(yīng)存儲;
[0063]例如,MAC地址為0x8C DE 52 IA 6A EB,藍(lán)牙適配器向MAC地址對應(yīng)的藍(lán)牙設(shè)備發(fā)送的獲取設(shè)備名稱請求為0x01 19 04 OA EB 6A IA 52 DE 8C 01 00 D3 8C ;藍(lán)牙設(shè)備的應(yīng)答為 Ox 04 07 FF 00 EB 6A IA 52 DE 8C 46 54 5F 5F 38 43 44 45 35 32 31 4136 41 45 42 00 00 00 00...(省略部分為228個字節(jié)的0x00),其中第11至第26個字節(jié)為藍(lán)牙設(shè)備的設(shè)備名稱,表示藍(lán)牙設(shè)備的設(shè)備名稱為FT—8CDE521A6AEB。
[0064]步驟1-6、藍(lán)牙適配器判斷獲取到的設(shè)備名稱中是否有滿足預(yù)設(shè)