2016-12-01 88 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