реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Проблемы с ttyS* нужен хелп, После открытия порта все принятое эхом отправляется обратно
Docent86
сообщение Nov 23 2012, 10:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 2-03-10
Из: С.-Пб.
Пользователь №: 55 772



Задача 1.
Прочитать данные поступающие в ком-порт.
Задача 2.
В тот же порт выдать другие данные.
Проблема: после открытия файла все что приходит в ком-порт эхом отсылается в него же.
Как от этого избавиться?

int f;
f=open("/dev/ttyS3", O_RDWR | O_NOCITTY | O_NDELAY);
if (f == -1)...
else.....
Go to the top of the page
 
+Quote Post
kurtis
сообщение Nov 23 2012, 11:03
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



попробуйте так
Код
#include <termios.h>
...
struct termios t;
tcgetattr(fd, &t);
t.c_lflag &= ~ECHO;
tcsetattr(fd, TCSANOW, &t);
Go to the top of the page
 
+Quote Post
Docent86
сообщение Nov 23 2012, 12:44
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 2-03-10
Из: С.-Пб.
Пользователь №: 55 772



Цитата(kurtis @ Nov 23 2012, 14:03) *
попробуйте так
Код
#include <termios.h>
...
struct termios t;
tcgetattr(fd, &t);
t.c_lflag &= ~ECHO;
tcsetattr(fd, TCSANOW, &t);

Спасибо большое, помогло)))
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Nov 26 2012, 16:50
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Имхо для работы с userspace из GNU/Linux лучше гайда нету - link
Go to the top of the page
 
+Quote Post
Docent86
сообщение Nov 27 2012, 07:07
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 2-03-10
Из: С.-Пб.
Пользователь №: 55 772



С данным манулом ознакомился уже. Возникает следующая проблема:
На ноуте подключаю через переходник 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)

Сообщение отредактировал Docent86 - Nov 27 2012, 07:50
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Nov 27 2012, 08:11
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Попробуйте явно отключить аппаратное управление потоком.
Моя инициализация была такой:
Код
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);
}

Все отлично работало. Правда давненько это было...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 27 2012, 08:34
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Docent86 @ Nov 27 2012, 09:07) *
на "одноплатнике" (/dev/ttyS1)
А там случайно никакой консоли (getty) на этом устройстве не висит в /etc/init?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Nov 27 2012, 08:52
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Кстати, вполне реально что там могут быть закорочены по хитрому управляющие сигналы RS-a
Go to the top of the page
 
+Quote Post
Docent86
сообщение Nov 27 2012, 09:19
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 2-03-10
Из: С.-Пб.
Пользователь №: 55 772



getty не нашел, нашел кое что другое:
на ноуте ECHOE по умолчанию отключено, на одноплатнике включено. Попробовал на ноуте спецом его включить программно не включается, точно по этой же причине не отключается на одноплатнике (проверяем stty -F /dev/ttyS* -a изменений не наблюдается).
Go to the top of the page
 
+Quote Post
Docent86
сообщение Nov 27 2012, 09:19
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 2-03-10
Из: С.-Пб.
Пользователь №: 55 772



tcsetattr прямо в программе проверяем регистры (tcgetattr) до установки и после - значения новые - те которые и нужны, но во втором терминале смотрим stty значения сброшены на то что было по умолчанию. во втором терминале во время работы программы при помощи stty меняем регистры и порт работает почти как надо.

Сообщение отредактировал Docent86 - Nov 27 2012, 10:25
Go to the top of the page
 
+Quote Post
Docent86
сообщение Nov 27 2012, 10:34
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 2-03-10
Из: С.-Пб.
Пользователь №: 55 772



Извиняюсь. Сам дурак. Косяк - повторно в tcsetattr для другого порта запихал этот же дискриптор

Сообщение отредактировал Docent86 - Nov 27 2012, 11:47
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 06:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016