2009-06-15 5 views
3

Aus bestimmten Gründen muss ich auf das interne Modem eines Windows Mobile-Smartphones (ein HTC S740 mit WM Version 6.1) zugreifen können. Was ich will, ist in der Lage zu sein, darauf zuzugreifen, als ob es eine serielle Schnittstelle wäre, um AT-Befehle zu geben.Direkter Zugriff auf das Modem in Windows Mobile

Ich habe Code, der die TAPI-Line-Schnittstelle und lineGetID() verwendet, um ein "handle" zu bekommen, auf dem ich ReadFile()/WriteFile() tun könnte. Leider habe ich es nicht zur Arbeit gebracht.

Was ich zur Zeit ist:

  1. initialisieren TAPI mit lineInitializeEx()

  2. Öffnen Sie die Linie mit lineopen()

  3. Iterate durch jedes verfügbare Gerät und Informationen erhalten. Momentan wähle ich das "UNIMODEM"/"Hayes compatible on COM1" -Gerät. Aber vielleicht sollte ich stattdessen den "TAPI Cellular Service"/"Cellular Line" wählen? Ich habe das "Cellular Line" Gerät mit dem gleichen Ergebnis ausprobiert.

  4. Verwenden Sie lineGetID() auf dem ausgewählten Gerät, um ein Handle zu erhalten.

  5. Machen Sie WriteFile ("AT \ r") und dann direkt ein ReadFile(), was mir ein "OK" zurückgeben sollte, wenn es wirklich das Modem war, auf das ich zugegriffen habe.

  6. Erkennen, dass es nicht und ärgern funktioniert ...

Aber das ist bisher ein No-Go.

Hat jemand eine Idee, wie es geht?

Ich mache dies in Native WIN32 C++ auf Windows Mobile 6 SDK.

UPDATE: Ich habe es bisher geschafft, eine Datenverbindung zwischen zwei Telefonen mit RIL, die mir eine serielle Schnittstelle zum Schreiben und Lesen von gibt. ABER, ich möchte immer noch in der Lage sein, direkt mit dem Modem zu interagieren, um AT-Befehle zu senden. Also, die Bounty, die ich beginne, betrifft nur den direkten Zugriff auf das Modem, um AT-Befehle zu geben. Meine bisherigen Untersuchungen zeigen, dass dies in früheren Versionen von Windows Mobile möglich war (indem ich COM2 und/oder COM9 öffne und RIL, oder etwas ähnliches), aber ich habe noch keinen Code gesehen, der auf WM6 funktioniert.

Antwort

0

Ich bin mir nicht sicher, ob Sie Handle von lineGetID mit WriteFile/ReadFile Funktionen verwenden können. Dies sind Low-Level-Funktionen, die (wahrscheinlich) nicht mit TAPI verwendet werden können.

Ich würde versuchen, COM-Port mit CreateFile zu öffnen, den Griff zu bekommen und dann WriteFile und ReadFile Funktionen zu verwenden. Es gibt einen alten klassischen Artikel in MSDN (Serial Communications in Win32), der diese Technik beschreibt.

Allerdings habe ich keine Erfahrung mit Windows Mobile-Programmierung, also bin ich mir nicht sicher, dass es für Sie arbeiten wird.

+0

lineGetID() gibt ein Handle zurück. Was soll ich damit machen, wenn ich nicht lese und schreibe? Die Verwendung von CreateFile wäre toll, aber dann muss ich sicher sein, dass jedes Windows Mobile Gerät der Welt den gleichen COM-Port für sein Modem verwendet. –

+0

Von der MSDN-Seite über lineGetID: "Die lineGetID-Funktion gibt eine Gerätekennung für die angegebene Geräteklasse zurück, die der ausgewählten Leitung, Adresse oder dem Anruf zugeordnet ist". Für mich sieht es nicht wie ein Griff aus. Sprechen über Modem-Port - Sie müssen die richtige finden. Ich würde versuchen, CreateFile (mit OPEN_EXISTING Flag) an jedem COM-Port ab COM1 aufrufen. Wenn es geöffnet wird, senden Sie "AT" und warten auf eine Antwort. Wenn es kommt, bist du zu Hause, wenn nicht den nächsten Port versuchen. Vielleicht hilft Ihnen dieser Link (http://forum.sysinternals.com/forum_posts.asp?TID=4544). – Wacek

+0

Es ist definitiv möglich, ein Handle für den offenen Port zu erhalten, wie hier beschrieben: http://msdn.microsoft.com/en-us/library/ms734853(VS.85).aspx –

1

Sie können das wahrscheinlich nicht tun. Die Schnittstelle zum Radio ist nicht unbedingt ein COM-Port - die AT-Befehle werden oft emuliert. Auch wenn Sie eine Handle für den COM-Anschluss erhalten könnten, wie würden Sie mit der Aktivität synchronisieren, die der integrierte Verbindungs-Manager ausführt.