crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QtSerialport. Проблема с приемом данных.
Введите ваше имя
Подтвердите код

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

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
marsel Дата 20.8.2013, 23:02
  Здравствуйте kuzulis.

Подскажите пожалуйста возможно ли в QSerialPort из под Windows получить дескриптор (handle) com порта, который возвращает CreateFile.

Просто необходимо изменить время ожидания у микросхемы FTDI(Виртуальный com порт). У неё есть библиотека, с помощью которой можно изменить это время ожидания. Но необходим дескриптор (handle) com порта.

http://www.ftdichip.com/Support/Knowledgeb...atencytimer.htm

#include "ftd2xx.h"

FT_HANDLE ftHandle;
UCHAR LatencyTimer;//***Время ожидания

FT_SetLatencyTimer(ftHandle, LatencyTimer);

kuzulis Дата 28.4.2013, 23:12
  А я тебе ответил, что можешь только поллингом их состояние узнать (по таймеру или еще как нить):

...
PinoutSignals signals = port->pinoutSignals();
...
bool dsrState = QSerialPort::DataSetReadySignal & signals;
if (dsrState) {
    // do something
}
...


Нативный мониторинг не поддерживается, т.к. невозможно в MAC OSX это реализовать.
Поэтому забили болт на реализацию этой возможности - т.к. она могла бы работать только на Windows и Linux.
ud4fd Дата 28.4.2013, 22:15
 
Цитата(kuzulis @ 28.4.2013, 22:07) *
А ты не можешь отличить Qt-шные сигналы от сигнальных линий порта (pinout signals)?

вот здесь
Цитата(ud4fd @ 27.4.2013, 1:00) *
Здравствуйте kuzulis,

Подскажите ка в библиотеке QtSerialPort использовать сигнал PinoutSignals для контроля за состоянием линий CTS, RI, DCD ... желательно с реальным примером.


Я и спрашивол есть ли возможность обрабатывать сигналя от PinoutSignals или нет. Так как в документации ни чего толком не нашел.
kuzulis Дата 28.4.2013, 21:07
 
Цитата
А это нафига есть в файле qserialport_unix.cpp


А ты не можешь отличить Qt-шные сигналы от сигнальных линий порта (pinout signals)?

Нонсенс, я и не знал, что можно делать QObject::connect к перечисляемому типу, вот это новость так новость! :huh:

Ужос!
ud4fd Дата 28.4.2013, 19:55
 
Цитата(kuzulis @ 28.4.2013, 14:35) *
А гдеты нашел эти сигналы? Таких сигналов нету, есть только эти:


А это нафига есть в файле qserialport_unix.cpp

QSerialPort::PinoutSignals QSerialPortPrivate::pinoutSignals() const
{
    int arg = 0;
    QSerialPort::PinoutSignals ret = QSerialPort::NoSignal;

    if (::ioctl(descriptor, TIOCMGET, &arg) == -1) {
        q_ptr->setError(decodeSystemError());
        return ret;
    }

#ifdef TIOCM_LE
    if (arg & TIOCM_LE)
        ret |= QSerialPort::DataSetReadySignal;
#endif
#ifdef TIOCM_DTR
    if (arg & TIOCM_DTR)
        ret |= QSerialPort::DataTerminalReadySignal;
#endif
#ifdef TIOCM_RTS
    if (arg & TIOCM_RTS)
        ret |= QSerialPort::RequestToSendSignal;
#endif
#ifdef TIOCM_ST
    if (arg & TIOCM_ST)
        ret |= QSerialPort::SecondaryTransmittedDataSignal;
#endif
#ifdef TIOCM_SR
    if (arg & TIOCM_SR)
        ret |= QSerialPort::SecondaryReceivedDataSignal;
#endif
#ifdef TIOCM_CTS
    if (arg & TIOCM_CTS)
        ret |= QSerialPort::ClearToSendSignal;
#endif
#ifdef TIOCM_CAR
    if (arg & TIOCM_CAR)
        ret |= QSerialPort::DataCarrierDetectSignal;
#elif defined TIOCM_CD
    if (arg & TIOCM_CD)
        ret |= QSerialPort::DataCarrierDetectSignal;
#endif
#ifdef TIOCM_RNG
    if (arg & TIOCM_RNG)
        ret |= QSerialPort::RingIndicatorSignal;
#elif defined TIOCM_RI
    if (arg & TIOCM_RI)
        ret |= QSerialPort::RingIndicatorSignal;
#endif
#ifdef TIOCM_DSR
    if (arg & TIOCM_DSR)
        ret |= QSerialPort::DataSetReadySignal;
#endif

    return ret;
}
kuzulis Дата 28.4.2013, 13:35
  А гдеты нашел эти сигналы? Таких сигналов нету, есть только эти:

