2016-07-22 12 views
1

Ich versuche, den Inhalt eines USB-Massenspeicher-Flash-Laufwerks mit this guide at android.developers zu lesen. Ich habe ein Problem zu entscheiden, welches Laufwerk eigentlich das Flash-Laufwerk ist.Wie wird der USB-Host-Gerätetyp ermittelt?

ich diesen Code verwenden durch die Geräte iterieren:

protected override void OnResume() 
    { 
     usbManager = (UsbManager)this.GetSystemService(Context.UsbService); 
     monitorUsb(); 
    } 

    private async void monitorUsb() 
    { 
     var deviceList = usbManager.DeviceList; 
     foreach (var device in deviceList.Values) 
     { 
      Debug.WriteLine("USB",device.DeviceName); 
      Debug.WriteLine("USB",device.DeviceProtocol.ToString()); 
     } 
     await Task.Delay(30000); 
     monitorUsb(); 
    } 

Ich habe zwei Geräte angeschlossen, eine Maus und ein Flash-Laufwerk.

Der obige Code erzeugt die folgenden:

[0:] /dev/bus/usb/003/003 
[0:] 0 
[0:] /dev/bus/usb/003/019 
[0:] 0 
[0:] /dev/bus/usb/003/020 
[0:] 0 

Durch den Prozess der Eliminierung 020 ist das Flash-Laufwerk, und 019 ist die Maus. Ich weiß nicht, was 003 ist, vielleicht etwas interner oder einer der anderen Ports (ich habe adb über Onboard-Ethernet verbunden).

Nach this documentation, das Protokoll von USB_CLASS_MASS_STORAGE ist 8 und 0 betrifft USB_CLASS_PER_INTERFACE

Wie kann ich in Code entscheiden, welche der Geräte ist das Flash-Laufwerk, wenn sie beide USB_CLASS_PER_INTERFACE zurückkehren? Ich habe mir die anderen Eigenschaften von UsbDevice angeschaut und keine scheint mir etwas Nützliches zurückzugeben.

Antwort

1

Ich suchte das falsche Protokoll.

 foreach (var device in deviceList.Values) 
     { 
      for (int i = 0; i < device.InterfaceCount; i++) 
      { 
       var deviceInterface = device.GetInterface(i) as UsbInterface; 
       Debug.WriteLine("USB", deviceInterface.InterfaceProtocol.ToString()); 
      }; 

      //Debug.WriteLine("USB", device.DeviceName); 
      //Debug.WriteLine("USB", device.DeviceProtocol.ToString()); 
     } 

Dies gibt das Protokoll als 80 statt 8 wie die Dokumente vor. Ich kann das nicht erklären.

Verwandte Themen