Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ QextSerialPort

Автор: dimay192 29.7.2010, 16:46

Привет, форумчане!
Использую QextSerialPort!
Вот такая проблемма!
Закольцевал последовательны порт сам на себя! Отправляю числа в диапазоне 0xFF-0x00, а получаю обратно в диапазоне 0x7F-0x00, т.е. восьмой бит всегда равен нулю.
И не могу понять: толи это особенность символьных устройств (работать только с символами в диапазоне 0x7F-0x00), толи преобразование типов надо какое произвести...
Подскажите, как быт!

Автор: Litkevich Yuriy 29.7.2010, 17:38

приведи код приёма, и укажи версию QextSerialPort

Автор: dimay192 29.7.2010, 18:04

Версия 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 29.7.2010, 18: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

Автор: dimay192 29.7.2010, 18:12

Цитата(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 29.7.2010, 18:20

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

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

Автор: kuzulis 29.7.2010, 18:56

Цитата
QByteArray коды 0x00 считает концом строки,

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

dimay192, а тебе обязательно QextSerialPort использовать? Другие библиотеки рассматриваются7 :)

Автор: dimay192 29.7.2010, 21:44

я так понял, что QextSerialPort самая популярная и отработанная библиотека. Пока только начал осваивать ее. С удовольствием выслушаю комментарии по поводу других библиотек!!!

Автор: kuzulis 29.7.2010, 21:48

Цитата
я так понял, что QextSerialPort самая популярная и отработанная библиотека. Пока только начал осваивать ее. С удовольствием выслушаю комментарии по поводу других библиотек!!!


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

---
Попробуйте ка это: http://qt-apps.org/content/show.php?content=112039

Автор: Litkevich Yuriy 29.7.2010, 21:57

Цитата(kuzulis @ 29.7.2010, 22:56) *
ненене.. это QString так считает..
именно QByteArray, QString тут не причём.
Чтобы засовывать в псевдостроку (QByteArray) байты, нужно использовать:
QByteArray::fromRawData(...)

В 4.6. появился ещё перегруженный метод append, принимающий указатель на массив и кол-во данных.

Автор: Litkevich Yuriy 30.7.2010, 15:10

тему разделил: http://www.forum.crossplatform.ru/index.php?showtopic=5330, т.к. библиотеки разные

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)