crossplatform.ru

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

gormih
  опции профиля:
сообщение 26.3.2012, 12:57
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 22.9.2011
Пользователь №: 2901

Спасибо сказали: 0 раз(а)




Репутация:   0  


Проблема в том, что сия чудная библиотека не хочет давать только строки по ->ReadLine - дает нарезку из обрывков строк.
Инициализация:
NmeaSerial::NmeaSerial(const QString & portName)
{
    this->NMEASerialport = new QextSerialPort(portName,QextSerialPort::EventDriven);

    NMEASerialport->setBaudRate(BAUD38400);
    NMEASerialport->setFlowControl(FLOW_OFF);
    NMEASerialport->setParity(PAR_NONE);
    NMEASerialport->setDataBits(DATA_8);
    NMEASerialport->setStopBits(STOP_2);

    if (NMEASerialport->open(QIODevice::ReadOnly) == true) {
        connect(NMEASerialport, SIGNAL(readyRead()), this, SLOT(onNmeaDataRead()));
        connect(NMEASerialport, SIGNAL(dsrChanged(bool)), this, SLOT(onNmeaDsrChanged(bool)));
        if (!(NMEASerialport->lineStatus() & LS_DSR))
            qDebug() << "warning: device is not turned on";
        qDebug() << "listening for data on" << NMEASerialport->portName();
    }
    else {
        qDebug() << "device failed to open:" << NMEASerialport->errorString();
    }

}


Читаю так:

void NmeaSerial::onNmeaDataRead()
{
        QString tmpdata= QString::fromLatin1(NMEASerialport->readLine(999));
        QStringList tmpdatalist = tmpdata.split("/n");
         qDebug() << "Byte:" <<tmpdatalist;
}


Как победить недуг?
Есть идея использовать getChar, но это как то муторно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 2)
gormih
  опции профиля:
сообщение 26.3.2012, 14:10
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 22.9.2011
Пользователь №: 2901

Спасибо сказали: 0 раз(а)




Репутация:   0  


Временное решение - ограничить чтение строки если размер буфера меньше размера максимальной строки.
Как то так:

    if (NMEASerialport->bytesAvailable()>200)
    {
    QString tmpdata = QString::fromLatin1(NMEASerialport->readLine(200));
        qDebug() << "Found line:" <<tmpdata << " \n Size of buffer:" << NMEASerialport->bytesAvailable();
    }


Как показывает практика вполне работоспобно, но хотелось бы более красивого варианта...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 26.3.2012, 21:13
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


А QSerialDevice 2.0 не пробовал?

И вообще, создается новый проект QtSerialPort.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 20.6.2025, 18:11