Форум программистов CodeGuru
23 Июль 2018, 06:15:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как прочитать имя устройства, подключённого к виртуальному компорту?  (Прочитано 19533 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RRR
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« : 21 Январь 2010, 13:35:10 »

Задача такая - некое устройство с заданным именем может быть подключено к виртуальному компорту с произвольным номером от СОМ3 до СОМ8. Программа должна найти это устройство, не открывая все порты подряд, поскольку в системе могут быть другие девайсы, которые лучше не трогать без надобности. Среда разработки - C++Builder6.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 22 Январь 2010, 14:11:30 »

Хм... как определить устройство, не считывая информацию с порта ?
Если только устройство поддерживает plug and play и может быть детектировано windows при подключении и попадет в список устройств (которые потом можно перебрать и найти "свое").
Ну или давать пользователю выбрать, где у него девайс воткнут.
Записан

RRR
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #2 : 22 Январь 2010, 15:23:40 »

Plug'n'play не поддерживается - девайс представляет собой мост COM-USB на базе микросхемы Silabs CP2102. Юзер может и не знать, где что воткнуто, поскольку порты виртуальные. Более того, на разных компах одно и то же устройство может получать разные номера портов. Я не знаю, как сделано определение устройств в виндовом "Диспетчере устройств", но мне по сути требуется что-то похожее. Т.е. наверно открывать порты всё-таки можно, но отправлять по ним какие-то запросы... Есть ли стандартный запрос, позволяющий только определить устройство, но не спровоцировать в нём какие-то ещё процессы? Ещё раз говорю, что тип остальных устройств и их возможная система команд ни мне ни тем более юзеру не известны.
« Последнее редактирование: 22 Январь 2010, 15:30:03 от RRR » Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #3 : 23 Январь 2010, 19:38:49 »

Plug'n'play не поддерживается - девайс представляет собой мост COM-USB на базе микросхемы Silabs CP2102.

Хм... если это "переходник" COM-USB, то не должен ли он быть полностью "прозрачен", т.е. при открытии порта будет вестись работа уже с usb-устройством ?
Или его надо как то настраивать перед работой ?
Записан

RRR
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #4 : 25 Январь 2010, 13:15:46 »

Настраивать ничего не надо, но драйвер этого устройства создаёт в системе виртуальный компорт, и именно с ним приходится работать. Номер компорта, который создаётся, зависит как от текущей конфигурации системы, так и от задаваемого (опционально) серийного номера устройства. Физический уровень USB не виден. Соответственно, нужно определить, к какому именно номеру порта устройство подключено и сколько таких устройств всего, если их несколько.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #5 : 25 Январь 2010, 20:14:52 »

Хм... а нет у драйвера функции возвращать информацию о созданных портах ?
Может можно просто через DeviceIoControl его спросить о том, что он там по открывал ?

Еще можно разобраться с алгоритмом генерации номера порта. Но я так понимаю, тут весьма сомнительные перспективы.
Записан

RRR
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #6 : 26 Январь 2010, 12:28:22 »

Хм... а нет у драйвера функции возвращать информацию о созданных портах ?
Может можно просто через DeviceIoControl его спросить о том, что он там по открывал ?

А можно подробнее о DeviceIoControl?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #7 : 26 Январь 2010, 22:19:19 »

А можно подробнее о DeviceIoControl?

Ну, вот ссылка на msdn: http://msdn.microsoft.com/en-us/library/aa363216(VS.85).aspx
Открывается устройство при помощи CreateFile, а затем этот дескриптор передается в DeviceIoControl.
Там же есть ссылка на пример: http://msdn.microsoft.com/en-us/library/aa363147(VS.85).aspx

Для специфического драйвера надо знать его "control codes", то есть, коды команд, которые драйвер поддерживает.
Это я именно к тому, что драйвер виртуального com-порта может иметь функции запроса информации о текущей конфигурации, созданных им портах, и.т.д. И если это так, то это и надо использовать.
Записан

RRR
Новичок
*
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #8 : 27 Январь 2010, 11:20:38 »

Спасибо, я посмотрю  Улыбка
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!