Как узнать, какой последовательный порт используется в настоящее время? - PullRequest
1 голос
/ 30 мая 2010

Я подключил свой мобильный телефон к компьютеру и использовал это,

string[] lPorts = System.IO.Ports.SerialPort.GetPortNames();

и результатом был массив имен портов

"COM4"
"COM3"
"COM1"
"COM7"
"COM6"

Теперь, как узнать, какой последовательный порт в настоящее время используется / к какому порту подключен мой мобильный телефон в c #?

1 Ответ

4 голосов
/ 30 мая 2010

Очевидно, вам нужно знать последовательный протокол, используемый для связи. Просто отправьте известную команду каждому порту и проверьте ожидаемый ответ. Порты, на которых нет устройств, прекратят / сбросят IOException.

Или, если вы не хотите делать это с помощью кода, вы можете попробовать то же самое с помощью HyperTerminal или другой программы с последовательным терминалом.

Попробуйте что-то вроде следующего: (Обратите внимание, что я пишу это из памяти и не гарантирую, что это скомпилируется / что у меня правильные имена методов на 100%, но это дает общее представление).

foreach(string portname in SerialPort.GetPortNames())
{
    // Use your connection settings - own baud rate etc
    SerialPort sp = new SerialPort(portname,4800, Parity.Odd, 8, StopBits.One); 
    try
    {
         sp.Open();
         sp.Write("Your known command to phone");
         Thread.Sleep(500);
         string received = sp.ReadLine();

         if(received == "expected response")
         {
              Console.WriteLine("Phone connected to: " + portname);
              break;
         }
    }
    catch(Exception)
    {
         Console.WriteLine("Phone NOT connected to: " + portname);
    }
    finally
    {
         sp.Close();
    }
}
...