通过对USB HID设备进行二次枚举以识别主机操作系统的方法
技术领域
本发明涉及计算机移动技术领域,尤其是一种通过对USB HID设备进行二次枚举以识别主机操作系统的方法。
背景技术
由于USB设备具有可热拔插、标准统一、可连接多个设备等优点,使用USB接口的设备与日俱增,例如数码相机、扫描仪、游戏杆、磁带和软驱、图像设备、打印机、键盘、鼠标等等。然而有些USB设备功能的实现方法随着操作系统的不同有很大的区别。这就要求设备能通过某种方法检测到主机的操作系统类型,从而实现其应有的功能。
图1为现有USB设备以识别主机操作系统的流程图,采用图1中的方法是在枚举过程中判断设备类型和是否接收到预设指令来决定当前操作系统类型。然而,此种方法存在着缺陷如下:
1、只能区分WINDOWS操作系统的不同版本,不能区分LINUX操作系统与MAC操作系统;
2、若设备为HID设备,则不能判断操作系统类型,在主机不断电的情况下如果切换了操作系统则需要重新插拔USB HID设备才能识别出当前系统类型;
3、上述方法的操作流程比较复杂。
发明内容
针对上述技术的不足之处,本发明提供一种可准确的识类当前系统的类型,在不断电的情况下发生操作系统切换时不必重新插拔USB HID设备的通过对USB HID设备进行二次枚举以识别主机操作系统的方法。
为实现上述目的,本发明提供一种通过对USB HID设备进行二次枚举以识别主机操作系统的方法,包括以下步骤:
S1、USB HID设备上电,并进行初始化;
S2、对USB HID设备进行第一次枚举以确定主机操作系统的类型;
S3、在USB HID设备与主机操作系统之间依次完成软掉电与再次连接处理后进行第二次枚举,以保证USB HID设备能够正常工作;
S4、USB HID设备在接收到主机发送的重启标志后,则重新执行整个流程来判断主机重启后的操作系统。
在步骤S1中,USB HID设备通过USB总线连接到主机,并从主机的电源电压或工作电压处获取其工作电压。
在步骤S1中,USB HID设备将自身存储的上电标识、操作系统标识初始化为默认标识。
在步骤S2包括以下步骤:
200、USB HID设备接收主机操作系统发送的系统标志性数据;
201、USB HID设备逐一对主机操作系统发送的系统标志性数据做出响应;
202、USB HID设备主机操作系统发送的相关标志性数据存储起来,并根据相关标志性数据判断当前操作系统的类型。
在步骤200与步骤201中,系统标志性数据包括取设备描述符、设置设备地址、取配置描述符、取端点描述符、取字符串描述符、取端点描述符与选择配置。
在步骤S3中包括以下步骤:
300、对USB HID设备与主机操作系统进行软掉电处理后再次连接;
301、根据当前操作系统类型选取相应的配置描述符对USB HID设备进行第二次枚举。
在步骤300中,USB HID设备在预定时间内,使其内部的上拉电阻断开与主机电源电压或工作电压的连接,在超过预定时间后,USB HID设备中的上拉电阻再次与主机的电源电压或工作电压连接,使USB HID设备再次处于上电状态。
在步骤S4中,判断USB HID设备是否收到主机发送的重启标志,若确认收到,则返回步骤S2重新执行;若确认没有收到,则返回步骤S3,检测主机是否发送了重启标志。
与现有技术相比,本发明具有以下优点:
1、本发明具有流程简洁的优点,通过在枚举过程中不同操作系统发送的数据之间的区别、以及主机重启过程中发送给USB HID设备的某些标志性数据来判别出当前正在使用的操作系统类型,与现有USB HID设 备识别主机操作系统的方法相比,不仅可识别出Windows系统的不同版本,如XP、WIN7等,还可识别出Linux操作系统和Mac操作系统;
2、在主机不断电的情况下,如果切换了操作系统,不需要重新插拔USB HID设备就能识别出当前系统类型。
附图说明
图1为现有USB设备以识别主机操作系统的流程图;
图2为本发明的流程图;
图3为图2中步骤S2中的流程图;
图4为图3中步骤S3中的流程图;
图5为本发明的实施例的流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步详细说明。
如图2至图5所示,本发明提供一种通过对USB HID设备进行二次枚举以识别主机操作系统的方法,包括以下步骤:
S1、USB HID设备上电,并进行初始化。
USB HID设备上电后先执行初始化操作;具体地,USB HID设备通过USB总线连接到主机,并从主机Vcc(电源电压或工作电压)处获取工作电压;初始化操作具体包括:USB HID设备将自身存储的上电标识、操作系统标识初始化为默认标识。
S2、对USB HID设备进行第一次枚举以确定主机操作系统的类型。
具体地,在步骤S2包括以下步骤:
200、USB HID设备接收主机操作系统发送的系统标志性数据;
201、USB HID设备逐一对主机操作系统发送的系统标志性数据做出响应;
202、USB HID设备主机操作系统发送的相关标志性数据存储起来,并根据相关标志性数据判断当前操作系统的类型。
在步骤200与步骤201中,系统标志性数据包括取设备描述符、设置设备地址、取配置描述符、取端点描述符、取字符串描述符、取端点描述符与选择配置。
主机操作系统时刻监测USB总线上是否有设备插入,具体是通过检测Vcc上拉电阻的变化来确定的,并在检测到USB设备插入时,加载设备总线驱动,开始对USB设备进行枚举操作,然后USB设备接收主机下发的一系列setup包,包括“取设备描述符”、“设置设备地址”、“取配置描述符”、“取端点描述符”、“取字符串描述符”、“取端点描述符”、“选择配置”等命令,USB HID设备逐一对其做出响应,完成枚举过程。
在枚举过程中将主机发送的某些标志性数据存储起来。如Mac操作系统和Windows7操作系统的区别在于,Mac操作系统不会对USB HID设备发送Set Idle命令,而Windows7操作系统则发送;Mac操作系统和Linux操作系统的区别在于,Linux操作系统不会对设备发送Get InPutReport命令。枚举完成后根据这些标志来判断出当前操作系统类型。
S3、在USB HID设备与主机操作系统之间依次完成软掉电与再次连接处理后进行第二次枚举,以保证USB HID设备能够正常工作。
具体地,在步骤S3中包括以下步骤:
300、对USB HID设备与主机操作系统进行软掉电处理后再次连接;
301、根据当前操作系统类型选取相应的配置描述符等数据对USBHID设备进行第二次枚举。
在步骤300中,USB HID设备在预定时间内,使其内部的上拉电阻断开与主机电源电压或工作电压的连接,在超过预定时间后,USB HID设备中的上拉电阻再次与主机的电源电压或工作电压连接,使USB HID设备再次处于上电状态。
根据当前操作系统类型选取相应的方法重新枚举USB设备。重新枚举即先将设备软掉电,然后选取对应的描述符等信息进行第二次USB枚举。USB HID设备是通过改变主机Vcc(电源电压或工作电压)的上拉电阻状态来告知主机自身的插拔状态,USB HID设备内部集成有上拉电阻,默认状态下是不与Vcc相连的,当USB HID设备与主机建立连接时,USB设备内部的上拉电阻连接到Vcc上,这样主机便可以通过检测Vcc上的上拉电阻的变化来确定是否有USB HID设备连入了;软掉电处理具体是指:USB HID设备断开内部上拉电阻与Vcc的连接,这样,主机操作系统将会监控到USB HID设备是拔出状态,但USB HID设备是与Vcc相连的,依然可以从Vcc处获取电源,USB HID设备依然是处于上 电状态的,断开预定时间后(极短的时间),USB HID设备内部上拉电阻将再次连到Vcc,主机操作系统将再次监控到USB HID设备的插入,重新开始进行枚举操作。
S4、USB HID设备在接收到主机发送的重启标志后,则重新执行整个流程来判断主机重启后的操作系统。
具体地,在步骤S4中,判断USB HID设备是否收到主机发送的重启标志,若确认收到,则返回步骤S2重新执行;若确认没有收到,则返回步骤S3,检测主机是否发送了重启标志。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。