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では書き込めるけど読み出せない,という状態です.
ご確認いただけましたら幸甚です. よろしくお願いします.
コメント
brakeme
at_syunya.ohshio
大塩です。
> 特に止めていないので,これが競合している可能性は高いですね. 希望としては,/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
at_syunya.ohshio
2023年8月1日 17時33分
大塩です。
> 移植元ではここまで明示的にフラグを操作していませんが,動作しています. Armadilloでは書き込めるけど読み出せない,という状態です.
modemmanager はstop しているでしょうか。
そうでない場合、「rc-service modemmanager stop」とした後にC言語アプリケーションで
ATコマンドの送受信が可能か試してみてください。
以上です。