LINUX.ORG.RU

Qt Embedded работа с com-портом

 , ,


0

1

Всем доброго времени суток.

Есть девайс на arm, под который я пишу приложение на Qt. Разрабатываю и тестирую сначала на хосте, потом кросс-компилирую и заливаю на плату. Пока писал гуй, все прекрасно работало.

Сейчас возникла необходимость реализовать работу с com-портом. Сначала для этих целей взял QextSerialPort. На компе все завелось и общение через com-порт (с помощью конвертера usb-rs232) идет нормально. Попробовал кросс-компилировать на плату - ничего не работает.

Стал грешить на то, что криво собрал QextSerialPort. Попробовал использовать вместо него обычные системные вызовы linux. Резальтат тот-же. На компе через конвертер все работает, а после того, как кросс-компилирую для платы - нет.

Более того, на проблемы с компилятором это также не похоже, т.к. если написать чистый сишный код работы с com-портом и откомпилировать его из консоли (arm-linux-gnueabi-gcc file.c -o file...), то все работает...

Инициализирую порт так:

int comInit (const char *name) {
	int baud;
	struct termios opt;
	
	int fd = open (name, O_RDWR | O_NOCTTY);
	if (fd < 0) {
		perror ("open");
		return fd;
	}
	fsync (fd);
	tcflush (fd, TCIOFLUSH);
	bzero (&opt, sizeof (opt));
	opt.c_cflag |= (CREAD | CLOCAL);
	opt.c_cflag &= ~PARENB;
        opt.c_cflag &= ~CSTOPB;
	opt.c_cflag &= ~CSIZE;
	opt.c_cflag |= CS8;
	opt.c_cflag &= ~CBAUD;
	opt.c_cflag |= B115200;
	opt.c_cc[VMIN] = 0;
	opt.c_cc[VTIME] = 0;
	
	baud = B115200;
	
	cfsetispeed (&opt, baud);
	cfsetospeed (&opt, baud);
	
	tcsetattr (fd, TCSANOW, &opt);
	
	return fd;
}

Как уже говорил, если просто скомпилировать это как сишный файлик, то все работает. Если же подсунуть этот кусок в проект на Qt, то попытки передачи данных в порт ведутся (если верить логам), но ответ мне так и не прочитать.

Возможно, кто-нибудь сталкивался с подобной проблемой. Буду признателен за любые конструктивные идеи.

upd: Если набросать простую тестовую программку на Си, которая бы открывала порт, писала туда что-то и считывала ответ, то тоже ничего не работает. Но полноценный проект, написанный на Си и собранный тем же компилятором, успешно использует com-порт. Код инициализации порта выдран как-раз из этого проекта...

★★

Последнее исправление: solovey (всего исправлений: 1)
Ответ на: комментарий от panter_dsd

Спасибо, сейчас ознакомлюсь...

solovey ★★
() автор топика
Ответ на: комментарий от anonymous

лучше из qt не пользовать вообще, у нас тоже была какая-то байда с кутишной либой, а как выкинули и переписали на read/write, все заработало.

Rastafarra ★★★★
()
Ответ на: комментарий от Rastafarra

Лучше использовать: http://qt-project.org/wiki/QtSerialPort_Russian

на него и смотрел... Там в первом же сообщении ссылка есть.

лучше из qt не пользовать вообще

Плюсую. С нуля переписал все на системные вызовы - вроде работает. Видимо, в прошлый раз где-то все-таки накосячил...

solovey ★★
() автор топика

Как уже говорил, если просто скомпилировать это как сишный файлик, то все работает.

Как будто нельзя добавить сишный файлик в проект на Qt и дергать из него функции

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.