0

我正在开发一个通过 Android 模拟器通过 USB 与串行端口通信的程序。

emulator -qemu -serial /dev/ttyUSB0

模拟器能够打开端口并写入。但是,读取没有发生。

该程序有一个由计时器维护的读取超时。读取发生在一个单独的“读取”线程中。主线程有一个socketpairfd 对来向读取线程发出串行端口在超时后关闭的信号。在读取线程中,轮询(poll()函数调用)发生在 2 个文件描述符上:一个是串行端口 fd,另一个是套接字对之一。

我连接的电路板可以通过“cutecom”发送命令正常工作

串行端口的轮询永远不会成功。然而,'socketpair'ed fd 的轮询成功,并且线程在主线程超时后发送的关闭信号上结束。

问题

  1. 是否有任何特殊设置用于读取甚至环回失败
  2. 串口的读写设置有区别吗?
4

1 回答 1

0

struct termios 设置是 ioctl 调用的必要条件。以下更改使我的读取调用正常工作!仍然不确定写调用是如何成功的......

struct termios termios;
int ret;

tcflush(fd, TCIOFLUSH);

tcgetattr(fd, &termios);

cfmakeraw(&termios);

termios.c_cflag |= (CLOCAL | CREAD | CRTSCTS | CS8);
tcsetattr(fd, TCSANOW, &termios);

/* tcgetattr(fd, &termios); */

tcflush(fd, TCIOFLUSH);
于 2013-11-12T09:49:37.283 回答