一種基于usb設(shè)備的異步調(diào)用方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,尤其涉及一種基于USB設(shè)備的異步調(diào)用方法和裝置。
【背景技術(shù)】
[0002]現(xiàn)有技術(shù)中,上位機(jī)與USB設(shè)備之間的通信方式為同步通信,上位機(jī)向USB設(shè)備發(fā)送一條指令后,等待接收USB設(shè)備返回的響應(yīng),當(dāng)上位機(jī)接收到USB設(shè)備返回的響應(yīng)之后,才能夠繼續(xù)進(jìn)行其他操作。因此,在這種通信方式中,上位機(jī)向USB設(shè)備發(fā)送指令后,只能阻塞等待USB設(shè)備處理完返回響應(yīng),不能進(jìn)行其他操作,上位機(jī)的靈活性差,工作效率低。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種基于USB設(shè)備的異步調(diào)用方法和裝置,在上位機(jī)中增加通信庫(kù),上位機(jī)中的主控裝置通過(guò)通信庫(kù)向USB設(shè)備發(fā)送指令,通信庫(kù)通過(guò)回調(diào)函數(shù)的方式將USB設(shè)備的響應(yīng)返回給上位機(jī)中的主控裝置,主控裝置在發(fā)送指令之后不必等待接收響應(yīng)。
[0004]本發(fā)明提供的一種基于USB設(shè)備的異步調(diào)用方法,包括:
[0005]步驟S1:接收主控裝置發(fā)送的上位機(jī)指令,向所述主控裝置返回接收成功信息,根據(jù)USB設(shè)備的設(shè)備句柄,向USB設(shè)備發(fā)送所述上位機(jī)指令,接收所述USB設(shè)備返回的第一響應(yīng)數(shù)據(jù);
[0006]步驟S2:判斷所述第一響應(yīng)數(shù)據(jù)中的返回碼是否為第七預(yù)設(shè)值,是則將查詢標(biāo)識(shí)置位,結(jié)束,否則執(zhí)行步驟S3;
[0007]步驟S3:通過(guò)調(diào)用回調(diào)函數(shù),將所述第一響應(yīng)數(shù)據(jù)返回給所述主控裝置,結(jié)束;
[0008]所述方法還包括:
[0009]步驟AOl:判斷所述查詢標(biāo)識(shí)是否置位,是則執(zhí)行步驟A02,否則返回步驟AOl;
[0010]步驟A02:根據(jù)所述USB設(shè)備的設(shè)備句柄,向所述USB設(shè)備發(fā)送查詢指令,接收所述USB設(shè)備返回的第二響應(yīng)數(shù)據(jù);
[0011]步驟A03:對(duì)所述第二響應(yīng)數(shù)據(jù)中的返回碼進(jìn)行判斷,若所述返回碼為第六預(yù)設(shè)值則將所述查詢標(biāo)識(shí)復(fù)位,執(zhí)行步驟A04,若所述返回碼為第五預(yù)設(shè)值則返回步驟AOl,若是其他值則執(zhí)行步驟A04;
[0012]步驟A04:通過(guò)調(diào)用所述回調(diào)函數(shù),將所述第二響應(yīng)數(shù)據(jù)返回給所述主控裝置,返回步驟AO I。
[0013]本發(fā)明提供一種基于USB設(shè)備的異步調(diào)用裝置,所述裝置包括:第一發(fā)送接收模塊、第一判斷模塊、置位模塊和第一回調(diào)模塊;
[0014]所述第一發(fā)送接收模塊,用于接收主控裝置發(fā)送的上位機(jī)指令,向所述主控裝置返回接收成功信息,根據(jù)USB設(shè)備的設(shè)備句柄,向USB設(shè)備發(fā)送所述上位機(jī)指令,接收所述USB設(shè)備返回的第一響應(yīng)數(shù)據(jù);
[0015]所述第一判斷模塊,用于當(dāng)所述第一發(fā)送接收模塊接收到USB設(shè)備返回的第一響應(yīng)數(shù)據(jù)后,判斷所述第一響應(yīng)數(shù)據(jù)中的返回碼是否為第七預(yù)設(shè)值;
[0016]所述置位模塊,用于當(dāng)所述第一判斷模塊判斷出所述返回碼為第七預(yù)設(shè)值時(shí),將查詢標(biāo)識(shí)置位;
[0017]所述第一回調(diào)模塊,用于當(dāng)所述第一判斷模塊判斷出返回碼不為第七預(yù)設(shè)值時(shí),通過(guò)調(diào)用回調(diào)函數(shù),將所述第一發(fā)送接收模塊接收到的所述第一響應(yīng)數(shù)據(jù)返回給所述主控裝置;
[0018]所述裝置還包括:第二判斷模塊、第二發(fā)送接收模塊、第三判斷模塊、復(fù)位模塊和第二回調(diào)模塊;
[0019]所述第二判斷模塊,用于判斷所述查詢標(biāo)識(shí)是否置位,若所述查詢標(biāo)識(shí)未置位,則所述第二判斷模塊繼續(xù)判斷查詢標(biāo)識(shí)是否置位;
[0020]所述第二發(fā)送接收模塊,用于當(dāng)所述第二判斷模塊判斷出所述查詢標(biāo)識(shí)置位時(shí),根據(jù)所述USB設(shè)備的設(shè)備句柄,向所述USB設(shè)備發(fā)送查詢指令,接收所述USB設(shè)備返回的第二響應(yīng)數(shù)據(jù);
[0021]所述第三判斷模塊,用于對(duì)所述第二發(fā)送接收模塊接收到的所述第二響應(yīng)數(shù)據(jù)中的返回碼進(jìn)行判斷,若所述返回碼為第五預(yù)設(shè)值則觸發(fā)所述第二判斷模塊進(jìn)行工作;
[0022]所述復(fù)位模塊,用于當(dāng)所述第三判斷模塊判斷出所述返回碼為第六預(yù)設(shè)值時(shí),將所述查詢標(biāo)識(shí)復(fù);
[0023]所述第二回調(diào)模塊,用于當(dāng)所述第三判斷模塊判斷出所述返回碼為除第五預(yù)設(shè)值之外的其他值時(shí),通過(guò)調(diào)用所述回調(diào)函數(shù),將所述第二發(fā)送接收模塊接收到的所述第二響應(yīng)數(shù)據(jù)返回給所述主控裝置,觸發(fā)所述第二判斷模塊進(jìn)行工作。
[0024]本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
[0025]本發(fā)明提供的一種基于USB設(shè)備的異步調(diào)用方法和裝置,在上位機(jī)中增加通信庫(kù),上位機(jī)中的主控裝置通過(guò)通信庫(kù)向USB設(shè)備發(fā)送指令,通信庫(kù)通過(guò)回調(diào)函數(shù)的方式將USB設(shè)備的響應(yīng)返回給上位機(jī)中的主控裝置,主控裝置在發(fā)送指令之后不必等待接收響應(yīng),提高上位機(jī)的工作效率。
【附圖說(shuō)明】
[0026]圖1和圖2是本發(fā)明實(shí)施例2提供的一種基于USB設(shè)備的異步調(diào)用方法的主線程的流程圖;
[0027]圖3是本發(fā)明實(shí)施例2提供的一種基于USB設(shè)備的異步調(diào)用方法的查詢子線程的流程圖;
[0028]圖4是本發(fā)明實(shí)施例3提供的一種基于USB設(shè)備的異步調(diào)用裝置的模塊圖。
【具體實(shí)施方式】
[0029]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0030]實(shí)施例1
[0031]本發(fā)明的實(shí)施例1提供了一種基于USB設(shè)備的異步調(diào)用方法,應(yīng)用于包括上位機(jī)和USB設(shè)備的系統(tǒng)中,其中,上位機(jī)包括主控裝置和通信庫(kù),該方法包括:
[0032]步驟S1:通信庫(kù)接收主控裝置發(fā)送的上位機(jī)指令,向主控裝置返回接收成功信息,根據(jù)USB設(shè)備的設(shè)備句柄,向USB設(shè)備發(fā)送上位機(jī)指令,接收USB設(shè)備返回的第一響應(yīng)數(shù)據(jù);
[0033]步驟S2:通信庫(kù)根據(jù)判斷第一響應(yīng)數(shù)據(jù)中的返回碼是否為第七預(yù)設(shè)值,是則將查詢標(biāo)識(shí)置位,結(jié)束,否則執(zhí)行步驟S3;
[0034]步驟S3:通信庫(kù)通過(guò)調(diào)用回調(diào)函數(shù),將第一響應(yīng)數(shù)據(jù)返回給主控裝置,結(jié)束;
[0035]該方法還包括:
[0036]步驟AOl:通信庫(kù)判斷查詢標(biāo)識(shí)是否置位,是則執(zhí)行步驟A02,否則返回步驟AOl;
[0037]步驟A02:通信庫(kù)根據(jù)USB設(shè)備的設(shè)備句柄,向USB設(shè)備發(fā)送查詢指令,接收USB設(shè)備返回的第二響應(yīng)數(shù)據(jù);
[0038]步驟A03:通信庫(kù)對(duì)第二響應(yīng)數(shù)據(jù)中的返回碼進(jìn)行判斷,若返回碼為第六預(yù)設(shè)值則將查詢標(biāo)識(shí)復(fù)位,返回步驟A04,若返回碼為第五預(yù)設(shè)值則返回步驟AOl,若是其他值則執(zhí)行步驟A04;
[0039]步驟A04:通信庫(kù)通過(guò)調(diào)用回調(diào)函數(shù),將第二響應(yīng)數(shù)據(jù)返回給主控裝置,返回步驟AOl ;
[0040]本實(shí)施例中,步驟SI至S3可以在通信庫(kù)的主線程中實(shí)現(xiàn),步驟AOl至A04可以在通信庫(kù)的查詢子線程中實(shí)現(xiàn);
[0041]本實(shí)施例中,在啟動(dòng)查詢子線程之前,還可以包括:
[0042]步驟Pl:通信庫(kù)枚舉與上位機(jī)相連的USB設(shè)備,獲取USB設(shè)備的設(shè)備名稱和設(shè)備名稱長(zhǎng)度;
[0043]步驟P2:通信庫(kù)根據(jù)設(shè)備名稱長(zhǎng)度,判斷設(shè)備名稱是否正確,是則執(zhí)行步驟P3,否則向主控裝置返回錯(cuò)誤信息,結(jié)束;
[0044]步驟P3:通信庫(kù)根據(jù)設(shè)備名稱和設(shè)備名稱長(zhǎng)度,打開并連接USB設(shè)備;
[0045]步驟P4:通信庫(kù)判斷是否成功打開并連接USB設(shè)備,是則執(zhí)行步驟P5,否則向主控裝置返回錯(cuò)誤信息,結(jié)束;
[0046]步驟P5:通信庫(kù)獲取USB設(shè)備的設(shè)備句柄,將查詢標(biāo)識(shí)復(fù)位,設(shè)置向主控裝置返回USB設(shè)備響應(yīng)的回調(diào)函數(shù)指針;啟動(dòng)查詢子線程;
[0047]本實(shí)施例中,通信庫(kù)完成與USB設(shè)備的通信之后,還可以包括:
[0048]通信庫(kù)關(guān)閉USB設(shè)備,清除USB設(shè)備的設(shè)備句柄。
[0049]本實(shí)施例中提供的一種基于USB設(shè)備的異步調(diào)用方法,在上位機(jī)中增加通信庫(kù),上位機(jī)中的主控裝置通過(guò)通信庫(kù)向USB設(shè)備發(fā)送指令,通信庫(kù)通過(guò)回調(diào)函數(shù)的方式將USB設(shè)備的響應(yīng)返回給上位機(jī)中的主控裝置,主控裝置在發(fā)送指令之后不必等待接收響應(yīng),提高上位機(jī)的工作效率。
[0050]實(shí)施例2
[0051]本發(fā)明的實(shí)施例2提供了一種基于USB設(shè)備的異步調(diào)用方法,如圖1至圖3所示,應(yīng)用于包括上位機(jī)和USB設(shè)備的系統(tǒng)中,其中,上位機(jī)包括主控裝置和通信庫(kù),通信庫(kù)中包括:主線程和查詢子線程;
[0052]主線程的流程包括:[0053 ]當(dāng)通信庫(kù)的初始化接口被調(diào)用時(shí),執(zhí)行以下步驟:
[0054]步驟101:通信庫(kù)枚舉與上位機(jī)相連的USB設(shè)備,獲取USB設(shè)備的設(shè)備名稱和設(shè)備名稱長(zhǎng)度;
[°°55]具體地,該步驟包括:
[0056]步驟101-1:通信庫(kù)建立上下文環(huán)境,判斷是否成功建立上下文環(huán)境,是則獲取上下文句柄,執(zhí)行步驟101-2,否則向主控裝置返回錯(cuò)誤信息,結(jié)束;
[0057 ] 具體地,通信庫(kù)通過(guò)調(diào)用SCardEstabl ishContext函數(shù)建立上下文環(huán)境;
[0058]通信庫(kù)判斷SCardEstabl ishContext函數(shù)返回值是否為第一預(yù)設(shè)值,是則確定成功建立上下文環(huán)境,否則確定未成功建立上下文環(huán)境;例如,第一預(yù)設(shè)值為SCARD_S_SUCCESS;
[0059]當(dāng)通信庫(kù)判斷出成功建立上下文環(huán)境時(shí),通信庫(kù)獲取SCardEstablishContext函數(shù)的hContext參數(shù)中的數(shù)據(jù)作為上下文句柄;
[0060]步驟101-2:通信庫(kù)枚舉USB設(shè)備,判斷是否存在與上位機(jī)相連的USB設(shè)備,是則獲取USB設(shè)備列表,執(zhí)行步驟101-3,否則向主控裝置返回錯(cuò)誤信息,結(jié)束;
[00