crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QextSerialPort, Как заставить отправлять/принимать байт целиком
dimay192
  опции профиля:
сообщение 29.7.2010, 16:46
Сообщение #1


Студент
*

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

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




Репутация:   0  


Привет, форумчане!
Использую QextSerialPort!
Вот такая проблемма!
Закольцевал последовательны порт сам на себя! Отправляю числа в диапазоне 0xFF-0x00, а получаю обратно в диапазоне 0x7F-0x00, т.е. восьмой бит всегда равен нулю.
И не могу понять: толи это особенность символьных устройств (работать только с символами в диапазоне 0x7F-0x00), толи преобразование типов надо какое произвести...
Подскажите, как быт!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.7.2010, 17:38
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


приведи код приёма, и укажи версию QextSerialPort
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dimay192
  опции профиля:
сообщение 29.7.2010, 18:04
Сообщение #3


Студент
*

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

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




Репутация:   0  


Версия 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
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(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
Сообщение #5


Студент
*

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

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




Репутация:   0  


Цитата(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
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


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

Собственно в оригинальном виде я QextSerialPort не использую. Просто взял оттуда несколько WinIPI'шных кусков для своей поделки на Дельфях. Ну и реализовал под Qt. правда только под виндовоз.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 29.7.2010, 18:56
Сообщение #7


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

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

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




Репутация:   7  


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

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

dimay192, а тебе обязательно QextSerialPort использовать? Другие библиотеки рассматриваются7 :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dimay192
  опции профиля:
сообщение 29.7.2010, 21:44
Сообщение #8


Студент
*

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

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




Репутация:   0  


я так понял, что QextSerialPort самая популярная и отработанная библиотека. Пока только начал осваивать ее. С удовольствием выслушаю комментарии по поводу других библиотек!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 29.7.2010, 21:48
Сообщение #9


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

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

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




Репутация:   7  


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


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

---
Попробуйте ка это: http://qt-apps.org/content/show.php?content=112039
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.7.2010, 21:57
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


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

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

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


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




RSS Текстовая версия Сейчас: 5.10.2022, 11:58