Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: опеделение номера COM порта на USB устройстве  (Прочитано 26324 раз)
0 Пользователей и 1 Гость смотрят эту тему.
megalab
Гость
« : 10-09-2006 12:22 » 

Здрасьте  Улыбаюсь
Подскажите пжлста , каким образом в MSVS C++ можно организовать опеделение номера COM порта расположенного на USB устройстве с конкретным названием ( в системе USB определяется как megalab interface ).
или если это реально , сразу получить хендл этого COM-а ,
который находится на megalab interface
для последующего автоматического конфигурирования и доступа.
спасибо за участие .
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 11-09-2006 04:40 » 

Непонятный вопрос, если я его правильно понял, то при добавлении нового COM-порта система его записывает под последним свободным номером.
Подскажите пжлста , каким образом в MSVS C++ можно организовать опеделение номера COM порта расположенного на USB устройстве с конкретным названием ( в системе USB определяется как megalab interface ).
Например если стояли до этого COM1 и COM2 то будет добавлен COM3, а название в системе у него такое же и будет COM3 и не имеет значения как он подклучен: буть то встроеный в материнку, через расширение PCI или через USB.
или если это реально , сразу получить хендл этого COM-а ,
который находится на megalab interface
для последующего автоматического конфигурирования и доступа.
Получить его хендл просто, достаточно вызвать функцию CreateFile с его именем (COM3) после чего, можно конфигурировать его.
Записан
megalab
Гость
« Ответ #2 : 11-09-2006 05:12 » 

всё не много по другому ...
у меня он определяется как СОМ 7, но это ещё не всё ...
у меня много всяких девайсов,
которые могут использовать тот же порт (не одновременно конечно  Улыбаюсь ) ,
 или другой .
Мне нужно конкретно вырвать тот COM, который система присвоит
USB девайсу с именем megalab interface...
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 11-09-2006 05:46 » 

у меня он определяется как СОМ 7, но это ещё не всё ...
Это происходит потому, что ты постоянно выдергиваешь и вставляещь шнурок USB, поэтому винда и накручивает номер COM-порта (если у тебя конечно и вправду уже 6 портов нестоит). У меня однажды аж до 26, или около того, накрутило. Это можно подправить, в диспетчере устройств назначив ему самый последний свободный номер.
Мне нужно конкретно вырвать тот COM, который система присвоит
USB девайсу с именем megalab interface...
Дело втом, что в конце всей цепочки (USB->megalab interface->COM), COM порт использует стандартные Win-довые драйвера (serenum.sys и serial.sys в WinXP) за счет чего и достигается общий интерфейс работы, в не зависимости шерез какую шину подключен порт. А функцию (Win32 API) которая возврашяла бы название шины через которую подключен порт в системе я не встречал. Это уже работа драйвера, перенапровлять поток данных в нужном напровлении. Хотя я думаю эта информация должна храниться в реестре.

Тебе что конкретно нужно узнать, толи устройство весит на другом конце или что порт был подключен через данную шину?
Записан
megalab
Гость
« Ответ #4 : 11-09-2006 07:48 » 

мне нужно при каждом подкючении моего УСБ девайса megalab interface получать конкретный номер COM порта , который на девайсе висит.
а
Цитата
Это происходит потому, что ты постоянно выдергиваешь и вставляещь шнурок USB, поэтому винда и накручивает номер COM-порта
у меня не наращивает номер , и девайсов на СОМах много.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 12-09-2006 05:34 » 

Я заметил такую вешь, программы использующие соединение с COM-портом сами не пытаются определить на каком порте весит девайс, а оставляют эту функцию пользователю.

Постоянно приходиться работать с софтом соединяющимся через COM-порт с отладчиками JTAG. Так во всех необходимо указывать через какой порт работать. Правдо есть пункт "авто", но работает он прямолинейно, открывает по очереди все порты и пытается соедениться с отладчиком. Так же у меня был модем соеденяющийся через COM-порт, так и там надо было указывать через какой COM ему соединяться.

Хотя я думаю все же пожно определить номер порта весяшего на данной шине, но косвенными методами. В частности можно определить его номер проведе анализ данной ветки HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001 реестра.

Если это пользовательский софт, то я думаю лучше оставить пользователю право выбора порта.

Кстати, на этом форуме есть довольно опытные програмеры, и если был бы довольно простой способ определения шины, например в пару вызовов функций API то, я думаю, тебе уже давно бы объяснили как это сделать.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines