古い外部モデムからの発信者表示データを収集するための小さなWindows Formsアプリケーションを作成することによって、.Net(3.5)がSystem.IO.Ports.SerialPorts
クラスを介してシリアルポートとやりとりする方法について少し勉強しようとしています。System.IO.Ports.SerialPort - IOCTL_SERIAL_SET_WAIT_MASKを構成できますか?
モデムが発信者の表示をサポートしていることをテストしました。パテやハイパーターミナルを使ってモデムを設定して(hereというコマンドAT#CID=1
を使用して)発信者の表示データを収集し、電話が鳴ったらデータが表示されます。ターミナルウィンドウで、次のようになります。
RING
DATE = 0308
TIME = 2045
NMBR =
RING
私のC#アプリケーションが正常にモデムを設定するには、表示されたときに電話が鳴るRING
メッセージが表示されます。ただし、発信者IDデータは表示されません。
これがなぜなのかを理解するために、Sysinternals Portmonを使用して、異なるクライアントが行った操作を比較しました。
接続の構成には大きな違いがあります。私のC#アプリケーションには、パテとハイパーターミナルではない次の行が含まれています。
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情報を表示するように設定できますか?クラスプロパティからアクセスできないようです。
設定できない場合は、自分のラッパーをシリアルポートを制御する下位レベルのシステム機能に書き込むための唯一の選択肢ですか?
私はシリアルポートの通信を理解することは非常に基本的なものなので、私の診断では私は邪魔になると思います。感謝の言葉をいただきました。
あなた自身の質問に答えるうちに、これを最新の状態に保つことができました。 : - D – yeyeyerman