Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QextSerialPort
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
dimay192
Привет, форумчане!
Использую QextSerialPort!
Вот такая проблемма!
Закольцевал последовательны порт сам на себя! Отправляю числа в диапазоне 0xFF-0x00, а получаю обратно в диапазоне 0x7F-0x00, т.е. восьмой бит всегда равен нулю.
И не могу понять: толи это особенность символьных устройств (работать только с символами в диапазоне 0x7F-0x00), толи преобразование типов надо какое произвести...
Подскажите, как быт!
Litkevich Yuriy
приведи код приёма, и укажи версию QextSerialPort
dimay192
Версия 1.2.0
Код приёма....

Для начала код отправления:

void QespTest::transmitMsg()
{
  int i = port->write((message->text()).toAscii(),
                       (message->text()).length());
}

код приема:
bool serialPort::synchronizedReading()
{
    int numBytes;
    numBytes = port->bytesAvailable();

    while(numBytes = port->bytesAvailable())
    {
        QByteArray b;
        b.append(port->read(1));

        port->getChar(&byte);
        ...

     }

}



собственно, это чуток подправленный пример QESPTA

QByteArray b отношения к делу не имеет... так, экспериментировал...
Litkevich Yuriy
Цитата(dimay192 @ 29.7.2010, 21:55) *
пример QESPTA
это довольно кривое творение. Я в нём много косяков находил. Лучше пиши своё чётко под QextSerialPort.
и не забудь, что QByteArray коды 0x00 считает концом строки, т.е. имея шестнадцатеричную последовательность:
01 02 03 00 05 06
Помещаяя её в QByteArray
QByteArray b;
b.append("01 02 03 00 05 06");

на выхлопе получишь:
01 02 03
dimay192
Цитата(Litkevich Yuriy @ 29.7.2010, 21:05) *
Цитата(dimay192 @ 29.7.2010, 21:55) *
пример QESPTA
это довольно кривое творение. Я в нём много косяков находил. Лучше пиши своё чётко под QextSerialPort.
и не забудь, что QByteArray коды 0x00 считает концом строки, т.е. имея шестнадцатеричную последовательность:
01 02 03 00 05 06
Помещаяя её в QByteArray
QByteArray b;
b.append("01 02 03 00 05 06");

на выхлопе получишь:
01 02 03


Дык, собственно, что так:

QByteArray b;
b.append(port->read(1));

, что так:

char byte;
port->getChar(&byte);

режит верхний диапазон числел (восмой бит обнуляет)

На счет того, что QESPTA спорить не буду - не знаю, да вот пока только ниче лучше не нашел (начинающий я)

Litkevich Yuriy
Цитата(dimay192 @ 29.7.2010, 22:12) *
QESPTA
это программа испоьлзующая QextSerialPort, а не сама библиотека.

Собственно в оригинальном виде я QextSerialPort не использую. Просто взял оттуда несколько WinIPI'шных кусков для своей поделки на Дельфях. Ну и реализовал под Qt. правда только под виндовоз.
kuzulis
Цитата
QByteArray коды 0x00 считает концом строки,

ненене.. это QString так считает..

dimay192, а тебе обязательно QextSerialPort использовать? Другие библиотеки рассматриваются7 :)
dimay192
я так понял, что QextSerialPort самая популярная и отработанная библиотека. Пока только начал осваивать ее. С удовольствием выслушаю комментарии по поводу других библиотек!!!
kuzulis
Цитата
я так понял, что QextSerialPort самая популярная и отработанная библиотека. Пока только начал осваивать ее. С удовольствием выслушаю комментарии по поводу других библиотек!!!


Ну как бы я так бы не стал говорить... Она была единственно возможной... До недавнего времени.. Но.. теперь все поменялось! :)

---
Попробуйте ка это: http://qt-apps.org/content/show.php?content=112039
Litkevich Yuriy
Цитата(kuzulis @ 29.7.2010, 22:56) *
ненене.. это QString так считает..
именно QByteArray, QString тут не причём.
Чтобы засовывать в псевдостроку (QByteArray) байты, нужно использовать:
QByteArray::fromRawData(...)

В 4.6. появился ещё перегруженный метод append, принимающий указатель на массив и кол-во данных.
Litkevich Yuriy
тему разделил: использование QSerialDevice, т.к. библиотеки разные
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.