Цитата
Q_SIGNALS:
void baudRateChanged(qint32 baudRate, QSerialPort::Directions dir);
void dataBitsChanged(QSerialPort::DataBits dataBits);
void parityChanged(QSerialPort::Parity parity);
void stopBitsChanged(QSerialPort::StopBits stopBits);
void flowControlChanged(QSerialPort::FlowControl flow);
void dataErrorPolicyChanged(QSerialPort::DataErrorPolicy policy);
void dataTerminalReadyChanged(bool set);
void requestToSendChanged(bool set);
void error(QSerialPort::SerialPortError serialPortError);
void settingsRestoredOnCloseChanged(bool restore);


Во вторых, отслеживание изменения сигналов DSR, CTS, RNG и пр. не поддерживается
потому что невозможно это кросс-платформено реализовать для всех платформ
(например в MAC OSX) без использования поллинга.
ud4fd Дата 27.4.2013, 12:00
  Здравствуйте kuzulis,

при попытке использовать сигналы от состояния линий порта
 connect(serial, SIGNAL(DataSetReadySignal()), this, SLOT(myDSR()) );

в дебаг получаю следующее
Цитата
Object::connect: No such signal QSerialPort::DataSetReadySignal()
Object::connect: (receiver name: 'MainWindow')


Тестировал под Linux в QT4.8 и QT5

Как правильно работать с сигналами от линий порта?
ud4fd Дата 27.4.2013, 0:00
  Здравствуйте kuzulis,

Подскажите ка в библиотеке QtSerialPort использовать сигнал PinoutSignals для контроля за состоянием линий CTS, RI, DCD ... желательно с реальным примером.
Алексей1153 Дата 6.4.2013, 16:22
  какие по весне все нервные :D
kuzulis Дата 5.4.2013, 10:45
  Парни, ну не серьезно все это. Я перестану вообще отвечать и реагировать на такого рода вопросы и хотелки.

Цитата
Вот как раз по второй причине хочется сделать сначала задать конфигурацию, а потом открывать устройство.

Неверно. Ты можешь для такого поведения сделать свою обертку над классом.

Цитата
И потом в QextSerialPort нужно сначала создать объект порта (получить дескриптор устройства), затем сконфигурировать его и только потом открывать.

Неверно. Каша в голове.

Цитата
Так что по крайней мере я не вижу в действиях ALeXUI ничего конфликтующего с нормальной логикой или опытом использования QextSerialPort.

Неверно. Я не разбираюсь в сортах г-на и логика/опыт с QextSerialPort меня не волнует.


Цитата
сам порт (который в системе), конечно же, требует, чтобы сначала открыли его, потом настроили. Но оболочка вполне может позволить сначала задать настройки, а потом , когда порт открывают, эти настройки туда лепить.


Оболочка - это то что может пользователь сделать под себя как ему хочется, просто обернув класс своей логикой.
Задача класса - обеспечить оптимальный, простой, универсальный, понятный и гибкий интерфейс для работы с у-вом.

Цитата
так что, недоработочка в интерфейсе оболочки ИМХО

Так что, недоработочка в интерфейсе мозга ИМХО




А также нежелание читать документацию, смотреть примеры, поискать решение в гугле и т.п.
Проще ляпнуть перл в форум - авось кто-нибудь решит вашу проблему за Вас.

UPD:
Также см. QFile, QAbstractSocket, QProcess и прочие классы от QIODevice. Они не согласны с вашей логикой.
Я нехочу спорить об этом.

Если есть желание что-то изменить - представьте свое решение в Gerrit. Если его одобрят (но я не одобрю :) )
то оно появится в QtSerialPort.




Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 17.6.2024, 14:53