Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 基于总线位置ID打开FTDI设备_Macos_Ftdi - Fatal编程技术网

Macos 基于总线位置ID打开FTDI设备

Macos 基于总线位置ID打开FTDI设备,macos,ftdi,Macos,Ftdi,我有一些FTDI设备连接到我的Mac。它们都具有相同的描述、PID和VID。我希望能够向FT_OpenEx()指定要打开的文件 我可以使用IO工具包API获取我感兴趣的设备的总线位置ID。FT_OpenEX()API允许我传入一个位置,而不是描述或序列号 但是,返回位置ID的FT API返回的值与总线位置ID完全不同。我连接的其中一个设备的总线位置ID为0x1a127000,当我使用FT API获取所有设备的位置时,它会显示0x1a051和0x1a052 有没有办法从IO Kit总线位置ID和F

我有一些FTDI设备连接到我的Mac。它们都具有相同的描述、PID和VID。我希望能够向FT_OpenEx()指定要打开的文件

我可以使用IO工具包API获取我感兴趣的设备的总线位置ID。FT_OpenEX()API允许我传入一个位置,而不是描述或序列号

但是,返回位置ID的FT API返回的值与总线位置ID完全不同。我连接的其中一个设备的总线位置ID为0x1a127000,当我使用FT API获取所有设备的位置时,它会显示0x1a051和0x1a052


有没有办法从IO Kit总线位置ID和FT位置转换,或者以其他方式指定要使用的设备?

我最近遇到了一个类似的问题:在某些位置和设备上,我得到了0作为位置ID。我向FTDI写了一个协助请求,这就是我得到的:

我们测试了USB 3.0主机PCI卡,发现它与我们的 原因如下

Windows计算机上的现有主机端口在 格式:\device\usbfdo-#其中#是一个数字

USB 3.0卡被称为\设备\设备,其中\是一个数字

USB 3.0主机端口不符合标准命名约定 在windows计算机上,我们不尝试打开此端口进行发送 枚举和尝试加载驱动程序时的设备ID

正如我们所期望的,微软在添加对 3.0,我们希望问题从我们的角度消失。因此,我们仍然认为问题在于3.0主机,而不是主机 我们的司机

即使可以进行更改以支持此主机 控制器很可能是您尝试的下一个主机设备 (不同制造商)将有另一个需要 不同的修改。这将不是一个可持续发展的模式 与USB的PnP精神背道而驰

我们相信这个问题已经在Windows8中解决了。我们目前正在 我希望我们正在为新的Windows8驱动程序进行认证 这项服务将于2月底提供

这不是很令人满意,但至少它描述了它不起作用的原因。当我有时间时,我将尝试使用libusbX获取位置id,然后使用ftdiapi例程打开它。 但不确定什么时候会这样


Veit

因为我已经为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);
在网站上描述

编辑
由于您的FTDI位置id中有5位数字,我想知道您的设备编号。也许我的方法在你的情况下不起作用?

这是一个有用的答案,但它根本不能回答问题:(