高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先



NW 50 - OT モデムスクリプトエンジンの使い方

(更新日: 97 年 7 月 11 日)

Q: 現在、モデムを介してシリアル接続を確立する機能を必要とするソフトウェアを開発しています。ただし、モデムを設定するためにユーザに複雑な AT コマンドの入力を要求したり、CCL パーサを書かせたりするのではなく、ARA や Open Transport/PPP で使用される CCL スクリプトを提供しようと考えています。

この場合、システムレベルで単一のモデムアクセスおよび制御の方法があれば、非常に便利です。そうすれば、モデムベンダーは、1 つの CCL エンジンだけをサポートし、クライアントソフトウェアのデベロッパは、それぞれのモデムに固有の API ではなく、単一の API を使用することができます。新しいモデムがリリースされても、クライアントソフトウェアの新しいリリースは必要なく、既存のモデムスクリプトによってサポートすることができます。これが実現すれば、クライアントデベロッパとモデムベンダーのサポートコストは大幅に削されるはずです。また、共通のインタフェースを使用することで、クライアントソフトウェアのデベロッパはコンフリクトを避けることもできます。

この目的で使用できる何らかのマニュアルまたは SDK は用意されているのでしょうか。

A: 現在のところ、Open Transport Modem/Script エンジンへのサードパーティのアクセスに対する公式の SDK またはサポートは用意されていません。ただし、Open Transport API を使ってこの機能にアクセスすることは可能です (しかも非常に容易です)。

注意: この Q&A で紹介されている情報はそれぞれのデベロッパの責任において利用してください。この情報は DTS によってサポートされていません。また、将来 (確実に) 変更される可能性があります。

Open Transport Modem/Script エンジンは、"OpenTpt Modem" ライブラリ、“モデム”コントロールパネル、および "Modem Scripts" という名前のディレクトリなど、いくつかの項目から構成されています。これらのファイルは、Open Transport/PPP および ARA 3.0 の一部としてインストールされます。

"OpenTpt Modem" モジュールがインストールされてシステムに組み込まれた後は、OT Serial エンドポイントと同じ方法で、Modem/Script エンジンへの OT エンドポイントを簡単にオープンすることができます。ただし、config フィールドで "Script" を渡す点だけが異なります。

Err = OTAsyncOpenEndpoint( OTCreateConfiguration("Script"), .....)

このエンドポイントは、OT_CONNECT により接続の初期化や解除が行われるなど、シリアルエンドポイントと同じように動作します。実際、addr フィールドの Connect から電話番号を渡すことができるはずです。使用可能な OpenTransportModem.h ファイルが存在しないため、次の情報のいくつかが必要になります。

spacer image
// Opentransport Modem/Script エンジンに対するコンフィギュレーション名
        #define kScriptName "Script"

// Modem/Script エンジンがインストールされているかどうか確認するには、
// Open Transport ベースの Modem ライブラリに対応する適切な Gestalt セレクタをチェックする
#define gestaltOpenTptModem 'otmo' #define gestaltOpenTptModemPresent 0 #define gestaltOpenTptModemVersion 'otmv' #define kGestaltOpenTptModemVersion 0x01000080 // 注意: "stage" バイトに対する有効な値は次のようになる // development = 0x20, alpha = 0x40, beta = 0x60, final & release = 0x80 // 次は、Modem/Script Configurator のエラーコード。その他のコードが Open Transport や // オペレーティングシステムルーチンから返されることもある #define kModemNoError 0 #define kModemOutOfMemory -14000 #define kModemPreferencesMissing -14001 #define kModemScriptMissing -14002 “モデム”コントロールパネル経由でモデムのタイプを手動で設定するか、Modem Configuration 初期設定ファイルを自分でハックする必要があるため、モデム初期設定ファイルの内容を 知っておくことは後々役に立ちます。 // Modem Configuration 初期設定リソースファイルの定数 kModemConfigFileCreator = 'modm', kModemConfigFileType = 'mdpf', kModemConfigVersion = 0x00010000, kModemConfigExportType = 'mdex', kModemScriptType = 'mlts', // ARA 1.0/2.0 と同じ kModemScriptCreator = 'slnk', // ARA 1.0/2.0 と同じ // コンフィギュレーションリソースの定数 kModemConfigTypeModem = 'ccl ', // Modem config リソースのタイプ kModemSelectedConfigID = 1, // リソースの ID kModemSelectedConfigType = 'ccfg', // 現在選択されている CCL の ID kModemConfigNameType = 'cnam', // config name リソースのタイプ kModemConfigTypeLocks = 'lkmd', // lock リソースのタイプ kModemConfigFirstID = 128 // configuration リソースに対する最下位の ID // スクリプトファイル名の最大サイズ。FSSpec の "name" フィールドと同じ kMaxScriptNameSize = 64 // 各国共通のファイル名をリソースフォークから読み込めない場合にだけ使用するファイル名 #define kDefaultModemPrefsFileName "\pModem Preferences" // ダイヤルトーンモード enum { kDialToneNormal = 0, kDialToneIgnore = 1, kDialToneManual = 2 }; // Modem configuration 情報に対応する Modem Configuration // Resource のフォーマット typedef struct { UInt32 version; Boolean useModemScript; FSSpec modemScript; Boolean modemSpeakerOn; Boolean modemPulseDial; UInt32 modemDialToneMode; SInt8 lowerLayerName[kMaxProviderNameSize]; } RAConfigModem;
 ----------------------------------------------------------------------------
-- Vinnie Moscaritolo
devsupport@apple.com

[ Technical Q&A's : Communications & Collaboration : Networking : NW50 ]

spacer image