2013-04-04 11 views
12

Kann jemand erkennen, ob ein mit einem USB 3.0-Hostanschluss verbundenes USB-Gerät mit C# 3.0 oder 2.0 ausgeführt wird?Erkennen, ob das Gerät USB 3.0 verwendet

Wir stellen USB 3.0 Verlängerungskabel her und wir müssen sicherstellen, dass alle Pins korrekt gelötet wurden. Wir möchten das in Software machen. Wir möchten ein 3.0-USB-Laufwerk an das Kabel anschließen und prüfen, ob das Gerät im USB 3.0-Modus betrieben wird. Wenn es im 2.0-Modus ist, wissen wir, dass es sich um ein Problem mit einer oder mehreren USB 3.0-Leitungen handelt.

+0

nicht sicher, ob wir bestimmte Namespaces dafür haben. Hast du versucht SharpUSBLib zu benutzen? (http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx) –

+2

Sie können es ermitteln, indem Sie die Geschwindigkeit überprüfen. Siehe [this] (http://stackoverflow.com/questions/1324587/how-can-i-determine-the-speed-of-a-usb-port) Fragen. –

+0

Welche Informationen möchten Sie über den USB-Anschluss wissen? – KF2

Antwort

10

Ich habe es geschafft, eine funktionierende Demo mit Hilfe eines Quellcodes I found zu kochen.

private static void Main(string[] args) 
{ 
    var hostCtrls = USB.GetHostControllers(); 

    foreach (var hostCtrl in hostCtrls) 
    { 
    var hub = hostCtrl.GetRootHub(); 
    foreach (var port in hub.GetPorts()) 
    { 
     if (port.IsDeviceConnected && !port.IsHub) 
     { 
     var device = port.GetDevice(); 
     Console.WriteLine("Serial: " + device.DeviceSerialNumber); 
     Console.WriteLine("Speed: " + port.Speed); 
     Console.WriteLine("Port: " + device.PortNumber + Environment.NewLine); 
     } 
    } 
    } 
} 

enter image description here

Die Anwendung zählt die USB-Host-Controller. Dann erhält es den Root Hub und enumatisiert die dazugehörigen Ports. Wenn ein Gerät angeschlossen ist und es sich nicht um einen Hub handelt, werden die erforderlichen Informationen angezeigt.

In Ihrem Fall wissen Sie wahrscheinlich, welches Gerät Sie überprüfen möchten, damit Sie die Quelle (sowohl den obigen als auch den verknüpften Code) ändern können, um nur dieses Gerät zu überprüfen.

Sie müssen eine Methode in der USB-Klasse erstellen, um einen bestimmten Port von einem bestimmten Hub abzurufen, indem Sie die Portnummer und den Pfad zum Hub angeben.

Etwas wie:

GetDeviceSpeed(string hubPath, int portNumber) { ... } 

und den Anruf mit den entsprechenden Werten:

var hubPath = @"\\.\NUSB3#ROOT_HUB30#5&b235176&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}"; 
var portNumber = 2; 
GetDeviceSpeed(hubPath, portNumber); 

Wenn Sie jedoch nur ungern, dies zu tun, dann können Sie einfach den obigen Code verwenden und machen Bekanntmachung die Seriennummer des Geräts, das Sie testen möchten, und dann nur die Geschwindigkeit überprüfen:

if (device.DeviceSerialNumber == "xxxxxx") 
    Console.WriteLine("Speed: " + port.Speed); 

Wenn Sie dies in einer Anwendung mit einer GUI verwenden möchten, können Sie einfach das zu prüfende Gerät in einem Dropdown-Menü auswählen.

Nun ... Es gibt einige Gedanken und hoffentlich eine funktionierende Lösung.

Verwandte Themen