Перейти к содержанию
    

Можно ли в РС программе определить тип COM порта?

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В питоне такая возможность есть средствами serial.tools.list_ports про борланд не подскажу, но, имхо, наверняка должна быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самфй простой способ - посмотреть названия ключей в HKLM/HARDWARE/DEVICEMAP/SERIALCOMM. Если не устроит, гуглите setupapi.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самфй простой способ - посмотреть названия ключей в 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самфй простой способ - посмотреть названия ключей в HKLM/HARDWARE/DEVICEMAP/SERIALCOMM. Если не устроит, гуглите setupapi.
Не надо так делать. Начиная с Windows7 это работает только под учетной записью администратора.

нашел вот такой пример с использованием setup.api
Здесь этот код нашёл?

Чуть выше там нормальный рабочий код, который все порты находит.

post-4057-1481698730.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все порты находит, кроме виртуального, того который и нужен ..

хотя CLASS GUID соответствует: 4D36E978-E325-11CE-BFC1-08002BE10318

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...