本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。

[SDK16] Windows 環境でモデムの状態を取得する方法

PWJ1779 - 95/10

この資料は以下の製品について記述したものです。

  

概要

この資料は Microsoft Windows Version 3.1 (以下 Windows 3.1) の環境で MSR(Modem Status Register)の参照の一つの方法を紹介したものです。

  

詳細

Windows 3.1 の環境において、通信ドライバ(COMM.DRV)の Version 3.0と 3.1 では以下の制御線の独立した状態を供給していません。

  
CTS Clear To Send
DSR Data Set Ready
RI Ring Indicator
RLSD Receive Line Signal Detect; Carrier Detect (CD)

RLSD 信号はおそらく(モデムソフトウェアに)非常に重要で度々必要なものです。この資料はこの情報を取得する方法を紹介します。ですが、この方法はドキュメント化されていません、Windowsの将来のバージョンではサポートされると思われます。

Windows SDK 3.1 の文書は SetCommEventMask() で EV_CTSS, EV_DSRS, EV_RING,EV_RLSDS イベントを使う事で、これらの信号の独立した状態をセットする為に使用できると述べています。しかし、どの状況でも EV_* ビットはイベントワードの以前の値をクリアせずイベントワードに OR をかけています。もし、モデム・ステイタス・レジスタ(MSR)ビットがセットされた場合、GetCommEventMask() が呼ばれるまでクリアされません。その結果、ビットをセットした後に状態が変化しても、イベントワードは GetCommEventMask() が呼ばれるまでセットされたものが示されています。

(注:しかし、EV_RLSDS セットされません。これは Windows Version 3.0 と 3.1の COMM.DRV の障害です。)

この情報を取得する一つの方法として UART(Universal Asynchronous Receiver Transmitter)から直接、モデム・ステイタス・レジスタを読む方法があります。ですが、この方法は COMM.DRV が利用できない UART が用意した MSR のデルタビット(CTS,DSR,RLSD)をクリアします。その為、この方法は使う事が出来ません。

この情報はまた、COMM.DRV から取得する事が出来ます。COMM.DRV は拡張されたデータコントロールブロック(DCB)がデルタビットを読んだ内容を保持しています。この構造体の中は MSRShadow を読んだものです。これは UART の MSR の影(コピー)です。

以下のコードは MSRShadow バイトへの直接アクセスを提供します。

注:このアドレスの内容を変更しないでください。

  
#define COMM_MSRSHADOW 35
#define MSR_CTS 0x10 /* Absolute CTS state in MSR */
#define MSR_DSR 0x20 /* Absolute DSR state in MSR */
#define MSR_RI 0x40 /* Absolute RI state in MSR */
#define MSR_RLSD 0x80 /* Absolute RLSD state in MSR */

LPBYTE GetCommMSRShadow(short nCid)
{
/* MSR Shadow バイトへの Far Pointer を返します */

return (((LPBYTE)SetCommEventMask(nCid, 0) + COMM_MSRSHADOW);

} /* GetCommMSRShadow */

このポインタは一回有効です。以下のように使う事が出来ます。

lpMSRShadow = GetCommMSRShadow(nCid);
bRLSD = (*lpMSRShadow) & MSR_RLSD;

if (bRLSD)
/** RLSD が High です **/
else
/** RLSD が low です **/

その他

(C)1995 Microsoft Corporation. All rights reserved.

マイクロソフト株式会社 テクニカル サポート


UP
UP
Home
HOMEPAGE
inserted by FC2 system