本發(fā)明涉及USB設備,尤其涉及一種USB設備及其識別MacOS系統(tǒng)的方法。
背景技術:
USB協(xié)議技術是主機與外部設備連接的串行總線標準,在主機(例如,個人計算機、個人數(shù)字助理以及移動電腦等)上使用十分廣泛,支持熱插拔和即插即用,并支持總線供電,鼠標、鍵盤、游戲手柄、掃描儀、數(shù)碼相機、打印機、硬盤、安全設備、光驅和網(wǎng)卡等幾乎所有的外圍設備都可以通過運行USB接口與主機相連并進行通信,USB接口已經(jīng)成為目前大多數(shù)主機外設與計算機相連的缺省接口。
在操作系統(tǒng)平臺支持方面,MacOS系統(tǒng)及非MacOS系統(tǒng)(Windows、Linux等)都提供了對USB接口的支持。USB設備在主機進行通信時,需要準確區(qū)分主機操作系統(tǒng)的類型。
發(fā)明人在實現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)現(xiàn)有技術中至少存在以下缺陷:
隨著新版本操作系統(tǒng)的出現(xiàn),現(xiàn)有的USB設備識別主機操作系統(tǒng)的方法已不能準確地識別出MacOS系統(tǒng)。
技術實現(xiàn)要素:
本發(fā)明的目的是克服現(xiàn)有技術的缺陷,提供一種USB設備及其識別MacOS系統(tǒng)的方法。
本發(fā)明是通過下述技術方案實現(xiàn)的:
一方面,本發(fā)明提供一種USB設備識別MacOS系統(tǒng)的方法,包括:
步驟A1、USB設備上電;
步驟A2、所述USB設備等待接收主機下發(fā)的命令;
當接收到主機下發(fā)的獲取字符串描述符命令時,向主機發(fā)送相應的字符串描述符;
當接收到主機下發(fā)的獲取配置描述符命令時,向主機發(fā)送相應的配置描述符和接口描述符;
所述方法還包括在所述USB設備接收到APDU命令之前:
若所述USB設備先接收到主機下發(fā)的獲取字符串描述符命令,后接收到主機下發(fā)的獲取配置描述符命令,則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng);
若所述USB設備先接收到主機下發(fā)的獲取配置描述符命令,后接收到主機下發(fā)的獲取字符串描述符命令,則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
以及與上述方法對應的一種USB設備,包括:
接收模塊,用于所述USB設備上電后,接收主機下發(fā)的命令;
發(fā)送模塊,用于當所述接收模塊接收到主機下發(fā)的獲取字符串描述符命令時,向主機發(fā)送相應的字符串描述符,當所述接收模塊接收到主機下發(fā)的獲取配置描述符命令時,向主機發(fā)送相應的配置描述符和接口描述符;
第一標識模塊,用于當所述接收模塊接收到APDU命令之前,先接收到主機下發(fā)的獲取字符串描述符命令,后接收到主機下發(fā)的獲取配置描述符命令時,標識主機操作系統(tǒng)的類型為MacOS系統(tǒng);
第二標識模塊,用于當所述接收模塊接收到APDU命令之前,先接收到主機下發(fā)的獲取配置描述符命令,后接收到主機下發(fā)的獲取字符串描述符命令時,標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
另一方面,本發(fā)明又提供另一種USB設備識別MacOS系統(tǒng)的方法,包括:
步驟B1、USB設備上電;
步驟B2、所述USB設備等待接收主機下發(fā)的命令;
當接收到主機下發(fā)的獲取字符串描述符命令時,向主機發(fā)送相應的字符串描述符;
所述方法還包括:當所述USB設備上電后首次接收到獲取字符串描述符命令時,若所述獲取字符串描述符命令中的獲取長度為預設字節(jié)數(shù)則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
以及與上述方法對應的一種USB設備,包括:
接收模塊,用于所述USB設備上電后,接收主機下發(fā)的獲取字符串描述符命令;
發(fā)送模塊,用于所述接收模塊接收到主機下發(fā)的獲取字符串描述符命令后,向主機發(fā)送相應的字符串描述符;
第一標識模塊,用于當所述接收模塊在所述USB設備上電后首次接收到獲取字符串描述符命令時,若所述獲取字符串描述符命令中的獲取長度為預設字節(jié)數(shù)則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
本發(fā)明的有益效果在于:使用本發(fā)明提供的技術方案,USB設備能夠準確地識別MacOS系統(tǒng)。
附圖說明
為了更清楚的說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例2提供的一種USB設備識別MacOS系統(tǒng)的方法流程圖;
圖2為本發(fā)明實施例3提供的一種USB設備的結構示意圖;
圖3為本發(fā)明實施例5提供的一種USB設備識別MacOS系統(tǒng)的方法流程圖;
圖4為本發(fā)明實施例6提供的一種USB設備的結構示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
實施例1
本實施例提供一種USB設備識別MacOS系統(tǒng)的方法,包括:
步驟A1、USB設備上電;
步驟A2、所述USB設備等待接收主機下發(fā)的命令;
當接收到主機下發(fā)的獲取字符串描述符命令時,向主機發(fā)送相應的字符串描述符;
當接收到主機下發(fā)的獲取配置描述符命令時,向主機發(fā)送相應的配置描述符和接口描述符;
所述方法還包括在所述USB設備接收到APDU命令之前:
若所述USB設備先接收到主機下發(fā)的獲取字符串描述符命令,后接收到主機下發(fā)的獲取配置描述符命令,則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng);
若所述USB設備先接收到主機下發(fā)的獲取配置描述符命令,后接收到主機下發(fā)的獲取字符串描述符命令,則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
進一步地,本實施例中:
所述步驟A1中還包括:所述USB設備標識主機操作系統(tǒng)的類型為未知;
所述若所述USB設備先接收到主機下發(fā)的獲取字符串描述符命令,后接收到主機下發(fā)的獲取配置描述符命令,則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),具體包括:當所述USB設備接收到主機下發(fā)的獲取字符串描述符命令時,判斷主機操作系統(tǒng)的類型是否為未知,是則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),向主機發(fā)送相應的字符串描述符,否則向主機發(fā)送相應的字符串描述符;
所述若所述USB設備先接收到主機下發(fā)的獲取配置描述符命令,后接收到主機下發(fā)的獲取字符串描述符命令,則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng),具體包括:當所述USB設備接收到主機下發(fā)的獲取配置描述符命令時,檢查主機操作系統(tǒng)的類型是否為未知,是則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng),向主機發(fā)送相應的配置描述符和接口描述符,否則向主機發(fā)送相應的配置描述符和接口描述符。
或者,所述步驟A1中還包括:所述USB設備復位第一接收標志和第二接收標志;
所述若所述USB設備先接收到主機下發(fā)的獲取字符串描述符命令,后接收到主機下發(fā)的獲取配置描述符命令,則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),具體包括:當所述USB設備接收到主機下發(fā)的獲取字符串描述符命令時,置位所述第一接收標志,判斷所述第二接收標志是否被置位,是則向主機發(fā)送相應的字符串描述符,否則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),向主機發(fā)送相應的字符串描述符;
所述若所述USB設備先接收到主機下發(fā)的獲取配置描述符命令,后接收到主機下發(fā)的獲取字符串描述符命令,則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng),具體包括:當所述USB設備接收到主機下發(fā)的獲取配置描述符命令時,置位所述第二接收標志,判斷所述第一標志是否被置位,是則向主機發(fā)送相應的配置描述符和接口描述符,否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng),向主機發(fā)送相應的配置描述符和接口描述符。
進一步地,本實施例中,標識主機操作系統(tǒng)的類型為MacOS系統(tǒng)之后還包括:若所述USB設備上電后接收到主機下發(fā)的第一條命令為設置地址命令,則標識主機操作系統(tǒng)的版本為第一預設版本,若所述USB設備上電后接收到主機下發(fā)的第一條命令為獲取設備描述符命令,則標識主機操作系統(tǒng)的版本為第二預設版本。
優(yōu)選的,本發(fā)明所述的第一預設版本為MacOS x10.11,本發(fā)明所述的第二預設版本為在MacOS x10.11之前發(fā)布的MacOS的版本,包括:MacOS x10.6、MacOS x10.7、MacOS x10.8、MacOS x10.9、MacOS x10.10等。
實施例2
本實施例提供一種USB設備識別MacOS系統(tǒng)的方法,如圖1所示,包括:
步驟101、USB設備上電;
步驟102、USB設備標識主機操作系統(tǒng)的類型為未知;
具體地,USB設備可以通過設置預設標識位來標識主機操作系統(tǒng)的類型,當預設標識位的取值為第一預設值時,表示主機操作系統(tǒng)的類型為未知;例如,第一預設值可以為0。
步驟103、USB設備接收主機下發(fā)的命令;
步驟104、USB設備判斷接收到的命令的類型,若為獲取字符串描述符命令則執(zhí)行步驟105,若為獲取配置描述符命令則執(zhí)行步驟108,否則執(zhí)行步驟111;
具體地,獲取字符串描述符命令和獲取配置描述符命令為主機在USB設備枚舉過程中采用控制傳輸方式向USB設備下發(fā)的命令。
USB設備具體根據(jù)命令中的bmRequestType域(命令的第1個字節(jié))和bRequest域(命令的第2個字節(jié))判斷命令的類型,當bmRequestType域為0x80,bRequest域為GET_DESCRIPTOR的編碼值0x06時,USB設備判定命令為獲取描述符命令(包括獲取USB設備描述符命令、獲取配置描述符命令、獲取字符串描述符命令、獲取接口描述符命令、獲取端點描述符命令、獲取集線器類描述符命令、獲取人機接口類描述符命令等)。
USB設備進一步根據(jù)命令中的wValue域(長度為2字節(jié),具體為命令的第3個、第4個字節(jié))的高字節(jié)判斷獲取描述符命令的具體類型,當wValue域的高字節(jié)(命令的第3個字節(jié))為0x03時,USB設備判定獲取描述符命令具體為獲取字符串描述符命令,當wValue域的高字節(jié)為0x02時,USB設備判定獲取描述符命令具體為獲取配置描述符命令。
步驟105、USB設備判斷主機操作系統(tǒng)的類型是否為未知,是則執(zhí)行步驟106,否則執(zhí)行步驟107;
具體地,USB設備可以通過設置預設標識位來標識主機操作系統(tǒng)的類型,當預設標識位的取值為第一預設值時,表示主機操作系統(tǒng)的類型為未知;相應地,USB設備判斷主機操作系統(tǒng)的類型是否為未知,可以具體為:USB設備判斷預設標識位的取值是否為第一預設值,是則主機操作系統(tǒng)的類型為未知,否則主機操作系統(tǒng)的類型不為未知;例如,第一預設值可以為0。
步驟106、USB設備標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),執(zhí)行步驟107;
具體地,USB設備可以通過設置預設標識位來標識主機操作系統(tǒng)的類型,當預設標識位的取值為第二預設值時,表示主機操作系統(tǒng)的類型為MacOS系統(tǒng);例如第二預設值可以為MacOS。
步驟107、USB設備向主機發(fā)送相應的字符串描述符,返回步驟103;
具體地,主機通過獲取字符串描述符命令中的wValue域(長度為2字節(jié),獲取字符串描述符命令的第3個、第4個字節(jié))的低字節(jié)(獲取字符串描述符命令的第3個字節(jié))指定字符串描述符索引;步驟107具體為:USB設備根據(jù)獲取字符串描述符命令中的字符串描述符索引向主機發(fā)送相應的字符串描述符。
進一步地,USB設備根據(jù)獲取字符串描述符命令中字符串描述符索引向主機發(fā)送相應的字符串描述符,具體包括:
當字符串描述符索引為0x00時,USB設備向主機發(fā)送表示語言ID的字符串描述符;
當字符串描述符索引不為0x00時,USB設備向主機發(fā)送表示字符串編碼的字符串描述符;例如,當字符串描述符索引為0x01時,USB設備向主機發(fā)送表示廠商名稱的字符串描述符;當字符串描述符索引為0x02時,USB設備向主機發(fā)送表示USB設備名稱的字符串描述符等。
具體地,字符串描述符的格式為bLength域+bDescriptorType域+bStrings域,其中:
bLength域的大小為1個字節(jié),值為數(shù)字,表示描述符的長度;
bDescriptorType域的大小為1個字節(jié),值為0x03,表示描述符的類型為字符串描述符;
bStrings域的大小為N個字節(jié),值為數(shù)字,用于描述信息;表示語言ID的字符描述串的bStrings域具體為雙字節(jié)語言ID的數(shù)組:wLANGID[0]~wLANGID[x],表示語言標識碼0~語言標識碼x,用于描述設備支持的語言;表示字符串編碼的字符串描述符的bStrings域具體為UNICODE編碼的字符串,用于描述廠商名稱、設備名稱或序列號等信息。
步驟108、USB設備判斷主機操作系統(tǒng)的類型是否為未知,是則執(zhí)行步驟109,否則執(zhí)行步驟110;
具體地,USB設備可以通過設置預設標識位來標識主機操作系統(tǒng)的類型,當預設標識位的取值為第一預設值時,表示主機操作系統(tǒng)的類型為未知;相應地,USB設備判斷主機操作系統(tǒng)的類型是否為未知,可以具體為:USB設備判斷預設標識位的取值是否為第一預設值,是則主機操作系統(tǒng)的類型為未知,否則主機操作系統(tǒng)的類型不為未知;例如,第一預設值可以為0。
步驟109、USB設備標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng),執(zhí)行步驟110;
具體地,USB設備可以通過設置預設標識位來標識主機操作系統(tǒng)的類型,當預設標識位的取值為第三預設值時,表示主機操作系統(tǒng)的類型為非MacOS系統(tǒng);例如第三預設值可以為else。
步驟110、USB設備向主機發(fā)送相應的配置描述符和接口描述符,返回步驟103;
本實施例中,USB設備向主機發(fā)送相應的配置描述符和接口描述符可以具體包括:
步驟1-1、USB設備判斷主機操作系統(tǒng)的類型,若為MacOS系統(tǒng)則執(zhí)行步驟1-2,若為非MacOS系統(tǒng)則執(zhí)行步驟1-3;
進一步地,若主機操作系統(tǒng)的類型為未知,則執(zhí)行步驟1-2或執(zhí)行步驟1-3;
步驟1-2、USB設備判斷獲取配置描述符命令中的獲取長度是否大于配置描述符的長度,是則向主機發(fā)送預設配置描述符和第一預設接口描述符,否則向主機發(fā)送預設配置描述符的前N個字節(jié),N等于所述獲取長度;
優(yōu)選地,配置描述符的長度為9個字節(jié);
例如,獲取長度為4個字節(jié),則將預設配置描述符的前4個字節(jié)返回給主機。
步驟1-3、USB設備判斷獲取配置描述符命令中的獲取長度是否大于配置描述符的長度,是則向主機發(fā)送預設配置描述符和第二預設接口描述符,否則向主機發(fā)送預設配置描述符的前N個字節(jié),N等于所述獲取長度;
例如,獲取長度為9個字節(jié),則將預設配置描述符返回給主機。
具體地,第一預設接口描述符不同于第二預設接口描述符;
優(yōu)選地,第一預設接口描述符為智能卡類接口描述符,即第一預設接口描述符的bInterfaceClass域為0x0B;第二預設接口描述符為大數(shù)據(jù)存儲類接口描述符,即第二預設接口描述符的bInterfaceClass域為0x08。
進一步地,當主機操作系統(tǒng)的類型為MacOS系統(tǒng)時,步驟110中還可以包括USB設備向主機發(fā)送CCID類描述符;
更進一步地,當主機操作系統(tǒng)的類型為MacOS系統(tǒng)時,若第一預設接口描述符所描述的接口使用的端點不僅為端點0,則步驟110中還包括USB設備向主機發(fā)送端點描述符;當USB設備判斷主機操作系統(tǒng)的類型為非MacOS系統(tǒng)時,若第二預設接口描述符所描述的接口使用的端點不僅為端點0,則步驟110中還包括USB設備向主機發(fā)送端點描述符。
例如,當主機操作系統(tǒng)的類型為MacOS系統(tǒng)時,USB設備向主機返回:
0x 09 02 56 00 01 01 00 80 19//配置描述符
0x 09 04 00 00 02 0B 00 00 00//接口描述符
0x 36 21 10 01 00 01 02 00 00 00 FC 0D 00 00 FC 0D 00 00 00 80 25 00 00 80 25 00 00 00 20 10 00 00 00 00 00 00 00 00 00 00 40 08 04 00 20 10 00 00 FF FF 00 00 00 01//CCID類描述符
0x 07 05 81 02 40 00 00//端點描述符
0x 07 05 02 02 40 00 00//端點描述符
當主機操作系統(tǒng)的類型為非MacOS系統(tǒng)時,USB設備向主機返回:
0x 09 02 20 00 01 01 00 80 19//配置描述符
0x 09 04 00 00 02 08 06 50 00//接口描述符
0x 07 05 81 02 40 00 00//端點描述符
0x 07 05 02 02 40 00 00//端點描述符
步驟111、USB設備根據(jù)接收到的命令執(zhí)行相應操作,返回步驟103。
優(yōu)選地,USB設備可以根據(jù)主機操作系統(tǒng)的類型,執(zhí)行與接收到的命令相應的操作。
本實施例中,USB設備向主機發(fā)送相應的配置描述符和接口描述符還可以具體包括:USB設備向主機發(fā)送預設配置描述符和第三預設接口描述符;優(yōu)選地,第三預設接口描述符為智能卡類接口描述符,即第三預設接口描述符的bInterfaceClass域為0x0B,進一步地,步驟110中還可以包括USB設備向主機發(fā)送CCID類描述符;更進一步地,當?shù)谌A設接口描述符所描述的接口使用的端點不僅為端點0時,步驟110中還包括USB設備向主機發(fā)送端點描述符;
相應地,步驟104中還包括:若USB設備判斷接收到的命令為APDU命令,則執(zhí)行所述APDU命令,根據(jù)執(zhí)行結果組織應答數(shù)據(jù),判斷應答數(shù)據(jù)的長度是否超過與主機操作系統(tǒng)的類型對應的預設最大包長度,是則將應答數(shù)據(jù)按照所述預設最大包長度分包發(fā)送到主機,否則將應答數(shù)據(jù)發(fā)送到主機;具體地,當主機操作系統(tǒng)的類型為MacOS系統(tǒng)時,預設最大包長度為預設長度,例如261個字節(jié),當主機操作系統(tǒng)的類型為非MacOS系統(tǒng)時,預設最大包長度等于USB設備的預設緩存的大小,例如1024字節(jié)。
本實施例的技術方案中,USB設備對主機下發(fā)的命令進行解析,并對USB設備當前對主機操作系統(tǒng)的類型的標識進行判斷,根據(jù)主機下發(fā)的命令的類型以及USB設備當前對主機操作系統(tǒng)類型的標識,確定主機操作系統(tǒng)的類型。
進一步地,本實施例中所述的方法中還可以包括:
當USB設備上電后接收到的主機下發(fā)的第一條命令為設置地址命令時,設置版本標識為第一預設值;
當USB設備上電后接收到的主機下發(fā)的第一條命令為獲取設備描述符命令時,設置版本標識為第二預設值;
相應地,步驟106之后還包括:USB設備檢查版本標識,若為第一預設值則標識主機操作系統(tǒng)的版本為第一預設版本,若為第二預設值則標識主機操作系統(tǒng)的版本為第二預設版本;
其中,版本標識的初始值為第一預設值和第二預設值之外的其他值;
本實施例中,例如,設置地址指令為0x 00 05 XX XX 00 00 00 00;獲取設備描述符命令為0x 80 06 00 01 00 00 XX XX。
實施例3
本實施例提供一種USB設備,如圖2所示,包括:
接收模塊301,用于USB設備上電后,接收主機下發(fā)的命令;
發(fā)送模塊302,用于當接收模塊301接收到主機下發(fā)的獲取字符串描述符命令時,向主機發(fā)送相應的字符串描述符,當接收模塊301接收到主機下發(fā)的獲取配置描述符命令時,向主機發(fā)送相應的配置描述符和接口描述符;
第一標識模塊303,用于當接收模塊301接收到APDU命令之前,先接收到主機下發(fā)的獲取字符串描述符命令,后接收到主機下發(fā)的獲取配置描述符命令時,標識主機操作系統(tǒng)的類型為MacOS系統(tǒng);
第二標識模塊304,用于當接收模塊301接收APDU命令之前先接收到主機下發(fā)的獲取配置描述符命令,后接收到主機下發(fā)的獲取字符串描述符命令時,標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
進一步地,本實施例所述的USB設備中還可以包括:
第三標識模塊305,用于在第一標識模塊303標識主機操作系統(tǒng)的類型為MacOS系統(tǒng)之后,若接收模塊301在USB設備上電后接收到的主機下發(fā)的第一條命令為設置地址命令,則標識主機操作系統(tǒng)的版本為第一預設版本;
第四標識模塊306,用于在第一標識模塊303標識主機操作系統(tǒng)的類型為MacOS系統(tǒng)之后,若接收模塊301在USB設備上電后接收到的主機下發(fā)的第一條命令為獲取設備描述符命令,則標識主機操作系統(tǒng)的版本為第二預設版本。
具體地,本實施例所述的USB設備,還包括:第五標識模塊,用于USB設備上電后,標識主機操作系統(tǒng)的類型為未知;相應地:
第一標識模塊303具體包括:
第一判斷單元,用于當接收模塊301接收到主機下發(fā)的獲取字符串描述符命令時,判斷主機操作系統(tǒng)的類型是否為未知;
第一標識單元,用于當?shù)谝慌袛鄦卧袛嘀鳈C操作系統(tǒng)的類型為未知時,標識主機操作系統(tǒng)的類型為MacOS系統(tǒng);
第二標識模塊304具體包括:
第二判斷單元,用于當接收模塊301接收到主機下發(fā)的獲取配置描述符命令時,判斷主機操作系統(tǒng)的類型是否為未知;
第二標識單元,用于當?shù)诙袛鄦卧袛嘀鳈C操作系統(tǒng)的類型為未知時,標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
進一步地,USB設備中還包括:設置模塊,用于當接收模塊301在USB設備上電后接收到的主機下發(fā)的第一條命令為設置地址命令時,設置版本標識為第一預設值;當接收模塊301在USB設備上電后接收到的主機下發(fā)的第一條命令為獲取設備描述符命令時,設置版本標識為第二預設值;相應地,第一標識單元還用于:檢查版本標識,若版本標識為第一預設值,則標識主機操作系統(tǒng)的版本為第一預設版本,若版本標識為第二預設值,則標識主機操作系統(tǒng)的版本為第二預設版本。
或者,本實施例所述的USB設備,還包括:復位模塊,用于USB設備上電后,復位第一接收標志和第二接收標志;相應地:
第一標識模塊303具體包括:
第一判斷單元,用于當接收模塊301接收到主機下發(fā)的獲取字符串描述符命令時,置位第一接收標志,判斷第二接收標志是否被置位;
第一標識單元,用于當?shù)谝慌袛鄦卧袛嗟诙邮諛酥疚幢恢梦粫r,標識主機操作系統(tǒng)的類型為MacOS系統(tǒng);
第二標識模塊304具體包括:
第二判斷單元,用于當接收模塊301接收到主機下發(fā)的獲取配置描述符命令時,置位第二接收標志,判斷第一接收標志是否被置位;
第二標識單元,用于當?shù)诙袛鄦卧袛嗟谝唤邮諛酥疚幢恢梦粫r,標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
具體地,本實施例中,發(fā)送模塊302可以具體用于:當接收模塊301接收到主機下發(fā)的獲取配置描述符命令時,判斷主機操作系統(tǒng)的類型,若為MacOS系統(tǒng)則向主機發(fā)送預設配置描述符和第一預設接口描述符,若為非MacOS系統(tǒng)則向主機發(fā)送預設配置描述符和不同于第一預設描述符的第二預設接口描述符。
或者,發(fā)送模塊302具體用于:當接收模塊301接收到主機下發(fā)的獲取配置描述符命令時,向主機發(fā)送預設配置描述符和第三預設接口描述符;
進一步地,接收模塊301還用于:接收主機下發(fā)的APDU命令;USB設備中還包括:執(zhí)行模塊,用于當接收模塊301接收到主機下發(fā)的APDU命令時,執(zhí)行接收模塊301接收到的APDU命令,根據(jù)執(zhí)行結果組織應答數(shù)據(jù),判斷應答數(shù)據(jù)的長度是否超過與主機操作系統(tǒng)的類型對應的預設最大包長度,是則將應答數(shù)據(jù)按照所述預設最大包長度分包發(fā)送到主機,否則將應答數(shù)據(jù)發(fā)送到主機。
實施例4
本實施例提供一種USB設備識別MacOS系統(tǒng)的方法,包括:
步驟B1、USB設備上電;
步驟B2、所述USB設備等待接收主機下發(fā)的命令;
當接收到主機下發(fā)的獲取字符串描述符命令時,向主機發(fā)送相應的字符串描述符;
所述方法還包括:當所述USB設備上電后首次接收到獲取字符串描述符命令時,若所述獲取字符串描述符命令中的獲取長度為預設字節(jié)數(shù)則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
進一步地,本實施例中:
所述步驟B1中還包括:所述USB設備標識主機操作系統(tǒng)的類型為未知;
所述當所述USB設備上電后首次接收到獲取字符串描述符命令時,若所述獲取字符串描述符命令中的獲取長度為預設字節(jié)數(shù)則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng),具體包括:
步驟1-1、當所述USB設備接收到主機下發(fā)的獲取字符串描述符命令時,檢查主機操作系統(tǒng)的類型是否為未知,是則執(zhí)行步驟1-2,否則向主機發(fā)送相應的字符串描述符;
步驟1-2、所述USB設備判斷獲取字符串描述符命令中的獲取長度是否為預設字節(jié)數(shù),是則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
或者,所述步驟B1中還包括:所述USB設備復位接收標志;
所述當所述USB設備上電后首次接收到獲取字符串描述符命令時,若所述獲取字符串描述符命令中的獲取長度為預設字節(jié)數(shù)則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng),具體包括:
步驟2-1、當所述USB設備接收到主機下發(fā)的獲取字符串描述符命令時,檢查所述接收標志,若所述接收標志未被置位則置位所述接收標志,執(zhí)行步驟2-2;
步驟2-2、所述USB設備判斷獲取字符串描述符命令中的獲取長度是否為預設字節(jié)數(shù),是則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
進一步地,本實施例中,標識主機操作系統(tǒng)的類型為MacOS系統(tǒng)之后還包括:若所述USB設備上電后接收到主機下發(fā)的第一條命令為設置地址命令,則標識主機操作系統(tǒng)的版本為第一預設版本,若所述USB設備上電后接收到主機下發(fā)的第一條命令為獲取設備描述符命令,則標識主機操作系統(tǒng)的版本為第二預設版本。
實施例5
本實施例提供一種USB設備識別MacOS系統(tǒng)的方法,如圖3所示,包括:
步驟201、USB設備上電;
步驟202、USB設備標識主機操作系統(tǒng)的類型為未知;
步驟203、USB設備接收主機下發(fā)的命令;
步驟204、USB設備判斷接收到的命令的類型,若為獲取字符串描述符命令則執(zhí)行步驟206,否則執(zhí)行步驟205;
步驟205、USB設備根據(jù)接收到的命令執(zhí)行相應操作,返回步驟203;
優(yōu)選地,USB設備可以根據(jù)主機操作系統(tǒng)的類型,執(zhí)行與接收到的命令相應的操作。
步驟206、USB設備判斷主機操作系統(tǒng)的類型是否為未知,是則執(zhí)行步驟207,否則執(zhí)行步驟210;
步驟207、USB設備判斷獲取字符串描述符命令中的獲取長度是否為預設字節(jié)數(shù),是則執(zhí)行步驟208,否則執(zhí)行步驟209;
具體地,獲取字符串描述符命令的第7個字節(jié)為獲取長度,預設字節(jié)數(shù)為2個字節(jié)。
步驟208、USB設備標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),執(zhí)行步驟210;
步驟209、USB設備標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng),執(zhí)行步驟210;
步驟210、USB設備向主機發(fā)送相應的字符串描述符,返回步驟203。
進一步地,步驟204中還可以包括:若USB設備判斷接收到的命令為獲取配置描述符命令,則向主機發(fā)送相應的配置描述符和接口描述符,返回步驟203。
本實施例中,USB設備向主機發(fā)送相應的配置描述符和接口描述符可以具體包括:
步驟a、USB設備判斷主機操作系統(tǒng)的類型,若為MacOS系統(tǒng)則執(zhí)行步驟b,若為非MacOS系統(tǒng)則執(zhí)行步驟c;
進一步地,若主機操作系統(tǒng)的類型為未知,則執(zhí)行步驟b或執(zhí)行步驟c;
步驟b、USB設備判斷獲取配置描述符命令中的獲取長度是否大于配置描述符的長度,是則向主機發(fā)送預設配置描述符和第一預設接口描述符,否則向主機發(fā)送預設配置描述符的前N個字節(jié),N等于所述獲取長度;
優(yōu)選地,配置描述符的長度為9個字節(jié);
例如,獲取長度為4個字節(jié),則將預設配置描述符的前4個字節(jié)返回給主機。
步驟c、USB設備判斷獲取配置描述符命令中的獲取長度是否大于配置描述符的長度,是則向主機發(fā)送預設配置描述符和第二預設接口描述符,否則向主機發(fā)送預設配置描述符的前N個字節(jié),N等于所述獲取長度;
例如,獲取長度為9個字節(jié),則將預設配置描述符返回給主機。
具體地,第一預設接口描述符不同于第二預設接口描述符;
優(yōu)選地,第一預設接口描述符為智能卡類接口描述符,即第一預設接口描述符的bInterfaceClass域為0x0B;第二預設接口描述符為大數(shù)據(jù)存儲類接口描述符,即第二預設接口描述符的bInterfaceClass域為0x08。
進一步地,當主機操作系統(tǒng)的類型為MacOS系統(tǒng)時,USB設備向主機發(fā)送相應的配置描述符和接口描述符時還可以包括USB設備向主機發(fā)送CCID類描述符;
更進一步地,當主機操作系統(tǒng)的類型為MacOS系統(tǒng)時,若第一預設接口描述符所描述的接口使用的端點不僅為端點0,則USB設備向主機發(fā)送相應的配置描述符和接口描述符時還包括USB設備向主機發(fā)送端點描述符;當USB設備判斷主機操作系統(tǒng)的類型為非MacOS系統(tǒng)時,若第二預設接口描述符所描述的接口使用的端點不僅為端點0,則步驟USB設備向主機發(fā)送相應的配置描述符和接口描述符時還包括USB設備向主機發(fā)送端點描述符。
或者USB設備向主機發(fā)送相應的配置描述符和接口描述符具體包括:USB設備向主機發(fā)送預設配置描述符和第三預設接口描述符;優(yōu)選地,第三預設接口描述符為智能卡類接口描述符,即第三預設接口描述符的bInterfaceClass域為0x0B,進一步地,USB設備向主機發(fā)送相應的配置描述符和接口描述符時還可以包括USB設備向主機發(fā)送CCID類描述符;更進一步地,當?shù)谌A設接口描述符所描述的接口使用的端點不僅為端點0時,USB設備向主機發(fā)送相應的配置描述符和接口描述符時還包括USB設備向主機發(fā)送端點描述符;;
相應地,步驟204中還包括:若USB設備判斷接收到的命令為APDU命令,則執(zhí)行所述APDU命令,根據(jù)執(zhí)行結果組織應答數(shù)據(jù),判斷應答數(shù)據(jù)的長度是否超過與主機操作系統(tǒng)的類型對應的預設最大包長度,是則將應答數(shù)據(jù)按照所述預設最大包長度分包發(fā)送到主機,否則將應答數(shù)據(jù)發(fā)送到主機;具體地,當主機操作系統(tǒng)的類型為MacOS系統(tǒng)時,預設最大包長度為預設長度,例如261個字節(jié),當主機操作系統(tǒng)的類型為非MacOS系統(tǒng)時,預設最大包長度等于USB設備的預設緩存的大小,例如1024字節(jié)。
本實施例的技術方案中,USB設備對主機下發(fā)的命令進行解析,并對USB設備當前對主機操作系統(tǒng)的類型的標識進行判斷,根據(jù)主機下發(fā)的命令的類型、命令中的獲取長度以及USB設備當前對主機操作系統(tǒng)類型的標識,確定主機操作系統(tǒng)的類型。
進一步地,本實施例中所述的方法中還可以包括:
當USB設備上電后接收到的主機下發(fā)的第一條命令為設置地址命令時,設置版本標識為第一預設值;
當USB設備上電后接收到的主機下發(fā)的第一條命令為獲取設備描述符命令時,設置版本標識為第二預設值;
相應地,步驟208之后還包括:USB設備檢查版本標識,若為第一預設值則標識主機操作系統(tǒng)的版本為第一預設版本,若為第二預設值則標識主機操作系統(tǒng)的版本為第二預設版本;
其中,版本標識的初始值為第一預設值和第二預設值之外的其他值;
本實施例中,例如,設置地址指令為0x 00 05 XX XX 00 00 00 00;獲取設備描述符命令為0x 80 06 00 01 00 00 XX XX。
實施例6
本實施例提供一種USB設備,如圖4所示,包括:
接收模塊401,用于USB設備上電后,接收主機下發(fā)的獲取字符串描述符命令;
發(fā)送模塊402,用于在接收模塊401接收到主機下發(fā)的獲取字符串描述符命令后,向主機發(fā)送相應的字符串描述符;
第一標識模塊403,用于當接收模塊401在USB設備上電后首次接收到獲取字符串描述符命令時,若獲取字符串描述符命令中的獲取長度為預設字節(jié)數(shù)則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
進一步地,本實施例所述的USB設備中還可以包括:
第二標識模塊404,用于在第一標識模塊403標識主機操作系統(tǒng)的類型為MacOS系統(tǒng)之后,若接收模塊401在USB設備上電后接收到的主機下發(fā)的第一條命令為設置地址命令,則標識主機操作系統(tǒng)的版本為第一預設版本;
第三標識模塊405,用于第一標識模塊403標識主機操作系統(tǒng)的類型為MacOS系統(tǒng)之后,若接收模塊401在USB設備上電后接收到的主機下發(fā)的第一條命令為獲取設備描述符命令,則標識主機操作系統(tǒng)的版本為第二預設版本。
具體地,本實施例所述的USB設備,還包括:第四標識模塊,用于在USB設備上電后,標識主機操作系統(tǒng)的類型為未知;相應地,第一標識模塊403具體包括:
判斷單元,用于當接收模塊401接收到主機下發(fā)的獲取字符串描述符命令時,判斷主機操作系統(tǒng)的類型是否為未知;
標識單元,用于當判斷單元判斷主機操作系統(tǒng)的類型為未知時,判斷接收模塊401接收到的獲取字符串描述符命令中的獲取長度是否為預設字節(jié)數(shù),是則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
進一步地,USB設備中還包括:設置模塊,用于當接收模塊401在USB設備上電后接收到的主機下發(fā)的第一條命令為設置地址命令時,設置版本標識為第一預設值;當接收模塊401在USB設備上電后接收到的主機下發(fā)的第一條命令為獲取設備描述符命令時,設置版本標識為第二預設值;相應地,標識單元還用于:檢查版本標識,若版本標識為第一預設值,則標識主機操作系統(tǒng)的版本為第一預設版本,若版本標識為第二預設值,則標識主機操作系統(tǒng)的版本為第二預設版本。
或者,本實施例所述的USB設備,還包括:復位模塊,用于USB設備上電后,復位接收標志;相應地,第一標識模塊403具體包括:
判斷單元,用于當接收模塊401接收到主機下發(fā)的獲取字符串描述符命令時,判斷接收標志是否被置位;
標識單元,用于當判斷單元判斷接收標志未被置位時,判斷接收模塊401接收到的獲取字符串描述符命令中的獲取長度是否為預設字節(jié)數(shù),是則標識主機操作系統(tǒng)的類型為MacOS系統(tǒng),否則標識主機操作系統(tǒng)的類型為非MacOS系統(tǒng)。
本實施例中,接收模塊401還用于:接收主機下發(fā)的獲取配置描述符命令;相應地,發(fā)送模塊402還用于:當接收模塊401接收到主機下發(fā)的獲取配置描述符命令時,向主機發(fā)送相應的配置描述符和接口描述符;
進一步地,發(fā)送模塊402具體用于:當接收模塊401接收到主機下發(fā)的獲取配置描述符命令時,判斷主機操作系統(tǒng)的類型,若為MacOS系統(tǒng)則向主機發(fā)送預設配置描述符和第一預設接口描述符,若為非MacOS系統(tǒng)則向主機發(fā)送預設配置描述符和不同于所述第一預設描述符的第二預設接口描述符;
或者,發(fā)送模塊402具體用于:當接收模塊401接收到主機下發(fā)的獲取配置描述符命令時,向主機發(fā)送預設配置描述符和第三預設接口描述符;相應地,接收模塊401還用于:接收主機下發(fā)的APDU命令;USB設備還包括:執(zhí)行模塊,用于當接收模塊401接收到主機下發(fā)的APDU命令時,執(zhí)行接收模塊401接收到的APDU命令,根據(jù)執(zhí)行結果組織應答數(shù)據(jù),判斷應答數(shù)據(jù)的長度是否超過與主機操作系統(tǒng)的類型對應的預設最大包長度,是則將應答數(shù)據(jù)按照預設最大包長度分包發(fā)送到主機,否則將應答數(shù)據(jù)發(fā)送到主機。
以上所述的實施例只是本發(fā)明較優(yōu)選的具體實施方式,本領域的技術人員在本發(fā)明技術方案范圍內進行的通常變化和替換都應包含在本發(fā)明的保護范圍內。