USB経由でコンピューターに接続されているカスタムArduinoハードウェアがあります。私は単純なテスト ソケット プログラムを作成して、単純にテスト シングルを送信し、応答を受信しました。これは Windows と Linux の両方で機能しますが、OSX では機能しません。
ZTerm や screen などの端末アプリを開くと、/dev/tty.usbmodemxxxx を使用するソケット経由ではなく、Mac で問題なく接続できます。/dev/cu.usbmodemxxxx 経由で接続でき、プログラムでは正しく送信されているように見えますが、データをまったく受信しません。ハードウェアが /dev/cu ソケット経由でデータを受信していないことを確認しました。
コードはかなり単純な 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 経由で接続できない理由はありますか? また、cu 経由で接続できるのに、ハードウェアからの応答がないのはなぜですか?
さらに、Z-Term を使用してデバイスに接続し、プログラムで /dev/cu を使用して応答を送信すると、ハードウェアはデータを受信し、ZTerm は正しい応答を受信しますが、プログラムは何も受信しません。
tty デバイスに接続するために OS X で何か特別なことをする必要がありますか?