Russian Qt Forum
Ноябрь 22, 2024, 23:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как найти в системе нужный компорт?  (Прочитано 5029 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« : Июль 22, 2013, 10:42 »

Есть устройство, подключаемое через USB. В устройстве стоит FTDI (VCP) с дефолтными драйверами. Соответственно устройство в компе появляется как виртуальный компорт. Чтобы начать с устройством работать, необходимо вычислить имя компорта. Но можно в микросхему FTDI залить свои данные и на комп поставить свой(правленный от FTDI) драйвер. Тогда в системе будет появляться не просто "USB<->RS232 преобразователь (COM38)", а например "MyDevice (COM38)".

Как программно перебрать все порты в системе и найти тот компорт, у которого "id" ==  MyDevice ?

ps для Windows и для Linux.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Июль 22, 2013, 12:09 »

QtSerialPort:

Wiki
Документация по классам и методам

UPD:

Windows:

1. В Windows не обязательно что-то менять в EEPROM чипа. Достаточно поменять строку в INF файле драйвера перед его установкой.
И тогда в системе имя у-ва будет таким каким хочешь.

2. Если все-же меняешь EEPROM с заменой в USB дескрипторе жалаемые тебе строчки iProduct, iManufacturer, то Windows все-равно
их не отобразит, т.к. инфа берется из драйвера. Чтобы прочитать  iProduct, iManufacturer из USB нужно использовать libusb или
USB специфичное Win32 API (наверное).

Linux:

1. Можешь использовать libudev
2. Можешь использовать libusb
3. Можешь использовать dbus
4. Можешь сам парсить содержимое /sys/class/tty директории



« Последнее редактирование: Июль 22, 2013, 12:16 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #2 : Июль 24, 2013, 05:24 »

Windows:

1. В Windows не обязательно что-то менять в EEPROM чипа. Достаточно поменять строку в INF файле драйвера перед его установкой.
И тогда в системе имя у-ва будет таким каким хочешь.

Почему не обязательно? В еепром чипа хранится пид и вид. если их не поменять, то будут дефолтные драйвера подгружаться и отображается такое устройство в списке компортов в диспетчере устройств как "USB Serial Port (COM38)". У фтди есть утилита, с помощью которой переписывается как минимум пид и вид в чипе, а потом создается драйвер новый (включая INI файл) для этого нового устройства. Я уже переписывал епром, и создавал новый драйвер. В списке компортов отображалось желаемое "MyDevice (Com38)".
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Июль 24, 2013, 11:03 »

Цитата: juvf
Почему не обязательно? В еепром чипа хранится пид и вид.
Про изменение VID/PID речи не было.

Цитировать
если их не поменять, то будут дефолтные драйвера подгружаться и отображается такое устройство в списке компортов в диспетчере устройств как "USB Serial Port (COM38)".
Если ты, ничего не меняя в EEPROM, в этих драйверах в их INF файлах поменяешь строку "USB Serial Port" на "My Cool USB Device", то после их установки, устройство будет иметь в системе имя: "My Cool USB Device (COM39)". Улыбающийся

Цитировать
а потом создается драйвер новый (включая INI файл) для этого нового устройства
Там новый драйвер не создается, а просто в INI файл прописываются твой новый VID/PID + твое имя устройства, если не ошибаюсь.
Возможно, что после этих манипуляций также эта тулза подписывает драйвер заново FTDI-шной подписью, хотя не уверен.

И всего-то делов Улыбающийся

Но в любом случае, Windows использует для наименования устройств инфу, которую берет из INF файла, а не ту, которую ты в EEPROM заменил!
Записан

ArchLinux x86_64 / Win10 64 bit
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #4 : Июль 24, 2013, 11:39 »

Цитировать
Если ты, ничего не меняя в EEPROM, в этих драйверах в их INF файлах поменяешь строку "USB Serial Port" на "My Cool USB Device", то после их установки, устройство будет иметь в системе имя: "My Cool USB Device (COM39)". Улыбающийся
Да этот вариант вообще не катит. чип фтди используют кому не лень. параллельно с девайсом у меня подключены 2 шнурка "Конвертер USB-RS422/485" на тех же чипах фтди. Иногда использую усб-рс232. Или программатор на чипе фтди..... Полно устройств на фтди. И все устройства с дефолтными дровами фтди будут как "My Cool USB Device".

Цитировать
Про изменение VID/PID речи не было.
Цитировать
Но можно в микросхему FTDI залить свои данные
пид/вид - это тоже данные.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Июль 24, 2013, 12:59 »

Это все понятно. Я тебе просто расписал как оно работает.

Если тебе нужно уникально отдетектить USB устройство то используй его VID/PID + iSerialNumber строку.
Но фишка в том, что iSerialNumber может не быть, или они могут повторяться у "жопошных" NoName вендоров.

Другие параметры как iProduct, iManufacturer в Windows ты просто так не вытянешь из девайса, т.к. они берутся из INF файла,
а не из девайса. В принципе, в Windows можешь дополнительно еще привязываться к Description, Mfg которые берутся из INF.

Но в Linux-е - все параметры берутся из USB дескриптора у-ва - там можно не бояться Улыбающийся


ИМХО, больше нет никакого другого способа уникально идентифицировать USB девайс.


« Последнее редактирование: Июль 24, 2013, 13:04 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.