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

 
 
 
Reply to this topicStart new topic
> Можно ли в РС программе определить тип COM порта?, Виртуальный или "железный"
nanorobot
сообщение Nov 28 2016, 08:08
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 201
Регистрация: 29-02-08
Пользователь №: 35 503



Железяка на STM32F407 обменивается по USB(виртуальный СОМ порт) c РС программой(Windows, Borland C++ builder). Программа идентифицирует железяку опрашивая все наличествующие в системе СОМ порты. Заранее неизвестно сколько портов и каких может быть в системе. Можно ли используя API или что либо еще, определить тип СОМ порта - виртуальный, или "железный"? Было бы идеально, если б можно было получить строку из описания порта в системе, например "PCI Serial Port(COM3)", или "STM32 Virtual Com Port (COM6) "

Сообщение отредактировал nanorobot - Nov 28 2016, 11:04
Go to the top of the page
 
+Quote Post
rat
сообщение Nov 28 2016, 09:06
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 484
Регистрация: 9-06-05
Из: Новосибирск
Пользователь №: 5 852



Цитата(nanorobot @ Nov 28 2016, 15:08) *
Железяка на STM32F407 обменивается по USB(виртуальный СОМ порт) c РС программой(Windows, Borland C++ builder). Программа идентифицирует железяку опрашивая все наличествующие в системе СОМ порты. Заранее неизвестно сколько портов и каких может быть в системе. Можно ли используя API или что либо еще, определить тип СОМ порта - виртуальный, или "железный"? Было бы идеально, если б можно было получить строку из описания порта в системе, например "PCI Serial Port(COM3)", или "STM32 Virtual Com Port (COM6) "


В питоне такая возможность есть средствами serial.tools.list_ports про борланд не подскажу, но, имхо, наверняка должна быть.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 28 2016, 09:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 269
Регистрация: 11-12-04
Пользователь №: 1 448



Самфй простой способ - посмотреть названия ключей в HKLM/HARDWARE/DEVICEMAP/SERIALCOMM. Если не устроит, гуглите setupapi.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Nov 28 2016, 12:14
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 201
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(aaarrr @ Nov 28 2016, 15:23) *
Самфй простой способ - посмотреть названия ключей в HKLM/HARDWARE/DEVICEMAP/SERIALCOMM. Если не устроит, гуглите setupapi.


нашел вот такой пример с использованием setup.api
Код
  HDEVINFO hDevInfo;
        SP_DEVINFO_DATA DeviceInfoData;
        SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
        char dev_name[1024];
        DWORD i;

        GUID GUID_DEVCLASS_PORTS = {0x4d36e978, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18};

        hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
        if (hDevInfo == INVALID_HANDLE_VALUE)
        {}//    return 0;
        DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
        DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
        for(i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)
        {
            SetupDiGetDeviceRegistryPropertyA(hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, NULL, (UCHAR*)dev_name, sizeof(dev_name), NULL);
            std::cout << dev_name << std::endl;
        }
        SetupDiDestroyDeviceInfoList(hDevInfo);


все порты находит, кроме виртуального, того который и нужен ..
хотя CLASS GUID соответствует: 4D36E978-E325-11CE-BFC1-08002BE10318

Сообщение отредактировал nanorobot - Nov 28 2016, 14:07
Go to the top of the page
 
+Quote Post
Zlumd
сообщение Dec 14 2016, 06:59
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 324
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057



Цитата(aaarrr @ Nov 28 2016, 16:23) *
Самфй простой способ - посмотреть названия ключей в HKLM/HARDWARE/DEVICEMAP/SERIALCOMM. Если не устроит, гуглите setupapi.
Не надо так делать. Начиная с Windows7 это работает только под учетной записью администратора.
Цитата(nanorobot @ Nov 28 2016, 19:14) *
нашел вот такой пример с использованием setup.api
Здесь этот код нашёл?
Чуть выше там нормальный рабочий код, который все порты находит.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Mazay
сообщение Feb 13 2017, 16:54
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 23-11-05
Пользователь №: 11 270



Цитата(nanorobot @ Nov 28 2016, 15:14) *
все порты находит, кроме виртуального, того который и нужен ..
хотя CLASS GUID соответствует: 4D36E978-E325-11CE-BFC1-08002BE10318


При вызове функции SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); надо убрать флаг DIGCF_DEVICEINTERFACE. Тогда будут получены и виртуальные порты использующие драйвер usbser.sys.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th November 2017 - 23:11
Рейтинг@Mail.ru


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