Поиск номера COM порта к которому устройство подключено
От: Tazman Россия  
Дата: 04.09.08 12:16
Оценка:
Доброго времени суток.

Ситуация: есть устройство которое коннектится либо напрямую к COM порту, либо через переходник к USB. Работа с устройством идет по протоколу COM порта (для ситуации с USB подключением используется драйвер Prolific). На компе устанавливается ПО для работы с устройством. Но когда соединение через USB то устройство подключается к заранее неизвестному порту (COM1, COM2, ... COMXXX)

Вопрос: Как правильно программно определить местонахождение устройства в системе?
По крайней мере я хочу чтобы при запуске приложения как нить опрашивать порты чтобы узнать, то ли это устройство.

Пока реализовал так:
* Спрашиваю при пуске приложения систему о имеющихся COM портах — получаю список
* Поочередно отправляю в каждый порт команду типа ХХХ жду секунду ответа YYY
* откуда получаю ответ тот порт и использую

Понимаю что так нехорошо, мало ли что в других устройсвами пожет произойти (у меня, например, модем после такой операции иногда приходится перезапускать)

Подскажите в какую сторону копать?

Система Win

PS
Устройство сами делаем это, может надо к нему чего-нить прикрутить чтобы оно себя корректно выставляло на показ?
Хорошо иметь достойных потомков, но слава принадлежит нашим предкам. (Плутарх)
Re: Поиск номера COM порта к которому устройство подключено
От: Eugene Kilachkoff Россия  
Дата: 06.09.08 10:29
Оценка:
Здравствуйте, Tazman, Вы писали:

T>Устройство сами делаем это, может надо к нему чего-нить прикрутить чтобы оно себя корректно выставляло на показ?


Ну прикрутите к нему фичу, чтобы оно вякало что-нибудь в порт при поднятии DTR.
Re: Поиск номера COM порта к которому устройство подключено
От: iiice Россия  
Дата: 10.09.08 16:10
Оценка:
T>Вопрос: Как правильно программно определить местонахождение устройства в системе?
T>По крайней мере я хочу чтобы при запуске приложения как нить опрашивать порты чтобы узнать, то ли это устройство.

Сталкивался с точно такой же проблемой. До общего решения так и не допетрил, бо не сильно фатально было. Приведу prolific-specific решение

T>Пока реализовал так:

T>* Спрашиваю при пуске приложения систему о имеющихся COM портах — получаю список
T>* Поочередно отправляю в каждый порт команду типа ХХХ жду секунду ответа YYY
T>* откуда получаю ответ тот порт и использую

Опрашивать все порты чёсом — это плохое решение. При наличии в системе корявых драйверов встроенного блютуса (а в ноутбуках они с большой вероятностью будут корявыми, по-другому драйверов в фирмах типа broadcom не пишут), опрос эмулированных блютусных COM-портов будет занимать несколько МИНУТ.

T>Понимаю что так нехорошо, мало ли что в других устройсвами пожет произойти (у меня, например, модем после такой операции иногда приходится перезапускать)

Шли какую-нибудь "модемонейтральную" команду, а-ля ATI1. Ответить на неё из своего девайса можешь как угодно.

T>Подскажите в какую сторону копать?

Открой каталог реестра "HKLM\SYSTEM\CurrentControlSet\Enum\USB\Vid_067b&Pid_2303", в его подкаталогах обнаружишь маппинг пролификов на номера COM-портов.
Если нет такого каталога — узнай Vid и Pid своего USB-хвоста, и ищи по ним.
Re[2]: Поиск номера COM порта к которому устройство подключе
От: iiice Россия  
Дата: 10.09.08 16:30
Оценка:
T>>Подскажите в какую сторону копать?
I>Открой каталог реестра "HKLM\SYSTEM\CurrentControlSet\Enum\USB\Vid_067b&Pid_2303", в его подкаталогах обнаружишь маппинг пролификов на номера COM-портов.
I>Если нет такого каталога — узнай Vid и Pid своего USB-хвоста, и ищи по ним.

Более универсальный метод:

Каталог "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E978-E325-11CE-BFC1-08002BE10318}". В его подкаталогах обнаружишь маппинг классов портов на драйверы. Анализируешь ключи InfSection и DriverDesc. Если находишь в них подстроку bluetooth, broadcom, widcomm — игнорируешь данный класс портов. В классах, прошедших отбор, по ключу MatchingDeviceId ищешь экземпляры портов ( в папке "HKLM\SYSTEM\CurrentControlSet\Enum\USB" ).
Re[3]: Поиск номера COM порта к которому устройство подключе
От: Tazman Россия  
Дата: 12.09.08 11:01
Оценка:
Здравствуйте, iiice, Вы писали:

T>>>Подскажите в какую сторону копать?

I>>Открой каталог реестра "HKLM\SYSTEM\CurrentControlSet\Enum\USB\Vid_067b&Pid_2303", в его подкаталогах обнаружишь маппинг пролификов на номера COM-портов.
I>>Если нет такого каталога — узнай Vid и Pid своего USB-хвоста, и ищи по ним.

I>Более универсальный метод:


I>Каталог "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E978-E325-11CE-BFC1-08002BE10318}". В его подкаталогах обнаружишь маппинг классов портов на драйверы. Анализируешь ключи InfSection и DriverDesc. Если находишь в них подстроку bluetooth, broadcom, widcomm — игнорируешь данный класс портов. В классах, прошедших отбор, по ключу MatchingDeviceId ищешь экземпляры портов ( в папке "HKLM\SYSTEM\CurrentControlSet\Enum\USB" ).



Спасибо за информацию
Хорошо иметь достойных потомков, но слава принадлежит нашим предкам. (Плутарх)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.