Могу ли я проверить, можно ли открыть COM-порт, не открывая его? - PullRequest
1 голос
/ 04 июня 2009

Как правило, на ПК имеется некоторый нестандартный набор COM-портов, доступных для использования эмулятором терминала. Я хотел бы иметь возможность сканировать порты COM1-COM32, чтобы увидеть, какие (если таковые имеются) из этих портов можно открыть как последовательный порт. Я могу сделать это, просто вызывая CreateFile () на всех этих портах; однако, тогда я фактически должен на мгновение открыть / закрыть (и повлиять на DTR / RTS) порт.

Я хочу предоставить точный список пользователю доступных портов. Проблема в том, что я не хочу влиять на линии DTR / RTS портов, которые в настоящее время не используются, потому что к этим портам может быть подключено оборудование, которое не хочет видеть какой-либо переход на DTR / RTS.

Есть ли способ просто задать вопрос: "Будет ли CreateFile () успешным?" на указанных com-портах?

Ответы [ 3 ]

2 голосов
/ 04 июня 2009

Нет, нет возможности задать такой вопрос. Ответ не будет иметь смысла в любом случае. Даже если ОС определит, что открытие COM-порта в какой-то момент будет успешным, это не значит, что вы сможете открыть его позже. (Например, он может быть открыт другим приложением.) Вы можете использовать функции SetupDiXXX для перечисления COM-портов в системе, но на самом деле это просто возвращает информацию об установленных и активных драйверах. Это не дает никаких гарантий, кроме этого.

1 голос
/ 04 июня 2009

Несколько способов

a) QueryDosDevice () - проверка по COM в именах

b) GetDefaultCommConfig () - пройти через все возможные серийные имена, например. попробуй получить конфиг для COM1, COM2, ... COMn

в) HKLM / ОБОРУДОВАНИЕ / DEVICEMAP / SERIALCOMM - Перечислить ключи

d) SetupAPI - если бы я помнил, как это использовать, не обращаясь к справочному руководству, я бы не стал человеком

е) ???

Отредактировано: как отметил Питер, кроме перечисления, нет функции, которая может сказать вам, можете ли вы получить доступ к устройству или нет.

0 голосов
/ 04 июня 2009

HKLM / ОБОРУДОВАНИЕ / DEVICEMAP / SERIALCOMM мой любимый.

Это решение показывает лучшую простоту реализации по сравнению с IMO.

В большинстве случаев это достаточно точно, хотя я видел, по крайней мере, одного производителя USB-последовательных портов, чьи HW там не всегда указаны (FTDI IIRC).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...