CN103092799B - 一种usb设备及其识别主机操作系统的方法 - Google Patents
一种usb设备及其识别主机操作系统的方法 Download PDFInfo
- Publication number
- CN103092799B CN103092799B CN201210589947.1A CN201210589947A CN103092799B CN 103092799 B CN103092799 B CN 103092799B CN 201210589947 A CN201210589947 A CN 201210589947A CN 103092799 B CN103092799 B CN 103092799B
- Authority
- CN
- China
- Prior art keywords
- value
- preset value
- host
- descriptor
- preset
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000029610 recognition of host Effects 0.000 title 1
- 238000004891 communication Methods 0.000 claims abstract description 70
- 230000006399 behavior Effects 0.000 description 6
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/387—Information transfer, e.g. on bus using universal interface adapter for adaptation of different data processing systems to different peripheral devices, e.g. protocol converters for incompatible systems, open system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
- G06F9/441—Multiboot arrangements, i.e. selecting an operating system to be loaded
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Systems (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开一种USB设备及其识别主机操作系统的方法,该方法包括以下步骤:USB设备等待接收来自主机的USB命令,判断接收到的USB命令是否为获取配置描述符命令,如果是,则根据第一标识位和第二标识位的取值以及获取配置描述符命令中的长度字节的取值,确定主机的操作系统,并在确定主机操作系统后,根据该操作系统使用相应的通信协议与主机进行数据通信,对不能在该操作系统下操作的文件进行屏蔽,使得主机能够准确地识别和操作USB设备,并使USB设备及其应用更加优化。
Description
技术领域
本发明涉及信息安全领域,特别是涉及一种USB(Universal SerialBus,通用串行总线)设备及其识别主机操作系统的方法。
背景技术
USB协议技术是主机与外部设备连接的串行总线标准,在主机(例如,个人计算机、个人数字助理以及移动电脑等)上使用十分广泛,支持热插拔和即插即用,并支持总线供电,鼠标、键盘、游戏手柄、扫描仪、数码相机、打印机、硬盘、安全设备、光驱和网卡等几乎所有的外围设备都可以通过运行USB接口与主机相连并进行通信,USB接口已经成为目前大多数主机外设与计算机相连的缺省接口。
在操作系统平台支持方面,Windows系统平台中的Windows 98、Windows 2000、Windows XP、Windows Vista及Windows 7等,iOS(苹果操作系统),Linux系统都提供了对USB接口的支持。
发明人在实现本发明的过程中,发现现有技术至少存在以下缺陷:
现有技术中,USB设备与主机进行通信时,USB设备无法识别主机的操作系统。
发明内容
本发明提供了一种USB设备及其识别主机操作系统的方法,以解决现有技术中USB设备无法识别主机操作系统的缺陷。
本发明提供了一种USB设备识别主机操作系统的方法,包括以下步骤:
S1、USB设备上电;
S2、所述USB设备将第一标识位和第二标识位分别初始化为第一预设值和第二预设值;
S3、所述USB设备等待接收来自主机的USB命令;
S4、所述USB设备判断接收到的USB命令是否为获取配置描述符命令,如果是,则执行步骤S6;否则,执行步骤S5;
S5、所述USB设备根据接收到的USB命令,进行相应的操作,并返回步骤S3;
S6、所述USB设备判断所述第一标识位的取值是否为所述第一预设值,如果是,则执行步骤S8;否则,执行步骤S7;
S7、所述USB设备根据接收到的获取配置描述符命令,进行相应的操作,并返回步骤S3;
S8、所述USB设备对接收到的获取配置描述符命令中的长度字节的取值和所述第二标识位的取值进行判断;
如果所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第三预设值,则执行步骤S9;
如果所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第四预设值,则执行步骤S10;
如果所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值,则执行步骤S11;
如果所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值,则执行步骤S12;
如果所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值,则执行步骤S13;
否则,所述USB设备向所述主机发送预设的描述符信息,并返回步骤S3;
S9、所述USB设备将所述第二标识位的取值设置为所述第八预设值,并返回步骤S3;
S10、所述USB设备将所述第二标识位的取值设置为所述第九预设值,并返回步骤S3;
S11、所述USB设备确定所述主机的操作系统为苹果操作系统iOS,将所述第一标识位的取值设置为第十一预设值,并返回步骤S3;
S12、所述USB设备确定所述主机的操作系统为Windows系统,将所述第一标识位的取值设置为所述第十一预设值,并返回步骤S3;
S13、所述USB设备确定所述主机的操作系统为Linux系统,将所述第一标识位的取值设置为所述第十一预设值,并返回步骤S3。
本发明还提供了一种USB设备,包括:
初始化模块,用于将第一标识位和第二标识位分别初始化为第一预设值和第二预设值;
接收模块,用于接收来自主机的USB命令;
第一判断模块,用于判断所述接收模块接收到的USB命令是否为获取配置描述符命令;
第一处理模块,用于在所述第一判断模块判断所述USB命令不是获取配置描述符命令时,根据所述USB命令进行相应的操作;
第二判断模块,用于在所述第一判断模块判断所述USB命令是获取配置描述符命令时,判断所述第一标识位的取值是否为所述第一预设值;
第二处理模块,用于在所述第二判断模块判断所述第一标识位的取值不是所述第一预设值时,根据所述获取配置描述符命令,进行相应的操作;
第三判断模块,用于在所述第二判断模块判断所述第一标识位的取值为所述第一预设值时,对所述获取配置描述符命令中的长度字节的取值和所述第二标识位的取值进行判断;
设置模块,用于在所述第三判断模块判断所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第三预设值时,将所述第二标识位的取值设置为所述第八预设值;在所述第三判断模块判断所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第四预设值时,将所述第二标识位的取值设置为所述第九预设值;
在所述第三判断模块判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,确定所述主机的操作系统为苹果操作系统iOS,将所述第一标识位的取值设置为第十一预设值;
在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值时,确定所述主机的操作系统为Windows系统,将所述第一标识位的取值设置为所述第十一预设值;
在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,确定所述主机的操作系统为Linux系统,将所述第一标识位的取值设置为所述第十一预设值。
发送模块,用于在所述第三判断模块判断所述第二标识位的取值和所述长度字节的取值为其他值时,向所述主机发送预设的描述符信息。
本发明实施例的技术方案中,USB设备对主机下发的获取配置描述符命令进行解析,根据该命令中的长度字节的取值,确定主机的操作系统,并在确定主机操作系统后,根据该操作系统使用相应的通信协议与主机进行数据通信,使得主机能够准确地识别和操作USB设备,并使USB设备及其应用更加优化。
附图说明
图1为本发明实施例一中的一种USB设备识别主机操作系统的方法流程图;
图2为本发明实施例二中的一种USB设备识别主机操作系统的方法流程图;
图3为本发明实施例三中的一种USB设备识别主机操作系统的方法流程图;
图4为本发明实施例四中的一种USB设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在进行具体说明之前,对USB设备与主机之间的通信原理进行简单的说明,如下:
USB设备与主机之间的通信是:由主机向USB设备发送USB命令,USB设备通过端点来收发数据,对接收到的USB命令进行响应,USB设备与主机之间通信的基本单位是“包”,其中,“包”的分类主要有:令牌包、数据包和握手包,由PID(Packet Identification,包标识符)来决定包的具体类型。
其中,令牌包的格式为SYNC+PID+ADDR+ENDP+CRC;数据包分为DATA0包和DATA1包,在USB设备返回的数据长度超过相应端点的最大输出数据包长度时,需要将返回的数据分批发送,一般情况下,DATA0包和DATA1包交替发送;握手包的格式为:SYNC+PID。
例如:
PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3
PID:DATA0 data:80 06 00 01 00 00 40 00 CRC16:94dd idle:7
PID:ACK idle:2ela
上述命令说明,该包为SETUP包,数据内容是80 06 00 01 00 00 40 00,握手包为ACK;其中,SETUP包由主机下发,USB设备接收到该SETUP包后向主机返回应答信息,例如:
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:7
PID:DATA1 data:12 01 10 01 00 00 00 08 CRC16:7711 idle:7
PID:ACK idle:2e16
PID:OUT ADDR:00 ENDP:00 CRC5:02 idle:3
PID:DATA1 data: CRC16:0000 idle:7
PID:ACK idle:2e5a
USB设备向主机返回的应答数据是12 01 10 01 00 00 00 08,需要说明的是,USB设备在接收到主机下发的IN或OUT的令牌包后,向主机返回应答数据;
这样,USB设备与主机之间便完成了一次信息交互,而每一次的信息交互,都是由接收到主机下发的SETUP包开始的。
实施例一
如图1所示,为本发明实施例一中的一种USB设备识别主机操作系统的方法流程图,包括以下步骤:
步骤101,USB设备上电。
具体地,USB设备通过USB总线连接到主机,并从主机Vcc(电源电压或工作电压)处获取工作电压。其中,USB设备具体为安全设备(如USBKey)、读卡器、存储设备(如U盘)或键盘、鼠标等计算机外围设备;
步骤102,USB设备对第一标识位和第二标识位进行初始化。
具体地,USB设备可以将第一标识位的取值设置为第一预设值,将第二标识位的取值设置为第二预设值。其中,第一标识位用于标识USB设备是否已识别主机的操作系统,第二标识位用于标识主机操作系统的类型。当第一标识位的取值为第一预设值时,表示USB设备未识别主机的操作系统;当第二标识位的取值为第二预设值时,表示主机操作系统的类型为未知。例如,第一预设值和第二预设值可以为0。
步骤103,USB设备等待接收来自主机的USB命令。
步骤104,USB设备判断接收到的USB命令是否为获取配置描述符命令,如果是,则执行步骤106;否则,执行步骤105。
其中,获取配置描述符命令为主机对USB设备枚举阶段,发送给USB设备的USB命令。主机通过向USB设备发送获取配置描述符命令,请求获取USB设备的配置描述符。
步骤105,USB设备根据接收到的USB命令,进行相应的操作,并返回步骤103。
优选地,USB设备可以根据主机的操作系统,执行与接收到的USB命令相应的操作。
步骤106,USB设备判断第一标识位的取值是否为第一预设值,如果是,则执行步骤108;否则,执行步骤107。
步骤107,USB设备根据接收到的获取配置描述符命令,进行相应的操作,并返回步骤103。
优选地,USB设备可以根据主机的操作系统,执行与接收到的获取配置描述符命令相应的操作。
步骤108,USB设备对接收到的获取配置描述符命令中的长度字节的取值进行判断,如果该长度字节的取值为第三预设值,则执行步骤109;如果该长度字节的取值为第四预设值,则执行步骤111;如果该长度字节的取值为第五预设值,则执行步骤113;如果该长度字节的取值为第六预设值,则执行步骤115;如果该长度字节的取值为第七预设值,则执行步骤117;如果该长度字节的取值为其他值,则向主机发送预设的描述符信息,并返回步骤103。
其中,获取配置描述符命令可以包含长度为8字节的DATA0数据,长度字节为获取配置描述符命令的DATA0数据的第7个字节,用于告知USB设备需要向主机返回的数据的长度。本实施例中,第三预设值为0x04,第四预设值为0x09,第五预设值为0x56,第六预设值为0xFF,第七预设值为0x20。
例如,USB设备接收到来自主机的获取配置描述符命令为:
PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3
PID:DATA0 data:80 06 00 01 00 00 08 00 CRC16:94eb idle:7
PID:ACK idle:3a
USB设备读取到上述获取配置描述符命令中的数据域的第七个字节的取值为0x08,确定该获取配置描述符命令中的长度字节的取值为0x08,以及自身需要向主机返回8个字节的数据。
步骤109,USB设备判断第二标识位的取值是否等于第二预设值,如果是,则执行步骤110;否则,向主机发送预设的描述符信息,并返回步骤103。
步骤110,USB设备将第二标识位的取值设置为第八预设值,向主机发送配置描述符的长度信息,并返回步骤103。
其中,当第二标识位的取值为第八预设值时,表示主机操作系统可能为iOS,本实施例中,第八预设值为iOSRe。
步骤111,USB设备判断第二标识位的取值是否等于第二预设值,如果是,则执行步骤112;否则,向主机发送预设的描述符信息,并返回步骤103。
步骤112,USB设备将第二标识位的取值设置为第九预设值,向主机发送配置描述符的长度信息,并返回步骤103。
其中,当第二标识位的取值为第九预设值时,表示主机操作系统可能为Linux或者Windows,本实施例中,第九预设值为Linux/Windows_Re。
步骤113,USB设备判断第二标识位的取值是否等于第八预设值,如果是,则执行步骤114;否则,向主机发送预设的描述符信息,并返回步骤103。
步骤114,USB设备确定主机操作系统为iOS,将第二标识位的取值设置为第十预设值,将第一标识位的取值设置为第十一预设值,根据主机操作系统向主机返回相应的配置描述符和接口描述符,并返回步骤103。
其中,当第二标识位的取值为第十预设值时,表示主机操作系统为iOS;当第一标识位的取值为第十一预设值时,表示USB设备已识别主机的操作系统。本实施例中,第十预设值为iOS,第十一预设值为1。
本实施例中,USB设备识别主机操作系统为iOS时,选择CCID(USB Chip/Smart Card Interface Devices-USB,芯片智能卡接口设备)协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段的取值设置为第十四预设值,向主机发送配置描述符和接口描述符,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第十四预设值为0x0B,也可以为其他数值。此外,USB设备还可向主机发送端点描述符和CCID类描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,CCID类描述符用于描述USB设备作为CCID设备时所具有的特性。
优选地,USB设备确定主机操作系统为iOS时,还可对自身所包含的、不适用于iOS的内容进行屏蔽。
步骤115,USB设备判断第二标识位的取值是否等于第九预设值,如果是,则执行步骤116;否则,向主机发送预设的描述符信息,并返回步骤103。
步骤116,USB设备确定主机操作系统为Windows系统,将第二标识位的取值设置为第十二预设值,将第一标识位的取值设置为第十一预设值,根据主机操作系统向主机返回相应的配置描述符和接口描述符,并返回步骤103。
其中,当第二标识位的取值为第十二预设值时,表示主机操作系统为Windows;当第一标识位的取值为第十一预设值时,表示USB设备已识别主机的操作系统。本实施例中,第十二预设值为Windows,第十一预设值为1。
本实施例中,USB设备识别主机操作系统为Windows系统时,可以选择SCSI(Small Computer System Interface,小型计算机系统接口)协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第二预设字段为bInterfaceProtocol字段,第十五预设值为0x08,也可以为其他数值,第十六预设值为0x50,也可以为其他数值。此外,USB设备还可向主机发送端点描述符,该端点描述符用于描述USB设备的接口所使用的端口的信息。
USB设备识别主机操作系统为Windows系统时,还可以选择HID(HumanInterface Device,人机接口设备)协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第三预设字段的取值分别设置为第十七预设值和第十八预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第三预设字段为bInterfaceSubClass字段,第十七预设值为0x03,也可以为其他数值,第十八预设值为0或1,也可以为其他数值。此外,USB设备还可向主机发送端点描述符、HID描述符、报告描述符和实体描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,HID类描述符用于描述USB设备作为HID设备时所具有的特性,实体描述符用于描述USB设备作为HID设备时所具有的行为特性。
优选地,USB设备确定主机操作系统为Windows系统时,还可对自身所包含的、不适用于Windows系统的内容进行屏蔽。
步骤117,USB设备判断第二标识位的取值是否等于第九预设值,如果是,则执行步骤118;否则,向主机发送预设的描述符信息,并返回步骤103。
步骤118,USB设备确定主机操作系统为Linux系统,将第二标识位的取值设置为第十三预设值,将第一标识位的取值设置为第十一预设值,根据主机操作系统向主机返回相应的配置描述符和接口描述符,并返回步骤103。
其中,当第二标识位的取值为第十三预设值时,表示主机操作系统为Linux;当第一标识位的取值为第十一预设值时,表示USB设备已识别主机的操作系统。本实施例中,第十三预设值为Linux,第十一预设值为1。
本实施例中,USB设备识别主机操作系统为Linux系统时,可以选择SCSI协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第二预设字段为bInterfaceProtocol字段,第十五预设值为0x08,也可以为其他数值,第十六预设值为0x50,也可以为其他数值。此外,USB设备还可向主机发送端点描述符,该端点描述符用于描述USB设备的接口所使用的端口的信息。
USB设备识别主机操作系统为Linux系统时,还可以选择HID协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第三预设字段的取值分别设置为第十七预设值和第十八预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第三预设字段为bInterfaceSubClass字段,第十七预设值为0x03,也可以为其他数值,第十八预设值为0或1,也可以为其他数值。此外,USB设备还可向主机发送端点描述符、HID描述符、报告描述符和实体描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,HID类描述符用于描述USB设备作为HID设备时所具有的特性,实体描述符用于描述USB设备作为HID设备时所具有的行为特性。
优选地,USB设备确定主机操作系统为Linux系统时,还可对自身所包含的、不适用于Linux系统的内容进行屏蔽。例如,当USB设备识别主机操作系统为Linux系统,并声明自身为SCSI光盘设备时,USB设备可对自身所包含的ISO文件(镜像文件)进行屏蔽。
本发明实施例一的技术方案中,USB设备对主机下发的获取配置描述符命令进行解析,并对第一标识位和第二标识位的取值进行判断,根据获取配置描述符命令中的长度字节的取值以及第一标识位和第二标识位的取值,确定主机的操作系统,并在确定主机操作系统后,根据该操作系统使用相应的通信协议与主机进行数据通信,对不能在该操作系统下操作的文件进行屏蔽,使得主机能够准确地识别和操作USB设备,并使USB设备及其应用更加优化。
需要说明的是,在本发明的其他实施方式中,USB设备识别主机操作系统为时,也可以选择SCSI协议作为自身与主机之间的通信协议;当USB设备声明自身为SCSI光盘设备时,USB设备还可对自身所包含的ISO文件进行屏蔽,同样可以达到本发明的发明目的。
实施例二
如图2所示,为本发明实施例二中的一种USB设备识别主机操作系统的方法流程图,包括以下步骤:
步骤201,USB设备上电。
步骤202,USB设备等待接收来自主机的USB命令。
步骤203,USB设备接收主机连续发送的第一获取配置描述符命令和第二获取配置描述符命令。
其中,第一获取配置描述符命令和第二获取配置描述符命令为主机对USB设备枚举阶段,发送给USB设备的USB命令。主机通过向USB设备发送第一获取配置描述符命令和第二获取配置描述符命令,请求获取USB设备的配置描述符。第一获取配置描述符命令用于尝试获取配置描述符,第二获取配置描述符命令用于正式获取配置描述符。
优选地,USB设备接收到第一获取配置描述符命令和第二获取配置描述符命令后,还可以存储第一获取配置描述符命令和第二获取配置描述符命令中的长度字节。
步骤204,USB设备对第一获取配置描述符命令和第二获取配置描述符命令中的长度字节的取值进行判断,如果第一获取配置描述符命令和第二获取配置描述符命令中的长度字节的取值分别为第三预设值和第五预设值,则执行步骤205;如果第一获取配置描述符命令和第二获取配置描述符命令中的长度字节的取值分别为第四预设值和第六预设值,则执行步骤206;如果第一获取配置描述符命令和第二获取配置描述符命令中的长度字节的取值分别为第四预设值和第七预设值,则执行步骤207;如果第一获取配置描述符命令和第二获取配置描述符命令中的长度字节的取值分别为其他值,则向主机发送预设的描述符信息,并返回步骤202。
其中,获取配置描述符命令可以包含长度为8字节的DATA0数据,长度字节为获取配置描述符命令数据域的第7个字节。本实施例中,第三预设值为0x04,第四预设值为0x09,第五预设值为0x56,第六预设值为0xFF,第七预设值为0x20。
步骤205,USB设备确定主机操作系统为iOS,根据主机操作系统向主机返回相应的配置描述符和接口描述符。
本实施例中,USB设备识别主机操作系统为iOS时,选择CCID协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段的取值设置为第十四预设值,向主机发送配置描述符和接口描述符,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第十四预设值为0x0B,也可以为其他数值。此外,USB设备还可向主机发送端点描述符和CCID类描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,CCID类描述符用于描述USB设备作为CCID设备时所具有的特性。
优选地,USB设备确定主机操作系统为iOS时,还可对自身所包含的、不适用于iOS的内容进行屏蔽。
步骤206,USB设备确定主机操作系统为Windows系统,根据主机操作系统向主机返回相应的配置描述符和接口描述符。
本实施例中,USB设备识别主机操作系统为Windows系统时,可以选择SCSI协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第二预设字段为bInterfaceProtocol字段,第十五预设值为0x08,也可以为其他数值,第十六预设值为0x50,也可以为其他数值。此外,USB设备还可向主机发送端点描述符,该端点描述符用于描述USB设备的接口所使用的端口的信息。
USB设备识别主机操作系统为Windows系统时,还可以选择HID协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第三预设字段的取值分别设置为第十七预设值和第十八预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第三预设字段为bInterfaceSubClass字段,第十七预设值为0x03,也可以为其他数值,第十八预设值为0或1,也可以为其他数值。此外,USB设备还可向主机发送端点描述符、HID描述符、报告描述符和实体描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,HID类描述符用于描述USB设备作为HID设备时所具有的特性,实体描述符用于描述USB设备作为HID设备时所具有的行为特性。
优选地,USB设备确定主机操作系统为Windows系统时,还可对自身所包含的、不适用于Windows系统的内容进行屏蔽。
步骤207,USB设备确定主机操作系统为Linux系统,根据主机操作系统向主机返回相应的配置描述符和接口描述符。
本实施例中,USB设备识别主机操作系统为Linux系统时,可以选择SCSI协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第二预设字段为bInterfaceProtocol字段,第十五预设值为0x08,也可以为其他数值,第十六预设值为0x50,也可以为其他数值。此外,USB设备还可向主机发送端点描述符,该端点描述符用于描述USB设备的接口所使用的端口的信息。
USB设备识别主机操作系统为Linux系统时,还可以选择HID协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第三预设字段的取值分别设置为第十七预设值和第十八预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第三预设字段为bInterfaceSubClass字段,第十七预设值为0x03,也可以为其他数值,第十八预设值为0或1,也可以为其他数值。此外,USB设备还可向主机发送端点描述符、HID描述符、报告描述符和实体描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,HID类描述符用于描述USB设备作为HID设备时所具有的特性,实体描述符用于描述USB设备作为HID设备时所具有的行为特性。
优选地,USB设备确定主机操作系统为Linux系统时,还可对自身所包含的、不适用于Linux系统的内容进行屏蔽。例如,当USB设备识别主机操作系统为Linux系统,并声明自身为SCSI光盘设备时,USB设备可对自身所包含的ISO文件进行屏蔽。
本发明实施例二的技术方案中,USB设备对主机连续下发的两条获取配置描述符命令进行解析,根据该命令中的长度字节的取值,确定主机的操作系统,并在确定主机操作系统后,根据该操作系统使用相应的通信协议与主机进行数据通信,对不能在该操作系统下操作的文件进行屏蔽,使得主机能够准确地识别和操作USB设备,并使USB设备及其应用更加优化。
实施例三
如图3所示,为本发明实施例三中的一种USB设备识别主机操作系统的方法流程图,包括以下步骤:
步骤301,USB设备上电。
具体地,USB设备通过USB总线连接到主机,并从主机Vcc(电源电压或工作电压)处获取工作电压。其中,USB设备具体为安全设备(如USBKey)、读卡器、存储设备(如U盘)或键盘、鼠标等计算机外围设备;
步骤302,USB设备对第一标识位和第二标识位进行初始化。
具体地,USB设备可以将第一标识位的取值设置为第一预设值,将第二标识位的取值设置为第二预设值。其中,第一标识位用于标识USB设备是否已识别主机的操作系统,第二标识位用于标识主机操作系统的类型。当第一标识位的取值为第一预设值时,表示USB设备未识别主机的操作系统;当第二标识位的取值为第二预设值时,表示主机操作系统的类型为未知。例如,第一预设值和第二预设值可以为0。
步骤303,USB设备等待接收来自主机的USB命令。
步骤304,USB设备判断接收到的USB命令是否为获取配置描述符命令,如果是,则执行步骤306;否则,执行步骤305。
其中,获取配置描述符命令为主机对USB设备枚举阶段,发送给USB设备的USB命令。主机通过向USB设备发送获取配置描述符命令,请求获取USB设备的配置描述符。
步骤305,USB设备根据接收到的USB命令,进行相应的操作,并返回步骤303。
步骤306,USB设备判断第一标识位的取值是否为第一预设值,如果是,则执行步骤308;否则,执行步骤307。
步骤307,USB设备根据接收到的获取配置描述符命令,进行相应的操作,并返回步骤303。
步骤308,USB设备对第二标识位的取值进行判断,如果第二标识位的取值为第二预设值,则执行步骤309;如果第二标识位的取值为第八预设值,则执行步骤312;如果第二标识位的取值为第九预设值,则执行步骤314;如果第二标识位的取值为其他值,则向主机发送预设的描述符信息,并返回步骤303。
步骤309,USB设备对接收到的获取配置描述符命令中的长度字节的取值进行判断,如果该长度字节的取值为第三预设值,则执行步骤310;如果该长度字节的取值为第四预设值,则执行步骤311;如果该长度字节的取值为其他值,则向主机发送预设的描述符信息,并返回步骤303。
其中,获取配置描述符命令可以包含长度为8字节的DATA0数据,长度字节为获取配置描述符命令的DATA0数据的第7个字节,用于告知USB设备需要向主机返回的数据的长度。本实施例中,第三预设值为0x04,第四预设值为0x09,第五预设值为0x56,第六预设值为0xFF,第七预设值为0x20。
例如,USB设备接收到来自主机的获取配置描述符命令为:
PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3
PID:DATA0 data:80 06 00 01 00 00 08 00 CRC16:94eb idle:7
PID:ACK idle:3a
USB设备读取到上述获取配置描述符命令中的数据域的第七个字节的取值为0x08,确定该获取配置描述符命令中的长度字节的取值为0x08,以及自身需要向主机返回8个字节的数据。
步骤310,USB设备将第二标识位的取值设置为第八预设值,向主机发送配置描述符的长度信息,并返回步骤303。
其中,当第二标识位的取值为第八预设值时,表示主机操作系统可能为iOS,本实施例中,第八预设值为iOSRe。
步骤311,USB设备将第二标识位的取值设置为第九预设值,向主机发送配置描述符的长度信息,并返回步骤303。
其中,当第二标识位的取值为第九预设值时,表示主机操作系统可能为Linux或者Windows,本实施例中,第九预设值为Linux/Windows_Re。
步骤312,USB设备判断接收到的获取配置描述符命令中的长度字节的取值是否为第五预设值,如果是,则执行步骤313;否则,向主机发送预设的描述符信息,并返回步骤303。
步骤313,USB设备确定主机操作系统为iOS,将第二标识位的取值设置为第十预设值,将第一标识位的取值设置为第十一预设值,根据主机操作系统向主机返回相应的配置描述符和接口描述符,并返回步骤303。
其中,当第二标识位的取值为第十预设值时,表示主机操作系统为iOS;当第一标识位的取值为第十一预设值时,表示USB设备已识别主机的操作系统。本实施例中,第十预设值为iOS,第十一预设值为1。
本实施例中,USB设备识别主机操作系统为iOS时,选择CCID(USB Chip/Smart Card Interface Devices-USB,芯片智能卡接口设备)协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段的取值设置为第十四预设值,向主机发送配置描述符和接口描述符,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第十四预设值为0x0B,也可以为其他数值。此外,USB设备还可向主机发送端点描述符和CCID类描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,CCID类描述符用于描述USB设备作为CCID设备时所具有的特性。
优选地,USB设备确定主机操作系统为iOS时,还可对自身所包含的、不适用于iOS的内容进行屏蔽。
步骤314,USB设备对接收到的获取配置描述符命令中的长度字节的取值进行判断,如果该长度字节的取值为第六预设值,则执行步骤315;如果该长度字节的取值为第七预设值,则执行步骤316;如果该长度字节的取值为其他值,则向主机发送预设的描述符信息,并返回步骤303。
步骤315,USB设备确定主机操作系统为Windows系统,将第二标识位的取值设置为第十二预设值,将第一标识位的取值设置为第十一预设值,根据主机操作系统向主机返回相应的配置描述符和接口描述符,并返回步骤303。
其中,当第二标识位的取值为第十二预设值时,表示主机操作系统为Windows;当第一标识位的取值为第十一预设值时,表示USB设备已识别主机的操作系统。本实施例中,第十二预设值为Windows,第十一预设值为1。
本实施例中,USB设备识别主机操作系统为Windows系统时,可以选择SCSI(Small Computer System Interface,小型计算机系统接口)协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第二预设字段为bInterfaceProtocol字段,第十五预设值为0x08,也可以为其他数值,第十六预设值为0x50,也可以为其他数值。此外,USB设备还可向主机发送端点描述符,该端点描述符用于描述USB设备的接口所使用的端口的信息。
USB设备识别主机操作系统为Windows系统时,还可以选择HID(HumanInterface Device,人机接口设备)协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第三预设字段的取值分别设置为第十七预设值和第十八预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第三预设字段为bInterfaceSubClass字段,第十七预设值为0x03,也可以为其他数值,第十八预设值为0或1,也可以为其他数值。此外,USB设备还可向主机发送端点描述符、HID描述符、报告描述符和实体描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,HID类描述符用于描述USB设备作为HID设备时所具有的特性,实体描述符用于描述USB设备作为HID设备时所具有的行为特性。
优选地,USB设备确定主机操作系统为Windows系统时,还可对自身所包含的、不适用于Windows系统的内容进行屏蔽。
步骤316,USB设备确定主机操作系统为Linux系统,将第二标识位的取值设置为第十三预设值,将第一标识位的取值设置为第十一预设值,根据主机操作系统向主机返回相应的配置描述符和接口描述符,并返回步骤303。
其中,当第二标识位的取值为第十三预设值时,表示主机操作系统为Linux;当第一标识位的取值为第十一预设值时,表示USB设备已识别主机的操作系统。本实施例中,第十三预设值为Linux,第十一预设值为1。
本实施例中,USB设备识别主机操作系统为Linux系统时,可以选择SCSI协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第二预设字段为bInterfaceProtocol字段,第十五预设值为0x08,也可以为其他数值,第十六预设值为0x50,也可以为其他数值。此外,USB设备还可向主机发送端点描述符,该端点描述符用于描述USB设备的接口所使用的端口的信息。
USB设备识别主机操作系统为Linux系统时,还可以选择HID协议作为自身与主机之间的通信协议,将接口描述符中的第一预设字段和第三预设字段的取值分别设置为第十七预设值和第十八预设值,并使用选择的通信协议与主机进行数据通信。其中,配置描述符用于描述USB设备的配置信息,接口描述符用于描述USB设备的接口信息,第一预设字段为bInterfaceClass字段,第三预设字段为bInterfaceSubClass字段,第十七预设值为0x03,也可以为其他数值,第十八预设值为0或1,也可以为其他数值。此外,USB设备还可向主机发送端点描述符、HID描述符、报告描述符和实体描述符,其中,端点描述符用于描述USB设备的接口所使用的端口的信息,HID类描述符用于描述USB设备作为HID设备时所具有的特性,实体描述符用于描述USB设备作为HID设备时所具有的行为特性。
优选地,USB设备确定主机操作系统为Linux系统时,还可对自身所包含的、不适用于Linux系统的内容进行屏蔽。例如,当USB设备识别主机操作系统为Linux系统,并声明自身为SCSI光盘设备时,USB设备可对自身所包含的ISO文件进行屏蔽。
本发明实施例三的技术方案中,USB设备在接收到主机下发的获取配置描述符命令后,对第一标识位和第二标识位的取值进行判断,并对获取配置描述符命令进行解析,根据第一标识位和第二标识位的取值以及获取配置描述符命令的长度字节的取值,确定主机的操作系统,并在确定主机操作系统后,根据该操作系统使用相应的通信协议与主机进行数据通信,对不能在该操作系统下操作的文件进行屏蔽,使得主机能够准确地识别和操作USB设备,并使USB设备及其应用更加优化。
实施例四
如图4所示,为本发明实施例四中的一种USB设备的结构示意图,包括:
初始化模块401,用于将第一标识位和第二标识位分别初始化为第一预设值和第二预设值。
接收模块402,用于接收来自主机的USB命令。
第一判断模块403,用于判断接收模块402接收到的USB命令是否为获取配置描述符命令。
第一处理模块404,用于在第一判断模块403判断USB命令不是获取配置描述符命令时,根据该USB命令进行相应的操作。
具体地,上述第一处理模块404,具体用于在第一判断模块403判断USB命令不是获取配置描述符命令时,根据主机的操作系统,执行与接收到的USB命令相应的操作。
第二判断模块405,用于在第一判断模块403判断USB命令是获取配置描述符命令时,判断第一标识位的取值是否为第一预设值。
第二处理模块406,用于在所述第二判断模块405判断所述第一标识位的取值不是所述第一预设值时,根据所述获取配置描述符命令,进行相应的操作。
具体地,上述第二处理模块406,用于在第二判断模块405判断第一标识位的取值不是所述第一预设值时,根据所述主机的操作系统,执行与所述接收到的获取配置描述符命令相应的操作。
第三判断模块407,用于在所述第二判断模块405判断所述第一标识位的取值为所述第一预设值时,对所述获取配置描述符命令中的长度字节的取值和所述第二标识位的取值进行判断。
设置模块408,用于在所述第三判断模块407判断所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第三预设值时,将所述第二标识位的取值设置为所述第八预设值;在所述第三判断模块407判断所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第四预设值时,将所述第二标识位的取值设置为所述第九预设值;
在所述第三判断模块407判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,确定所述主机的操作系统为iOS,将所述第一标识位的取值设置为第十一预设值;
在所述第三判断模块407判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值时,确定所述主机的操作系统为Windows系统,将所述第一标识位的取值设置为所述第十一预设值;
在所述第三判断模块407判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,确定所述主机的操作系统为Linux系统,将所述第一标识位的取值设置为所述第十一预设值。
上述设置模块408,还用于在所述第三判断模块407判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,将所述第二标识位的取值设置为第十预设值;
在第三判断模块407判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值时,将所述第二标识位的取值设置为第十二预设值;
在第三判断模块407判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,将所述第二标识位的取值设置为第十三预设值。
发送模块409,用于在第三判断模块407判断所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第三预设值或第四预设值时,向所述主机发送配置描述符的长度信息;在第三判断模块407判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,或者判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值或第七预设值时,向所述主机发送配置描述符;在第三判断模块407判断所述第二标识位的取值和所述长度字节的取值为其他值时,向所述主机发送预设的描述符信息。
上述的USB设备,还包括:
选择模块410,用于在第三判断模块407判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,选择CCID协议作为自身与所述主机之间的通信协议;
在第三判断模块407判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值,或者判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,选择SCSI协议或HID协议作为自身与所述主机之间的通信协议。
具体地,上述选择模块410,具体为用于在第三判断模块407判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,
将接口描述符中的第一预设字段的取值设置为第十四预设值,向所述主机发送配置描述符和所述接口描述符;或者,将接口描述符中的第一预设字段的取值设置为第十四预设值,向所述主机发送所述接口描述符、端点描述符和CCID类描述符;
在第三判断模块407判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值或第七预设值时,
将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,向所述主机发送所述接口描述符;或者,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,向所述主机发送所述接口描述符和端点描述符;或者,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十七预设值和第十八预设值,向所述主机发送所述接口描述符;或者,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十七预设值和第十八预设值,向所述主机发送所述接口描述符、端点描述符、HID描述符、报告描述符和实体描述符。
上述的USB设备,还包括:
屏蔽模块411,用于在第三判断模块407判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,对所述USB设备所包含的、不适用于iOS的内容进行屏蔽;在第三判断模块407判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值时,对所述USB设备所包含的、不适用于Windows系统的内容进行屏蔽;在第三判断模块407判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,对所述USB设备所包含的、不适用于Linux系统的内容进行屏蔽。
本发明实施例四的技术方案中,USB设备根据第一标识位和第二标识位的取值以及获取配置描述符命令的长度字节的取值,确定主机的操作系统,并在确定主机操作系统后,根据该操作系统使用相应的通信协议与主机进行数据通信,对不能在该操作系统下操作的文件进行屏蔽,使得主机能够准确地识别和操作USB设备,并使USB设备及其应用更加优化。
结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (14)
1.一种通用串行总线USB设备识别主机操作系统的方法,其特征在于,包括以下步骤:
S1、USB设备上电;
S2、所述USB设备将第一标识位和第二标识位分别初始化为第一预设值和第二预设值;
S3、所述USB设备等待接收来自主机的USB命令;
S4、所述USB设备判断接收到的USB命令是否为获取配置描述符命令,如果是,则执行步骤S6;否则,执行步骤S5;
S5、所述USB设备根据接收到的USB命令,进行相应的操作,并返回步骤S3;
S6、所述USB设备判断所述第一标识位的取值是否为所述第一预设值,如果是,则执行步骤S8;否则,执行步骤S7;
S7、所述USB设备根据接收到的获取配置描述符命令,进行相应的操作,并返回步骤S3;
S8、所述USB设备对接收到的获取配置描述符命令中的长度字节的取值和所述第二标识位的取值进行判断;
如果所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第三预设值,则执行步骤S9;
如果所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第四预设值,则执行步骤S10;
如果所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值,则执行步骤S11;
如果所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值,则执行步骤S12;
如果所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值,则执行步骤S13;
否则,所述USB设备向所述主机发送预设的描述符信息,并返回步骤S3;
S9、所述USB设备将所述第二标识位的取值设置为所述第八预设值,向所述主机发送配置描述符的长度信息,并返回步骤S3;
S10、所述USB设备将所述第二标识位的取值设置为所述第九预设值,向所述主机发送配置描述符的长度信息,并返回步骤S3;
S11、所述USB设备确定所述主机的操作系统为苹果操作系统iOS,将所述第一标识位的取值设置为第十一预设值,向所述主机发送配置描述符,并返回步骤S3;
S12、所述USB设备确定所述主机的操作系统为Windows系统,将所述第一标识位的取值设置为所述第十一预设值,向所述主机发送配置描述符,并返回步骤S3;
S13、所述USB设备确定所述主机的操作系统为Linux系统,将所述第一标识位的取值设置为所述第十一预设值,向所述主机发送配置描述符,并返回步骤S3。
2.如权利要求1所述的方法,其特征在于,所述USB设备确定所述主机的操作系统为iOS之后,还包括:
将所述第二标识位的取值设置为第十预设值;
所述USB设备确定所述主机的操作系统为Windows系统之后,还包括:
将所述第二标识位的取值设置为第十二预设值;
所述USB设备确定所述主机的操作系统为Linux系统之后,还包括:
将所述第二标识位的取值设置为第十三预设值。
3.如权利要求1所述的方法,其特征在于,所述USB设备根据接收到的USB命令,进行相应的操作,具体为:
所述USB设备根据所述主机的操作系统,执行与所述接收到的USB命令相应的操作。
4.如权利要求1所述的方法,其特征在于,所述USB设备根据接收到的获取配置描述符命令,进行相应的操作,具体为:
所述USB设备根据所述主机的操作系统,执行与所述接收到的获取配置描述符命令相应的操作。
5.如权利要求1所述的方法,其特征在于,所述USB设备确定所述主机的操作系统为iOS之后,还包括:
所述USB设备选择芯片智能卡接口设备CCID协议作为自身与所述主机之间的通信协议;
所述USB设备确定所述主机的操作系统为Windows系统或Linux系统之后,还包括:
所述USB设备选择小型计算机系统接口SCSI协议或人机接口设备HID协议作为自身与所述主机之间的通信协议。
6.如权利要求5所述的方法,其特征在于,所述USB设备选择CCID协议作为自身与所述主机之间的通信协议,具体为:
所述USB设备将接口描述符中的第一预设字段的取值设置为第十四预设值,向所述主机发送所述接口描述符;
或者,
所述USB设备将接口描述符中的第一预设字段的取值设置为第十四预设值,向所述主机发送所述接口描述符、端点描述符和CCID类描述符;
所述USB设备选择SCSI协议作为自身与所述主机之间的通信协议,具体为:
所述USB设备将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,向所述主机发送所述接口描述符;
或者,
所述USB设备将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,向所述主机发送所述接口描述符和端点描述符;
所述USB设备选择HID协议作为自身与所述主机之间的通信协议,具体为:
所述USB设备将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十七预设值和第十八预设值,向所述主机发送所述接口描述符;
或者,
所述USB设备将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十七预设值和第十八预设值,向所述主机发送所述接口描述符、端点描述符、HID描述符、报告描述符和实体描述符。
7.如权利要求1所述的方法,其特征在于,所述USB设备确定所述主机的操作系统为iOS之后,还包括:
所述USB设备对自身所包含的、不适用于iOS的内容进行屏蔽;
所述USB设备确定所述主机的操作系统为Windows系统之后,还包括:
所述USB设备对自身所包含的、不适用于Windows系统的内容进行屏蔽;
所述USB设备确定所述主机的操作系统为Linux系统之后,还包括:
所述USB设备对自身所包含的、不适用于Linux系统的内容进行屏蔽。
8.一种通用串行总线USB设备,其特征在于,包括:
初始化模块,用于将第一标识位和第二标识位分别初始化为第一预设值和第二预设值;
接收模块,用于接收来自主机的USB命令;
第一判断模块,用于判断所述接收模块接收到的USB命令是否为获取配置描述符命令;
第一处理模块,用于在所述第一判断模块判断所述USB命令不是获取配置描述符命令时,根据所述USB命令进行相应的操作;
第二判断模块,用于在所述第一判断模块判断所述USB命令是获取配置描述符命令时,判断所述第一标识位的取值是否为所述第一预设值;
第二处理模块,用于在所述第二判断模块判断所述第一标识位的取值不是所述第一预设值时,根据所述获取配置描述符命令,进行相应的操作;
第三判断模块,用于在所述第二判断模块判断所述第一标识位的取值为所述第一预设值时,对所述获取配置描述符命令中的长度字节的取值和所述第二标识位的取值进行判断;
设置模块,用于在所述第三判断模块判断所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第三预设值时,将所述第二标识位的取值设置为第八预设值;在所述第三判断模块判断所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第四预设值时,将所述第二标识位的取值设置为第九预设值;
在所述第三判断模块判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,确定所述主机的操作系统为苹果操作系统iOS,将所述第一标识位的取值设置为第十一预设值;
在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值时,确定所述主机的操作系统为Windows系统,将所述第一标识位的取值设置为所述第十一预设值;
在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,确定所述主机的操作系统为Linux系统,将所述第一标识位的取值设置为所述第十一预设值;
发送模块,用于在所述第三判断模块判断所述第二标识位的取值为所述第二预设值,且所述长度字节的取值为第三预设值或第四预设值时,向所述主机发送配置描述符的长度信息;在所述第三判断模块判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,或者判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值或第七预设值时,向所述主机发送配置描述符;在所述第三判断模块判断所述第二标识位的取值和所述长度字节的取值为其他值时,向所述主机发送预设的描述符信息。
9.如权利要求8所述的USB设备,其特征在于,
所述设置模块,还用于在所述第三判断模块判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,将所述第二标识位的取值设置为第十预设值;
在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值时,将所述第二标识位的取值设置为第十二预设值;
在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,将所述第二标识位的取值设置为第十三预设值。
10.如权利要求8所述的USB设备,其特征在于,
所述第一处理模块,具体用于在所述第一判断模块判断所述USB命令不是获取配置描述符命令时,根据所述主机的操作系统,执行与所述接收到的USB命令相应的操作。
11.如权利要求8所述的USB设备,其特征在于,
所述第二处理模块,用于在所述第二判断模块判断所述第一标识位的取值不是所述第一预设值时,根据所述主机的操作系统,执行与所述接收到的获取配置描述符命令相应的操作。
12.如权利要求8所述的USB设备,其特征在于,还包括:
选择模块,用于在所述第三判断模块判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,选择芯片智能卡接口设备CCID协议作为自身与所述主机之间的通信协议;
在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值,或者判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,选择小型计算机系统接口SCSI协议或人机接口设备HID协议作为自身与所述主机之间的通信协议。
13.如权利要求12所述的USB设备,其特征在于,
所述选择模块,具体为用于在所述第三判断模块判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,
将接口描述符中的第一预设字段的取值设置为第十四预设值,向所述主机发送所述接口描述符;或者,将接口描述符中的第一预设字段的取值设置为第十四预设值,向所述主机发送所述接口描述符、端点描述符和CCID类描述符;
在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值或第七预设值时,
将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,向所述主机发送所述接口描述符;或者,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十五预设值和第十六预设值,向所述主机发送所述接口描述符和端点描述符;或者,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十七预设值和第十八预设值,向所述主机发送所述接口描述符;或者,将接口描述符中的第一预设字段和第二预设字段的取值分别设置为第十七预设值和第十八预设值,向所述主机发送所述接口描述符、端点描述符、HID描述符、报告描述符和实体描述符。
14.如权利要求8所述的USB设备,其特征在于,还包括:
屏蔽模块,用于在所述第三判断模块判断所述第二标识位的取值为第八预设值,且所述长度字节的取值为第五预设值时,对所述USB设备所包含的、不适用于iOS的内容进行屏蔽;在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第六预设值时,对所述USB设备所包含的、不适用于Windows系统的内容进行屏蔽;在所述第三判断模块判断所述第二标识位的取值为第九预设值,且所述长度字节的取值为第七预设值时,对所述USB设备所包含的、不适用于Linux系统的内容进行屏蔽。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210589947.1A CN103092799B (zh) | 2012-12-28 | 2012-12-28 | 一种usb设备及其识别主机操作系统的方法 |
US14/433,964 US9928197B2 (en) | 2012-12-28 | 2013-11-29 | USB device and method thereof for recognizing host operating system |
PCT/CN2013/088180 WO2014101626A1 (zh) | 2012-12-28 | 2013-11-29 | 一种usb设备及其识别主机操作系统的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210589947.1A CN103092799B (zh) | 2012-12-28 | 2012-12-28 | 一种usb设备及其识别主机操作系统的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103092799A CN103092799A (zh) | 2013-05-08 |
CN103092799B true CN103092799B (zh) | 2015-07-22 |
Family
ID=48205389
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210589947.1A Active CN103092799B (zh) | 2012-12-28 | 2012-12-28 | 一种usb设备及其识别主机操作系统的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9928197B2 (zh) |
CN (1) | CN103092799B (zh) |
WO (1) | WO2014101626A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103092799B (zh) * | 2012-12-28 | 2015-07-22 | 飞天诚信科技股份有限公司 | 一种usb设备及其识别主机操作系统的方法 |
CN103647648B (zh) * | 2013-12-10 | 2017-01-18 | 飞天诚信科技股份有限公司 | 一种安全通讯的方法 |
CN104035783A (zh) * | 2014-06-27 | 2014-09-10 | 北京金和软件股份有限公司 | 一种应用程序中适配第三方网页的平台集成方法和系统 |
CN104778143B (zh) * | 2015-03-20 | 2018-06-01 | 飞天诚信科技股份有限公司 | 主动与苹果设备连接并进行通信的方法和苹果设备附件 |
TW201702805A (zh) * | 2015-07-06 | 2017-01-16 | Dexin Corp | 辨識電腦系統之輸入裝置及其辨識方法 |
CN106612368B (zh) * | 2015-10-27 | 2019-11-05 | 比亚迪股份有限公司 | 语音采集系统、语音采集器及其信息传输控制方法 |
CN106126446B (zh) * | 2016-06-22 | 2019-01-04 | 飞天诚信科技股份有限公司 | 一种USB设备及其识别MacOS系统的方法 |
US20180060260A1 (en) * | 2016-08-24 | 2018-03-01 | Prolific Technology Inc. | Method and device capable of automatically identifying host operating systems |
TWI623240B (zh) * | 2016-09-12 | 2018-05-01 | 宏碁股份有限公司 | 可攜式電子裝置以及更新資料之方法 |
CN108536626A (zh) * | 2018-03-28 | 2018-09-14 | 深圳市四季宏胜科技有限公司 | 通道桥接方法、桥接设备、计算机设备和计算机程序产品 |
CN110968441B (zh) * | 2018-09-28 | 2023-06-06 | 慧荣科技股份有限公司 | 存储卡存取装置及方法 |
CN109471597B (zh) * | 2018-11-01 | 2022-02-18 | 郑州云海信息技术有限公司 | 存储设备的系统重置方法、装置、系统及可读存储介质 |
CN110688052B (zh) * | 2019-09-26 | 2021-06-08 | 广州视源电子科技股份有限公司 | 人机交互设备枚举处理方法、装置及人机交互设备 |
CN111857842A (zh) * | 2020-06-17 | 2020-10-30 | 天津赢达信科技有限公司 | 一种USB复合设备在Windows和Android显示不同硬件设备的方法 |
CN111930184B (zh) * | 2020-10-13 | 2021-01-01 | 飞天诚信科技股份有限公司 | 一种外接设备模拟键盘的实现方法、装置及系统 |
CN112068893B (zh) * | 2020-11-12 | 2021-03-16 | 飞天诚信科技股份有限公司 | 一种usb设备及其区分移动设备操作系统的方法 |
CN113032297B (zh) * | 2021-02-23 | 2023-12-29 | 西安广和通无线软件有限公司 | Usb网卡设备的配置方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101078985A (zh) * | 2006-05-23 | 2007-11-28 | 国际商业机器公司 | 用于识别在计算机系统上运行的操作系统的方法和设备 |
CN101957807A (zh) * | 2010-09-16 | 2011-01-26 | 北京飞天诚信科技有限公司 | USB设备识别主机Windows操作系统版本类型的方法 |
CN102043751A (zh) * | 2010-06-29 | 2011-05-04 | 北京飞天诚信科技有限公司 | Usb设备识别主机操作系统的方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040054836A1 (en) * | 2002-09-18 | 2004-03-18 | Cheng-Shing Lai | Method of data access by simulating an external device to be a hard disk drive |
TWI322355B (en) * | 2006-10-17 | 2010-03-21 | Egis Technology Inc | Driverless signal generating apparatus and control method thereof |
US7644217B2 (en) * | 2007-03-02 | 2010-01-05 | Microchip Technology Incorporated | Detecting connection to a USB host or hub without using an extra status input |
US8035401B2 (en) * | 2007-04-18 | 2011-10-11 | Cypress Semiconductor Corporation | Self-calibrating driver for charging a capacitive load to a desired voltage |
TW200943188A (en) * | 2008-04-01 | 2009-10-16 | Sunplus Innovation Technology Inc | A method for automatically detecting an operating system on a USB device |
US20100082846A1 (en) * | 2008-10-01 | 2010-04-01 | Kyung Hwan Kim | Usb device and method for connecting the usb device with usb host |
US20100262726A1 (en) * | 2009-01-13 | 2010-10-14 | Tauscher Brian E | Method and apparatus for implementing a limited functionality embedded universal serial (USB) host controller on a fully functional downstream USB port |
US8661164B2 (en) * | 2010-08-24 | 2014-02-25 | Mediatek Inc. | Method of USB device enumeration including detecting the operating system type of the USB host |
US8539131B2 (en) * | 2010-09-23 | 2013-09-17 | Intel Corporation | Root hub virtual transaction translator |
TW201227260A (en) * | 2010-12-22 | 2012-07-01 | Ralink Technology Corp | Usb system and power management module and method thereof |
US20140129681A1 (en) * | 2011-06-10 | 2014-05-08 | Dmitry Alekseevich Gorilovsky | Method of installing a driver to emulate a network card |
CN103092799B (zh) | 2012-12-28 | 2015-07-22 | 飞天诚信科技股份有限公司 | 一种usb设备及其识别主机操作系统的方法 |
-
2012
- 2012-12-28 CN CN201210589947.1A patent/CN103092799B/zh active Active
-
2013
- 2013-11-29 WO PCT/CN2013/088180 patent/WO2014101626A1/zh active Application Filing
- 2013-11-29 US US14/433,964 patent/US9928197B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101078985A (zh) * | 2006-05-23 | 2007-11-28 | 国际商业机器公司 | 用于识别在计算机系统上运行的操作系统的方法和设备 |
CN102043751A (zh) * | 2010-06-29 | 2011-05-04 | 北京飞天诚信科技有限公司 | Usb设备识别主机操作系统的方法 |
CN101957807A (zh) * | 2010-09-16 | 2011-01-26 | 北京飞天诚信科技有限公司 | USB设备识别主机Windows操作系统版本类型的方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2014101626A1 (zh) | 2014-07-03 |
US9928197B2 (en) | 2018-03-27 |
CN103092799A (zh) | 2013-05-08 |
US20150293869A1 (en) | 2015-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103092799B (zh) | 一种usb设备及其识别主机操作系统的方法 | |
US8862790B2 (en) | Method for identifying version type of windows operating system on a host by a USB device | |
US8725909B2 (en) | Method for identifying host operating system by universal serial bus (USB) device | |
US6941405B2 (en) | System and method capable of offloading converter/controller-specific tasks to a system microprocessor | |
CN107624247B (zh) | 自动设备-触控笔配对 | |
US7412553B2 (en) | Enhanced protocol conversion system capable of providing offloaded protocol instruction processing | |
US9411990B2 (en) | Working method of a multi-slot card reader based on the standard CCID protocol | |
US9589160B2 (en) | Working method for smart card reader | |
TWI393009B (zh) | 資料共享及傳輸之系統及方法 | |
US20050182881A1 (en) | Extended-Secure-Digital Interface Using a Second Protocol for Faster Transfers | |
KR102605960B1 (ko) | 메모리 카드, 메모리 카드 어댑터 및 단말 장치 | |
CN1418349A (zh) | 在智能卡和主站之间通信的方法 | |
JP2006079613A (ja) | 取り外し可能な電子デバイスとそれの方法 | |
JP2007172630A (ja) | 着脱可能な電子カードのインタフェース | |
TWI760615B (zh) | 用於進行記憶裝置之寫保護指令之偵測控制的方法、控制晶片以及電子裝置 | |
KR20110124348A (ko) | 스마트 카드 리더 | |
CN109446120B (zh) | 一种USB设备及其识别MacOS系统的方法 | |
US11893436B2 (en) | Memory card identification method and mobile device | |
CN107566718B (zh) | 一种两用监控摄像机以及实现方法 | |
CN101751276A (zh) | 数据卡的启动方法及数据卡设备 | |
TWI587147B (zh) | 自動辨識主機作業系統之方法與usb裝置 | |
CN108132847A (zh) | 一种数据处理方法、第一电子设备和计算机存储介质 | |
KR101570662B1 (ko) | 비휘발성 메모리 저장 장치와 통신하기 위한 방법과 시스템 | |
CN101814057A (zh) | 一种驱动信息安全设备的方法及信息安全设备 | |
TW201005653A (en) | Computer system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 17th floor, building B, Huizhi building, No.9, Xueqing Road, Haidian District, Beijing 100085 Patentee after: Feitian Technologies Co.,Ltd. Country or region after: China Address before: 100085 17th floor, block B, Huizhi building, No.9 Xueqing Road, Haidian District, Beijing Patentee before: Feitian Technologies Co.,Ltd. Country or region before: China |
|
CP03 | Change of name, title or address |