Время ожидания ответа USB (Linux Odroid) - PullRequest
0 голосов
/ 02 июля 2019

У меня есть код на c ++ для подключения к внешнему устройству, подключенному к моему odroid UX4. Я создал termios структуру, в которой я настраиваю свое соединение с тайм-аутом через 0,2 с без ответа от устройства

  memset (&tty, 0, sizeof tty);

/* Error Handling */
if ( tcgetattr (fd, &tty ) != 0 )
{
    std::cout << "Error " << errno << " from tcgetattr: " << strerror(errno) << std::endl;
}

/* Save old tty parameters */
tty_old = tty;

/* Set Baud Rate */
cfsetospeed (&tty, (speed_t)B921600);
cfsetispeed (&tty, (speed_t)B921600);

/* Setting other Port Stuff */
tty.c_cflag     &=  ~PARENB;            // Make 8n1
tty.c_cflag     &=  ~CSTOPB;
tty.c_cflag     &=  ~CSIZE;
tty.c_cflag     |=  CS8;

tty.c_iflag &= ~(BRKINT | ICRNL | IMAXBEL | IXON | IXOFF);
tty.c_oflag &= ~(OPOST | ONLCR);
tty.c_lflag &= ~(ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE);
tty.c_cflag     &=  ~CRTSCTS;           // no flow control
tty.c_cc[VMIN]   =  0;                  // read doesn't block
tty.c_cc[VTIME]  =  0.2;                  // 0.2 seconds read timeout
tty.c_cflag     |=  CREAD | CLOCAL;

/* Make raw */
cfmakeraw(&tty);

/* Flush Port, then applies attributes */
tcflush( fd, TCIFLUSH );
if ( tcsetattr ( fd, TCSANOW, &tty ) != 0)
{
    cout << "Error " << errno << " from tcsetattr" << endl;
}

но когда я читаю данные с устройства, тайм-аут не соблюдается

n = read(fd, &buf, 1);

У меня вопрос: есть ли у linux какой-то внутренний тайм-аут на USB-драйвере или что-то в этом роде (так что он может переопределить мой), или у кого-нибудь была симилиарная проблема?

...