[0239]或者,返回模塊具體用于將搜索模塊搜索到的藍(lán)牙讀卡器的設(shè)備名稱和MAC地址對(duì)應(yīng)存儲(chǔ),向上位機(jī)返回搜索模塊搜索到的藍(lán)牙讀卡器的設(shè)備名稱;相應(yīng)地,獲取模塊具體用于當(dāng)指令類型判斷模塊判斷接收到的CCID指令為連接指令時(shí),從連接指令中獲取藍(lán)牙讀卡器的設(shè)備名稱,根據(jù)獲取到的設(shè)備名稱從返回模塊中查找藍(lán)牙讀卡器的MAC地址;連接模塊具體用于根據(jù)獲取模塊查找到的藍(lán)牙讀卡器的MAC地址與藍(lán)牙讀卡器建立連接。
[0240]本實(shí)施例中,搜索模塊具體用于:發(fā)送搜索指令,等待并接收藍(lán)牙設(shè)備的應(yīng)答,根據(jù)接收到的藍(lán)牙設(shè)備的應(yīng)答獲取藍(lán)牙設(shè)備的MAC地址和設(shè)備名稱,判斷獲取到的設(shè)備名稱中是否有滿足預(yù)設(shè)條件的,是則滿足預(yù)設(shè)條件的設(shè)備名稱對(duì)應(yīng)的藍(lán)牙設(shè)備為藍(lán)牙讀卡器,否則未搜索到藍(lán)牙讀卡器;其中,預(yù)設(shè)條件具體為與預(yù)設(shè)名稱相同或包含預(yù)設(shè)字段。
[0241 ] 本實(shí)施例中,上述連接模塊可以具體包括:
[0242]建立ACL信道連接單元,用于向藍(lán)牙讀卡器發(fā)送建立ACL信道連接請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收超時(shí)則連接失??;若接收到藍(lán)牙讀卡器的應(yīng)答則根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷是否成功建立ACL信道連接,若成功則從藍(lán)牙讀卡器的應(yīng)答中獲取ACL連接句柄,若失敗則連接失??;
[0243]請(qǐng)求連接單元,用于向藍(lán)牙讀卡器發(fā)送建立CO信道連接請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收超時(shí)則連接失??;若接收到藍(lán)牙讀卡器的應(yīng)答則根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷是否成功建立CO信道連接,若成功則從藍(lán)牙讀卡器的應(yīng)答中獲取信道ID,若失敗則連接失??;
[0244]信道參數(shù)配置單元,用于向藍(lán)牙讀卡器發(fā)送配置信道參數(shù)請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收超時(shí)則連接失??;若接收到藍(lán)牙讀卡器的應(yīng)答則根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷信道參數(shù)是否配置成功,若配置失敗則連接失敗或重新向藍(lán)牙讀卡器發(fā)送配置信道參數(shù)請(qǐng)求,若配置成功則根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷是否需要調(diào)整信道參數(shù),若需要調(diào)整則根據(jù)藍(lán)牙讀卡器的應(yīng)答調(diào)整信道參數(shù),連接成功,若不需要?jiǎng)t連接成功;
[0245]或者,連接模塊具體包括:
[0246]請(qǐng)求連接單元,用于向藍(lán)牙讀卡器發(fā)送連接請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收超時(shí)則連接失敗;若接收到藍(lán)牙讀卡器的應(yīng)答則根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷是否連接成功,是則從藍(lán)牙讀卡器的應(yīng)答中獲取連接句柄,否則連接失?。?br>[0247]服務(wù)匹配單元,用于向藍(lán)牙讀卡器發(fā)送主服務(wù)通用唯一標(biāo)識(shí)碼,等待藍(lán)牙讀卡器的應(yīng)答,若接收超時(shí)則連接失??;若接收到藍(lán)牙讀卡器的應(yīng)答則根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷服務(wù)是否匹配,若不匹配則連接失?。?br>[0248]特性值句柄獲取單元,用于當(dāng)所述服務(wù)匹配單元判斷服務(wù)匹配時(shí),向藍(lán)牙讀卡器發(fā)送獲取特性值句柄請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收超時(shí)則連接失敗,若接收到藍(lán)牙讀卡器的應(yīng)答則從藍(lán)牙讀卡器的應(yīng)答中獲取特性值句柄,連接成功。
[0249]本實(shí)施例中,應(yīng)答接收模塊404還用于在接收藍(lán)牙讀卡器的應(yīng)答之前設(shè)置藍(lán)牙適配器的當(dāng)前模式為等待藍(lán)牙應(yīng)答模式,以及接收與所述藍(lán)牙適配器建立連接的藍(lán)牙讀卡器發(fā)送的卡插拔消息;相應(yīng)地,指令接收模塊402還用于在判斷是否接收到上位機(jī)下發(fā)的CCID指令之前設(shè)置藍(lán)牙適配器的當(dāng)前模式為USB輪詢模式;藍(lán)牙適配器還包括中斷處理模塊,用于當(dāng)應(yīng)答接收模塊404接收到卡插拔消息時(shí)產(chǎn)生內(nèi)部中斷,進(jìn)入內(nèi)部中斷處理流程,檢查藍(lán)牙適配器的當(dāng)前模式,若當(dāng)前模式為USB輪詢模式則向上位機(jī)發(fā)送相應(yīng)提示信息,退出內(nèi)部中斷處理流程,若當(dāng)前模式為等待藍(lán)牙應(yīng)答模式則直接退出內(nèi)部中斷處理流程。
[0250]以上所述的實(shí)施例只是本發(fā)明較優(yōu)選的【具體實(shí)施方式】,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進(jìn)行的通常變化和替換都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種藍(lán)牙適配器的通信方法,其特征在于,包括: 步驟S1、藍(lán)牙適配器初始化,向上位機(jī)聲明為CCID設(shè)備; 步驟S2、所述藍(lán)牙適配器判斷是否接收到上位機(jī)下發(fā)的CCID指令,是則執(zhí)行步驟S3,否則重新執(zhí)行步驟S2 ; 步驟S3、所述藍(lán)牙適配器將上位機(jī)下發(fā)的CCID指令轉(zhuǎn)換為藍(lán)牙協(xié)議數(shù)據(jù),發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)給藍(lán)牙讀卡器; 步驟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,若接收超時(shí)則向上位機(jī)返回錯(cuò)誤碼,返回步驟S2 ; 所述方法還包括:當(dāng)所述藍(lán)牙適配器接收到藍(lán)牙讀卡器發(fā)送的卡插拔消息時(shí)向上位機(jī)發(fā)送提示信息。2.如權(quán)利要求1所述的方法,其特征在于,所述步驟S3具體包括: 步驟al、所述藍(lán)牙適配器對(duì)上位機(jī)下發(fā)的CCID指令添加藍(lán)牙協(xié)議頭得到藍(lán)牙協(xié)議數(shù)據(jù); 步驟a2、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)。3.如權(quán)利要求2所述的方法,其特征在于,所述步驟S3還包括: 步驟aO、所述藍(lán)牙適配器判斷上位機(jī)下發(fā)的CCID指令的長(zhǎng)度是否超過(guò)最大傳輸單元,若未超過(guò)則執(zhí)行所述步驟al,若超過(guò)則根據(jù)最大傳輸單元對(duì)上位機(jī)下發(fā)的CCID指令分包,依次對(duì)每個(gè)指令數(shù)據(jù)包添加藍(lán)牙協(xié)議頭得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)。4.如權(quán)利要求1所述的方法,其特征在于,所述步驟S3具體包括: 步驟bl、所述藍(lán)牙適配器計(jì)算上位機(jī)下發(fā)的CCID指令的CRC校驗(yàn)位,對(duì)上位機(jī)下發(fā)的CCID指令添加藍(lán)牙協(xié)議頭和所述CRC校驗(yàn)位,得到藍(lán)牙協(xié)議數(shù)據(jù); 步驟b2、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)。5.如權(quán)利要求4所述的方法,其特征在于,所述步驟S3還包括: 步驟bO、所述藍(lán)牙適配器判斷上位機(jī)下發(fā)的CCID指令的長(zhǎng)度是否超過(guò)最大傳輸單元,若未超過(guò)則執(zhí)行所述步驟bl,若超過(guò)則根據(jù)最大傳輸單元對(duì)上位機(jī)下發(fā)的CCID指令分包,分別計(jì)算每個(gè)指令數(shù)據(jù)包的CRC校驗(yàn)位,依次對(duì)每個(gè)指令數(shù)據(jù)包添加藍(lán)牙協(xié)議頭和CRC校驗(yàn)位得到藍(lán)牙協(xié)議數(shù)據(jù),向藍(lán)牙讀卡器發(fā)送所述藍(lán)牙協(xié)議數(shù)據(jù)。6.如權(quán)利要求1所述的方法,其特征在于,所述步驟S4具體包括: 步驟Cl、所述藍(lán)牙適配器等待接收藍(lán)牙讀卡器返回的應(yīng)答,若接收到則執(zhí)行步驟c2,若接收超時(shí)則向上位機(jī)返回錯(cuò)誤碼,返回步驟S2 ; 步驟c2、所述藍(lán)牙適配器獲取應(yīng)答中的HCI層有效載荷和L2CAP層有效載荷,根據(jù)獲取到的HCI層有效載荷和L2CAP層有效載荷判斷應(yīng)答的長(zhǎng)度是否合法,若合法則執(zhí)行步驟c3,若不合法則向上位機(jī)返回錯(cuò)誤碼,返回步驟S2 ; 步驟c3、所述藍(lán)牙適配器獲取應(yīng)答中的有效數(shù)據(jù)和CRC校驗(yàn)位,根據(jù)CRC校驗(yàn)位對(duì)有效數(shù)據(jù)進(jìn)行CRC校驗(yàn),若校驗(yàn)通過(guò)則將有效數(shù)據(jù)返回給上位機(jī),返回步驟S2,若校驗(yàn)未通過(guò)則向上位機(jī)返回錯(cuò)誤碼,返回步驟S2。7.如權(quán)利要求1所述的方法,其特征在于,所述步驟S4具體包括: 步驟dl、所述藍(lán)牙適配器等待接收藍(lán)牙讀卡器返回的應(yīng)答,若接收到則執(zhí)行步驟d2,若接收超時(shí)則向上位機(jī)返回錯(cuò)誤碼,返回步驟S2 ; 步驟d2、所述藍(lán)牙適配器獲取應(yīng)答中的HCI層有效載荷和L2CAP層有效載荷,根據(jù)獲取到的HCI層有效載荷和L2CAP層有效載荷判斷應(yīng)答的長(zhǎng)度是否合法,若合法則執(zhí)行步驟d3,若不合法則向上位機(jī)返回錯(cuò)誤碼,返回步驟S2 ; 步驟d3、所述藍(lán)牙適配器獲取應(yīng)答中的有效數(shù)據(jù),將有效數(shù)據(jù)返回給上位機(jī),返回步驟S2o8.如權(quán)利要求1所述的方法,其特征在于,所述步驟SI中,所述藍(lán)牙適配器初始化之后,還包括:所述藍(lán)牙適配器搜索藍(lán)牙讀卡器,與藍(lán)牙讀卡器建立連接,提示連接結(jié)果。9.如權(quán)利要求8所述的方法,其特征在于,所述藍(lán)牙適配器搜索藍(lán)牙讀卡器之前,還包括:所述藍(lán)牙適配器檢查是否有已存儲(chǔ)的藍(lán)牙讀卡器的設(shè)備信息,若有則獲取已存儲(chǔ)的藍(lán)牙讀卡器的設(shè)備信息,與藍(lán)牙讀卡器建立連接,提示連接結(jié)果;若沒(méi)有則執(zhí)行所述搜索藍(lán)牙讀卡器。10.如權(quán)利要求1所述的方法,其特征在于,所述步驟S2中,當(dāng)所述藍(lán)牙適配器判斷接收到上位機(jī)下發(fā)的CCID指令時(shí),還包括:所述藍(lán)牙適配器判斷上位機(jī)下發(fā)的CCID指令的類型,若上位機(jī)下發(fā)的CCID指令為連接指令則搜索藍(lán)牙讀卡器,與藍(lán)牙讀卡器建立連接,向上位機(jī)返回連接結(jié)果,返回步驟S2 ;否則,執(zhí)行步驟S3。11.如權(quán)利要求10所述的方法,其特征在于,所述藍(lán)牙適配器搜索藍(lán)牙讀卡器之前,還包括:所述藍(lán)牙適配器檢查是否有已存儲(chǔ)的藍(lán)牙讀卡器的設(shè)備信息,若有則獲取已存儲(chǔ)的藍(lán)牙讀卡器的設(shè)備信息,與藍(lán)牙讀卡器建立連接,向上位機(jī)返回連接結(jié)果,返回步驟S2 ;若沒(méi)有則執(zhí)行所述搜索藍(lán)牙讀卡器。12.如權(quán)利要求9或11所述的方法,其特征在于,與藍(lán)牙讀卡器建立連接之后還包括:所述藍(lán)牙適配器存儲(chǔ)藍(lán)牙讀卡器的設(shè)備信息。13.如權(quán)利要求1所述的方法,其特征在于,所述步驟S2中,當(dāng)所述藍(lán)牙適配器判斷接收到上位機(jī)下發(fā)的CCID指令時(shí),還包括所述藍(lán)牙適配器判斷上位機(jī)下發(fā)的CCID指令的類型: 若上位機(jī)下發(fā)的CCID指令為搜索指令則搜索藍(lán)牙讀卡器,向上位機(jī)返回搜索到的藍(lán)牙讀卡器的設(shè)備信息,返回步驟S2 ; 若上位機(jī)下發(fā)的CCID指令為連接指令則從連接指令中獲取藍(lán)牙讀卡器的設(shè)備信息,與藍(lán)牙讀卡器建立連接,向上位機(jī)返回連接結(jié)果,返回步驟S2 ; 否則,執(zhí)行步驟S3。14.如權(quán)利要求13所述的方法,其特征在于,所述藍(lán)牙適配器向上位機(jī)返回搜索到的藍(lán)牙讀卡器的設(shè)備信息,具體包括:所述藍(lán)牙適配器向上位機(jī)返回搜索到的藍(lán)牙讀卡器的設(shè)備名稱和MAC地址; 所述藍(lán)牙適配器從連接指令中獲取藍(lán)牙讀卡器的設(shè)備信息,與藍(lán)牙讀卡器建立連接,具體包括:所述藍(lán)牙適配器從連接指令中獲取藍(lán)牙讀卡器的MAC地址,根據(jù)獲取到的藍(lán)牙讀卡器的MAC地址與藍(lán)牙讀卡器建立連接。15.如權(quán)利要求13所述的方法,其特征在于,所述藍(lán)牙適配器向上位機(jī)返回搜索到的藍(lán)牙讀卡器的設(shè)備信息,具體包括:所述藍(lán)牙適配器將藍(lán)牙讀卡器的設(shè)備名稱和MAC地址對(duì)應(yīng)存儲(chǔ),向上位機(jī)返回搜索到的藍(lán)牙讀卡器的設(shè)備名稱; 所述藍(lán)牙適配器從連接指令中獲取藍(lán)牙讀卡器的設(shè)備信息,與藍(lán)牙讀卡器建立連接,具體包括:所述藍(lán)牙適配器從連接指令中獲取藍(lán)牙讀卡器的設(shè)備名稱,根據(jù)獲取到的藍(lán)牙讀卡器的設(shè)備名稱查找藍(lán)牙讀卡器的MAC地址,根據(jù)查找到的藍(lán)牙讀卡器的MAC地址與藍(lán)牙讀卡器建立連接。16.如權(quán)利要求8、10或13所述的方法,其特征在于,所述搜索藍(lán)牙讀卡器具體包括: 步驟1-1、所述藍(lán)牙適配器發(fā)送搜索指令,等待并接收藍(lán)牙設(shè)備的應(yīng)答; 步驟1-2、所述藍(lán)牙適配器根據(jù)接收到的藍(lán)牙設(shè)備的應(yīng)答獲取藍(lán)牙設(shè)備的MAC地址和設(shè)備名稱; 步驟1-3、所述藍(lán)牙適配器判斷獲取到的設(shè)備名稱中是否有滿足預(yù)設(shè)條件的,是則滿足預(yù)設(shè)條件的設(shè)備名稱對(duì)應(yīng)的藍(lán)牙設(shè)備為藍(lán)牙讀卡器,否則未搜索到藍(lán)牙讀卡器; 所述預(yù)設(shè)條件具體為與預(yù)設(shè)名稱相同或包含預(yù)設(shè)字段。17.如權(quán)利要求8、10或13所述的方法,其特征在于,所述與藍(lán)牙讀卡器建立連接,具體包括: 步驟2-1、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送建立ACL信道連接請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收到藍(lán)牙讀卡器的應(yīng)答則執(zhí)行步驟2-2,若接收超時(shí)則連接失??; 步驟2-2、所述藍(lán)牙適配器根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷是否成功建立ACL信道連接,是則從藍(lán)牙讀卡器的應(yīng)答中獲取ACL連接句柄,執(zhí)行步驟2-3,否則連接失敗; 步驟2-3、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送建立CO信道連接請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收到藍(lán)牙讀卡器的應(yīng)答則執(zhí)行步驟2-4,若接收超時(shí)則連接失??; 步驟2-4、所述藍(lán)牙適配器根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷是否成功建立CO信道連接,是則從藍(lán)牙讀卡器的應(yīng)答中獲取信道ID,執(zhí)行步驟2-5,否則連接失??; 步驟2-5、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送配置信道參數(shù)請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收到藍(lán)牙讀卡器的應(yīng)答則執(zhí)行步驟2-6,若接收超時(shí)則連接失敗; 步驟2-6、所述藍(lán)牙適配器根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷信道參數(shù)是否配置成功,是則執(zhí)行步驟2-7,否則連接失敗或返回步驟2-5 ; 步驟2-7、所述藍(lán)牙適配器根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷是否需要調(diào)整信道參數(shù),若需要?jiǎng)t根據(jù)藍(lán)牙讀卡器的應(yīng)答調(diào)整信道參數(shù),連接成功,若不需要?jiǎng)t連接成功。18.如權(quán)利要求8、10或13所述的方法,其特征在于,所述與藍(lán)牙讀卡器建立連接,具體包括: 步驟3-1、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送連接請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收到藍(lán)牙讀卡器的應(yīng)答則執(zhí)行步驟3-2,若接收超時(shí)則連接失??; 步驟3-2、所述藍(lán)牙適配器根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷是否連接成功,是則從藍(lán)牙讀卡器的應(yīng)答中獲取連接句柄,執(zhí)行步驟3-3,否則連接失?。? 步驟3-3、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送主服務(wù)通用唯一標(biāo)識(shí)碼,等待藍(lán)牙讀卡器的應(yīng)答,若接收到藍(lán)牙讀卡器的應(yīng)答則執(zhí)行步驟3-4,若接收超時(shí)則連接失?。? 步驟3-4、所述藍(lán)牙適配器根據(jù)藍(lán)牙讀卡器的應(yīng)答判斷服務(wù)是否匹配,是則執(zhí)行步驟3-5,否則連接失?。? 步驟3-5、所述藍(lán)牙適配器向藍(lán)牙讀卡器發(fā)送獲取特性值句柄請(qǐng)求,等待藍(lán)牙讀卡器的應(yīng)答,若接收到藍(lán)牙讀卡器的應(yīng)答則從藍(lán)牙讀卡器的應(yīng)答中獲取特性值句柄,連接成功,若接收超時(shí)則連接失敗。