Название: Как найти в системе нужный компорт? Отправлено: juvf от Июля 22, 2013, 10:42 Есть устройство, подключаемое через USB. В устройстве стоит FTDI (VCP) с дефолтными драйверами. Соответственно устройство в компе появляется как виртуальный компорт. Чтобы начать с устройством работать, необходимо вычислить имя компорта. Но можно в микросхему FTDI залить свои данные и на комп поставить свой(правленный от FTDI) драйвер. Тогда в системе будет появляться не просто "USB<->RS232 преобразователь (COM38)", а например "MyDevice (COM38)".
Как программно перебрать все порты в системе и найти тот компорт, у которого "id" == MyDevice ? ps для Windows и для Linux. Название: Re: Как найти в системе нужный компорт? Отправлено: kuzulis от Июля 22, 2013, 12:09 QtSerialPort:
Wiki (http://qt-project.org/wiki/QtSerialPort) Документация по классам и методам (https://qt-project.org/doc/qt-5.1/qtserialport/qtserialport-index.html) 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 директории Название: Re: Как найти в системе нужный компорт? Отправлено: juvf от Июля 24, 2013, 05:24 Windows: 1. В Windows не обязательно что-то менять в EEPROM чипа. Достаточно поменять строку в INF файле драйвера перед его установкой. И тогда в системе имя у-ва будет таким каким хочешь. Почему не обязательно? В еепром чипа хранится пид и вид. если их не поменять, то будут дефолтные драйвера подгружаться и отображается такое устройство в списке компортов в диспетчере устройств как "USB Serial Port (COM38)". У фтди есть утилита, с помощью которой переписывается как минимум пид и вид в чипе, а потом создается драйвер новый (включая INI файл) для этого нового устройства. Я уже переписывал епром, и создавал новый драйвер. В списке компортов отображалось желаемое "MyDevice (Com38)". Название: Re: Как найти в системе нужный компорт? Отправлено: kuzulis от Июля 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 заменил! Название: Re: Как найти в системе нужный компорт? Отправлено: juvf от Июля 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 залить свои данные пид/вид - это тоже данные.Название: Re: Как найти в системе нужный компорт? Отправлено: kuzulis от Июля 24, 2013, 12:59 Это все понятно. Я тебе просто расписал как оно работает.
Если тебе нужно уникально отдетектить USB устройство то используй его VID/PID + iSerialNumber строку. Но фишка в том, что iSerialNumber может не быть, или они могут повторяться у "жопошных" NoName вендоров. Другие параметры как iProduct, iManufacturer в Windows ты просто так не вытянешь из девайса, т.к. они берутся из INF файла, а не из девайса. В принципе, в Windows можешь дополнительно еще привязываться к Description, Mfg которые берутся из INF. Но в Linux-е - все параметры берутся из USB дескриптора у-ва - там можно не бояться :) ИМХО, больше нет никакого другого способа уникально идентифицировать USB девайс. |