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

[复制链接]
7375|22
 楼主| lmp 发表于 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 .请问该如何改,我已尝试两天了,也没找到办法,请指点,谢谢!
设备管理器中显示三个READER.JPG
设备列表时三个设备.JPG
香水城 发表于 2009-11-24 11:45 | 显示全部楼层
这是关于PC端的问题,牵扯到Windows的驱动,我没有做过,不是很清楚。但我估计改起来比较困难。

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

但不知道你是否能够通过获得复合设备的序号来区分哪个卡糟?还有一个办法是增加一条自定义的命令,要求设备端报告卡槽编号。
 楼主| lmp 发表于 2009-11-24 17:39 | 显示全部楼层
谢谢香版主,

           现在尝试修改描术符,看看能不能解决.
香水城 发表于 2009-11-24 18:03 | 显示全部楼层
说到修改描述符,如果你使用复合设备的方式,也许能够通过设置Interface描述符中的string描述符来区分,但我不知道在主机端如何获取这个string描述符。
 楼主| lmp 发表于 2009-11-25 13:26 | 显示全部楼层
:),:D,通过设置Interface描述符中的string描述符可以让PC机显示不同设备的名称,谢谢香版主!
香水城 发表于 2009-11-25 13:39 | 显示全部楼层
设置Interface描述符中的string描述符能够实现你的要求吗?怎么做到的?

我对这个问题的结果很感兴趣,:P
lxyppc 发表于 2009-11-25 14:18 | 显示全部楼层
interface descriptor中有一项是iInterface,(offset为8)
可以指定一个描述此interface的字符串
如果为0则忽略
computer00 发表于 2009-11-25 14:24 | 显示全部楼层
跟设备描述符中的字符串的做法是一样的拉
香水城 发表于 2009-11-25 14:26 | 显示全部楼层
interface descriptor中有一项是iInterface,(offset为8)
可以指定一个描述此interface的字符串
如果为0则忽略
lxyppc 发表于 2009-11-25 14:18


谢谢!我知道怎么设置,这正是我在8楼所建议的,只是不知道这个string描述符在Windows中是否能够被转化成该设备的名称供程序员或终端用户识别?
computer00 发表于 2009-11-25 14:32 | 显示全部楼层
你设置了什么,它就会显示什么呀...主机会把请求接口字符串描述符的请求发到接口,你返回字符串描述符就可以了
香水城 发表于 2009-11-25 15:05 | 显示全部楼层
哈哈,谢谢圈圈,好久不见了,就这么简单?下次我也试试看,:lol
lxyppc 发表于 2009-11-25 15:30 | 显示全部楼层
谢谢!我知道怎么设置,这正是我在8楼所建议的,只是不知道这个string描述符在Windows中是否能够被转化成该设备的名称供程序员或终端用户识别?
香水城 发表于 2009-11-25 14:26


不好意思没看明白
1. 如果是写用户程序,我知道Hid设备可以通过HidD_GetIndexedString(可能未公开需要自己声明)来获得字符串描述符。但是不知道怎么能得到interface的描述符

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

3. 如果是写驱动程序,通过转发URB什么信息都能得到。
香水城 发表于 2009-11-25 15:57 | 显示全部楼层
对!HidD_GetIndexedString()可以读到string描述符,但不知道怎么对应到interface?
 楼主| lmp 发表于 2009-12-3 10:54 | 显示全部楼层
每个接口都有一个(iInterface),将string的编号放在这里即可.
myfaith 发表于 2010-12-15 10:12 | 显示全部楼层
挖坟了~

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

STM32有双向8个端点,也就是8个IN端点和8个OUT端点。
myfaith 发表于 2010-12-15 13:02 | 显示全部楼层
楼上误解了,手册说的8个双向端点是指可以配置成IN或者OUT,某个端点配置成了IN就没有OUT了,反之亦然.
vigia 发表于 2010-12-15 13:26 | 显示全部楼层
所谓的双向端点,就是即有IN方向的端点也有OUT方向的端点

STM32支持8个双向端点,完全没有配置了IN就没有OUT之类的限制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

lmp

11

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部