Есть девайсы, которые висят на COM-портах, используя как "честные" порты, так и виртуальные, через USB.
Вопрос: как можно понять, доступно ли устройство на порту (есть ли оно там вообще) перед отсылкой очередной команды? Существует ли еще в системе данный COM-порт (в случае виртуальных, если выдернуть провод, в диспетчере пропадает порт. А handle остался
Сейчас, в случае виртуальных портов, я перед отправкой вызываю GetCommModemStatus() и проверяю результаты. Решение работает на текущем наборе устр-в, с оговорками, с условиями и вообще
Извините, если не в ту ветку.
Заранее благодарен за помощь.
01.03.13 11:43: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, KickingBear, Вы писали:
KB>Добрый день.
KB>Есть девайсы, которые висят на COM-портах, используя как "честные" порты, так и виртуальные, через USB. KB>Вопрос: как можно понять, доступно ли устройство на порту (есть ли оно там вообще) перед отсылкой очередной команды? Существует ли еще в системе данный COM-порт (в случае виртуальных, если выдернуть провод, в диспетчере пропадает порт. А handle остался
KB>Сейчас, в случае виртуальных портов, я перед отправкой вызываю GetCommModemStatus() и проверяю результаты. Решение работает на текущем наборе устр-в, с оговорками, с условиями и вообще KB>Извините, если не в ту ветку.
KB>Заранее благодарен за помощь.
ftdi?
Если usb кабель не подключен, то виртуальный порт не выставлен в системе. Если кабель вдруг отключить,
а программа ждет, например, ответ/данные от устройства, и описатель не существует, то будут сыпаться ошибки.
Этот момент надо ловить программно.
Здравствуйте, milkpot, Вы писали:
M>Здравствуйте, KickingBear, Вы писали:
KB>>Добрый день.
KB>>Есть девайсы, которые висят на COM-портах, используя как "честные" порты, так и виртуальные, через USB. KB>>Вопрос: как можно понять, доступно ли устройство на порту (есть ли оно там вообще) перед отсылкой очередной команды? Существует ли еще в системе данный COM-порт (в случае виртуальных, если выдернуть провод, в диспетчере пропадает порт. А handle остался
KB>>Сейчас, в случае виртуальных портов, я перед отправкой вызываю GetCommModemStatus() и проверяю результаты. Решение работает на текущем наборе устр-в, с оговорками, с условиями и вообще KB>>Извините, если не в ту ветку.
KB>>Заранее благодарен за помощь. M>ftdi? M>Если usb кабель не подключен, то виртуальный порт не выставлен в системе. Если кабель вдруг отключить, M>а программа ждет, например, ответ/данные от устройства, и описатель не существует, то будут сыпаться ошибки. M>Этот момент надо ловить программно.
Спасибо за ответ.
Нет, не ftdi, а обычные переходники: TRENDnet да всевозможные переходники USB-COM в комплекте с устр-ми.
Проблема не в ожидании ответа — это разруливается на уровне логики, а в записи в порт. Сначала проверить — существует ли порт (валидность хэндла?), а уже потом в него писать. Писать и ловить исключение — не вариант.
Здравствуйте, KickingBear, Вы писали:
KB>Спасибо за ответ. KB>Нет, не ftdi, а обычные переходники: TRENDnet да всевозможные переходники USB-COM в комплекте с устр-ми. KB>Проблема не в ожидании ответа — это разруливается на уровне логики, а в записи в порт. Сначала проверить — существует ли порт (валидность хэндла?), а уже потом в него писать. Писать и ловить исключение — не вариант.
В реестре windows есть ключ, содержащий доступные в данный момент serial порты.
Здравствуйте, milkpot, Вы писали:
M>Здравствуйте, KickingBear, Вы писали:
KB>>Спасибо за ответ. KB>>Нет, не ftdi, а обычные переходники: TRENDnet да всевозможные переходники USB-COM в комплекте с устр-ми. KB>>Проблема не в ожидании ответа — это разруливается на уровне логики, а в записи в порт. Сначала проверить — существует ли порт (валидность хэндла?), а уже потом в него писать. Писать и ловить исключение — не вариант. M>В реестре windows есть ключ, содержащий доступные в данный момент serial порты.
В общем случае не самый хороший вариант — при вычитывании из реестра COM еще есть, спустя пару тысяч тактов — уже нет, а я уже собираюсь писать.
Что-нибудь на уровне kernel-проверки — было бы зашибись.