Детектирование COM-портов
От: KickingBear  
Дата: 01.03.13 06:58
Оценка:
Добрый день.

Есть девайсы, которые висят на COM-портах, используя как "честные" порты, так и виртуальные, через USB.
Вопрос: как можно понять, доступно ли устройство на порту (есть ли оно там вообще) перед отсылкой очередной команды? Существует ли еще в системе данный COM-порт (в случае виртуальных, если выдернуть провод, в диспетчере пропадает порт. А handle остался

Сейчас, в случае виртуальных портов, я перед отправкой вызываю GetCommModemStatus() и проверяю результаты. Решение работает на текущем наборе устр-в, с оговорками, с условиями и вообще
Извините, если не в ту ветку.

Заранее благодарен за помощь.

01.03.13 11:43: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Детектирование COM-портов
От: KickingBear  
Дата: 04.03.13 08:51
Оценка:
Хьюстон?
Re: Детектирование COM-портов
От: milkpot Россия  
Дата: 04.03.13 09:46
Оценка:
Здравствуйте, KickingBear, Вы писали:

KB>Добрый день.


KB>Есть девайсы, которые висят на COM-портах, используя как "честные" порты, так и виртуальные, через USB.

KB>Вопрос: как можно понять, доступно ли устройство на порту (есть ли оно там вообще) перед отсылкой очередной команды? Существует ли еще в системе данный COM-порт (в случае виртуальных, если выдернуть провод, в диспетчере пропадает порт. А handle остался

KB>Сейчас, в случае виртуальных портов, я перед отправкой вызываю GetCommModemStatus() и проверяю результаты. Решение работает на текущем наборе устр-в, с оговорками, с условиями и вообще

KB>Извините, если не в ту ветку.

KB>Заранее благодарен за помощь.

ftdi?
Если usb кабель не подключен, то виртуальный порт не выставлен в системе. Если кабель вдруг отключить,
а программа ждет, например, ответ/данные от устройства, и описатель не существует, то будут сыпаться ошибки.
Этот момент надо ловить программно.
Re[2]: Детектирование COM-портов
От: KickingBear  
Дата: 05.03.13 13:04
Оценка:
Здравствуйте, milkpot, Вы писали:

M>Здравствуйте, KickingBear, Вы писали:


KB>>Добрый день.


KB>>Есть девайсы, которые висят на COM-портах, используя как "честные" порты, так и виртуальные, через USB.

KB>>Вопрос: как можно понять, доступно ли устройство на порту (есть ли оно там вообще) перед отсылкой очередной команды? Существует ли еще в системе данный COM-порт (в случае виртуальных, если выдернуть провод, в диспетчере пропадает порт. А handle остался

KB>>Сейчас, в случае виртуальных портов, я перед отправкой вызываю GetCommModemStatus() и проверяю результаты. Решение работает на текущем наборе устр-в, с оговорками, с условиями и вообще

KB>>Извините, если не в ту ветку.

KB>>Заранее благодарен за помощь.

M>ftdi?
M>Если usb кабель не подключен, то виртуальный порт не выставлен в системе. Если кабель вдруг отключить,
M>а программа ждет, например, ответ/данные от устройства, и описатель не существует, то будут сыпаться ошибки.
M>Этот момент надо ловить программно.

Спасибо за ответ.
Нет, не ftdi, а обычные переходники: TRENDnet да всевозможные переходники USB-COM в комплекте с устр-ми.
Проблема не в ожидании ответа — это разруливается на уровне логики, а в записи в порт. Сначала проверить — существует ли порт (валидность хэндла?), а уже потом в него писать. Писать и ловить исключение — не вариант.
Re[3]: Детектирование COM-портов
От: milkpot Россия  
Дата: 06.03.13 15:34
Оценка:
Здравствуйте, KickingBear, Вы писали:

KB>Спасибо за ответ.

KB>Нет, не ftdi, а обычные переходники: TRENDnet да всевозможные переходники USB-COM в комплекте с устр-ми.
KB>Проблема не в ожидании ответа — это разруливается на уровне логики, а в записи в порт. Сначала проверить — существует ли порт (валидность хэндла?), а уже потом в него писать. Писать и ловить исключение — не вариант.
В реестре windows есть ключ, содержащий доступные в данный момент serial порты.
Re[4]: Детектирование COM-портов
От: KickingBear  
Дата: 07.03.13 07:00
Оценка:
Здравствуйте, milkpot, Вы писали:

M>Здравствуйте, KickingBear, Вы писали:


KB>>Спасибо за ответ.

KB>>Нет, не ftdi, а обычные переходники: TRENDnet да всевозможные переходники USB-COM в комплекте с устр-ми.
KB>>Проблема не в ожидании ответа — это разруливается на уровне логики, а в записи в порт. Сначала проверить — существует ли порт (валидность хэндла?), а уже потом в него писать. Писать и ловить исключение — не вариант.
M>В реестре windows есть ключ, содержащий доступные в данный момент serial порты.

В общем случае не самый хороший вариант — при вычитывании из реестра COM еще есть, спустя пару тысяч тактов — уже нет, а я уже собираюсь писать.
Что-нибудь на уровне kernel-проверки — было бы зашибись.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.