0

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 で何か特別なことをする必要がありますか?

4

0 に答える 0