我有一块定制的Arduino硬件,通过USB连接到我的电脑。我写了一个简单的测试套接字程序来简单地发送测试单并接收响应。这适用于Windows和Linux,但不适用于OSX。
如果我打开像ZTerm或屏幕这样的终端应用程序,我可以在Mac上正常连接,只是不使用/dev/tty.usbmodemxxxx通过套接字。我可以通过/dev/cu.usbmodemxxxx连接它似乎在程序中正确发送,但从未接收任何数据。我已经验证硬件没有通过/ dev / cu socket接收数据。
代码是相当直接的c代码。
socket = open("/dev/tty.usbmodemxxxx", O_RDWR | O_NOCTTY | O_ASYNC);
if (socket < 0) { // error here };
// -- edit -- added baud rate change.
struct termios term;
memset(&term, 0, sizeof(struct termios));
cfmakeraw(&term);
cfsetspeed(&term, COM_SPD);
term.c_cflag = CREAD | CLOCAL;
term.c_cflag |= CS8;
term.c_cc[VMIN] = 0;
term.c_cc[VTIME] = 10;
ioctl(socket, TIOCSETA, &term);
// -- /edit --
char str[1024] = { 0x30, 0x08, ... };
write(socket, str, 8);
sleep(2);
char data[64] = { 0x0 };
int len = 0;
ioctl(socket, data, &len);
read(socket, data, len);
// output data.
为简单起见,我省略了所有错误处理和调试代码。
我有什么理由不通过tty连接吗?还有为什么我能够通过铜线连接却从未收到任何来自硬件的响应?
此外,如果我使用Z-Term连接到设备,然后在程序中使用/ dev / cu发送响应,硬件将接收数据并且ZTerm会收到正确的响应,但程序不会收到任何内容。< / p>
OS X上需要做些什么特别的事情来连接到tty设备吗?