3

我正在通过 USB 与 ESP 301 电机控制器通信(或尝试)。如果需要,请参阅此处获取文档(PDF)

为了做到这一点,我正在使用 C# 并具有以下功能:

private async void connectDevice()
{
    string aqs = UsbDevice.GetDeviceSelector(Constants.ESPVENDORID,Constants.ESPPRODUCTID);
    Console.WriteLine(aqs);
    var myDevices = await DeviceInformation.FindAllAsync(aqs);
    Console.WriteLine(myDevices.Count);
    try
    {
        esp301 = await UsbDevice.FromIdAsync(myDevices[0].Id);
        Console.WriteLine("SUCCESSFULLY OPENED DEVICE FOR COMMUNICATION");
        initialized = true;
    }
    catch (Exception exception)
    {
        Console.WriteLine("ERROR:");
        Console.WriteLine(exception.Message.ToString());
    }

}

但是,该DeviceInformation.FindAllAsync(aqs)调用返回一个空容器。

我已修改应用清单以包含以下内容:

<Capabilities>
    <DeviceCapability Name="usb">
      <Device Id="vidpid:104D3001">
      </Device>
    </DeviceCapability>
  </Capabilities>

这是我最不确定的一点,我正在努力寻找有关此的更多信息。

在一个单独的常量类中,我定义了以下内容:

public static Guid ESPGUID { get { return new Guid("{4d36e978-e325-11ce-bfc1-08002be10318}"); } }
public static uint ESPVENDORID { get { return 0x104D; } }
public static uint ESPPRODUCTID { get { return 0x3001; } }

这一切似乎都是正确的,我已经使用 Microsoft 分发的 USB View 应用程序验证了供应商和产品 ID:

USB 视图

调整UsbDevice.GetDeviceSelector调用以使用常量文件中定义的 GUID,如下所示:

string aqs = UsbDevice.GetDeviceSelector(Constants.ESPGUID);

似乎也没有改变任何东西。

我知道容器是空的,因为我打印到控制台的计数是 0,而且我得到一个超出范围的异常。

我正在打印的 aqs 字符串如下所示:

System.Devices.InterfaceClassGuid:="{DEE824EF-729B-4A0E-9C14-B7117D33A817}" AND System.Devices.InterfaceEnabled:=System.StructuredQueryType.Boolean#True AND System.DeviceInterface.WinUsb.DeviceInterfaceClasses:~="{4D36E978- E325-11CE-BFC1-08002BE10318}"

我已尝试提供尽可能多的信息,您可以提供的任何帮助将不胜感激。谢谢你。

4

0 回答 0