Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

Определение порта, к которому подключено устройство

#java #port #jssc

                    
Использую библиотеку jssc для использования COM-портов в java.
Такая ситуация: к компьютеру подключена arduino, и надо в коде определить, к какому
порту она подключена.
Как это реализовать?
    


Ответы

Ответ 1



С точки зрения компьютера, Ардуина является конвертером USB->COM, обычным USB-устройством, со своими VID и PID. Вам нужно прочитать ветку реестра, выудить оттуда VID и PID, и по ним узнать имя COM порта. Как это делается на C++ я уволок отсюда: /// /// Compile an array of COM port names associated with given VID and PID /// /// /// /// List ComPortNames(String VID, String PID) { String pattern = String.Format("^VID_{0}.PID_{1}", VID,PID); Regex _rx = new Regex(pattern, RegexOptions.IgnoreCase); List comports = new List(); RegistryKey rk1 = Registry.LocalMachine; RegistryKey rk2 = rk1.OpenSubKey("SYSTEM\\CurrentControlSet\\Enum"); foreach (String s3 in rk2.GetSubKeyNames()) { RegistryKey rk3 = rk2.OpenSubKey(s3); foreach (String s in rk3.GetSubKeyNames()) { if (_rx.Match(s).Success) { RegistryKey rk4 = rk3.OpenSubKey(s); foreach (String s2 in rk4.GetSubKeyNames()) { RegistryKey rk5 = rk4.OpenSubKey(s2); RegistryKey rk6 = rk5.OpenSubKey("Device Parameters"); comports.Add((string)rk6.GetValue("PortName")); } } } } return comports; } static void Main(string[] args) { List names = ComPortNames("0403", "6001"); if (names.Count > 0) { foreach (String s in SerialPort.GetPortNames()) { if (names.Contains(s)) Console.WriteLine("My Arduino port is " + s); } } else Console.WriteLine("No COM ports found"); }

Комментариев нет:

Отправить комментарий