2009-06-15 9 views
3

Pour certaines raisons, je dois pouvoir accéder au modem interne d'un smartphone Windows Mobile (un HTC S740 avec WM version 6.1). Ce que je veux, c'est pouvoir y accéder comme si c'était un port série pour donner des commandes AT.Accès direct au modem sous Windows Mobile

J'ai un code qui utilise l'interface TAPI Line et lineGetID() pour obtenir un "handle" sur lequel je devrais pouvoir lire ReadFile()/WriteFile(). Malheureusement, je ne l'ai pas fait fonctionner.

Ce que je fais est actuellement:

  1. Initialiser TAPI avec lineInitializeEx()

  2. Ouvrir la ligne avec lineOpen()

  3. à travers chaque dispositif Itérer disponible et obtenir des informations. Actuellement, je sélectionne le périphérique "UNIMODEM"/"Hayes compatible sur COM1". Mais peut-être que je devrais choisir le "service cellulaire TAPI"/"Cellular Line" à la place? J'ai essayé le dispositif "Ligne Cellulaire" avec le même résultat.

  4. Utilisez lineGetID() sur le périphérique sélectionné pour obtenir un handle. Faites WriteFile ("AT \ r") puis directement un ReadFile(), qui devrait me donner un "OK" de retour si c'était vraiment le modem que j'ai accédé.

  5. Rendez-vous compte que cela ne fonctionne pas et se fâcher ...

Mais cela a été jusqu'à présent un no-go.

Est-ce que quelqu'un a une idée sur la façon de le faire? Je le fais en natif WIN32 C++ sur Windows Mobile 6 SDK.

MISE À JOUR: J'ai jusqu'à présent réussi à obtenir une connexion de données entre deux téléphones en utilisant RIL, ce qui me donne un handle de port série à écrire et à lire. MAIS, je voudrais toujours être en mesure d'interagir directement avec le modem pour envoyer des commandes AT. Donc, la prime que je démarre ne concerne que l'accès direct au modem pour donner des commandes AT. Mes investigations jusqu'à présent indiquent que c'était possible dans les versions précédentes de Windows Mobile (en ouvrant COM2 et/ou COM9 et en tuant RIL, ou quelque chose comme ça) mais je n'ai pas encore vu de code qui fonctionne sur WM6.

Répondre

0

Je ne suis pas sûr que vous pouvez utiliser la poignée de lineGetID avec WriteFile/ReadFile fonctions. Ce sont des fonctions de bas niveau qui (probablement) ne peuvent pas être utilisées avec TAPI. Je voudrais essayer d'ouvrir le port COM avec CreateFile, obtenir le handle, puis utiliser WriteFile et ReadFile fonctions. Il existe un ancien article classique dans MSDN (Serial Communications in Win32) qui décrit cette technique.

Cependant, je ne suis pas expérimenté avec la programmation Windows Mobile, donc je ne suis pas sûr que cela fonctionnera pour vous.

+0

lineGetID() renvoie un handle. Que devrais-je faire si je ne lis pas et n'écris pas? L'utilisation de CreateFile serait géniale, mais alors je dois être sûr que chaque périphérique Windows Mobile dans le monde utilise le même port COM pour son modem. –

+0

A partir de la page MSDN à propos de lineGetID: "La fonction lineGetID renvoie un identificateur de périphérique pour la classe d'unité spécifiée associée à la ligne, à l'adresse ou à l'appel sélectionné". Pour moi, ça ne ressemble pas à une poignée. En parlant de port modem - vous devez trouver le bon. J'essaierais d'appeler CreateFile (avec l'indicateur OPEN_EXISTING) sur n'importe quel port COM à partir de COM1. S'il s'ouvre, envoyez "AT" et attendez une réponse. Si c'est le cas, vous êtes à la maison, sinon essayez le prochain port. Peut-être que ce lien (http://forum.sysinternals.com/forum_posts.asp?TID=4544) vous aidera. – Wacek

+0

Il est certainement possible d'obtenir un handle pour le port ouvert comme décrit ici: http://msdn.microsoft.com/en-us/library/ms734853(VS.85).aspx –

1

Vous ne pouvez probablement pas faire cela. L'interface avec la radio n'est pas nécessairement un port COM - les commandes AT sont souvent émulées. Même si vous pouviez obtenir un handle sur le port COM, comment vous synchroniser avec l'activité que le gestionnaire de connexions intégré effectue.