LINUX.ORG.RU

Правильная настройка Termios


0

0

Здравствуйте.. Мучаюсь над одной проблемой неделю. Есть устройство Штрих-М касса работает через com порт не использует проверку на четнось передает 8 бит данных на скорости 115200 50 мс таймаут.. Как мне настроить подключение на C++ под ком порт так чтобы все работало... Да я получаю соединение все работает но из 10 раз удачного использования например 2 раза чтото заглючиват данные перестают попадать в устройство.. и например пока я ищу в инете инфу спустя 5 минут эти данные доползают из порта в устройство (когда программа уже закрыта).. как будто теряются данные гдето по пути я уже не знаю что делать испробовал уйму вариантов помогите пожалуста кто знает

> Здравствуйте.. Мучаюсь над одной проблемой неделю. Есть устройство Штрих-М касса работает через com порт не использует проверку на четнось передает 8 бит данных на скорости 115200 50 мс таймаут.. Как мне настроить подключение на C++ под ком порт так чтобы все работало... Да я получаю соединение все работает но из 10 раз удачного использования например 2 раза чтото заглючиват данные перестают попадать в устройство.. и например пока я ищу в инете инфу спустя 5 минут эти данные доползают из порта в устройство (когда программа уже закрыта).. как будто теряются данные гдето по пути я уже не знаю что делать испробовал уйму вариантов помогите пожалуста кто знает

символ "," находится на нижнем алфавитном ряду клавиатуры и очень помогает делать из потока сознания осмысленный текст. Тому же способствуют символы ":" и ";". Освоив несложную технику их применения вы сможете переформулировать приведённую выше истерику в вид, в котором проблема описана ясно и чётко и который непротивно читать, а уж тем более отвечать.

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

Есть устройство подключенное к COM порту Я могу получить к нему доступ, так как мне нужно, но т.к. настроек порта очень много, возможно кто-то знает как оптимально настроить termios для данного устройства. Я могу работать с устройством но все равно, что-то подглючивает, это нужно исключить. Вот вопрос и заключается в том чтобы мне объяснили как правильно подключаться к COM порту под Linux на языке c++ с использованием termios. Программа не использоет ни какие QT и т.п. все нужно сделать минимальным набором подключенных библиотек.

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

flow не включал, в доках для устройства об этом не сказано.
Но пробовал, не помогало
вот так я делаю:

int set_up_tty (int tty_fd)
{
int speed;
struct termios tios;

if (tcgetattr(tty_fd, &tios) < 0) return -1;

   tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB);
   
   tios.c_cflag |= CS8 | CREAD | HUPCL | CLOCAL ;
   
   tios.c_iflag = IGNBRK | IGNPAR;

   tios.c_oflag = 0;
   tios.c_lflag = 0;
   tios.c_cc[VMIN] = 0;//1
   tios.c_cc[VTIME] = 5;//0

tios.c_cflag &= ~CRTSCTS;

speed = LineSpeedVal[prop->BaudRate];
if (speed)
{
cfsetospeed (&tios, speed);
cfsetispeed (&tios, speed);
}

if (tcsetattr(tty_fd, TCSAFLUSH, &tios) < 0) return -1;

return 1;
}

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

У меня обычно инициализация делается как-то так, попробуй:

int port_fd;
termio ttyattr;
struct termios options;

if( ( port_fd = open( "/dev/ttyS0", O_RDWR | O_NDELAY ) ) == -1 )
    return;

fcntl( port_fd, F_SETFL, FNDELAY );        

tcgetattr( port_fd, &options );

cfsetispeed( &options, B9600 );
cfsetospeed( &options, B9600 );        
cfmakeraw( &options );

options.c_cflag &= ~( CBAUD | CSTOPB );
options.c_cflag |= ( B9600 | CLOCAL | CREAD );        

tcsetattr( port_fd, TCSANOW, &options );

dOzEr
()
Ответ на: комментарий от ananas

Софтовый тоже самое.. а каноничность мне не нужна, устройство использует raw прием данных

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

гугли QSerialDevice

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