本发明涉及USB设备,尤其涉及一种USB设备及其识别MacOS系统的方法。
背景技术:
USB协议技术是主机与外部设备连接的串行总线标准,在主机(例如,个人计算机、个人数字助理以及移动电脑等)上使用十分广泛,支持热插拔和即插即用,并支持总线供电,鼠标、键盘、游戏手柄、扫描仪、数码相机、打印机、硬盘、安全设备、光驱和网卡等几乎所有的外围设备都可以通过运行USB接口与主机相连并进行通信,USB接口已经成为目前大多数主机外设与计算机相连的缺省接口。
在操作系统平台支持方面,MacOS系统及非MacOS系统(Windows、Linux等)都提供了对USB接口的支持。USB设备在主机进行通信时,需要准确区分主机操作系统的类型。
发明人在实现本发明的过程中,发现现有技术中至少存在以下缺陷:
随着新版本操作系统的出现,现有的USB设备识别主机操作系统的方法已不能准确地识别出MacOS系统。
技术实现要素:
本发明的目的是克服现有技术的缺陷,提供一种USB设备及其识别MacOS系统的方法。
本发明是通过下述技术方案实现的:
一方面,本发明提供一种USB设备识别MacOS系统的方法,包括:
步骤A1、USB设备上电;
步骤A2、所述USB设备等待接收主机下发的命令;
当接收到主机下发的获取字符串描述符命令时,向主机发送相应的字符串描述符;
当接收到主机下发的获取配置描述符命令时,向主机发送相应的配置描述符和接口描述符;
所述方法还包括在所述USB设备接收到APDU命令之前:
若所述USB设备先接收到主机下发的获取字符串描述符命令,后接收到主机下发的获取配置描述符命令,则标识主机操作系统的类型为MacOS系统;
若所述USB设备先接收到主机下发的获取配置描述符命令,后接收到主机下发的获取字符串描述符命令,则标识主机操作系统的类型为非MacOS系统。
以及与上述方法对应的一种USB设备,包括:
接收模块,用于所述USB设备上电后,接收主机下发的命令;
发送模块,用于当所述接收模块接收到主机下发的获取字符串描述符命令时,向主机发送相应的字符串描述符,当所述接收模块接收到主机下发的获取配置描述符命令时,向主机发送相应的配置描述符和接口描述符;
第一标识模块,用于当所述接收模块接收到APDU命令之前,先接收到主机下发的获取字符串描述符命令,后接收到主机下发的获取配置描述符命令时,标识主机操作系统的类型为MacOS系统;
第二标识模块,用于当所述接收模块接收到APDU命令之前,先接收到主机下发的获取配置描述符命令,后接收到主机下发的获取字符串描述符命令时,标识主机操作系统的类型为非MacOS系统。
另一方面,本发明又提供另一种USB设备识别MacOS系统的方法,包括:
步骤B1、USB设备上电;
步骤B2、所述USB设备等待接收主机下发的命令;
当接收到主机下发的获取字符串描述符命令时,向主机发送相应的字符串描述符;
所述方法还包括:当所述USB设备上电后首次接收到获取字符串描述符命令时,若所述获取字符串描述符命令中的获取长度为预设字节数则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统。
以及与上述方法对应的一种USB设备,包括:
接收模块,用于所述USB设备上电后,接收主机下发的获取字符串描述符命令;
发送模块,用于所述接收模块接收到主机下发的获取字符串描述符命令后,向主机发送相应的字符串描述符;
第一标识模块,用于当所述接收模块在所述USB设备上电后首次接收到获取字符串描述符命令时,若所述获取字符串描述符命令中的获取长度为预设字节数则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统。
本发明的有益效果在于:使用本发明提供的技术方案,USB设备能够准确地识别MacOS系统。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例2提供的一种USB设备识别MacOS系统的方法流程图;
图2为本发明实施例3提供的一种USB设备的结构示意图;
图3为本发明实施例5提供的一种USB设备识别MacOS系统的方法流程图;
图4为本发明实施例6提供的一种USB设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本实施例提供一种USB设备识别MacOS系统的方法,包括:
步骤A1、USB设备上电;
步骤A2、所述USB设备等待接收主机下发的命令;
当接收到主机下发的获取字符串描述符命令时,向主机发送相应的字符串描述符;
当接收到主机下发的获取配置描述符命令时,向主机发送相应的配置描述符和接口描述符;
所述方法还包括在所述USB设备接收到APDU命令之前:
若所述USB设备先接收到主机下发的获取字符串描述符命令,后接收到主机下发的获取配置描述符命令,则标识主机操作系统的类型为MacOS系统;
若所述USB设备先接收到主机下发的获取配置描述符命令,后接收到主机下发的获取字符串描述符命令,则标识主机操作系统的类型为非MacOS系统。
进一步地,本实施例中:
所述步骤A1中还包括:所述USB设备标识主机操作系统的类型为未知;
所述若所述USB设备先接收到主机下发的获取字符串描述符命令,后接收到主机下发的获取配置描述符命令,则标识主机操作系统的类型为MacOS系统,具体包括:当所述USB设备接收到主机下发的获取字符串描述符命令时,判断主机操作系统的类型是否为未知,是则标识主机操作系统的类型为MacOS系统,向主机发送相应的字符串描述符,否则向主机发送相应的字符串描述符;
所述若所述USB设备先接收到主机下发的获取配置描述符命令,后接收到主机下发的获取字符串描述符命令,则标识主机操作系统的类型为非MacOS系统,具体包括:当所述USB设备接收到主机下发的获取配置描述符命令时,检查主机操作系统的类型是否为未知,是则标识主机操作系统的类型为非MacOS系统,向主机发送相应的配置描述符和接口描述符,否则向主机发送相应的配置描述符和接口描述符。
或者,所述步骤A1中还包括:所述USB设备复位第一接收标志和第二接收标志;
所述若所述USB设备先接收到主机下发的获取字符串描述符命令,后接收到主机下发的获取配置描述符命令,则标识主机操作系统的类型为MacOS系统,具体包括:当所述USB设备接收到主机下发的获取字符串描述符命令时,置位所述第一接收标志,判断所述第二接收标志是否被置位,是则向主机发送相应的字符串描述符,否则标识主机操作系统的类型为MacOS系统,向主机发送相应的字符串描述符;
所述若所述USB设备先接收到主机下发的获取配置描述符命令,后接收到主机下发的获取字符串描述符命令,则标识主机操作系统的类型为非MacOS系统,具体包括:当所述USB设备接收到主机下发的获取配置描述符命令时,置位所述第二接收标志,判断所述第一标志是否被置位,是则向主机发送相应的配置描述符和接口描述符,否则标识主机操作系统的类型为非MacOS系统,向主机发送相应的配置描述符和接口描述符。
进一步地,本实施例中,标识主机操作系统的类型为MacOS系统之后还包括:若所述USB设备上电后接收到主机下发的第一条命令为设置地址命令,则标识主机操作系统的版本为第一预设版本,若所述USB设备上电后接收到主机下发的第一条命令为获取设备描述符命令,则标识主机操作系统的版本为第二预设版本。
优选的,本发明所述的第一预设版本为MacOS x10.11,本发明所述的第二预设版本为在MacOS x10.11之前发布的MacOS的版本,包括:MacOS x10.6、MacOS x10.7、MacOS x10.8、MacOS x10.9、MacOS x10.10等。
实施例2
本实施例提供一种USB设备识别MacOS系统的方法,如图1所示,包括:
步骤101、USB设备上电;
步骤102、USB设备标识主机操作系统的类型为未知;
具体地,USB设备可以通过设置预设标识位来标识主机操作系统的类型,当预设标识位的取值为第一预设值时,表示主机操作系统的类型为未知;例如,第一预设值可以为0。
步骤103、USB设备接收主机下发的命令;
步骤104、USB设备判断接收到的命令的类型,若为获取字符串描述符命令则执行步骤105,若为获取配置描述符命令则执行步骤108,否则执行步骤111;
具体地,获取字符串描述符命令和获取配置描述符命令为主机在USB设备枚举过程中采用控制传输方式向USB设备下发的命令。
USB设备具体根据命令中的bmRequestType域(命令的第1个字节)和bRequest域(命令的第2个字节)判断命令的类型,当bmRequestType域为0x80,bRequest域为GET_DESCRIPTOR的编码值0x06时,USB设备判定命令为获取描述符命令(包括获取USB设备描述符命令、获取配置描述符命令、获取字符串描述符命令、获取接口描述符命令、获取端点描述符命令、获取集线器类描述符命令、获取人机接口类描述符命令等)。
USB设备进一步根据命令中的wValue域(长度为2字节,具体为命令的第3个、第4个字节)的高字节判断获取描述符命令的具体类型,当wValue域的高字节(命令的第3个字节)为0x03时,USB设备判定获取描述符命令具体为获取字符串描述符命令,当wValue域的高字节为0x02时,USB设备判定获取描述符命令具体为获取配置描述符命令。
步骤105、USB设备判断主机操作系统的类型是否为未知,是则执行步骤106,否则执行步骤107;
具体地,USB设备可以通过设置预设标识位来标识主机操作系统的类型,当预设标识位的取值为第一预设值时,表示主机操作系统的类型为未知;相应地,USB设备判断主机操作系统的类型是否为未知,可以具体为:USB设备判断预设标识位的取值是否为第一预设值,是则主机操作系统的类型为未知,否则主机操作系统的类型不为未知;例如,第一预设值可以为0。
步骤106、USB设备标识主机操作系统的类型为MacOS系统,执行步骤107;
具体地,USB设备可以通过设置预设标识位来标识主机操作系统的类型,当预设标识位的取值为第二预设值时,表示主机操作系统的类型为MacOS系统;例如第二预设值可以为MacOS。
步骤107、USB设备向主机发送相应的字符串描述符,返回步骤103;
具体地,主机通过获取字符串描述符命令中的wValue域(长度为2字节,获取字符串描述符命令的第3个、第4个字节)的低字节(获取字符串描述符命令的第3个字节)指定字符串描述符索引;步骤107具体为:USB设备根据获取字符串描述符命令中的字符串描述符索引向主机发送相应的字符串描述符。
进一步地,USB设备根据获取字符串描述符命令中字符串描述符索引向主机发送相应的字符串描述符,具体包括:
当字符串描述符索引为0x00时,USB设备向主机发送表示语言ID的字符串描述符;
当字符串描述符索引不为0x00时,USB设备向主机发送表示字符串编码的字符串描述符;例如,当字符串描述符索引为0x01时,USB设备向主机发送表示厂商名称的字符串描述符;当字符串描述符索引为0x02时,USB设备向主机发送表示USB设备名称的字符串描述符等。
具体地,字符串描述符的格式为bLength域+bDescriptorType域+bStrings域,其中:
bLength域的大小为1个字节,值为数字,表示描述符的长度;
bDescriptorType域的大小为1个字节,值为0x03,表示描述符的类型为字符串描述符;
bStrings域的大小为N个字节,值为数字,用于描述信息;表示语言ID的字符描述串的bStrings域具体为双字节语言ID的数组:wLANGID[0]~wLANGID[x],表示语言标识码0~语言标识码x,用于描述设备支持的语言;表示字符串编码的字符串描述符的bStrings域具体为UNICODE编码的字符串,用于描述厂商名称、设备名称或序列号等信息。
步骤108、USB设备判断主机操作系统的类型是否为未知,是则执行步骤109,否则执行步骤110;
具体地,USB设备可以通过设置预设标识位来标识主机操作系统的类型,当预设标识位的取值为第一预设值时,表示主机操作系统的类型为未知;相应地,USB设备判断主机操作系统的类型是否为未知,可以具体为:USB设备判断预设标识位的取值是否为第一预设值,是则主机操作系统的类型为未知,否则主机操作系统的类型不为未知;例如,第一预设值可以为0。
步骤109、USB设备标识主机操作系统的类型为非MacOS系统,执行步骤110;
具体地,USB设备可以通过设置预设标识位来标识主机操作系统的类型,当预设标识位的取值为第三预设值时,表示主机操作系统的类型为非MacOS系统;例如第三预设值可以为else。
步骤110、USB设备向主机发送相应的配置描述符和接口描述符,返回步骤103;
本实施例中,USB设备向主机发送相应的配置描述符和接口描述符可以具体包括:
步骤1-1、USB设备判断主机操作系统的类型,若为MacOS系统则执行步骤1-2,若为非MacOS系统则执行步骤1-3;
进一步地,若主机操作系统的类型为未知,则执行步骤1-2或执行步骤1-3;
步骤1-2、USB设备判断获取配置描述符命令中的获取长度是否大于配置描述符的长度,是则向主机发送预设配置描述符和第一预设接口描述符,否则向主机发送预设配置描述符的前N个字节,N等于所述获取长度;
优选地,配置描述符的长度为9个字节;
例如,获取长度为4个字节,则将预设配置描述符的前4个字节返回给主机。
步骤1-3、USB设备判断获取配置描述符命令中的获取长度是否大于配置描述符的长度,是则向主机发送预设配置描述符和第二预设接口描述符,否则向主机发送预设配置描述符的前N个字节,N等于所述获取长度;
例如,获取长度为9个字节,则将预设配置描述符返回给主机。
具体地,第一预设接口描述符不同于第二预设接口描述符;
优选地,第一预设接口描述符为智能卡类接口描述符,即第一预设接口描述符的bInterfaceClass域为0x0B;第二预设接口描述符为大数据存储类接口描述符,即第二预设接口描述符的bInterfaceClass域为0x08。
进一步地,当主机操作系统的类型为MacOS系统时,步骤110中还可以包括USB设备向主机发送CCID类描述符;
更进一步地,当主机操作系统的类型为MacOS系统时,若第一预设接口描述符所描述的接口使用的端点不仅为端点0,则步骤110中还包括USB设备向主机发送端点描述符;当USB设备判断主机操作系统的类型为非MacOS系统时,若第二预设接口描述符所描述的接口使用的端点不仅为端点0,则步骤110中还包括USB设备向主机发送端点描述符。
例如,当主机操作系统的类型为MacOS系统时,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//端点描述符
当主机操作系统的类型为非MacOS系统时,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设备根据接收到的命令执行相应操作,返回步骤103。
优选地,USB设备可以根据主机操作系统的类型,执行与接收到的命令相应的操作。
本实施例中,USB设备向主机发送相应的配置描述符和接口描述符还可以具体包括:USB设备向主机发送预设配置描述符和第三预设接口描述符;优选地,第三预设接口描述符为智能卡类接口描述符,即第三预设接口描述符的bInterfaceClass域为0x0B,进一步地,步骤110中还可以包括USB设备向主机发送CCID类描述符;更进一步地,当第三预设接口描述符所描述的接口使用的端点不仅为端点0时,步骤110中还包括USB设备向主机发送端点描述符;
相应地,步骤104中还包括:若USB设备判断接收到的命令为APDU命令,则执行所述APDU命令,根据执行结果组织应答数据,判断应答数据的长度是否超过与主机操作系统的类型对应的预设最大包长度,是则将应答数据按照所述预设最大包长度分包发送到主机,否则将应答数据发送到主机;具体地,当主机操作系统的类型为MacOS系统时,预设最大包长度为预设长度,例如261个字节,当主机操作系统的类型为非MacOS系统时,预设最大包长度等于USB设备的预设缓存的大小,例如1024字节。
本实施例的技术方案中,USB设备对主机下发的命令进行解析,并对USB设备当前对主机操作系统的类型的标识进行判断,根据主机下发的命令的类型以及USB设备当前对主机操作系统类型的标识,确定主机操作系统的类型。
进一步地,本实施例中所述的方法中还可以包括:
当USB设备上电后接收到的主机下发的第一条命令为设置地址命令时,设置版本标识为第一预设值;
当USB设备上电后接收到的主机下发的第一条命令为获取设备描述符命令时,设置版本标识为第二预设值;
相应地,步骤106之后还包括:USB设备检查版本标识,若为第一预设值则标识主机操作系统的版本为第一预设版本,若为第二预设值则标识主机操作系统的版本为第二预设版本;
其中,版本标识的初始值为第一预设值和第二预设值之外的其他值;
本实施例中,例如,设置地址指令为0x 00 05 XX XX 00 00 00 00;获取设备描述符命令为0x 80 06 00 01 00 00 XX XX。
实施例3
本实施例提供一种USB设备,如图2所示,包括:
接收模块301,用于USB设备上电后,接收主机下发的命令;
发送模块302,用于当接收模块301接收到主机下发的获取字符串描述符命令时,向主机发送相应的字符串描述符,当接收模块301接收到主机下发的获取配置描述符命令时,向主机发送相应的配置描述符和接口描述符;
第一标识模块303,用于当接收模块301接收到APDU命令之前,先接收到主机下发的获取字符串描述符命令,后接收到主机下发的获取配置描述符命令时,标识主机操作系统的类型为MacOS系统;
第二标识模块304,用于当接收模块301接收APDU命令之前先接收到主机下发的获取配置描述符命令,后接收到主机下发的获取字符串描述符命令时,标识主机操作系统的类型为非MacOS系统。
进一步地,本实施例所述的USB设备中还可以包括:
第三标识模块305,用于在第一标识模块303标识主机操作系统的类型为MacOS系统之后,若接收模块301在USB设备上电后接收到的主机下发的第一条命令为设置地址命令,则标识主机操作系统的版本为第一预设版本;
第四标识模块306,用于在第一标识模块303标识主机操作系统的类型为MacOS系统之后,若接收模块301在USB设备上电后接收到的主机下发的第一条命令为获取设备描述符命令,则标识主机操作系统的版本为第二预设版本。
具体地,本实施例所述的USB设备,还包括:第五标识模块,用于USB设备上电后,标识主机操作系统的类型为未知;相应地:
第一标识模块303具体包括:
第一判断单元,用于当接收模块301接收到主机下发的获取字符串描述符命令时,判断主机操作系统的类型是否为未知;
第一标识单元,用于当第一判断单元判断主机操作系统的类型为未知时,标识主机操作系统的类型为MacOS系统;
第二标识模块304具体包括:
第二判断单元,用于当接收模块301接收到主机下发的获取配置描述符命令时,判断主机操作系统的类型是否为未知;
第二标识单元,用于当第二判断单元判断主机操作系统的类型为未知时,标识主机操作系统的类型为非MacOS系统。
进一步地,USB设备中还包括:设置模块,用于当接收模块301在USB设备上电后接收到的主机下发的第一条命令为设置地址命令时,设置版本标识为第一预设值;当接收模块301在USB设备上电后接收到的主机下发的第一条命令为获取设备描述符命令时,设置版本标识为第二预设值;相应地,第一标识单元还用于:检查版本标识,若版本标识为第一预设值,则标识主机操作系统的版本为第一预设版本,若版本标识为第二预设值,则标识主机操作系统的版本为第二预设版本。
或者,本实施例所述的USB设备,还包括:复位模块,用于USB设备上电后,复位第一接收标志和第二接收标志;相应地:
第一标识模块303具体包括:
第一判断单元,用于当接收模块301接收到主机下发的获取字符串描述符命令时,置位第一接收标志,判断第二接收标志是否被置位;
第一标识单元,用于当第一判断单元判断第二接收标志未被置位时,标识主机操作系统的类型为MacOS系统;
第二标识模块304具体包括:
第二判断单元,用于当接收模块301接收到主机下发的获取配置描述符命令时,置位第二接收标志,判断第一接收标志是否被置位;
第二标识单元,用于当第二判断单元判断第一接收标志未被置位时,标识主机操作系统的类型为非MacOS系统。
具体地,本实施例中,发送模块302可以具体用于:当接收模块301接收到主机下发的获取配置描述符命令时,判断主机操作系统的类型,若为MacOS系统则向主机发送预设配置描述符和第一预设接口描述符,若为非MacOS系统则向主机发送预设配置描述符和不同于第一预设描述符的第二预设接口描述符。
或者,发送模块302具体用于:当接收模块301接收到主机下发的获取配置描述符命令时,向主机发送预设配置描述符和第三预设接口描述符;
进一步地,接收模块301还用于:接收主机下发的APDU命令;USB设备中还包括:执行模块,用于当接收模块301接收到主机下发的APDU命令时,执行接收模块301接收到的APDU命令,根据执行结果组织应答数据,判断应答数据的长度是否超过与主机操作系统的类型对应的预设最大包长度,是则将应答数据按照所述预设最大包长度分包发送到主机,否则将应答数据发送到主机。
实施例4
本实施例提供一种USB设备识别MacOS系统的方法,包括:
步骤B1、USB设备上电;
步骤B2、所述USB设备等待接收主机下发的命令;
当接收到主机下发的获取字符串描述符命令时,向主机发送相应的字符串描述符;
所述方法还包括:当所述USB设备上电后首次接收到获取字符串描述符命令时,若所述获取字符串描述符命令中的获取长度为预设字节数则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统。
进一步地,本实施例中:
所述步骤B1中还包括:所述USB设备标识主机操作系统的类型为未知;
所述当所述USB设备上电后首次接收到获取字符串描述符命令时,若所述获取字符串描述符命令中的获取长度为预设字节数则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统,具体包括:
步骤1-1、当所述USB设备接收到主机下发的获取字符串描述符命令时,检查主机操作系统的类型是否为未知,是则执行步骤1-2,否则向主机发送相应的字符串描述符;
步骤1-2、所述USB设备判断获取字符串描述符命令中的获取长度是否为预设字节数,是则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统。
或者,所述步骤B1中还包括:所述USB设备复位接收标志;
所述当所述USB设备上电后首次接收到获取字符串描述符命令时,若所述获取字符串描述符命令中的获取长度为预设字节数则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统,具体包括:
步骤2-1、当所述USB设备接收到主机下发的获取字符串描述符命令时,检查所述接收标志,若所述接收标志未被置位则置位所述接收标志,执行步骤2-2;
步骤2-2、所述USB设备判断获取字符串描述符命令中的获取长度是否为预设字节数,是则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统。
进一步地,本实施例中,标识主机操作系统的类型为MacOS系统之后还包括:若所述USB设备上电后接收到主机下发的第一条命令为设置地址命令,则标识主机操作系统的版本为第一预设版本,若所述USB设备上电后接收到主机下发的第一条命令为获取设备描述符命令,则标识主机操作系统的版本为第二预设版本。
实施例5
本实施例提供一种USB设备识别MacOS系统的方法,如图3所示,包括:
步骤201、USB设备上电;
步骤202、USB设备标识主机操作系统的类型为未知;
步骤203、USB设备接收主机下发的命令;
步骤204、USB设备判断接收到的命令的类型,若为获取字符串描述符命令则执行步骤206,否则执行步骤205;
步骤205、USB设备根据接收到的命令执行相应操作,返回步骤203;
优选地,USB设备可以根据主机操作系统的类型,执行与接收到的命令相应的操作。
步骤206、USB设备判断主机操作系统的类型是否为未知,是则执行步骤207,否则执行步骤210;
步骤207、USB设备判断获取字符串描述符命令中的获取长度是否为预设字节数,是则执行步骤208,否则执行步骤209;
具体地,获取字符串描述符命令的第7个字节为获取长度,预设字节数为2个字节。
步骤208、USB设备标识主机操作系统的类型为MacOS系统,执行步骤210;
步骤209、USB设备标识主机操作系统的类型为非MacOS系统,执行步骤210;
步骤210、USB设备向主机发送相应的字符串描述符,返回步骤203。
进一步地,步骤204中还可以包括:若USB设备判断接收到的命令为获取配置描述符命令,则向主机发送相应的配置描述符和接口描述符,返回步骤203。
本实施例中,USB设备向主机发送相应的配置描述符和接口描述符可以具体包括:
步骤a、USB设备判断主机操作系统的类型,若为MacOS系统则执行步骤b,若为非MacOS系统则执行步骤c;
进一步地,若主机操作系统的类型为未知,则执行步骤b或执行步骤c;
步骤b、USB设备判断获取配置描述符命令中的获取长度是否大于配置描述符的长度,是则向主机发送预设配置描述符和第一预设接口描述符,否则向主机发送预设配置描述符的前N个字节,N等于所述获取长度;
优选地,配置描述符的长度为9个字节;
例如,获取长度为4个字节,则将预设配置描述符的前4个字节返回给主机。
步骤c、USB设备判断获取配置描述符命令中的获取长度是否大于配置描述符的长度,是则向主机发送预设配置描述符和第二预设接口描述符,否则向主机发送预设配置描述符的前N个字节,N等于所述获取长度;
例如,获取长度为9个字节,则将预设配置描述符返回给主机。
具体地,第一预设接口描述符不同于第二预设接口描述符;
优选地,第一预设接口描述符为智能卡类接口描述符,即第一预设接口描述符的bInterfaceClass域为0x0B;第二预设接口描述符为大数据存储类接口描述符,即第二预设接口描述符的bInterfaceClass域为0x08。
进一步地,当主机操作系统的类型为MacOS系统时,USB设备向主机发送相应的配置描述符和接口描述符时还可以包括USB设备向主机发送CCID类描述符;
更进一步地,当主机操作系统的类型为MacOS系统时,若第一预设接口描述符所描述的接口使用的端点不仅为端点0,则USB设备向主机发送相应的配置描述符和接口描述符时还包括USB设备向主机发送端点描述符;当USB设备判断主机操作系统的类型为非MacOS系统时,若第二预设接口描述符所描述的接口使用的端点不仅为端点0,则步骤USB设备向主机发送相应的配置描述符和接口描述符时还包括USB设备向主机发送端点描述符。
或者USB设备向主机发送相应的配置描述符和接口描述符具体包括:USB设备向主机发送预设配置描述符和第三预设接口描述符;优选地,第三预设接口描述符为智能卡类接口描述符,即第三预设接口描述符的bInterfaceClass域为0x0B,进一步地,USB设备向主机发送相应的配置描述符和接口描述符时还可以包括USB设备向主机发送CCID类描述符;更进一步地,当第三预设接口描述符所描述的接口使用的端点不仅为端点0时,USB设备向主机发送相应的配置描述符和接口描述符时还包括USB设备向主机发送端点描述符;;
相应地,步骤204中还包括:若USB设备判断接收到的命令为APDU命令,则执行所述APDU命令,根据执行结果组织应答数据,判断应答数据的长度是否超过与主机操作系统的类型对应的预设最大包长度,是则将应答数据按照所述预设最大包长度分包发送到主机,否则将应答数据发送到主机;具体地,当主机操作系统的类型为MacOS系统时,预设最大包长度为预设长度,例如261个字节,当主机操作系统的类型为非MacOS系统时,预设最大包长度等于USB设备的预设缓存的大小,例如1024字节。
本实施例的技术方案中,USB设备对主机下发的命令进行解析,并对USB设备当前对主机操作系统的类型的标识进行判断,根据主机下发的命令的类型、命令中的获取长度以及USB设备当前对主机操作系统类型的标识,确定主机操作系统的类型。
进一步地,本实施例中所述的方法中还可以包括:
当USB设备上电后接收到的主机下发的第一条命令为设置地址命令时,设置版本标识为第一预设值;
当USB设备上电后接收到的主机下发的第一条命令为获取设备描述符命令时,设置版本标识为第二预设值;
相应地,步骤208之后还包括:USB设备检查版本标识,若为第一预设值则标识主机操作系统的版本为第一预设版本,若为第二预设值则标识主机操作系统的版本为第二预设版本;
其中,版本标识的初始值为第一预设值和第二预设值之外的其他值;
本实施例中,例如,设置地址指令为0x 00 05 XX XX 00 00 00 00;获取设备描述符命令为0x 80 06 00 01 00 00 XX XX。
实施例6
本实施例提供一种USB设备,如图4所示,包括:
接收模块401,用于USB设备上电后,接收主机下发的获取字符串描述符命令;
发送模块402,用于在接收模块401接收到主机下发的获取字符串描述符命令后,向主机发送相应的字符串描述符;
第一标识模块403,用于当接收模块401在USB设备上电后首次接收到获取字符串描述符命令时,若获取字符串描述符命令中的获取长度为预设字节数则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统。
进一步地,本实施例所述的USB设备中还可以包括:
第二标识模块404,用于在第一标识模块403标识主机操作系统的类型为MacOS系统之后,若接收模块401在USB设备上电后接收到的主机下发的第一条命令为设置地址命令,则标识主机操作系统的版本为第一预设版本;
第三标识模块405,用于第一标识模块403标识主机操作系统的类型为MacOS系统之后,若接收模块401在USB设备上电后接收到的主机下发的第一条命令为获取设备描述符命令,则标识主机操作系统的版本为第二预设版本。
具体地,本实施例所述的USB设备,还包括:第四标识模块,用于在USB设备上电后,标识主机操作系统的类型为未知;相应地,第一标识模块403具体包括:
判断单元,用于当接收模块401接收到主机下发的获取字符串描述符命令时,判断主机操作系统的类型是否为未知;
标识单元,用于当判断单元判断主机操作系统的类型为未知时,判断接收模块401接收到的获取字符串描述符命令中的获取长度是否为预设字节数,是则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统。
进一步地,USB设备中还包括:设置模块,用于当接收模块401在USB设备上电后接收到的主机下发的第一条命令为设置地址命令时,设置版本标识为第一预设值;当接收模块401在USB设备上电后接收到的主机下发的第一条命令为获取设备描述符命令时,设置版本标识为第二预设值;相应地,标识单元还用于:检查版本标识,若版本标识为第一预设值,则标识主机操作系统的版本为第一预设版本,若版本标识为第二预设值,则标识主机操作系统的版本为第二预设版本。
或者,本实施例所述的USB设备,还包括:复位模块,用于USB设备上电后,复位接收标志;相应地,第一标识模块403具体包括:
判断单元,用于当接收模块401接收到主机下发的获取字符串描述符命令时,判断接收标志是否被置位;
标识单元,用于当判断单元判断接收标志未被置位时,判断接收模块401接收到的获取字符串描述符命令中的获取长度是否为预设字节数,是则标识主机操作系统的类型为MacOS系统,否则标识主机操作系统的类型为非MacOS系统。
本实施例中,接收模块401还用于:接收主机下发的获取配置描述符命令;相应地,发送模块402还用于:当接收模块401接收到主机下发的获取配置描述符命令时,向主机发送相应的配置描述符和接口描述符;
进一步地,发送模块402具体用于:当接收模块401接收到主机下发的获取配置描述符命令时,判断主机操作系统的类型,若为MacOS系统则向主机发送预设配置描述符和第一预设接口描述符,若为非MacOS系统则向主机发送预设配置描述符和不同于所述第一预设描述符的第二预设接口描述符;
或者,发送模块402具体用于:当接收模块401接收到主机下发的获取配置描述符命令时,向主机发送预设配置描述符和第三预设接口描述符;相应地,接收模块401还用于:接收主机下发的APDU命令;USB设备还包括:执行模块,用于当接收模块401接收到主机下发的APDU命令时,执行接收模块401接收到的APDU命令,根据执行结果组织应答数据,判断应答数据的长度是否超过与主机操作系统的类型对应的预设最大包长度,是则将应答数据按照预设最大包长度分包发送到主机,否则将应答数据发送到主机。
以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。