Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с ttyS* нужен хелп
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Docent86
Задача 1.
Прочитать данные поступающие в ком-порт.
Задача 2.
В тот же порт выдать другие данные.
Проблема: после открытия файла все что приходит в ком-порт эхом отсылается в него же.
Как от этого избавиться?

int f;
f=open("/dev/ttyS3", O_RDWR | O_NOCITTY | O_NDELAY);
if (f == -1)...
else.....
kurtis
попробуйте так
Код
#include <termios.h>
...
struct termios t;
tcgetattr(fd, &t);
t.c_lflag &= ~ECHO;
tcsetattr(fd, TCSANOW, &t);
Docent86
Цитата(kurtis @ Nov 23 2012, 14:03) *
попробуйте так
Код
#include <termios.h>
...
struct termios t;
tcgetattr(fd, &t);
t.c_lflag &= ~ECHO;
tcsetattr(fd, TCSANOW, &t);

Спасибо большое, помогло)))
xor.kruger
Имхо для работы с userspace из GNU/Linux лучше гайда нету - link
Docent86
С данным манулом ознакомился уже. Возникает следующая проблема:
На ноуте подключаю через переходник USB-COM (/dev/ttyUSB*) необходимое устройство, в программе выводится каждый полученный байт как пологается без Эха, запускаю эту же прогу на "одноплатнике" (/dev/ttyS1) выводится строка только после получения символа 0B — Vertical Tab, и каждый байт эхом возвращается в устройство
CODE

options.c_lflag &= ~( ICANON | ECHO | ECHOE | ECHONL | ISIG | IEXTEN);

options.c_oflag &= ~OPOST;
options.c_cflag &= ~(CSIZE | CRTSCTS | CSTOPB);
options.c_cflag |= (CLOCAL | CREAD | CS8 | PARENB | CBAUD);
options.c_iflag &= ~(IXON | IXOFF | IXANY | ISTRIP | IGNBRK | BRKINT | PARMRK | INLCR | IGNCR | ICRNL);
options.c_cc[VMIN]=1;
options.c_cc[VTIME]=0;


tcflush(fd_k,TCIFLUSH);

tcsetattr(fd_k, TCSANOW, &options);

На ноуте Ubuntu12.04 на одноплатнике 8.04(text mode only)
xor.kruger
Попробуйте явно отключить аппаратное управление потоком.
Моя инициализация была такой:
Код
void rs232_set_option(int fd)
{
    struct termios options;

    tcgetattr(fd, &options);
    cfsetispeed(&options, B115200);
    cfsetospeed(&options, B115200);
    options.c_cflag |= (CLOCAL | CREAD);
    options.c_cflag &= ~PARENB;
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;
    options.c_cflag |= CS8;
    options.c_cflag &= ~(020000000000);/*~CRTSCTS;*/ /* ~CNEW_RTSCTS;*/
    tcsetattr(fd, TCSANOW, &options);
}

Все отлично работало. Правда давненько это было...
Сергей Борщ
QUOTE (Docent86 @ Nov 27 2012, 09:07) *
на "одноплатнике" (/dev/ttyS1)
А там случайно никакой консоли (getty) на этом устройстве не висит в /etc/init?
xor.kruger
Кстати, вполне реально что там могут быть закорочены по хитрому управляющие сигналы RS-a
Docent86
getty не нашел, нашел кое что другое:
на ноуте ECHOE по умолчанию отключено, на одноплатнике включено. Попробовал на ноуте спецом его включить программно не включается, точно по этой же причине не отключается на одноплатнике (проверяем stty -F /dev/ttyS* -a изменений не наблюдается).
Docent86
tcsetattr прямо в программе проверяем регистры (tcgetattr) до установки и после - значения новые - те которые и нужны, но во втором терминале смотрим stty значения сброшены на то что было по умолчанию. во втором терминале во время работы программы при помощи stty меняем регистры и порт работает почти как надо.
Docent86
Извиняюсь. Сам дурак. Косяк - повторно в tcsetattr для другого порта запихал этот же дискриптор
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.