Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: Larry от Апрель 12, 2013, 15:35



Название: [РЕШЕНО]QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 12, 2013, 15:35
Добрый день, форумчане. Подскажите пожалуйста как исправить такое (на рисунке). Виртуальные порты с 7-го по 10-ый создаются программой TelitSerialPortMux. Можно конечно убрать эти непонятные задвоения программно, но может быть я неправильно получаю список портов? Вот код:

Код:
void CGPSTerminal::slotUpdateListPorts()
{
    m_ui->m_cbPortList->clear();

    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        m_ui->m_cbPortList->addItem(info.portName());
    }
}

m_ui->m_cbPortList - QComboBox.



Название: Re: QtSerialPort и виртуальные порты
Отправлено: kuzulis от Апрель 12, 2013, 16:03
А диспетчер устройств что показывает?

UPD: Дай ссылку где скачать TelitSerialPortMux


Название: Re: QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 12, 2013, 16:25
вот диспетчер задач..


Название: Re: QtSerialPort и виртуальные порты
Отправлено: Bepec от Апрель 12, 2013, 16:25
У меня такое было правда с другой программкой. Не публичной.

Она создавала 1 виртуальный и 1 замкнутый на него порт.


Название: Re: QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 12, 2013, 16:35
вот ссылка на программу: http://www.roundsolutions.com/techdocs/driver_tools/SerialPortMux1.09.zip


Название: Re: QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 12, 2013, 16:39
здесь получается прямой порт, тот что отмечен как третий - через него мы работаем напрямую с устройством (прошивка, обновление скриптов), когда в нем программа не запустилась и виртуальные через которые идет работа с запущенным устройством.


Название: Re: QtSerialPort и виртуальные порты
Отправлено: kuzulis от Апрель 12, 2013, 19:02
Нужно ли наличие реального оборудования для того чтобы создать и открыть виртуальные порты?
Или можно просто установить эту программулину, насоздавать порты и типа пользоваться ими?


Название: Re: QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 12, 2013, 20:52
Извините не смог сразу ответить, младшую укладывал. Наличие реального оборудования не надо, они и так будут присутствовать в системе после запуска...мы работаем с модемами GE863-GPS (GPS-трекеры). Просто установите эту программу и запустите ее и можно будет посмотреть что не так.


Название: Re: QtSerialPort и виртуальные порты
Отправлено: kuzulis от Апрель 12, 2013, 20:57
Итак, посмотрел я как там что.

Оказывается, что реально устройства типа NULL_COMx реально присутствуют в системе.

Имеют "дружественное имя"  типа "Eltima VSPort Controlling Device for COMx".

Реально эти устройства могут и не являться последовательными портами, определить это
невозможно в силу того, что действительные "виртуальные" порты (с именами COMx) и эти
"контрол" девайсы (с именами NULL_COMx) имеют один и тот же GUID.

Цитировать
   // Eltima Virtual Serial Port Driver v4 GUID
    { 0xCC0EF009, 0xB820, 0x42F4, { 0x95, 0xA9, 0x9B, 0xFA, 0x6A, 0x5A, 0xB7, 0xAB } },

Этот GUID не является стандартным для последовательных портов или модемов (см. MSDN),
а является "высером" фирмы-производителя драйвера/тулзы TelitSerialPortMux.

Энумерация устройств осуществляется по предопределенным GUID-ам.

Цитировать
   // Windows Ports Class GUID
    { 0x4D36E978, 0xE325, 0x11CE, { 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 } },
    // Virtual Ports Class GUID (i.e. com0com and etc)
    { 0xDF799E12, 0x3C56, 0x421B, { 0xB2, 0x98, 0xB6, 0xD3, 0x64, 0x2B, 0xC8, 0x78 } },
    // Windows Modems Class GUID
    { 0x4D36E96D, 0xE325, 0x11CE, { 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 } },
    // Eltima Virtual Serial Port Driver v4 GUID
    { 0xCC0EF009, 0xB820, 0x42F4, { 0x95, 0xA9, 0x9B, 0xFA, 0x6A, 0x5A, 0xB7, 0xAB } },
    // Advanced Virtual COM Port GUID
    { 0x9341CD95, 0x4371, 0x4A37, { 0xA5, 0xAF, 0xFD, 0xB0, 0xA9, 0xD1, 0x96, 0x31 } },

Из которых первый и третий - стандартные. Остальные - это "высеры" производителей,
поэтому я ничего сделать не могу в этой ситуации. Ты сам отсеивай "левые " девайсы.


Название: Re: QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 12, 2013, 21:09
спасибо большое, значит будем выкидывать их выкидывать так, не сложно :), тогда будем считать, что вопрос решен :)...еще раз спасибо.


Название: Re: [РЕШЕНО]QtSerialPort и виртуальные порты
Отправлено: kuzulis от Апрель 12, 2013, 22:33
Похоже, все-таки, что эти NULL_COMx устройства все-таки являются последовательными портами.

Я сделал патч для енумерации с использованием через GUID интерфейсы, что более корректно.

Парни, проверьте кто-нибудь у себя, правильно ли оно теперь перечисляет, все-ли находит как раньше?

Патч: https://codereview.qt-project.org/#change,53725

Нужно статистику набрать :)


Название: Re: [РЕШЕНО]QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 12, 2013, 23:36
есть вопрос: а как применить патч ???, правда опробовать смогу только в понедельник....


Название: Re: [РЕШЕНО]QtSerialPort и виртуальные порты
Отправлено: kuzulis от Апрель 13, 2013, 09:03
Нужен Git:

Цитировать
$git clone git://gitorious.org/qt/qtserialport.git
$cd qtserialport
$git fetch https://codereview.qt-project.org/p/qt/qtserialport refs/changes/25/53725/2 && git checkout FETCH_HEAD

И пересобрать.

Или вручную копипастить, там изменений мало:
https://codereview.qt-project.org/#patch,sidebyside,53725,2,src/serialport/qserialportinfo_win.cpp


Название: Re: [РЕШЕНО]QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 13, 2013, 10:52
спасибо, в понедельник попробую...git я тоже использую, очень удобно, когда и на работе и дома что-то делаешь...в команде пока не работал :)


Название: Re: [РЕШЕНО]QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 15, 2013, 11:04
Пересобрал библиотеку и вроде бы все осталось по старому, т.е. все то что было, так и осталось...значит почищу ручками:)


Название: Re: [РЕШЕНО]QtSerialPort и виртуальные порты
Отправлено: kuzulis от Апрель 15, 2013, 15:21
Ну да, должно остаться.

Просто по-новому реализация более правильная. И теперь, раз она показывает у-ва NULL_COMx -
то с большой вероятностью это последовательные порты.


Название: Re: [РЕШЕНО]QtSerialPort и виртуальные порты
Отправлено: Larry от Апрель 15, 2013, 15:55
спасибо, понял..я уже руками убрал в две строчки...сейчас все нормально работает :)...спасибо...