国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種USB設(shè)備及其識(shí)別MacOS系統(tǒng)的方法與流程

      文檔序號(hào):11864603閱讀:485來源:國知局
      一種USB設(shè)備及其識(shí)別MacOS系統(tǒng)的方法與流程

      本發(fā)明涉及USB設(shè)備,尤其涉及一種USB設(shè)備及其識(shí)別MacOS系統(tǒng)的方法。



      背景技術(shù):

      USB協(xié)議技術(shù)是主機(jī)與外部設(shè)備連接的串行總線標(biāo)準(zhǔn),在主機(jī)(例如,個(gè)人計(jì)算機(jī)、個(gè)人數(shù)字助理以及移動(dòng)電腦等)上使用十分廣泛,支持熱插拔和即插即用,并支持總線供電,鼠標(biāo)、鍵盤、游戲手柄、掃描儀、數(shù)碼相機(jī)、打印機(jī)、硬盤、安全設(shè)備、光驅(qū)和網(wǎng)卡等幾乎所有的外圍設(shè)備都可以通過運(yùn)行USB接口與主機(jī)相連并進(jìn)行通信,USB接口已經(jīng)成為目前大多數(shù)主機(jī)外設(shè)與計(jì)算機(jī)相連的缺省接口。

      在操作系統(tǒng)平臺(tái)支持方面,MacOS系統(tǒng)及非MacOS系統(tǒng)(Windows、Linux等)都提供了對(duì)USB接口的支持。USB設(shè)備在主機(jī)進(jìn)行通信時(shí),需要準(zhǔn)確區(qū)分主機(jī)操作系統(tǒng)的類型。

      發(fā)明人在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在以下缺陷:

      隨著新版本操作系統(tǒng)的出現(xiàn),現(xiàn)有的USB設(shè)備識(shí)別主機(jī)操作系統(tǒng)的方法已不能準(zhǔn)確地識(shí)別出MacOS系統(tǒng)。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明的目的是克服現(xiàn)有技術(shù)的缺陷,提供一種USB設(shè)備及其識(shí)別MacOS系統(tǒng)的方法。

      本發(fā)明是通過下述技術(shù)方案實(shí)現(xiàn)的:

      一方面,本發(fā)明提供一種USB設(shè)備識(shí)別MacOS系統(tǒng)的方法,包括:

      步驟A1、USB設(shè)備上電;

      步驟A2、所述USB設(shè)備等待接收主機(jī)下發(fā)的命令;

      當(dāng)接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      當(dāng)接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符;

      所述方法還包括在所述USB設(shè)備接收到APDU命令之前:

      若所述USB設(shè)備先接收到主機(jī)下發(fā)的獲取字符串描述符命令,后接收到主機(jī)下發(fā)的獲取配置描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng);

      若所述USB設(shè)備先接收到主機(jī)下發(fā)的獲取配置描述符命令,后接收到主機(jī)下發(fā)的獲取字符串描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      以及與上述方法對(duì)應(yīng)的一種USB設(shè)備,包括:

      接收模塊,用于所述USB設(shè)備上電后,接收主機(jī)下發(fā)的命令;

      發(fā)送模塊,用于當(dāng)所述接收模塊接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的字符串描述符,當(dāng)所述接收模塊接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符;

      第一標(biāo)識(shí)模塊,用于當(dāng)所述接收模塊接收到APDU命令之前,先接收到主機(jī)下發(fā)的獲取字符串描述符命令,后接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng);

      第二標(biāo)識(shí)模塊,用于當(dāng)所述接收模塊接收到APDU命令之前,先接收到主機(jī)下發(fā)的獲取配置描述符命令,后接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      另一方面,本發(fā)明又提供另一種USB設(shè)備識(shí)別MacOS系統(tǒng)的方法,包括:

      步驟B1、USB設(shè)備上電;

      步驟B2、所述USB設(shè)備等待接收主機(jī)下發(fā)的命令;

      當(dāng)接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      所述方法還包括:當(dāng)所述USB設(shè)備上電后首次接收到獲取字符串描述符命令時(shí),若所述獲取字符串描述符命令中的獲取長度為預(yù)設(shè)字節(jié)數(shù)則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      以及與上述方法對(duì)應(yīng)的一種USB設(shè)備,包括:

      接收模塊,用于所述USB設(shè)備上電后,接收主機(jī)下發(fā)的獲取字符串描述符命令;

      發(fā)送模塊,用于所述接收模塊接收到主機(jī)下發(fā)的獲取字符串描述符命令后,向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      第一標(biāo)識(shí)模塊,用于當(dāng)所述接收模塊在所述USB設(shè)備上電后首次接收到獲取字符串描述符命令時(shí),若所述獲取字符串描述符命令中的獲取長度為預(yù)設(shè)字節(jié)數(shù)則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      本發(fā)明的有益效果在于:使用本發(fā)明提供的技術(shù)方案,USB設(shè)備能夠準(zhǔn)確地識(shí)別MacOS系統(tǒng)。

      附圖說明

      為了更清楚的說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

      圖1為本發(fā)明實(shí)施例2提供的一種USB設(shè)備識(shí)別MacOS系統(tǒng)的方法流程圖;

      圖2為本發(fā)明實(shí)施例3提供的一種USB設(shè)備的結(jié)構(gòu)示意圖;

      圖3為本發(fā)明實(shí)施例5提供的一種USB設(shè)備識(shí)別MacOS系統(tǒng)的方法流程圖;

      圖4為本發(fā)明實(shí)施例6提供的一種USB設(shè)備的結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      下面將結(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ù)的范圍。

      實(shí)施例1

      本實(shí)施例提供一種USB設(shè)備識(shí)別MacOS系統(tǒng)的方法,包括:

      步驟A1、USB設(shè)備上電;

      步驟A2、所述USB設(shè)備等待接收主機(jī)下發(fā)的命令;

      當(dāng)接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      當(dāng)接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符;

      所述方法還包括在所述USB設(shè)備接收到APDU命令之前:

      若所述USB設(shè)備先接收到主機(jī)下發(fā)的獲取字符串描述符命令,后接收到主機(jī)下發(fā)的獲取配置描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng);

      若所述USB設(shè)備先接收到主機(jī)下發(fā)的獲取配置描述符命令,后接收到主機(jī)下發(fā)的獲取字符串描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      進(jìn)一步地,本實(shí)施例中:

      所述步驟A1中還包括:所述USB設(shè)備標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為未知;

      所述若所述USB設(shè)備先接收到主機(jī)下發(fā)的獲取字符串描述符命令,后接收到主機(jī)下發(fā)的獲取配置描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),具體包括:當(dāng)所述USB設(shè)備接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),判斷主機(jī)操作系統(tǒng)的類型是否為未知,是則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),向主機(jī)發(fā)送相應(yīng)的字符串描述符,否則向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      所述若所述USB設(shè)備先接收到主機(jī)下發(fā)的獲取配置描述符命令,后接收到主機(jī)下發(fā)的獲取字符串描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng),具體包括:當(dāng)所述USB設(shè)備接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),檢查主機(jī)操作系統(tǒng)的類型是否為未知,是則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng),向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符,否則向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符。

      或者,所述步驟A1中還包括:所述USB設(shè)備復(fù)位第一接收標(biāo)志和第二接收標(biāo)志;

      所述若所述USB設(shè)備先接收到主機(jī)下發(fā)的獲取字符串描述符命令,后接收到主機(jī)下發(fā)的獲取配置描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),具體包括:當(dāng)所述USB設(shè)備接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),置位所述第一接收標(biāo)志,判斷所述第二接收標(biāo)志是否被置位,是則向主機(jī)發(fā)送相應(yīng)的字符串描述符,否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      所述若所述USB設(shè)備先接收到主機(jī)下發(fā)的獲取配置描述符命令,后接收到主機(jī)下發(fā)的獲取字符串描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng),具體包括:當(dāng)所述USB設(shè)備接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),置位所述第二接收標(biāo)志,判斷所述第一標(biāo)志是否被置位,是則向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符,否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng),向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符。

      進(jìn)一步地,本實(shí)施例中,標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)之后還包括:若所述USB設(shè)備上電后接收到主機(jī)下發(fā)的第一條命令為設(shè)置地址命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第一預(yù)設(shè)版本,若所述USB設(shè)備上電后接收到主機(jī)下發(fā)的第一條命令為獲取設(shè)備描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第二預(yù)設(shè)版本。

      優(yōu)選的,本發(fā)明所述的第一預(yù)設(shè)版本為MacOS x10.11,本發(fā)明所述的第二預(yù)設(shè)版本為在MacOS x10.11之前發(fā)布的MacOS的版本,包括:MacOS x10.6、MacOS x10.7、MacOS x10.8、MacOS x10.9、MacOS x10.10等。

      實(shí)施例2

      本實(shí)施例提供一種USB設(shè)備識(shí)別MacOS系統(tǒng)的方法,如圖1所示,包括:

      步驟101、USB設(shè)備上電;

      步驟102、USB設(shè)備標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為未知;

      具體地,USB設(shè)備可以通過設(shè)置預(yù)設(shè)標(biāo)識(shí)位來標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型,當(dāng)預(yù)設(shè)標(biāo)識(shí)位的取值為第一預(yù)設(shè)值時(shí),表示主機(jī)操作系統(tǒng)的類型為未知;例如,第一預(yù)設(shè)值可以為0。

      步驟103、USB設(shè)備接收主機(jī)下發(fā)的命令;

      步驟104、USB設(shè)備判斷接收到的命令的類型,若為獲取字符串描述符命令則執(zhí)行步驟105,若為獲取配置描述符命令則執(zhí)行步驟108,否則執(zhí)行步驟111;

      具體地,獲取字符串描述符命令和獲取配置描述符命令為主機(jī)在USB設(shè)備枚舉過程中采用控制傳輸方式向USB設(shè)備下發(fā)的命令。

      USB設(shè)備具體根據(jù)命令中的bmRequestType域(命令的第1個(gè)字節(jié))和bRequest域(命令的第2個(gè)字節(jié))判斷命令的類型,當(dāng)bmRequestType域?yàn)?x80,bRequest域?yàn)镚ET_DESCRIPTOR的編碼值0x06時(shí),USB設(shè)備判定命令為獲取描述符命令(包括獲取USB設(shè)備描述符命令、獲取配置描述符命令、獲取字符串描述符命令、獲取接口描述符命令、獲取端點(diǎn)描述符命令、獲取集線器類描述符命令、獲取人機(jī)接口類描述符命令等)。

      USB設(shè)備進(jìn)一步根據(jù)命令中的wValue域(長度為2字節(jié),具體為命令的第3個(gè)、第4個(gè)字節(jié))的高字節(jié)判斷獲取描述符命令的具體類型,當(dāng)wValue域的高字節(jié)(命令的第3個(gè)字節(jié))為0x03時(shí),USB設(shè)備判定獲取描述符命令具體為獲取字符串描述符命令,當(dāng)wValue域的高字節(jié)為0x02時(shí),USB設(shè)備判定獲取描述符命令具體為獲取配置描述符命令。

      步驟105、USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型是否為未知,是則執(zhí)行步驟106,否則執(zhí)行步驟107;

      具體地,USB設(shè)備可以通過設(shè)置預(yù)設(shè)標(biāo)識(shí)位來標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型,當(dāng)預(yù)設(shè)標(biāo)識(shí)位的取值為第一預(yù)設(shè)值時(shí),表示主機(jī)操作系統(tǒng)的類型為未知;相應(yīng)地,USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型是否為未知,可以具體為:USB設(shè)備判斷預(yù)設(shè)標(biāo)識(shí)位的取值是否為第一預(yù)設(shè)值,是則主機(jī)操作系統(tǒng)的類型為未知,否則主機(jī)操作系統(tǒng)的類型不為未知;例如,第一預(yù)設(shè)值可以為0。

      步驟106、USB設(shè)備標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),執(zhí)行步驟107;

      具體地,USB設(shè)備可以通過設(shè)置預(yù)設(shè)標(biāo)識(shí)位來標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型,當(dāng)預(yù)設(shè)標(biāo)識(shí)位的取值為第二預(yù)設(shè)值時(shí),表示主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng);例如第二預(yù)設(shè)值可以為MacOS。

      步驟107、USB設(shè)備向主機(jī)發(fā)送相應(yīng)的字符串描述符,返回步驟103;

      具體地,主機(jī)通過獲取字符串描述符命令中的wValue域(長度為2字節(jié),獲取字符串描述符命令的第3個(gè)、第4個(gè)字節(jié))的低字節(jié)(獲取字符串描述符命令的第3個(gè)字節(jié))指定字符串描述符索引;步驟107具體為:USB設(shè)備根據(jù)獲取字符串描述符命令中的字符串描述符索引向主機(jī)發(fā)送相應(yīng)的字符串描述符。

      進(jìn)一步地,USB設(shè)備根據(jù)獲取字符串描述符命令中字符串描述符索引向主機(jī)發(fā)送相應(yīng)的字符串描述符,具體包括:

      當(dāng)字符串描述符索引為0x00時(shí),USB設(shè)備向主機(jī)發(fā)送表示語言ID的字符串描述符;

      當(dāng)字符串描述符索引不為0x00時(shí),USB設(shè)備向主機(jī)發(fā)送表示字符串編碼的字符串描述符;例如,當(dāng)字符串描述符索引為0x01時(shí),USB設(shè)備向主機(jī)發(fā)送表示廠商名稱的字符串描述符;當(dāng)字符串描述符索引為0x02時(shí),USB設(shè)備向主機(jī)發(fā)送表示USB設(shè)備名稱的字符串描述符等。

      具體地,字符串描述符的格式為bLength域+bDescriptorType域+bStrings域,其中:

      bLength域的大小為1個(gè)字節(jié),值為數(shù)字,表示描述符的長度;

      bDescriptorType域的大小為1個(gè)字節(jié),值為0x03,表示描述符的類型為字符串描述符;

      bStrings域的大小為N個(gè)字節(jié),值為數(shù)字,用于描述信息;表示語言ID的字符描述串的bStrings域具體為雙字節(jié)語言ID的數(shù)組:wLANGID[0]~wLANGID[x],表示語言標(biāo)識(shí)碼0~語言標(biāo)識(shí)碼x,用于描述設(shè)備支持的語言;表示字符串編碼的字符串描述符的bStrings域具體為UNICODE編碼的字符串,用于描述廠商名稱、設(shè)備名稱或序列號(hào)等信息。

      步驟108、USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型是否為未知,是則執(zhí)行步驟109,否則執(zhí)行步驟110;

      具體地,USB設(shè)備可以通過設(shè)置預(yù)設(shè)標(biāo)識(shí)位來標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型,當(dāng)預(yù)設(shè)標(biāo)識(shí)位的取值為第一預(yù)設(shè)值時(shí),表示主機(jī)操作系統(tǒng)的類型為未知;相應(yīng)地,USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型是否為未知,可以具體為:USB設(shè)備判斷預(yù)設(shè)標(biāo)識(shí)位的取值是否為第一預(yù)設(shè)值,是則主機(jī)操作系統(tǒng)的類型為未知,否則主機(jī)操作系統(tǒng)的類型不為未知;例如,第一預(yù)設(shè)值可以為0。

      步驟109、USB設(shè)備標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng),執(zhí)行步驟110;

      具體地,USB設(shè)備可以通過設(shè)置預(yù)設(shè)標(biāo)識(shí)位來標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型,當(dāng)預(yù)設(shè)標(biāo)識(shí)位的取值為第三預(yù)設(shè)值時(shí),表示主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng);例如第三預(yù)設(shè)值可以為else。

      步驟110、USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符,返回步驟103;

      本實(shí)施例中,USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符可以具體包括:

      步驟1-1、USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型,若為MacOS系統(tǒng)則執(zhí)行步驟1-2,若為非MacOS系統(tǒng)則執(zhí)行步驟1-3;

      進(jìn)一步地,若主機(jī)操作系統(tǒng)的類型為未知,則執(zhí)行步驟1-2或執(zhí)行步驟1-3;

      步驟1-2、USB設(shè)備判斷獲取配置描述符命令中的獲取長度是否大于配置描述符的長度,是則向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第一預(yù)設(shè)接口描述符,否則向主機(jī)發(fā)送預(yù)設(shè)配置描述符的前N個(gè)字節(jié),N等于所述獲取長度;

      優(yōu)選地,配置描述符的長度為9個(gè)字節(jié);

      例如,獲取長度為4個(gè)字節(jié),則將預(yù)設(shè)配置描述符的前4個(gè)字節(jié)返回給主機(jī)。

      步驟1-3、USB設(shè)備判斷獲取配置描述符命令中的獲取長度是否大于配置描述符的長度,是則向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第二預(yù)設(shè)接口描述符,否則向主機(jī)發(fā)送預(yù)設(shè)配置描述符的前N個(gè)字節(jié),N等于所述獲取長度;

      例如,獲取長度為9個(gè)字節(jié),則將預(yù)設(shè)配置描述符返回給主機(jī)。

      具體地,第一預(yù)設(shè)接口描述符不同于第二預(yù)設(shè)接口描述符;

      優(yōu)選地,第一預(yù)設(shè)接口描述符為智能卡類接口描述符,即第一預(yù)設(shè)接口描述符的bInterfaceClass域?yàn)?x0B;第二預(yù)設(shè)接口描述符為大數(shù)據(jù)存儲(chǔ)類接口描述符,即第二預(yù)設(shè)接口描述符的bInterfaceClass域?yàn)?x08。

      進(jìn)一步地,當(dāng)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)時(shí),步驟110中還可以包括USB設(shè)備向主機(jī)發(fā)送CCID類描述符;

      更進(jìn)一步地,當(dāng)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)時(shí),若第一預(yù)設(shè)接口描述符所描述的接口使用的端點(diǎn)不僅為端點(diǎn)0,則步驟110中還包括USB設(shè)備向主機(jī)發(fā)送端點(diǎn)描述符;當(dāng)USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)時(shí),若第二預(yù)設(shè)接口描述符所描述的接口使用的端點(diǎn)不僅為端點(diǎn)0,則步驟110中還包括USB設(shè)備向主機(jī)發(fā)送端點(diǎn)描述符。

      例如,當(dāng)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)時(shí),USB設(shè)備向主機(jī)返回:

      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//端點(diǎn)描述符

      0x 07 05 02 02 40 00 00//端點(diǎn)描述符

      當(dāng)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)時(shí),USB設(shè)備向主機(jī)返回:

      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//端點(diǎn)描述符

      0x 07 05 02 02 40 00 00//端點(diǎn)描述符

      步驟111、USB設(shè)備根據(jù)接收到的命令執(zhí)行相應(yīng)操作,返回步驟103。

      優(yōu)選地,USB設(shè)備可以根據(jù)主機(jī)操作系統(tǒng)的類型,執(zhí)行與接收到的命令相應(yīng)的操作。

      本實(shí)施例中,USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符還可以具體包括:USB設(shè)備向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第三預(yù)設(shè)接口描述符;優(yōu)選地,第三預(yù)設(shè)接口描述符為智能卡類接口描述符,即第三預(yù)設(shè)接口描述符的bInterfaceClass域?yàn)?x0B,進(jìn)一步地,步驟110中還可以包括USB設(shè)備向主機(jī)發(fā)送CCID類描述符;更進(jìn)一步地,當(dāng)?shù)谌A(yù)設(shè)接口描述符所描述的接口使用的端點(diǎn)不僅為端點(diǎn)0時(shí),步驟110中還包括USB設(shè)備向主機(jī)發(fā)送端點(diǎn)描述符;

      相應(yīng)地,步驟104中還包括:若USB設(shè)備判斷接收到的命令為APDU命令,則執(zhí)行所述APDU命令,根據(jù)執(zhí)行結(jié)果組織應(yīng)答數(shù)據(jù),判斷應(yīng)答數(shù)據(jù)的長度是否超過與主機(jī)操作系統(tǒng)的類型對(duì)應(yīng)的預(yù)設(shè)最大包長度,是則將應(yīng)答數(shù)據(jù)按照所述預(yù)設(shè)最大包長度分包發(fā)送到主機(jī),否則將應(yīng)答數(shù)據(jù)發(fā)送到主機(jī);具體地,當(dāng)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)時(shí),預(yù)設(shè)最大包長度為預(yù)設(shè)長度,例如261個(gè)字節(jié),當(dāng)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)時(shí),預(yù)設(shè)最大包長度等于USB設(shè)備的預(yù)設(shè)緩存的大小,例如1024字節(jié)。

      本實(shí)施例的技術(shù)方案中,USB設(shè)備對(duì)主機(jī)下發(fā)的命令進(jìn)行解析,并對(duì)USB設(shè)備當(dāng)前對(duì)主機(jī)操作系統(tǒng)的類型的標(biāo)識(shí)進(jìn)行判斷,根據(jù)主機(jī)下發(fā)的命令的類型以及USB設(shè)備當(dāng)前對(duì)主機(jī)操作系統(tǒng)類型的標(biāo)識(shí),確定主機(jī)操作系統(tǒng)的類型。

      進(jìn)一步地,本實(shí)施例中所述的方法中還可以包括:

      當(dāng)USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為設(shè)置地址命令時(shí),設(shè)置版本標(biāo)識(shí)為第一預(yù)設(shè)值;

      當(dāng)USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為獲取設(shè)備描述符命令時(shí),設(shè)置版本標(biāo)識(shí)為第二預(yù)設(shè)值;

      相應(yīng)地,步驟106之后還包括:USB設(shè)備檢查版本標(biāo)識(shí),若為第一預(yù)設(shè)值則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第一預(yù)設(shè)版本,若為第二預(yù)設(shè)值則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第二預(yù)設(shè)版本;

      其中,版本標(biāo)識(shí)的初始值為第一預(yù)設(shè)值和第二預(yù)設(shè)值之外的其他值;

      本實(shí)施例中,例如,設(shè)置地址指令為0x 00 05 XX XX 00 00 00 00;獲取設(shè)備描述符命令為0x 80 06 00 01 00 00 XX XX。

      實(shí)施例3

      本實(shí)施例提供一種USB設(shè)備,如圖2所示,包括:

      接收模塊301,用于USB設(shè)備上電后,接收主機(jī)下發(fā)的命令;

      發(fā)送模塊302,用于當(dāng)接收模塊301接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的字符串描述符,當(dāng)接收模塊301接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符;

      第一標(biāo)識(shí)模塊303,用于當(dāng)接收模塊301接收到APDU命令之前,先接收到主機(jī)下發(fā)的獲取字符串描述符命令,后接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng);

      第二標(biāo)識(shí)模塊304,用于當(dāng)接收模塊301接收APDU命令之前先接收到主機(jī)下發(fā)的獲取配置描述符命令,后接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      進(jìn)一步地,本實(shí)施例所述的USB設(shè)備中還可以包括:

      第三標(biāo)識(shí)模塊305,用于在第一標(biāo)識(shí)模塊303標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)之后,若接收模塊301在USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為設(shè)置地址命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第一預(yù)設(shè)版本;

      第四標(biāo)識(shí)模塊306,用于在第一標(biāo)識(shí)模塊303標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)之后,若接收模塊301在USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為獲取設(shè)備描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第二預(yù)設(shè)版本。

      具體地,本實(shí)施例所述的USB設(shè)備,還包括:第五標(biāo)識(shí)模塊,用于USB設(shè)備上電后,標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為未知;相應(yīng)地:

      第一標(biāo)識(shí)模塊303具體包括:

      第一判斷單元,用于當(dāng)接收模塊301接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),判斷主機(jī)操作系統(tǒng)的類型是否為未知;

      第一標(biāo)識(shí)單元,用于當(dāng)?shù)谝慌袛鄦卧袛嘀鳈C(jī)操作系統(tǒng)的類型為未知時(shí),標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng);

      第二標(biāo)識(shí)模塊304具體包括:

      第二判斷單元,用于當(dāng)接收模塊301接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),判斷主機(jī)操作系統(tǒng)的類型是否為未知;

      第二標(biāo)識(shí)單元,用于當(dāng)?shù)诙袛鄦卧袛嘀鳈C(jī)操作系統(tǒng)的類型為未知時(shí),標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      進(jìn)一步地,USB設(shè)備中還包括:設(shè)置模塊,用于當(dāng)接收模塊301在USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為設(shè)置地址命令時(shí),設(shè)置版本標(biāo)識(shí)為第一預(yù)設(shè)值;當(dāng)接收模塊301在USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為獲取設(shè)備描述符命令時(shí),設(shè)置版本標(biāo)識(shí)為第二預(yù)設(shè)值;相應(yīng)地,第一標(biāo)識(shí)單元還用于:檢查版本標(biāo)識(shí),若版本標(biāo)識(shí)為第一預(yù)設(shè)值,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第一預(yù)設(shè)版本,若版本標(biāo)識(shí)為第二預(yù)設(shè)值,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第二預(yù)設(shè)版本。

      或者,本實(shí)施例所述的USB設(shè)備,還包括:復(fù)位模塊,用于USB設(shè)備上電后,復(fù)位第一接收標(biāo)志和第二接收標(biāo)志;相應(yīng)地:

      第一標(biāo)識(shí)模塊303具體包括:

      第一判斷單元,用于當(dāng)接收模塊301接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),置位第一接收標(biāo)志,判斷第二接收標(biāo)志是否被置位;

      第一標(biāo)識(shí)單元,用于當(dāng)?shù)谝慌袛鄦卧袛嗟诙邮諛?biāo)志未被置位時(shí),標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng);

      第二標(biāo)識(shí)模塊304具體包括:

      第二判斷單元,用于當(dāng)接收模塊301接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),置位第二接收標(biāo)志,判斷第一接收標(biāo)志是否被置位;

      第二標(biāo)識(shí)單元,用于當(dāng)?shù)诙袛鄦卧袛嗟谝唤邮諛?biāo)志未被置位時(shí),標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      具體地,本實(shí)施例中,發(fā)送模塊302可以具體用于:當(dāng)接收模塊301接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),判斷主機(jī)操作系統(tǒng)的類型,若為MacOS系統(tǒng)則向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第一預(yù)設(shè)接口描述符,若為非MacOS系統(tǒng)則向主機(jī)發(fā)送預(yù)設(shè)配置描述符和不同于第一預(yù)設(shè)描述符的第二預(yù)設(shè)接口描述符。

      或者,發(fā)送模塊302具體用于:當(dāng)接收模塊301接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第三預(yù)設(shè)接口描述符;

      進(jìn)一步地,接收模塊301還用于:接收主機(jī)下發(fā)的APDU命令;USB設(shè)備中還包括:執(zhí)行模塊,用于當(dāng)接收模塊301接收到主機(jī)下發(fā)的APDU命令時(shí),執(zhí)行接收模塊301接收到的APDU命令,根據(jù)執(zhí)行結(jié)果組織應(yīng)答數(shù)據(jù),判斷應(yīng)答數(shù)據(jù)的長度是否超過與主機(jī)操作系統(tǒng)的類型對(duì)應(yīng)的預(yù)設(shè)最大包長度,是則將應(yīng)答數(shù)據(jù)按照所述預(yù)設(shè)最大包長度分包發(fā)送到主機(jī),否則將應(yīng)答數(shù)據(jù)發(fā)送到主機(jī)。

      實(shí)施例4

      本實(shí)施例提供一種USB設(shè)備識(shí)別MacOS系統(tǒng)的方法,包括:

      步驟B1、USB設(shè)備上電;

      步驟B2、所述USB設(shè)備等待接收主機(jī)下發(fā)的命令;

      當(dāng)接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      所述方法還包括:當(dāng)所述USB設(shè)備上電后首次接收到獲取字符串描述符命令時(shí),若所述獲取字符串描述符命令中的獲取長度為預(yù)設(shè)字節(jié)數(shù)則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      進(jìn)一步地,本實(shí)施例中:

      所述步驟B1中還包括:所述USB設(shè)備標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為未知;

      所述當(dāng)所述USB設(shè)備上電后首次接收到獲取字符串描述符命令時(shí),若所述獲取字符串描述符命令中的獲取長度為預(yù)設(shè)字節(jié)數(shù)則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng),具體包括:

      步驟1-1、當(dāng)所述USB設(shè)備接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),檢查主機(jī)操作系統(tǒng)的類型是否為未知,是則執(zhí)行步驟1-2,否則向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      步驟1-2、所述USB設(shè)備判斷獲取字符串描述符命令中的獲取長度是否為預(yù)設(shè)字節(jié)數(shù),是則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      或者,所述步驟B1中還包括:所述USB設(shè)備復(fù)位接收標(biāo)志;

      所述當(dāng)所述USB設(shè)備上電后首次接收到獲取字符串描述符命令時(shí),若所述獲取字符串描述符命令中的獲取長度為預(yù)設(shè)字節(jié)數(shù)則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng),具體包括:

      步驟2-1、當(dāng)所述USB設(shè)備接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),檢查所述接收標(biāo)志,若所述接收標(biāo)志未被置位則置位所述接收標(biāo)志,執(zhí)行步驟2-2;

      步驟2-2、所述USB設(shè)備判斷獲取字符串描述符命令中的獲取長度是否為預(yù)設(shè)字節(jié)數(shù),是則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      進(jìn)一步地,本實(shí)施例中,標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)之后還包括:若所述USB設(shè)備上電后接收到主機(jī)下發(fā)的第一條命令為設(shè)置地址命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第一預(yù)設(shè)版本,若所述USB設(shè)備上電后接收到主機(jī)下發(fā)的第一條命令為獲取設(shè)備描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第二預(yù)設(shè)版本。

      實(shí)施例5

      本實(shí)施例提供一種USB設(shè)備識(shí)別MacOS系統(tǒng)的方法,如圖3所示,包括:

      步驟201、USB設(shè)備上電;

      步驟202、USB設(shè)備標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為未知;

      步驟203、USB設(shè)備接收主機(jī)下發(fā)的命令;

      步驟204、USB設(shè)備判斷接收到的命令的類型,若為獲取字符串描述符命令則執(zhí)行步驟206,否則執(zhí)行步驟205;

      步驟205、USB設(shè)備根據(jù)接收到的命令執(zhí)行相應(yīng)操作,返回步驟203;

      優(yōu)選地,USB設(shè)備可以根據(jù)主機(jī)操作系統(tǒng)的類型,執(zhí)行與接收到的命令相應(yīng)的操作。

      步驟206、USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型是否為未知,是則執(zhí)行步驟207,否則執(zhí)行步驟210;

      步驟207、USB設(shè)備判斷獲取字符串描述符命令中的獲取長度是否為預(yù)設(shè)字節(jié)數(shù),是則執(zhí)行步驟208,否則執(zhí)行步驟209;

      具體地,獲取字符串描述符命令的第7個(gè)字節(jié)為獲取長度,預(yù)設(shè)字節(jié)數(shù)為2個(gè)字節(jié)。

      步驟208、USB設(shè)備標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),執(zhí)行步驟210;

      步驟209、USB設(shè)備標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng),執(zhí)行步驟210;

      步驟210、USB設(shè)備向主機(jī)發(fā)送相應(yīng)的字符串描述符,返回步驟203。

      進(jìn)一步地,步驟204中還可以包括:若USB設(shè)備判斷接收到的命令為獲取配置描述符命令,則向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符,返回步驟203。

      本實(shí)施例中,USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符可以具體包括:

      步驟a、USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型,若為MacOS系統(tǒng)則執(zhí)行步驟b,若為非MacOS系統(tǒng)則執(zhí)行步驟c;

      進(jìn)一步地,若主機(jī)操作系統(tǒng)的類型為未知,則執(zhí)行步驟b或執(zhí)行步驟c;

      步驟b、USB設(shè)備判斷獲取配置描述符命令中的獲取長度是否大于配置描述符的長度,是則向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第一預(yù)設(shè)接口描述符,否則向主機(jī)發(fā)送預(yù)設(shè)配置描述符的前N個(gè)字節(jié),N等于所述獲取長度;

      優(yōu)選地,配置描述符的長度為9個(gè)字節(jié);

      例如,獲取長度為4個(gè)字節(jié),則將預(yù)設(shè)配置描述符的前4個(gè)字節(jié)返回給主機(jī)。

      步驟c、USB設(shè)備判斷獲取配置描述符命令中的獲取長度是否大于配置描述符的長度,是則向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第二預(yù)設(shè)接口描述符,否則向主機(jī)發(fā)送預(yù)設(shè)配置描述符的前N個(gè)字節(jié),N等于所述獲取長度;

      例如,獲取長度為9個(gè)字節(jié),則將預(yù)設(shè)配置描述符返回給主機(jī)。

      具體地,第一預(yù)設(shè)接口描述符不同于第二預(yù)設(shè)接口描述符;

      優(yōu)選地,第一預(yù)設(shè)接口描述符為智能卡類接口描述符,即第一預(yù)設(shè)接口描述符的bInterfaceClass域?yàn)?x0B;第二預(yù)設(shè)接口描述符為大數(shù)據(jù)存儲(chǔ)類接口描述符,即第二預(yù)設(shè)接口描述符的bInterfaceClass域?yàn)?x08。

      進(jìn)一步地,當(dāng)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)時(shí),USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符時(shí)還可以包括USB設(shè)備向主機(jī)發(fā)送CCID類描述符;

      更進(jìn)一步地,當(dāng)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)時(shí),若第一預(yù)設(shè)接口描述符所描述的接口使用的端點(diǎn)不僅為端點(diǎn)0,則USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符時(shí)還包括USB設(shè)備向主機(jī)發(fā)送端點(diǎn)描述符;當(dāng)USB設(shè)備判斷主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)時(shí),若第二預(yù)設(shè)接口描述符所描述的接口使用的端點(diǎn)不僅為端點(diǎn)0,則步驟USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符時(shí)還包括USB設(shè)備向主機(jī)發(fā)送端點(diǎn)描述符。

      或者USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符具體包括:USB設(shè)備向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第三預(yù)設(shè)接口描述符;優(yōu)選地,第三預(yù)設(shè)接口描述符為智能卡類接口描述符,即第三預(yù)設(shè)接口描述符的bInterfaceClass域?yàn)?x0B,進(jìn)一步地,USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符時(shí)還可以包括USB設(shè)備向主機(jī)發(fā)送CCID類描述符;更進(jìn)一步地,當(dāng)?shù)谌A(yù)設(shè)接口描述符所描述的接口使用的端點(diǎn)不僅為端點(diǎn)0時(shí),USB設(shè)備向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符時(shí)還包括USB設(shè)備向主機(jī)發(fā)送端點(diǎn)描述符;;

      相應(yīng)地,步驟204中還包括:若USB設(shè)備判斷接收到的命令為APDU命令,則執(zhí)行所述APDU命令,根據(jù)執(zhí)行結(jié)果組織應(yīng)答數(shù)據(jù),判斷應(yīng)答數(shù)據(jù)的長度是否超過與主機(jī)操作系統(tǒng)的類型對(duì)應(yīng)的預(yù)設(shè)最大包長度,是則將應(yīng)答數(shù)據(jù)按照所述預(yù)設(shè)最大包長度分包發(fā)送到主機(jī),否則將應(yīng)答數(shù)據(jù)發(fā)送到主機(jī);具體地,當(dāng)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)時(shí),預(yù)設(shè)最大包長度為預(yù)設(shè)長度,例如261個(gè)字節(jié),當(dāng)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)時(shí),預(yù)設(shè)最大包長度等于USB設(shè)備的預(yù)設(shè)緩存的大小,例如1024字節(jié)。

      本實(shí)施例的技術(shù)方案中,USB設(shè)備對(duì)主機(jī)下發(fā)的命令進(jìn)行解析,并對(duì)USB設(shè)備當(dāng)前對(duì)主機(jī)操作系統(tǒng)的類型的標(biāo)識(shí)進(jìn)行判斷,根據(jù)主機(jī)下發(fā)的命令的類型、命令中的獲取長度以及USB設(shè)備當(dāng)前對(duì)主機(jī)操作系統(tǒng)類型的標(biāo)識(shí),確定主機(jī)操作系統(tǒng)的類型。

      進(jìn)一步地,本實(shí)施例中所述的方法中還可以包括:

      當(dāng)USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為設(shè)置地址命令時(shí),設(shè)置版本標(biāo)識(shí)為第一預(yù)設(shè)值;

      當(dāng)USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為獲取設(shè)備描述符命令時(shí),設(shè)置版本標(biāo)識(shí)為第二預(yù)設(shè)值;

      相應(yīng)地,步驟208之后還包括:USB設(shè)備檢查版本標(biāo)識(shí),若為第一預(yù)設(shè)值則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第一預(yù)設(shè)版本,若為第二預(yù)設(shè)值則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第二預(yù)設(shè)版本;

      其中,版本標(biāo)識(shí)的初始值為第一預(yù)設(shè)值和第二預(yù)設(shè)值之外的其他值;

      本實(shí)施例中,例如,設(shè)置地址指令為0x 00 05 XX XX 00 00 00 00;獲取設(shè)備描述符命令為0x 80 06 00 01 00 00 XX XX。

      實(shí)施例6

      本實(shí)施例提供一種USB設(shè)備,如圖4所示,包括:

      接收模塊401,用于USB設(shè)備上電后,接收主機(jī)下發(fā)的獲取字符串描述符命令;

      發(fā)送模塊402,用于在接收模塊401接收到主機(jī)下發(fā)的獲取字符串描述符命令后,向主機(jī)發(fā)送相應(yīng)的字符串描述符;

      第一標(biāo)識(shí)模塊403,用于當(dāng)接收模塊401在USB設(shè)備上電后首次接收到獲取字符串描述符命令時(shí),若獲取字符串描述符命令中的獲取長度為預(yù)設(shè)字節(jié)數(shù)則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      進(jìn)一步地,本實(shí)施例所述的USB設(shè)備中還可以包括:

      第二標(biāo)識(shí)模塊404,用于在第一標(biāo)識(shí)模塊403標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)之后,若接收模塊401在USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為設(shè)置地址命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第一預(yù)設(shè)版本;

      第三標(biāo)識(shí)模塊405,用于第一標(biāo)識(shí)模塊403標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng)之后,若接收模塊401在USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為獲取設(shè)備描述符命令,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第二預(yù)設(shè)版本。

      具體地,本實(shí)施例所述的USB設(shè)備,還包括:第四標(biāo)識(shí)模塊,用于在USB設(shè)備上電后,標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為未知;相應(yīng)地,第一標(biāo)識(shí)模塊403具體包括:

      判斷單元,用于當(dāng)接收模塊401接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),判斷主機(jī)操作系統(tǒng)的類型是否為未知;

      標(biāo)識(shí)單元,用于當(dāng)判斷單元判斷主機(jī)操作系統(tǒng)的類型為未知時(shí),判斷接收模塊401接收到的獲取字符串描述符命令中的獲取長度是否為預(yù)設(shè)字節(jié)數(shù),是則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      進(jìn)一步地,USB設(shè)備中還包括:設(shè)置模塊,用于當(dāng)接收模塊401在USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為設(shè)置地址命令時(shí),設(shè)置版本標(biāo)識(shí)為第一預(yù)設(shè)值;當(dāng)接收模塊401在USB設(shè)備上電后接收到的主機(jī)下發(fā)的第一條命令為獲取設(shè)備描述符命令時(shí),設(shè)置版本標(biāo)識(shí)為第二預(yù)設(shè)值;相應(yīng)地,標(biāo)識(shí)單元還用于:檢查版本標(biāo)識(shí),若版本標(biāo)識(shí)為第一預(yù)設(shè)值,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第一預(yù)設(shè)版本,若版本標(biāo)識(shí)為第二預(yù)設(shè)值,則標(biāo)識(shí)主機(jī)操作系統(tǒng)的版本為第二預(yù)設(shè)版本。

      或者,本實(shí)施例所述的USB設(shè)備,還包括:復(fù)位模塊,用于USB設(shè)備上電后,復(fù)位接收標(biāo)志;相應(yīng)地,第一標(biāo)識(shí)模塊403具體包括:

      判斷單元,用于當(dāng)接收模塊401接收到主機(jī)下發(fā)的獲取字符串描述符命令時(shí),判斷接收標(biāo)志是否被置位;

      標(biāo)識(shí)單元,用于當(dāng)判斷單元判斷接收標(biāo)志未被置位時(shí),判斷接收模塊401接收到的獲取字符串描述符命令中的獲取長度是否為預(yù)設(shè)字節(jié)數(shù),是則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為MacOS系統(tǒng),否則標(biāo)識(shí)主機(jī)操作系統(tǒng)的類型為非MacOS系統(tǒng)。

      本實(shí)施例中,接收模塊401還用于:接收主機(jī)下發(fā)的獲取配置描述符命令;相應(yīng)地,發(fā)送模塊402還用于:當(dāng)接收模塊401接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),向主機(jī)發(fā)送相應(yīng)的配置描述符和接口描述符;

      進(jìn)一步地,發(fā)送模塊402具體用于:當(dāng)接收模塊401接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),判斷主機(jī)操作系統(tǒng)的類型,若為MacOS系統(tǒng)則向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第一預(yù)設(shè)接口描述符,若為非MacOS系統(tǒng)則向主機(jī)發(fā)送預(yù)設(shè)配置描述符和不同于所述第一預(yù)設(shè)描述符的第二預(yù)設(shè)接口描述符;

      或者,發(fā)送模塊402具體用于:當(dāng)接收模塊401接收到主機(jī)下發(fā)的獲取配置描述符命令時(shí),向主機(jī)發(fā)送預(yù)設(shè)配置描述符和第三預(yù)設(shè)接口描述符;相應(yīng)地,接收模塊401還用于:接收主機(jī)下發(fā)的APDU命令;USB設(shè)備還包括:執(zhí)行模塊,用于當(dāng)接收模塊401接收到主機(jī)下發(fā)的APDU命令時(shí),執(zhí)行接收模塊401接收到的APDU命令,根據(jù)執(zhí)行結(jié)果組織應(yīng)答數(shù)據(jù),判斷應(yīng)答數(shù)據(jù)的長度是否超過與主機(jī)操作系統(tǒng)的類型對(duì)應(yīng)的預(yù)設(shè)最大包長度,是則將應(yīng)答數(shù)據(jù)按照預(yù)設(shè)最大包長度分包發(fā)送到主機(jī),否則將應(yīng)答數(shù)據(jù)發(fā)送到主機(jī)。

      以上所述的實(shí)施例只是本發(fā)明較優(yōu)選的具體實(shí)施方式,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進(jìn)行的通常變化和替換都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1