2009-06-15 8 views
3

何らかの理由で、Windows Mobileスマートフォン(WMバージョン6.1のHTC s740)の内蔵モデムにアクセスできる必要があります。私が望むのは、ATコマンドを与えるためにシリアルポートのようにアクセスできることです。Windows Mobileでモデムに直接アクセス

TAPI LineインターフェイスとlineGetID()を使用してReadFile()/ WriteFile()を実行できる「ハンドル」を取得するコードがあります。残念ながら私はそれを働かせることはできませんでした。

私は現在、やることは次のとおりです。

  1. lineInitializeExと初期化TAPI()

  2. オープンlineOpen(行)

  3. 反復使用可能な各デバイスを通ると情報を得ます。現在、 "UNIMODEM"/"Hayes compatible on COM1"デバイスを選択しています。しかし、おそらく私は代わりに "TAPI携帯電話サービス"/"携帯電話回線"を選択する必要がありますか?私は同じ結果を持つ "セルラーライン"デバイスを試してみました。

  4. 選択したデバイスでlineGetID()を使用してハンドルを取得します。

  5. WriteFile( "AT \ r")を実行してから、ReadFile()を直接実行します。実際にアクセスしたモデムの場合は、「OK」を返します。

...それは仕事とイライラしないことを実現しかし、これはこれまでのところ、行くされていません。

どのようにすればいいですか?

Windows Mobile 6 SDKのネイティブWIN32 C++でこれを実行しています。

更新日: これまでRILを使用して2台の電話機間でデータ接続を行っていましたが、シリアルポートハンドルを使用して書き込みと読み取りができます。しかし、私はまだモデムと直接対話してATコマンドを送信したいと考えています。ですから、私が始めている恩恵は、ATコマンドを与えるためにモデムに直接アクセスすることのみに関心があります。これまでの調査では、以前のバージョンのWindows Mobile(COM2やCOM9を開いてRILを殺すなど)でも可能でしたが、WM6で動作するコードはまだ見ていません。

答えて

0

lineGetIDのハンドルをWriteFile/ReadFileの機能で使用できるかどうかはわかりません。これらは、(おそらく)TAPIで使用できない低水準関数です。

CreateFileでCOMポートを開き、ハンドルを取得してからWriteFileReadFile機能を使用しようとします。このテクニックについては、MSDN(Serial Communications in Win32)にある古典的な記事があります。

しかし、私はWindows Mobileプログラミングに慣れていないので、うまくいくとは思えません。

+0

lineGetID()はハンドルを返します。それを読み書きしなければ、どうすればいいですか? CreateFileを使うのはすばらしいことですが、世界中のすべてのWindows Mobileデバイスがそのモデムに同じCOMポートを使用していることを確認する必要があります。 –

+0

lineGetIDに関するMSDNのページから: "lineGetID関数は、選択された行、アドレス、または呼び出しに関連付けられている指定されたデバイスクラスのデバイス識別子を返します"。私のために、それはハンドルのように見えません。 モデムポートについて言えば、適切なものを見つける必要があります。 COM1から始まるCOMポート上でCreateFile(OPEN_EXISTINGフラグ付き)を呼び出そうとします。それが開いたら、 "AT"を送り、答えを待つ。もしあなたが帰ってきたら、次のポートを試してみてください。 このリンク(http://forum.sysinternals.com/forum_posts.asp?TID=4544)が役立つかもしれません。 – Wacek

+0

ここに記載されているように、オープンポートのハンドルを取得することは可能です:http://msdn.microsoft.com/en-us/library/ms734853(VS.85).aspx –

1

これはおそらくできません。ラジオへのインターフェイスは必ずしもCOMポートである必要はありません。ATコマンドはしばしばエミュレートされます。 COMポートのハンドルを取得できたとしても、ビルトイン接続マネージャが実行しているアクティビティとどのように同期しますか。

関連する問題