2016-12-01 70 views
2

我有一个UWP应用程序,我正在尝试编写的问题。我正在连接到我已编程的定制嵌入式USB批量设备(它实际上是赛普拉斯半导体的一个开箱即用的示例)。我正在使用WinUSB.sys驱动程序,使用设备中的嵌入式MS OS字符串来允许设备无需编写自定义INF文件来调用WinUSB.sys驱动程序。UWP/C# - AQS和USB设备问题

在我的代码中,我使用UsbDevice.GetDeviceSelector方法返回一个AQS,然后可以传递给DeviceInformation.FindAllAsync以开始与我的应用程序中的设备进行通信。我已确认该设备在设备管理器中显示没有任何问题,并且已在注册表中检入以确保其具有接口GUID。我有一个USBViewer的屏幕截图来显示设备的配置。这种用于查找USB设备并与其连接的方法来自此MSDN示例here

当我使用UsbDevice.GetDeviceSelector方法时,它返回一个与此设备无关的GUID。它返回的GUID实际上与Lumia手机(DEE824EF-729B-4A0E-9C14-B7117D33A817)相关联。因此,它没有找到我的设备连接到系统。

为了排除故障,我使用任何参数调用DeviceInformation.FindAllAsync来查看我的设备是否已列出,并确实找到了设备(已连接到我的设备的1000多台其他设备)。然后,我在没有GetDeviceSelector方法的帮助下编写了一个自定义AQS字符串,从GUID开始。这样做返回了27个设备,但是当我尝试将VID和PID添加到此AQS字符串时,没有任何返回。

我也确保我想要使用的设备通过其适当的VID和PID在应用程序清单中列出,因为这是自定义类0xFF的设备所需的。我使用了自定义USB UWP设备示例,它可以找到该设备,但它使用与设备选取器完全不同的方法,如果需要,我将使用该方法,但这不是我的愿望,因为它使应用程序的这部分不是一个清洁的解决方案。

我已经在MSDN论坛here上发布了这个问题,提供了更多信息,但是我没有得到很多参与。任何帮助,将不胜感激。我知道我必须错过简单的东西。

亚当

private async void button_Click(object sender, RoutedEventArgs e) 
 
{ 
 
    //UInt32 vid = 0x04B4; 
 
    //UInt32 pid = 0x00F0; 
 

 
    UInt32 vid = uint.Parse(textBox1.Text, System.Globalization.NumberStyles.HexNumber); 
 
    UInt32 pid = UInt32.Parse(textBox2.Text, System.Globalization.NumberStyles.HexNumber); 
 
    Guid winusbInterfaceGuid = new Guid("a5dcbf10-6530-11d2-901f-00c04fb951ed"); 
 
    //string aqs = UsbDevice.GetDeviceSelector(vid, pid); 
 
    string aqs = UsbDevice.GetDeviceSelector(winusbInterfaceGuid); 
 

 

 

 
    var myDevices = await DeviceInformation.FindAllAsync(aqs, null); 
 
    //var myDevices = await DeviceInformation.FindAllAsync(); 
 

 
    var myDevicesCount = myDevices.Count; 
 

 
    if (myDevicesCount >= 1) 
 
    { 
 
    textBlock2.Text = "Device Found"; 
 
    } else 
 
    { 
 
    textBlock2.Text = "Searching"; 
 
    await Task.Delay(1000); 
 
    textBlock2.Text = "looking for device"; 
 
    } 
 
}

+0

的诡计很抱歉,我无法添加超过2个链接。我有两张照片要上传,但我作为新用户受到限制。 – Adam

+0

请尝试使用最新的[CustomUsbDeviceAccess](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CustomUsbDeviceAccess)示例。它不使用完全不同的方法,它只是使用'var osrFx2Selector = UsbDevice.GetDeviceSelector(OsrFx2.DeviceVid,OsrFx2.DevicePid);'来创建aqs。然后调用一个'CreateWatcher'方法。请将您的aqs与官方样品进行比较。 –

+0

正如你所说的官方样本可以很好地工作,意味着已经有一个解决方案为你。请检查它并比较你有什么不同。 –

回答

0

刚刚塞进你一个邮件,询问有关进展情况(我想,猜您的邮件地址),但现在看来,我找到了自己的解决方案。请参阅我的回答UWP app cannot find/connect to USB device

总之,您必须创建一个用于安装winusb驱动程序的inf。我不知道为什么,但那对我(和别人,见Cannot create UsbDevice from DeviceInformation.Id

+0

哇,对不起,我以为我会收到邮件通知来回复此主题,但我没有。我会看看你发布的内容。我没有收到您发送的电子邮件。你可以在Twitter上找到我的Aeroengineer1手柄。我可以从那里寄给你一个PM。 – Adam