yuto.tsukada
2021年10月6日 16時30分
お世話になっております。
表題の件につきまして、質問がございます。
<質問>
・LTE接続を切らずに、現在掴んでいる周波数帯(バンド)を取得する方法はございますか。
下記の記事1から、ATコマンドを使用し、現在掴んでいるバンドを取得する方法は分かりました。
1) https://armadillo.atmark-techno.com/forum/armadillo/3188
しかし下記の記事2ではATコマンドを使用する際は、ModemManagerを停止すると書かれております。
2) https://armadillo.atmark-techno.com/howto/armadillo_3g-lte_at-command
ModemManagerを停止すると、LTE接続が切れてしまうため、上記質問に至りました。
以上、お手数をおかけしますが、
ご回答の程よろしくお願いいたします。
コメント
yuto.tsukada
吉田様
ご回答ありがとうございました。
> LTE 接続中でも、/dev/ttymxc6 からの AT^SMONI コマンドは入力可能です。
上記ATコマンドで、バンド取得が可能な件、確認いたしました。
追加で、もう一つ質問がございます。
・ AT^SMONIを用いて、定期的にバンドを取得しても、NetworkManagerに影響を及ぼすことはない(LTE接続が切れない)という認識でよろしいでしょうか。
AT^SMONIを用いて、アプリ or シェルにて自動で定期的にバンドを取得し、ログを出力する仕様を考えております。
その際、以下URLの「外部からATコマンドを送信すると、ModemManagerが正しく動作しない可能性があります。」という文が気になったため、質問に至りました。
https://armadillo.atmark-techno.com/howto/armadillo_3g-lte_at-command
以上、ご回答の程よろしくお願いいたします。
at_koseki
古関です。
ModemManagerはUSBシリアルインターフェイス(/dev/ttyACM0)から
ATコマンドを実行することでLTEモジュールを制御しています。
---------------------------------------
root@armadillo:~# cu -l /dev/ttymxc6 -s 115200
Connected.
AT^SMONI
^SMONI: 4G,5900,18,10,10,FDD,440,51,BE09,0013A801,188,18.35,-104.90,-12.40,CONN
OK
---------------------------------------
ModemManagerを止めずに上記を実行すると、制御に割り込む形で、
UART(/dev/ttymxc6)からATコマンドを実行することになります。
基本的にModemManager側の制御からすると想定外の使われ方になります。
ModemManagerでATコマンドの実行シーケンス(実行する順番・前後関係)に
意味がある制御をしている場合、横から割り込まれるコマンドの種類によっては
辻褄が合わなくなり誤動作につながります。
例えば通信をしているのに無線出力を切るATコマンドを横から実行したり、
APN設定をクリアするATコマンドを実行するなどです。
しかし、AT^SMONIは状態表示のコマンドであり、ModemManagerの制御シーケンスを壊さず実行ができます。
まず大丈夫だと考えていますが、設置運用前に十分な試験をお願いいたします。
また、状態表示のコマンドでも間隔を開けずに短期間に連続実行すると
LTE接続完了までに時間がかかるなど、悪影響がある可能性があります。
数分に一度くらいであれば問題ないと思います。
よろしくお願いいたします。
at_shinya.koga
アットマークテクノの古賀です。
>ModemManagerはUSBシリアルインターフェイス(/dev/ttyACM0)から
>ATコマンドを実行することでLTEモジュールを制御しています。
…
>ModemManagerを止めずに上記を実行すると、制御に割り込む形で、
>UART(/dev/ttymxc6)からATコマンドを実行することになります。
>基本的にModemManager側の制御からすると想定外の使われ方になります。
>
>ModemManagerでATコマンドの実行シーケンス(実行する順番・前後関係)に
>意味がある制御をしている場合、横から割り込まれるコマンドの種類によっては
>辻褄が合わなくなり誤動作につながります。
>
>例えば通信をしているのに無線出力を切るATコマンドを横から実行したり、
>APN設定をクリアするATコマンドを実行するなどです。
>
>しかし、AT^SMONIは状態表示のコマンドであり、ModemManagerの制御シーケンスを壊さず実行ができます。
>まず大丈夫だと考えていますが、設置運用前に十分な試験をお願いいたします。
実際に試していないのですが、ModemManager に DBus 経由でリクエストして AT コマンドを発行してもらうことができるかも知れません。そうすることで、ModemNager が AT コマンドを発行する動作と重複するタイミングで AT コマンドを発行してしまう心配がない、という利点はあると思います。ただし、モデムの動作制御を行う AT コマンドを発行するのは危険、というのは、変わりません。
https://www.freedesktop.org/software/ModemManager/api/latest/gdbus-org…
https://www.freedesktop.org/software/ModemManager/doc/latest/ModemManag…
>また、状態表示のコマンドでも間隔を開けずに短期間に連続実行すると
>LTE接続完了までに時間がかかるなど、悪影響がある可能性があります。
>数分に一度くらいであれば問題ないと思います。
についても、同様です。
ということで、大きな利点は無いものの、もし、dbus-send を使った以下のコマンドで、AT^SMONI のレスポンスが得られるなら、ModemManager を停止せずに /dev/ttymxc6 から AT コマンドを発行するのに比べ、ちょっとだけ安心かも知れません:
$ dbus-send --system --dest=org.freedesktop.ModemManager1 --print-reply /org/freedesktop/ModemManager1/Modem/0 --type=method_call org.freedesktop.ModemManager1.Modem.Command string:'AT^SMONI' uint32:2000
yuto.tsukada
古関様、古賀様
ご回答ありがとうございました。
十分に試験を行い、AT^SMONIを実行する間隔や、ModemManagerに影響がないことを検討、確認したいと思います。
UARTからATコマンドを実行する方法よりも、DBus経由でModemManagerからATコマンドを実行する方が安全であること、理解いたしました。
また、ご教示いただいたdbus-sendを用いたコマンドを実行したところ、以下のエラーが発生しました。
Error org.freedesktop.ModemManager1.Error.Core.Unauthorized: Cannot send AT command to modem: operation only allowed in debug mode
ModemManagerをdebug modeで動作させる方法がわからず、ご教示いただきたく存じます。
以上、ご回答の程よろしくお願いいたします。
at_shinya.koga
アットマークテクノの古賀です。
yuto.tsukadaさん:
>また、ご教示いただいたdbus-sendを用いたコマンドを実行したところ、以下のエラーが発生しました。
Error org.freedesktop.ModemManager1.Error.Core.Unauthorized: Cannot send AT command to modem: operation only allowed in debug mode
>ModemManagerをdebug modeで動作させる方法がわからず、ご教示いただきたく存じます。
ModemManager を debug mode で動作させるには、起動オプションで --debug を指定しないといけません:
https://www.freedesktop.org/software/ModemManager/man/latest/ModemManag…
https://armadillo.atmark-techno.com/blog/750/2508
debug mode で実行すると、ModemManager の吐くログが大量になるので、それが少々難点ではあります。
なお、ModemManager のソースを見ると、上記のエラーメッセージを出しているのは、ここです:
https://github.com/freedesktop/ModemManager/blob/master/src/mm-iface-mo…
ここを見ると、WITH_AT_COMMAND_VIA_DBUS が定義されていると、debug mode かどうかのチェックを行わないようになっています。ModemManger の DBus インタフェースのリファレンスで、org.freedesktop.ModemManager1.Modem の Command() メソッドの説明に記載されている通り、ビルド時のコンフィグレーションに with-at-command-via-dbus オプションを付けると、WITH_AT_COMMAND_VIA_DBUS が定義されて、debug mode でなくても AT コマンド実行のリクエストに応答するのでしょう。
yuto.tsukada
古賀様
お世話になっております。
ご回答ありがとうございます。
> ビルド時のコンフィグレーションに with-at-command-via-dbus オプションを付ける
上記についてですが、具体的な方法がわからず、ご教示いただけますでしょうか。
以下のように、行いましたが、同じエラーが出てしまいました。
1./etc/systemd/system/dbus-org.freedesktop.ModemManager1.serviceファイルを編集
: [Service] : #ExecStart=/usr/sbin/ModemManager ExecStart=/usr/sbin/ModemManager with-at-command-via-dbus :
2.ModemManagerの再スタート
$ systemctl stop ModemManager $ systemctl start ModemManager
3.dbus-sendを用いたコマンド実行
$ dbus-send --system --dest=org.freedesktop.ModemManager1 --print-reply /org/freedesktop/ModemManager1/Modem/0 --type=method_call org.freedesktop.ModemManager1.Modem.Command string:'AT^SMONI' uint32:2000
コマンド結果は、以下になります。
Error org.freedesktop.ModemManager1.Error.Core.Unauthorized: Cannot send AT command to modem: operation only allowed in debug mode
お手数をおかけしますが、ご回答の程、よろしくお願いいたします。
at_shinya.koga
アットマークテクノの古賀です。
yuto.tsukadaさん(2021年10月8日 19時26分):
>ご回答ありがとうございます。
>
>>ビルド時のコンフィグレーションに with-at-command-via-dbus オプションを付ける
>上記についてですが、具体的な方法がわからず、ご教示いただけますでしょうか。
>
>以下のように、行いましたが、同じエラーが出てしまいました。
>1./etc/systemd/system/dbus-org.freedesktop.ModemManager1.serviceファイルを編集
…
「ビルド時のコンフィグレーション」というのは、ModemManager をソースコードからビルドする時のコンフィグレーションなのです。設定ファイルに記述する、起動オプションとは違います。こちらに記載されている、configure スクリプトに与えるオプションなのです:
https://modemmanager.org/docs/modemmanager/building/
with-at-command-via-dbus オプション付きでビルドした ModemManager を得るには、ご自分でビルドして頂かないといけません。ModemManager の各バージョンの、オリジナルのソースと Armadillo 用のパッチセットは、こちらからダウンロードできます:
https://download.atmark-techno.com/debian/pool/main/m/modemmanager/
が、こちらのソースとパッチを使ってビルドするよりは、UART (/dev/ttymxc6) から AT コマンドを実行して頂く方が簡単かと思います。ごめんなさい。
yuto.tsukada
古賀様
いつも大変お世話になっております。
ご回答ありがとうございました。
下記、ビルド時にオプションを設定する旨、承知しました。
今回は簡単に実装できそうな、UARTからATコマンドを実行する方法を採用しようと思います。
以上、今後ともよろしくお願いいたします。
> アットマークテクノの古賀です。
>
> yuto.tsukadaさん(2021年10月8日 19時26分):
> >ご回答ありがとうございます。
> >
> >>ビルド時のコンフィグレーションに with-at-command-via-dbus オプションを付ける
> >上記についてですが、具体的な方法がわからず、ご教示いただけますでしょうか。
> >
> >以下のように、行いましたが、同じエラーが出てしまいました。
> >1./etc/systemd/system/dbus-org.freedesktop.ModemManager1.serviceファイルを編集
> …
>
> 「ビルド時のコンフィグレーション」というのは、ModemManager をソースコードからビルドする時のコンフィグレーションなのです。設定ファイルに記述する、起動オプションとは違います。こちらに記載されている、configure スクリプトに与えるオプションなのです:
> https://modemmanager.org/docs/modemmanager/building/
>
> with-at-command-via-dbus オプション付きでビルドした ModemManager を得るには、ご自分でビルドして頂かないといけません。ModemManager の各バージョンの、オリジナルのソースと Armadillo 用のパッチセットは、こちらからダウンロードできます:
> https://download.atmark-techno.com/debian/pool/main/m/modemmanager/
> が、こちらのソースとパッチを使ってビルドするよりは、UART (/dev/ttymxc6) から AT コマンドを実行して頂く方が簡単かと思います。ごめんなさい。
at_mitsuhiro.yoshida
2021年10月6日 17時56分
吉田です。
LTE 接続中でも、/dev/ttymxc6 からの AT^SMONI コマンドは入力可能です。