Armadilloフォーラム

C言語での A6e EMS31-J のATコマンド応答の取得

brakeme

2023年7月31日 19時56分

お世話になっております. フルヤ と申します.

あまり行われていないことかもしれませんが,C言語の open,selectなどを使って,LTEデバイスにATコマンドを発行して応答を確認したいのですが,現状読み出すことができないでいます.
一方で,対象のデバイス(/dev/ttyMux0,または/dev/ttyCommModem)を別のターミナルでcatすると,そこに開発プログラムによる入力に対する応答が表示されます.

以下の手順を踏んでいます(エラーチェック等は省いています).

fdr = open("/dev/ttyMux0", O_RDWR))
ioctl(fdr, TCGETS, &inf);
inf.c_iflag = 0;
inf.c_oflag = 0;
inf.c_lflag = 0;
inf.c_cflag |= CREAD | CLOCAL | CS8;
inf.c_cflag &= ~(CRTSCTS | PARENB);
// ボーレート設定を適用
ioctl(fdr, TCSETS, &inf);
write(fdr, "AT\r", 3)
FD_ZERO(&rfd);
FD_SET(fdr, &rfd);
select(fdr + 1, &rfd, NULL, NULL, NULL); // ここでブロッキングされます. 数秒のタイマを入れてみても,rfdは0です.

移植元ではここまで明示的にフラグを操作していませんが,動作しています. Armadilloでは書き込めるけど読み出せない,という状態です.

ご確認いただけましたら幸甚です. よろしくお願いします.

コメント

at_syunya.ohshio

2023年8月1日 17時33分

大塩です。

> 移植元ではここまで明示的にフラグを操作していませんが,動作しています. Armadilloでは書き込めるけど読み出せない,という状態です.

modemmanager はstop しているでしょうか。
そうでない場合、「rc-service modemmanager stop」とした後にC言語アプリケーションで
ATコマンドの送受信が可能か試してみてください。

以上です。

brakeme

2023年8月1日 18時15分

大塩 様,

特に止めていないので,これが競合している可能性は高いですね. 希望としては,/dev/ttyMux0と/dev/ttyCommModemのどちらかを譲ってもらうか,openがエラーになって欲しいところですが...

ご回答ありがとうございます !!

at_syunya.ohshio

2023年8月1日 18時30分

大塩です。

> 特に止めていないので,これが競合している可能性は高いですね. 希望としては,/dev/ttyMux0と/dev/ttyCommModemのどちらかを譲ってもらうか,openがエラーになって欲しいところですが...

/dev/ttyMux0 ということは、使用している製品は A6E Cat.M1 モデルかと思われます。

A6E Cat.M1 モデルには /dev/ttyMux2 という ATコマンド通信用のデバイスが存在します。
こちらを用いて動作確認してみてください。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

brakeme

2023年8月2日 7時38分

大塩さま,

ご回答ありがとうございます.
私がマニュアルを読み間違えていたようで,ttyMux2はPPPのポートだと思っていました. 番号を一つずれて認識していました.
PDF版(1.5.1版) のマニュアルを見ていたのですが,1.7.0版に更新されて見やすくなっていました... 失礼しました.

無事に目的を果たせました. ありがとうございます.