私はSystem.IO.Ports.SerialPorts
、古い外部モデムから発信者の表示データを収集する小さなWindowsフォームアプリケーションを作成することにより、.Net(3.5)がクラスを介してシリアルポートとどのように相互作用するかについて少し学ぼうとしています。
モデムが発信者表示をサポートしていることをテストしました。Puttyまたはハイパーターミナルを使用して(ここAT#CID=1
で見つけたコマンドを使用して)発信者の表示データを収集するようにモデムを構成でき、電話が鳴るとデータが表示されます。ターミナルウィンドウでは、次のようになります。
RING
DATE = 0308
TIME = 2045
NMBR = 01234567890
RING
私のC#アプリケーションはモデムを正常に構成しているように見えRING
、電話が鳴るとメッセージを表示します。ただし、発信者IDデータは表示されません。
これがなぜであるかを理解するために、SysinternalsPortmonを使用してさまざまなクライアントが実行したアクションを比較しました。
主な違いは接続構成にあります。私のC#アプリケーションには、PuttyとHyperterminalにはない次の行が含まれています。
0.00000307 callerID.exe IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING
私が理解しているように、これIOCTL_SERIAL_SET_WAIT_MASK
はフィルタリングするメッセージタイプの包括的なリストです。
したがって、3つの質問:
発信者ID情報がによって抑制されている可能性はありIOCTL_SERIAL_SET_WAIT_MASK
ますか?
その場合、発信者ID情報を表示するように設定するにはどうすればよいですか?クラスのプロパティからはアクセスできないようです。
構成できない場合、これを回避して、シリアルポートを制御する下位レベルのシステム関数に独自のラッパーを作成する唯一のオプションはありますか?
シリアルポート通信についての私の理解は非常に基本的であるため、診断にはかなりの時間がかかると思います。どんな指導もありがたく受けました。