Ответ 1
Мне удалось подготовить рабочую демонстрацию с помощью некоторого исходного кода < found.
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);
}
}
}
}
Приложение перечисляет хост-контроллеры USB. Затем он получает корневой концентратор и перечисляет принадлежащие ему порты. Если подключено устройство, и оно не является концентратором, тогда оно отображает требуемую информацию.
В вашем случае вы, вероятно, знаете, какое устройство вы хотите проверить, чтобы вы могли изменить источник (как выше, так и связанный код), чтобы специально проверить только это устройство.
Вам нужно будет создать метод в классе USB, чтобы получить определенный порт из определенного концентратора, указав номер порта и путь к концентратору.
Что-то вроде:
GetDeviceSpeed(string hubPath, int portNumber) { ... }
и вызовите его с соответствующими значениями:
var hubPath = @"\\.\NUSB3#ROOT_HUB30#5&b235176&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}";
var portNumber = 2;
GetDeviceSpeed(hubPath, portNumber);
Если вы, однако, не хотите этого делать, вы можете просто использовать приведенный выше код и уведомить серийный номер устройства, которое хотите проверить, и только проверить скорость:
if (device.DeviceSerialNumber == "xxxxxx")
Console.WriteLine("Speed: " + port.Speed);
Если вы хотите использовать это в приложении с графическим интерфейсом, вы можете просто выбрать устройство, которое хотите проверить в раскрывающемся списке.
Ну... Есть мысли и, надеюсь, рабочее решение.