一种Linux系统数据卡设备端口识别的方法及装置的制作方法

文档序号:6601390阅读:235来源:国知局
专利名称:一种Linux系统数据卡设备端口识别的方法及装置的制作方法
技术领域
本发明涉及数据卡设备识别的技术领域,尤其涉及一种Linux系统下数据卡设备 端口识别的实现方法及装置。
背景技术
要让无线数据卡发挥的性能发挥到最大,需要PC侧数据卡管理软件的配合。Windows系统下的设备端口识别流程大致如此,先要为设备创建设备描述表,该表 必须包括设备PID(ProdUCt ID),及该设备枚举的端口描述信息,这些信息的格式必须符合 Windows系统对接口描述格式的要求。表中这些端口描述信息必须是准确且唯一,可以确保 应用程序根据端口信息描述,快速而精确地判断端口的属性是诊断口、或是modem 口、或是 AT 口等。由于系统的处理方式不同,Linux系统没有类似于Windows系统的端口处理机制, 所以Windows系统下的设备端口识别方式在Linux系统下无法正常使用。所以Linux系统 下的数据卡设备端口识别方法应运而生,即如何让Linux系统下的PC侧软件正确识别数据 卡设备,并能正确区分AT (Attention)命令控制口和Modem数据口。

发明内容
本发明所要解决的技术问题是提供一种在Linux系统下的数据卡设备端口识别 的方法,以便准确判断设备上各个端口的属性问题。本发明采用了如下技术方案一种Linux系统数据卡设备端口识别的方法,包括如下步骤获取USB设备的信息,将所述信息中有关待识别USB设备的设备信息予以记录;根据所述待识别USB设备的设备信息,获取所述待识别USB设备中各端口的端口 fn息;根据所述各端口信息,识别所述端口的属性。进一步地,所述的获取USB设备的信息具体为调用系统中与USB设备有关的库函 数获取USB设备的信息。进一步地,所述的调用系统中与USB设备有关的库函数获取USB设备的信息包括 调用与初始化有关的库函数对所述USB设备进行初始化后,调用与信息获取有关库函数获 取所述USB设备的信息。进一步地,所述的获取所述待识别USB设备中各端口的端口信息之前还包括如 果所述待识别USB设备是虚拟光盘设备,将其切换为普通的USB设备。进一步地,所述的根据所述各端口信息,识别所述端口的属性具体为根据所述 端口信息,在所述各端口中找出两个对AT命令有响应的端口,并根据预先设置的AT 口和 Modem 口的顺序属性,识别所述两个对AT命令有响应的端口的属性。进一步地,所述设备信息包括设备商ID和产品识别码。
进一步地,所述端口信息包括端口名称和端口设备文件路径。本发明还提供一种Linux系统数据卡设备端口识别装置,包括设备信息获取模 块、端口信息获取模块、端口识别模块;所述设备信息获取模块,用于获取待识别USB设备的设备信息;所述端口信息获取模块,用于根据所述待识别USB设备的设备信息,获取所述待 识别USB设备的所有端口的端口信息;所述端口属性识别模块,用于根据所述端口信息,获取所述所有端口的属性。进一步地,所述设备信息包括设备商ID和产品识别码。进一步地,所述端口信息包括端口名称和端口设备文件路径。本发明的有益效果是通过获取设备信息和端口信息,并根据AT 口和Modem 口可 以收发AT命令的特性来正确识别AT端口和Modem 口,从而可以准确判断设备上各个端口 的属性问题,解决了 Linux系统下无端口描述机制时照样可以进行识别数据卡设备端口。


图1是本发明方法实施例的流程示意图;图2是图1所示实施例中获取数据卡设备信息的流程示意图;图3是图1所示实施例中获取设备端口信息的流程示意图;图4是图1所示实施例中识别端口属性的流程示意图;图5是本发明方法预先设置端口顺序属性实施例的流程示意图;图5A是图5所示实施例的XML格式示意图;图5B是图5所示实施例的端口信息数组示意图。
具体实施例方式下面通过具体实施方式
结合附图对本发明作进一步详细说明。本发明实施例提供了一种Linux系统下数据卡设备端口识别的实现方法,如图1 所示,通过执行如下步骤S100至步骤S300,从而实现准确判断设备上各个端口的属性。步骤S100,获取设备信息,即,获取USB设备的信息,并记录待识别USB设备的设备 fn息;步骤S200,根据所述待识别USB设备的设备信息,获取所述待识别USB设备的所有 端口的端口信息;步骤S300,根据所述端口信息,获取所述所有端口的属性,即识别AT端口和Modem端□。对于步骤S100,要获取设备信息,首先要识别设备,获取设备的VID (Vendor ID 设备商ID)和PID(Product ID 产品识别码)。本实施例通过应用程序调用系统中和 USB设备有关的库函数获取D-Bus上的USB设备信息;系统返回的USB设备信息格式 为“VID:PID”,比如系统返回了 3种设备的信息,分别是Device l:lbd2:0001 ;Device 2:lbd2:0002 ;Device 3:19d2:0031。那么 Device 1 的 VID = lbd2,PID = 0001 ;Device 2 的 VID = lbd2, PID = 0002 ;Device3 的 VID = 19d2, PID = 0031。其中 VID = 19d2,是应 用程序需要识别的设备,那么应用程序会将Device3的设备信息VID = 19d2,PID = 0031
4记录下来,留待下一步处理。上述获取数据卡设备的PID的过程具体包括如下步骤2-1至2-4,如图2所示。步骤2-1,设备端口初始化,获取系统中所有USB设备信息。通过调用函数usb_ init ()、usb_find_busses () > usb_find_devices ()对设备进行初始化,通过函数 usb_get_ busses ()获取D-Bus上的USB设备信息。本实施例中需要获取的USB设备信息很简单,只 需要设备的VID和PID即可,其中,VID可以表示设备厂家,而PID可以表示该厂家的某款 设备。步骤2-2,判断VID是否是指定设备的VID。应用程序通常只识别指定VID值的设 备,当然这个值是可配置的。如果VID是指定设备的VID值,那么转步骤2-3 ;否则转步骤
2-4;步骤2-3,没有合适的设备,即需要处理的设备没有被插入,初始化模块继续运行, 直到合适的设备被发现。步骤2-4,记录该USB设备信息,获取数据卡设备的PID。至此,获取设备pid过程结束。在执行步骤S100获取到设备信息后执行步骤S200,通过枚举设备端口以获取该 设备的所有端口。先要判断该设备是否是虚拟光驱设备,如果是则先要弹出光盘,并将虚拟 光驱设备切换成正常的USB端口设备。根据设备的VID,判断找到的USB设备是否是应用程 序要支持的设备,如果是则从系统里获取端口信息,否则不进行任何处理。具体步骤描述如 图3所示,包括步骤3-1至步骤3-7 步骤3-1,获取当前插入设备的pid值,获取方法参考前述步骤s100 ;步骤3-2,根据PID值判断识别到的设备是否是虚拟光盘设备;如果是虚拟光盘 设备,则需要先弹出光盘设备,切换设备为普通USB设备,即转步骤3-3处理,;否则转步骤
3-6;步骤3-3,弹出光盘设备,本实施例中使用的命令是“ejectMODEMCONNECTION” ;步骤3-4,判断弹出光盘是否成功,如果成功转步骤3-5 ;否则转步骤3_3 ;步骤3-5,光盘弹出后,PID会自动切换到端口设备的PID,通过USB设备管理模块 获取设备的PID和VID信息;步骤3-6,记录该USB设备信息,获取数据卡设备的PID值;步骤3-7,从系统中获取由驱动模块枚举出的数据卡设备端口,设备驱动模块将枚 举出设备上所有的端口。端口信息通常包括端口名称和端口设备文件路径,Linux系统通常 将端口设备文件放在/dev目录下,设备端口名称通常为ttyUSB*(或者ttyACM*,其中*代 表0-n间数字),也就是说枚举出的端口将是ttyUSBO、ttyUSBl、ttyUSB2、.、ttyUSBn (或 者是ttyACM*,其中*是0-n间的数字)。应用程序可以通过配置对端口设备进行支持,缺 省支持ttyUSB*。端口名称和具体设备有关。Linux系统下所有的设备,都以文件形式进行 管理,设备就是一个个的I/O文件,对设备的操作就是对这些文档进行操作,读写、查询、删 除等等。驱动模块枚举出的设备端口的完整文档路径是/dev/ttyUSB*或/dev/ttyACM*,应 用程序对设备端口的操作,就是对这些I/O的操作。 获取了该设备所有端口信息后,执行步骤S300识别AT端口和Modem端口。本实 施例中根据at 口和Modem 口可以收发AT命令的特性,通过端口的响应状态,以及根据事先
5设置的AT 口和Modem 口的顺序属性,从而正确识别AT端口和Medom 口。即,先在所有枚举 出的端口中,找出对AT命令有响应的端口,再通过设备PID号查询本设备的顺序,最终正确 识别出AT 口和Modem 口。具体步骤如图4所示,包括步骤4_1至步骤4_12。步骤4-1,设置founcLdevicejum为所有枚举出的设备端口数;步骤4-2,初始化Send_at_ok_num和i,其中Send_at_ok_num为收发AT命令正常 的端口计数器,i为端口处理的循环控制计数器,实施例中初始化二者为Send_at_0k_nUm =0、i = 0 ;步骤4-3,判断i是否大于founcLdevicejum ;如果大于,则转步骤4_8 ;否则转步 骤 4-4 ;步骤4-4,向i对应的端口发送AT端口,S卩向枚举出来的端口 /dev/ttyUSBi (或者 /dev/ttyACMi)发送AT命令,然后等待响应;步骤4-5,判断AT命令响应是否超时;如果没有超时则转步骤4_6 ;否则AT命令响 应超时,转步骤4-9 ;步骤4-6,端口可以正常响应AT命令,此端口是AT 口或Modem 口之一,并且端口状 态正常,记录该端口设备文件名称/dev/ttyUSBi (或/dev/ttyACMi),转步骤4_7 ;步骤4-7,Send_at_ok_num值累计加一,即 Send_at_ok_num = Send_at_ok_num+l, 表示已找到一个收发AT命令正常的端口,转步骤4-8 ;步骤4-8,判断Send_at_0k_num是否大于2 ;如果大于,则转步骤4_10 ;否则转步 骤 4-9 ;步骤4-9,i值累计加一,表示继续探测下一个枚举出的设备端口,转步骤4-3 ;步骤4-10,有2个设备端口对AT命令有响应,分别是/dev/ttyUSBi和/dev/ ttyUSBj,其中i < j,这两个端口可能是at 口和modem 口,转步骤4-11 ;步骤4-11,判断i = j否?如果条件成立,表示只有一端口可以正常处理AT命令, 端口识别失败,转步骤4-2 ;否则转步骤4-12 ;步骤4-12,设备端口识别成功。用PID号可以查询出设备的端口顺序,从而准确识 别AT 口和Modem 口。即,先查询设备是否是正序设备。在Pid_P0sitive数组里查找设备 的PID号,如果PicLPositive数字中有此设备的PID号,说明此设备的端口是正序排列,那 么 dev/ttyUSBi 是 AT 口,/dev/ttyUSBj 是 Modem 口。如果 Pid_Positive 数字中没有此设 备的PID号,那么再在PicLNePositive数组里查找设备的PID号,如果有此PID号,说明此 设备的端口是逆序排列,那么dev/ttyUSBi是Modem 口,/dev/ttyUSBj是AT 口,端口识别 结束。但是如果在PicLPositive和PicLNePositive数组中都没有找到设备的PID号,那 么只能缺省的认为该设备是正序排列设备,AT 口在前Modem 口后。这种情况往往出现在新 设备推出但没有及时更新设备端口顺序数据表时。上述步骤S300中需要事先设置AT 口和Modem 口的排列顺序,本发明方法采用手 动创建顺序表的方式来设置端口的排列顺序,其实施例如图5所示,手动创建端口顺序表 还有个好处是当新增设备时可以很快在表中配置好,从而顺利识别设备端口。如图5所示, 包括步骤5-1至步骤5-5 步骤5-1,创建设备端口信息文档,以XML文件格式存放,基本格式内容如图5A所 示。XML可以支持的设备数量和应用程序定义的数组长度有关,本实施例中设其缺省值为200。此外,本实施例中,应用程序只需要了解某款设备AT 口和Momem 口之间的排列顺序, 要么AT在前Modem 口在后(本文称为正序),要么AT 口在后Modem 口在前(本文称为逆 序);所以表格分为两大部分,分别放正序排列设备和逆序排列设备。步骤5-2,<Pid_Positive>和</Pid_Positive>间放置的是端口正序排列的设备 PID号,如0x01,0x02,.、0xl08等,在前述数组长度为200时,最多可以是200个设备PID 号。步骤5-3,<Pid_NePositiveX/Pid_NePositive> 间放置的是端口逆序排列的设
备PID号,如0x018.....0x57,0x94等,在前述数组长度为200时,最多可以是200个设备
PID 号。步骤5-4,初始化端 口 信息数组 Pid_Positive 和 Pid_NePositive 数组。Pid_ Positive和Pid_NePositive都是int型的数组,本实施例中数组长度为200 (其他实施例 中长度可扩充),表示同时可支持200个正序排列设备和200个逆序排列设备,如图5B所 示,数组每个单元里放的内容是设备PID号。将端口顺序数据从XML文件中读取到数组中, 正序数据存放在Pid_Positive数组中,逆序的数据放在PicLNePositive数组中。这两个 数组的使用方法如下如果Pid_Positive[i] = 0x31,说明 PID = 0x31 的设备 AT 口禾口 Modem 口是正序 排列的,即AT 口在前Modem 口在后,该设备是应用程序可以支持第i个正序设备。同理,如 果 Pid_NePositive [j] = -0x108,说明 PID = 0x108 的设备 AT 口和 Modem 口是逆序排列 的,即AT 口在后Modem 口在前,该设备是应用程序可以支持第j个逆序设备;步骤5-5,在Pid_Positive和Pid_NePositive数组初始化结束后,应用程序就可 以正常使用这两个数组。常用的操作就是根据PID值查询端口的排列顺序,最终正确识别 出 AT 口禾口 Modem 口。下面给出用于执行上述端口识别方法的Linux系统下数据卡设备端口识别装置 的实施例,包括信息获取模块、端口信息获取模块、端口识别模块;其中,设备信息获取模块 用于获取待识别USB设备的设备信息,端口信息获取模块用于根据待识别USB设备的设备 信息获取待识别USB设备的所有端口的端口信息,端口属性识别模块用于根据所述端口信 息获取所述所有端口的属性。设备信息获取模块具体获取设备信息的过程、端口信息获取 模块具体获取端口信息的过程、以及端口属性识别模块具体识别端口属性的过程可参考前 述方法实施例,此不赘述。以上内容是结合具体的实施方式对本发明所做的进一步详细说明,不能认定本发 明的具体实施只局限于这些说明。对于本发明所述技术领域的普通技术人员来说,在不脱 离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护 范围。
权利要求
一种Linux系统数据卡设备端口识别的方法,其特征在于,包括如下步骤获取USB设备的信息,将所述信息中有关待识别USB设备的设备信息予以记录;根据所述待识别USB设备的设备信息,获取所述待识别USB设备中各端口的端口信息;根据所述各端口信息,识别所述端口的属性。
2.如权利要求1所述的方法,其特征在于,所述的获取USB设备的信息具体为调用系 统中与USB设备有关的库函数获取USB设备的信息。
3.如权利要求2所述的方法,其特征在于,所述的调用系统中与USB设备有关的库函数 获取USB设备的信息包括调用与初始化有关的库函数对所述USB设备进行初始化后,调用 与信息获取有关库函数获取所述USB设备的信息。
4.如权利要求1所述的方法,其特征在于,所述的获取所述待识别USB设备中各端口 的端口信息之前还包括如果所述待识别USB设备是虚拟光盘设备,将其切换为普通的USB 设备。
5.如权利要求1所述的方法,其特征在于,所述的根据所述各端口信息,识别所述端口 的属性具体为根据所述端口信息,在所述各端口中找出两个对AT命令有响应的端口,并 根据预先设置的AT 口和Modem 口的顺序属性,识别所述两个对AT命令有响应的端口的属 性。
6.如权利要求1至5任一项所述的方法,其特征在于,所述设备信息包括设备商ID和 产品识别码。
7.如权利要求1至5任一项所述的方法,其特征在于,所述端口信息包括端口名称和端 口设备文件路径。
8.—种Linux系统数据卡设备端口识别装置,其特征在于,包括设备信息获取模块、 端口信息获取模块、端口识别模块;所述设备信息获取模块,用于获取待识别USB设备的设备信息; 所述端口信息获取模块,用于根据所述待识别USB设备的设备信息, 获取所述待识别USB设备的所有端口的端口信息;所述端口属性识别模块,用于根据所述端口信息,识别所述所有端口的属性。
9.如权利要求8所述的装置,其特征在于所述设备信息包括设备商ID和产品识别码。
10.如权利要求8或9所述的装置,其特征在于所述端口信息包括端口名称和端口设 备文件路径。
全文摘要
本发明公开了一种在Linux系统下的数据卡设备端口识别的方法及装置,包括如下步骤步骤1,获取USB设备的信息,将所述信息中有关待识别USB设备的设备信息予以记录;步骤2,根据所述待识别USB设备的设备信息,获取所述待识别USB设备中各端口的端口信息;步骤3,根据所述各端口信息,识别所述端口的属性。本发明通过获取设备信息和端口信息,并根据AT口和Modem口可以收发AT命令的特性以及事先设置的AT口和Modem口的顺序属性来正确识别AT端口和Modem口,从而可以准确判断设备上各个端口的属性问题,解决了Linux系统下无端口描述机制时照样可以进行识别数据卡设备端口。
文档编号G06F13/10GK101853224SQ20101015798
公开日2010年10月6日 申请日期2010年4月21日 优先权日2010年4月21日
发明者陈颖 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1