我编写了与特定USB设备(视频编码器)通信的应用程序。 设备本身不允许获取设备ID,因此如果我连接两个设备,我无法识别它们。现在的解决方案是拥有与USB设备(编码器)一样多的PC
我想知道如何为每个应用程序专用一个USB端口。
说明我现在的情况
[Device 1] - [PC 1] - [USB Port 1] - [Application 1]
[Device 2] - [PC 2] - [USB Port 1] - [Application 1]
[Device 3] - [PC 3] - [USB Port 1] - [Application 1]
我希望如何
[Device 1] \ / [USB Hub / USB Port 1] - [Application 1]
[Device 2] -- [PC 1] -- [USB Hub / USB Port 2] - [Application 2]
[Device 3] / \ [USB Hub / USB Port 3] - [Application 3]
我想像这样创建(伪代码)
main(){
attachApplicationToUsbPort('USB Hub / USB Port 1')
CoInitializeEx(NULL, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
result = CoCreateInstance(CLSID_CBMDStreamingDiscovery, NULL, CLSCTX_ALL, IID_IBMDStreamingDiscovery, (void**)&m_streamingDiscovery);
...
...
}
现在我打开三个应用程序并将每个应用程序分配给特定端口。
答案 0 :(得分:0)
我不知道您使用哪种API来访问该USB设备,但Windows中的每个设备都有一个名为Device Instance ID的唯一标识符。对于没有序列号的USB设备,设备实例ID将如下所示:
USB\VID_51AD&PID_7D8B\6&11A23516&18&0000
我相信第二个反斜杠之后的部分应该是你插入设备的端口的函数,我认为重启时不应该改变。您应该可以使用它将进程分配给特定的USB设备,只要该设备始终插入同一端口。
我认为这是一种简单的方法。另一方面,如果您真的想开始处理代码中的USB集线器和端口,可以查看Microsoft的USBView代码。