我有一些连接到Mac的FTDI设备。它们都具有相同的描述,PID和VID。我希望能够指定FT_OpenEx()我要打开哪一个。
我可以使用IO Kit API获取我感兴趣的设备的总线位置ID。 FT_OpenEX()API允许我传入位置而不是描述或序列号。
但是,返回位置ID的FT API会返回与总线位置ID不同的值。我连接的其中一个设备的总线位置ID为0x1a127000,总线当我使用FT API获取所有设备的位置时,它会显示0x1a051和0x1a052之类的内容。
有没有办法从IO Kit总线位置ID和FT位置转换,或者指定使用哪个设备?
答案 0 :(得分:2)
我最近遇到了类似的问题:在某些地点和设备上,我将0作为位置ID。我写了一份FTDI援助请求,这就是我得到的:
我们测试了USB 3.0主机PCI卡,发现它与我们不兼容 司机出于以下原因。
Windows计算机上的现有主机端口在其中具有名称 格式:\ device \ usbfdo-#其中#是一个数字。
USB 3.0卡被称为\ device \ device#,其中#是一个数字。
USB 3.0主机端口不符合标准命名约定 在Windows机器上我们不会尝试打开此端口发送 枚举和尝试加载驱动程序时的设备ID。
正如我们希望微软在添加支持时遵循惯例 3.0,我们希望问题远离我们的观点。因此我们仍然认为问题在于3.0主机而不是 我们的司机。
即使可以进行更改以支持此主机 控制器很有可能你尝试下一个主机设备 (不同的制造商)将有另一个变体需要a 不同的修改。这不是一个可持续的模式 反对USB的PnP精神。
我们认为此问题已在Windows 8中得到解决。我们目前正在使用 我期望着从事新Windows 8驱动程序的认证工作 这将于2月底上市。
这不是很令人满意,但至少它描述了它无法正常工作的原因。当我有时间时,我将尝试使用libusbX获取位置ID,然后使用FTDI API例程打开它。 不知道什么时候会这样,但是......
维特
答案 1 :(得分:0)
由于我已经为linux做了一次并且有一个可行的解决方案,我想我也试图为mac解决这个问题。 我不确定我是否正确地做到了这一点,但这是我想出的:
基本上,你把MacOSX位置ID右移16位,二进制和&使用0xff00并添加设备地址。 这应该等于你从ftdi驱动程序获得的位置ID。
示例:
在"系统信息"程序我可以找到我的USB设备,看到这样的事情:
Location ID: 0x14100000 / 21
这似乎是"位置ID /设备号"。 现在将其插入该公式:
0x141000000>>16 = 0x1410
0x1410&0xff00 = 0x1400
0x1400|21 = 0x1415
因此,在十进制表示法中,位置ID为:5141,它匹配FTDI返回的内容。注意,上面使用的21是十六进制的0x15。
我刚刚在30分钟前发现了这一点,所以如果这个实现有问题请告诉我。我需要这个也能可靠地工作。我尝试在mac和设备之间放置一个集线器,公式仍然适用。
IOKit调用是:
kr = (*dev)->GetLocationID(dev, &locationid);
kr = (*dev)->GetDeviceAddress(dev, &address);
在apple developer reference网站上进行了描述。
修改强> 由于您的FTDI位置ID有5位数,我会对您的设备设备编号感兴趣。也许我的方法在你的情况下并不适用?