Использование SOCAT для последовательной связи с USB на Linux

Я хотел бы немного разъяснить, что socat делает с последовательной связью, потому что по какой-то причине я могу заставить работать только мое Arduino при использовании socat.

Это команда, которую я использую для настройки socat:

socat -d -v -x PTY,link=/tmp/serial,wait-slave,raw /dev/ttyACM0,raw

Код, который я использовал в C ++:

int file;

file = open("/tmp/serial", O_RDWR | O_NOCTTY | O_NDELAY);
if (file == -1)
{

perror("open_port: Unable to open \n");
}
else
fcntl(file, F_SETFL, 0);

struct termios options;//* Get the current options for the port...tcgetattr(file, &options);

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

options.c_oflag = 0;
//options.c_oflag &= ~(OCRNL | ONLCR | ONLRET | ONOCR | OFILL | OLCUC | OPOST);options.c_cflag |= (CLOCAL | CREAD);

cfmakeraw(&options);

tcsetattr(file, TCSANOW, &options);

sprintf(sendpack,"$C000C000C000C000\r");
num = write(file,sendpack,18);
tcflush(file, TCIOFLUSH); // clear buffer

Поэтому, когда я запускаю это через socat, arduino реагирует так, как и должно быть, но если я изменю строку open () с / tmp / serial на / dev / ttyACM0, arduino больше не работает вообще. Может кто-нибудь объяснить мне, что socat делает с данными, чтобы заставить вещи работать, и как я могу изменить свой код C, чтобы сделать то же самое? Я не могу использовать socat в своей окончательной реализации, потому что это вызывает задержку, которая делает управление моим роботом непредсказуемым.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]