Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FTDI - определение номера СОМ порта.
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
CupuyC
Добрый день!
Я сейчас занимаюсь написанием ПО для работы с FT232R.
С помощью функции FT_ListDevices получаю описания всех подключенных устройств. Как определить к какому порту подключено каждое устройство (СОМ1, СОМ2,.....)?
Подскажите пожалуйста, хоть какую ф-цию заюзать?
KRS
Цитата(CupuyC @ Feb 8 2008, 13:31) *
С помощью функции FT_ListDevices получаю описания всех подключенных устройств. Как определить к какому порту подключено каждое устройство (СОМ1, СОМ2,.....)?

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

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

А так номер COM порта можно через реестр отпределить
COM нужен только для пользователя. Будет отображаться что такое-то устройство подключено к такому-то порту. В программе я использую только FT_xxxx.
Можно и с реестра брать информацию о номере порта.... Я думал, может есть какая-то специальная ф-ция....
CupuyC
С реестром фигня получается...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
KRS
Вся нужная вам информация лежит
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


А вы посмотрите код ошибки, может вы получаете отказ из-за того что устройство вами же и открыто через директ драйвер.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.