私はLinuxの専門家ではないので、ご安心ください。 ;)
さて、状況はDebian Wheezyを実行しているシングルボードコンピュータがあるということです。私はそれが古くて危険であることを知っていますが、実際には「私の」デバイスではないので、制御できません。
C#で書かれ、Monoを介して実行されるいくつかのソフトウェアが実行されています。繰り返しますが、これは私のソフトウェアではなく、私にはそれに対する制御がなく、コードを変更する能力もありません。
ソフトウェアは/dev/ttyS1
物理シリアルポート()を介してモデムにATコマンドを送信し、モデムはコマンドに適切な応答を返します。
モデムを使用できなくなるため、他の代替策を開発する必要があります。それで、ATコマンドを「傍受して」適切な応答をC#ソフトウェアに送り返す単純なPythonスクリプトをSBCで実行できると思いました。その後、Pythonスクリプトを使用して他のデバイスと通信できましたが、この方法です。
これを行うには、良い「Google」を使用するのがsocat
最善の選択であるようです。しかし、試してみましたが、どのくらいの組み合わせが必要かわからず、必要な方法で動作させることはできません。
物理的な設定は、現在私のラップトップにシリアルポートが接続されているため、パイプ(ttyS1)からのATコマンドを表示できることです。次にSBCにsshで接続し、minicomを起動してsocat
。
既存の設定
C# <-> ttyS1 <->既存のモデム
必須設定
C# <-> socat <-> python ->新しいモデム
私が試した2つのバリエーションは次のとおりです。
socat -x /dev/ttyS1,raw,echo=0,crnl PTY,link=/dev/ttyV1,raw,echo=0,crnl
...また、私が誤解した場合に備えて反対方向にも試みました...
socat -x PTY,link=/dev/ttyV1,raw,echo=0,crnl /dev/ttyS1,raw,echo=0,crnl
私も試しましたたくさんさまざまなバリエーション、ファイルにプッシュ、ファイルとして「ティーイング」、さまざまなコマンドスイッチ、sttyを使用したポート設定など
同じ問題が発生するたびに実際にATコマンドが送信されるのを見ることはできません~からC#ソフトウェア? !
SBCにminicomを入力すると、ラップトップのシリアルポートリーダーに表示される出力を表示できます。同様に、ラップトップにシリアルポートリーダーを入力すると、SBCのminicomに表示される入力を見ることができますが、何でないかがわかります。ソフトウェアがttyS1を使用するように構成されていても、C#ソフトウェアから送信された実際のATコマンドはブロックされます。
ソフトウェアについて私が制御できる唯一のものは、モデムとの通信に使用するポートです。そのため、たとえば仮想ポートに変更し、起動/dev/ttyV1
中およびC#プログラムが起動する前にsocat
Create Virtual Portを実行して、仮想ポートを実際に使用できるようにしました。また、同じ問題が発生します。それでもC#ソフトウェアから送信されたATコマンドは表示されません。
2日間これを行いましたが、うまく機能しないので、誰かが助けることができることを願っています。私はsocatが動作するツールだと確信しています。私はそれがどのように機能するかを根本的に誤解したことを願っています。
ベストアンサー1
必須部分の1つが欠落している可能性があります:シリアルポート速度。
socat
オプションでシリアルポート速度を設定すると、同様の実験を試すことができます。
socat -x PTY,link=/dev/ttyV1,raw,echo=0,crnl /dev/ttyS1,b115200,raw,echo=0,crnl
ここでは115200転送速度を使用しましたb115200
。socat
男性可能なすべてのオプションを表示するには、次のコマンドを使用しますb...
。
socat -hh |grep 'b[1-9]'
(そして:
注:一部のオペレーティングシステムではこれらのオプションを使用できない場合があります。代わりにispeedまたはospeedを使用してください。
)
テストアプリケーションとして使用されます(たとえば、screen
シリアルポートを処理できます):
screen /dev/ttyV1 115200
変える
screen /dev/ttyS1 115200
シリアルポートを介してコンソールを持つように設定されている他のシステムに通常どおりログインできます(screen
115200パラメータは役に立ちませんが、アプリケーションがクラッシュしないことを意味します)。
送受信した内容はすべて16進数で表示されます-x
。
あなたの質問に答えたようです。あなたの目標は、より大きな作業であるトラフィックを変更するようですが、シリアルポートを通過するトラフィックを読み取る方法を尋ねます。
特に文字がバッファリングされていない場合、フローを変更するには専用のツールが必要です(sed
パイプの途中で使用するのが難しい場合があります)。
socat
通常、前半(PTY)には、フローを変更するために実行可能ファイルを呼び出す最初のコマンドがあります(シェルスクリプトやPythonなどであり、最大4つの異なるFDを使用して両方を管理する必要があります)。EXEC:
後半の2番目のコマンド(ttyS1)を呼び出します。socat