AK
Aleksandr Kuz'minyhJune 2, 2017, 4:14 a.m.

QSerialPort. Как правильнее проверить сигнал CTS?

QSerialPort

Добрый день, Евгений. Искал по интернету и узнал, что раннее, когда класс QSerialPort проектировался, создавался (в 2011году) в нем были сигналы ctsChanged(), dsrChanged(), ringChanged(). Сейчас же таких сигналов нет. Зато есть объект QSerialPort::PinoutSignals и метод QSerialPort::pinoutSignals() ,который этот объект и возвращает. И я получил результат, который меня интересовал.

void RAP1601::checkPins()
{
    QSerialPort::PinoutSignals sgn;
    sgn = m_serial->pinoutSignals();
    if(sgn.testFlag(QSerialPort::ClearToSendSignal)) //Проверяет CTS сигнал.
    {
        qDebug() << "CTS = 1";
    }
}
Я вызываю этот слот по таймеру.
connect(m_timerForCheckingPins, SIGNAL(timeout()), SLOT(checkPins()));
Вопрос, есть ли другое/лучшее решение, чем вызывать проверку по таймеру? Ведь я могу пропустить, если интервал таймера большой, или зря нагружать процессор, если интервал маленький. ps. Если интересно. Изучая WINAPI с последовательным портом, узнал, что там есть событие изменения CTS линии. Грубо говоря, тот же сигнал в QT. Но в QT не реализовали ctsChanged() , как я понял, и из-за отсутствия в Linux "из коробки" отслеживать их состояние.
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
4

Хм. Действительно, сигналов таких нет.

Тогда здесь два варианта решения:

  1. Оставить таймер, НО делать частоту срабатывания таймера, равным скорости работы передающего устройства, то есть того устройства, на котором будет ваша Qt программа. Тогда его работа будет наиболее оптимальной
  2. Использовать WinAPI, но пока не могу ничего сказать по этому вопросу, нужно самому смотреть, что оно может предоставить. Если там есть что-то типа хука, то можно попробовать навешать на него callback, как например вот в этой статье для событий мыши.
AK

Благодарю, что ответили.   Второй вариант не подойдет, т.к. планируется , что приложение будет на платформу Linux.
Мне было важно знать, понять, правильно ли я мыслил, сделал ;)

AK

Второй вариант я тоже попробую.  Будет полезным. Спасибо !

e
  • Jan. 13, 2021, 6:08 a.m.

Здравствуйте! Есть задача отслеживать изменение сигнала CTS, можно ли это сделать по таймеру методом QSerialPort::pinoutSignals()?

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
TG

C++ - Test 001. The first program and data types

  • Result:53points,
  • Rating points-4
TG

C++ - Test 001. The first program and data types

  • Result:60points,
  • Rating points-1
TN

C++ - Test 001. The first program and data types

  • Result:40points,
  • Rating points-8
Last comments
t
  • t1m4
  • Jan. 23, 2021, 8:28 a.m.

Django - Tutorial 052. Redefining a User Model

Добрый день, Я вот написал в admin.py admin.site.register(User, UserAdmin) Но у меня не появилось новые поля в админке?

Django - Tutorial 001. Deploying a site on Django + PostgreSQL + Gunicorn + Nginx

Ошибка в конфиге инжинкса про статику в root последний слеш лишний путь в таком виде получается /home/user/myprojectenv/myproject/myproject//static
  • Jurij
  • Jan. 20, 2021, 1:34 p.m.

Qt/C++ - Lesson 061. Adding images to the application using the Drag And Drop method from the file manager

// Вместо отрисовки иконки и текста будем отрисовывать только одно изображение // с небольшими отступами в 5 пикселей QPixmap pix(m_model->data(index).toString()); …
m
  • magrif
  • Jan. 19, 2021, 12:37 p.m.

Qt Сертификация

Здравствуйте. Подскажите, оплачивать ваучер прямо в выбранном тестовом центре? Можно ли загранник предъявить? Или свой паспорт, а заполнить транслитом? А то там пишут: Your name must exactl…
r
  • retmas
  • Jan. 17, 2021, 4:09 a.m.

Qt/C++ - Tutorial 074. Generating pseudo-random numbers, using STD library random

Дмитрий, решает. Просто автор, видимо, не сильно озаботился изучением документации QRandomGenerator. Да и в листинге с использованием qrand вызов функции qsrand на каждой итерации цикла нав…
Now discuss on the forum

Не получается prefetch_related на M2M полях

это да. и правильнее всего было бы сделать все фильтрации и только в самом конце вызвать prefetch_related например, если все это уходит в шаблон, я бы поступил следующим образом: def so…
  • BlinCT
  • Jan. 23, 2021, 9:25 a.m.

Правильное расположение элементов в ListView

Вся проблема в тмо что у меня репитор который должен правильно создавать по индексам эти ячейки. В случаи данной момедли 2 столбца а после засунуть туда правильный текст из модели. Вот тут какой…
s

qml и С++ setproperty

Доброе время суток. Вопрос может быть банальный... но не для меня ((( есть ли возможность при создании динамической переменной через функцию с++ "setProperty" этой переменной пол…

Ошибка при работе утилиты не удалось получить фабрику класса com для компонента с clsid

Проблема решилась. Оказывается для работы нужно чтобы был установлен Microsoft Office. Причем об этом нигде не было сказано.
DK

QScrollArea dynamically add QCheckBoxes

QWidget *materialContainer = new QWidget(this);QVBoxLayout *materialLay = new QVBoxLayout();materialContainer->setLayout(materialLay);ui->_materialScrollArea->setWidget(materialContaine…
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB