реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> FTDI - определение номера СОМ порта., Как определить номер порта, к которому подключено устройство
CupuyC
сообщение Feb 8 2008, 10:31
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 21-04-06
Из: Украина, Киев
Пользователь №: 16 335



Добрый день!
Я сейчас занимаюсь написанием ПО для работы с FT232R.
С помощью функции FT_ListDevices получаю описания всех подключенных устройств. Как определить к какому порту подключено каждое устройство (СОМ1, СОМ2,.....)?
Подскажите пожалуйста, хоть какую ф-цию заюзать?
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 8 2008, 10:36
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(CupuyC @ Feb 8 2008, 13:31) *
С помощью функции FT_ListDevices получаю описания всех подключенных устройств. Как определить к какому порту подключено каждое устройство (СОМ1, СОМ2,.....)?

А зачем вам COM, если вы используете Direct Driver, лучше так и используйте вызовы FT_xxxx они быстрее работают!

А так номер COM порта можно через реестр отпределить
Go to the top of the page
 
+Quote Post
CupuyC
сообщение Feb 8 2008, 10:48
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 21-04-06
Из: Украина, Киев
Пользователь №: 16 335



Цитата(KRS @ Feb 8 2008, 12:36) *
А зачем вам COM, если вы используете Direct Driver, лучше так и используйте вызовы FT_xxxx они быстрее работают!

А так номер COM порта можно через реестр отпределить
COM нужен только для пользователя. Будет отображаться что такое-то устройство подключено к такому-то порту. В программе я использую только FT_xxxx.
Можно и с реестра брать информацию о номере порта.... Я думал, может есть какая-то специальная ф-ция....
Go to the top of the page
 
+Quote Post
CupuyC
сообщение Feb 8 2008, 12:47
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 21-04-06
Из: Украина, Киев
Пользователь №: 16 335



С реестром фигня получается...smile3046.gif
В действительности у меня есть два устройства, который при включении занимают СОМ9 и СОМ16. А в реестре, кроме этих портов, есть еще СОМ3 и СОМ10(в диспечере устройств эти порты не светятся - только мои 9 и 16). Когда я извлекаю все USB-RS232 конвертеры - с реестра пропадают СОМ9 и СОМ16, но непонятные СОМ3 и СОМ10 остаются... Вручную их с реестра удалить не могу. Что это за порты?
Запустил программу на другом компе - там СОМ1 какой-то неизвестный постоянно висит в реестре(на самом деле в компе нет никаких СОМ портов)... Что за фигня непонятная?

Попытался по другому пойти - запустил по циклу ф-цию:
Код
hCOM=CreateFile( ComPort, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);

В цикле менялось значение стринга ComPort - СОМ1, СОМ2,.....СОМ25.
Результат
Код
hCOM!=INVALID_HANDLE_VALUE

Получаю для все тех же СОМ9, СОМ16(порты, на которых висят 2 моих устройства) и СОМ3, СОМ10 - что там висит - не ясно...
На данный момент я програмно получаю названия устройств: "Configurator1", "Configurator2" и порты СОМ3, СОМ9, СОМ10, СОМ16. Как мне определить какое устройство на каком порту висит? help.gif

Сообщение отредактировал CupuyC - Feb 8 2008, 12:51
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 8 2008, 15:46
Сообщение #5


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Вся нужная вам информация лежит
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS

там находится дерево вида
VID_0403+PID_xxxx+nnnnnnnnnnnnnnn
внутри каждого есть ключ
0000\Device Parameters\PortName вот там и лежит COM порт

вам надо только разобраться как серийный номер преобразуется в nnnnnnnnnnnnn
(в старых девайсах без еепром туда кодировлось место на USB)

Да еще в ключе
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\ComDB
хранится битовая маска занятых COM портов (их может быть максимум 256 судя по всему)


Цитата(CupuyC @ Feb 8 2008, 15:47) *
Попытался по другому пойти - запустил по циклу ф-цию:
Код
hCOM=CreateFile( ComPort, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);

В цикле менялось значение стринга ComPort - СОМ1, СОМ2,.....СОМ25.
Результат
Код
hCOM!=INVALID_HANDLE_VALUE


А вы посмотрите код ошибки, может вы получаете отказ из-за того что устройство вами же и открыто через директ драйвер.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 09:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016