版主主,能否让设备向PC机枚举时产生不同的设备名称?

zhongyanchao   2009-11-24 11:24 楼主
版主主,你好!
       能否让设备向PC机枚举时产生不同的设备名称?

        我现在用STM32做了一个读卡器,采用CCID协议,读卡器上有三个不同的插糟,因PC端目前的驱动(windows自带的驱动)不能按照CCID协议,采用不同的SLOT向读卡器发命令. 按照你的建议,向PC机枚举多个设备的方法来解决多插糟的问题,现在各设备都能正常工作,但在PC机列举设备时,设备名称都是相同的,只是在最后PC驱动自动加上不同的数据以区分,客户会不明白哪个设备名称对应哪个插糟,我抓了两张图如下,第一张是设备管理器显示的,应该是改不了,我主要是想改第二张的名称, W5181 Contact Reader 0, W5181 Contact Reader 1,W5181 Contact Reader 2,最后的0,1,2,是驱动自动加上去的, 我想让不同的设备显示不同的名称,如W5181 SAM Reader ,W5181 SIM Reader .请问该如何改,我已尝试两天了,也没找到办法,请指点,谢谢!

回复评论 (20)

这是关于PC端的问题,牵扯到Windows的驱动,我没有做过,不是很清楚。但我估计改起来比较困难。

看你的第2张图,既然这个"PC/SC smartcard reader demo"是你自己写的,你何不在读出系统提供的名称之后,在显示的时候换一个名字呢?
点赞  2009-11-24 11:45
谢谢版主主,
      第二张图是测试组写的demo,我们的读卡器是要卖给不同的客户,不提供驱动.所以客户列举出的设备名称肯定与DEMO列举的是相同的,客户很难区分哪个设备名称对应哪个卡糟,
点赞  2009-11-24 12:10
因为没有做过这方面的东西,我们也不知道如何改这个名字。

但不知道你是否能够通过获得复合设备的序号来区分哪个卡糟?还有一个办法是增加一条自定义的命令,要求设备端报告卡槽编号。
点赞  2009-11-24 15:01
谢谢版主主,

           现在尝试修改描术符,看看能不能解决.
点赞  2009-11-24 17:39
                                 说到修改描述符,如果你使用复合设备的方式,也许能够通过设置Interface描述符中的string描述符来区分,但我不知道在主机端如何获取这个string描述符。
点赞  2009-11-24 18:03

7楼 lws 

                                 ,通过设置Interface描述符中的string描述符可以让PC机显示不同设备的名称,谢谢版主主!
点赞  2009-11-25 13:26
设置Interface描述符中的string描述符能够实现你的要求吗?怎么做到的?

我对这个问题的结果很感兴趣,
点赞  2009-11-25 13:39
interface descriptor中有一项是iInterface,(offset为8)
可以指定一个描述此interface的字符串
如果为0则忽略
点赞  2009-11-25 14:18
                                 跟设备描述符中的字符串的做法是一样的拉
点赞  2009-11-25 14:24
interface descriptor中有一项是iInterface,(offset为8)
可以指定一个描述此interface的字符串
如果为0则忽略
谢谢!我知道怎么设置,这正是我在8楼所建议的,只是不知道这个string描述符在Windows中是否能够被转化成该设备的名称供程序员或终端用户识别?
点赞  2009-11-25 14:26
                                 你设置了什么,它就会显示什么呀...主机会把请求接口字符串描述符的请求发到接口,你返回字符串描述符就可以了
点赞  2009-11-25 14:32
                                 哈哈,谢谢圈圈,好久不见了,就这么简单?下次我也试试看,
点赞  2009-11-25 15:05
谢谢!我知道怎么设置,这正是我在8楼所建议的,只是不知道这个string描述符在Windows中是否能够被转化成该设备的名称供程序员或终端用户识别?
不好意思没看明白
1. 如果是写用户程序,我知道Hid设备可以通过HidD_GetIndexedString(可能未公开需要自己声明)来获得字符串描述符。但是不知道怎么能得到interface的描述符

2. 如果设备管理器中能看到这个interface的描述,可以肯定程序能通过某种方法得到这个字符串。因为这个字符串会在注册表的某个位置中。

3. 如果是写驱动程序,通过转发URB什么信息都能得到。
点赞  2009-11-25 15:30
                                 对!HidD_GetIndexedString()可以读到string描述符,但不知道怎么对应到interface?
点赞  2009-11-25 15:57
                                 每个接口都有一个(iInterface),将string的编号放在这里即可.
点赞  2009-12-3 10:54
挖坟了~

楼主以复合设备枚举出3个读卡器,一个PICC,一个ICC,一个SIM,按照规范PICC和ICC各需要三个端点,SIM可以只有两个端点,所以总共需要8个端点,但是STM32的非控制端点只有7个,请问楼主是如何以7个端点满足8个端点需求的?难道是使用了控制端点作为数据端点用?
点赞  2010-12-15 10:12
共需要的8个端点不是同一方向的

STM32有双向8个端点,也就是8个IN端点和8个OUT端点。
点赞  2010-12-15 11:35
                                 楼上误解了,手册说的8个双向端点是指可以配置成IN或者OUT,某个端点配置成了IN就没有OUT了,反之亦然.
点赞  2010-12-15 13:02
所谓的双向端点,就是即有IN方向的端点也有OUT方向的端点

STM32支持8个双向端点,完全没有配置了IN就没有OUT之类的限制。
点赞  2010-12-15 13:26
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复