Aide - Recherche - Membres - Calendrier
Version complète : Numéroteur téléphonique Bluetooth.
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
georges.bessolo
Je recherche tous azimuts comment développer moi-même un numéroteur téléphonique, comme "Palm Dialer". pour pouvoir composer des numéros de téléphone à partir de mon Palm Bluettoth.
Quelqu'un saurait-il me dire comment procéder, par où commencer ?
- Est-il possible de trouver le code source de "Palm Dialer 's telephone" ?
Merci.
snark
Dans quel langage souhaites-tu programmer? Si c'est en C, il faudra attendre un de nos gourous C.

HB++ fournira, dans sa future version 1.06, un exemple de classes Bluetooth, avec lesquelles tu pourras certainement trouver comment programmer un Dialer.

Quand à trouver les sources du Dialer de PalmOS, franchement j'en doute fort! anim_wink.gif
Patrice
Non, les sources du numéroteur de palmOne ne sont pas officiellement disponibles. La programmation de ce type de logiciel n'est cependant pas bien complexe. En gros, il suffit de :

- Ouvrir un port série (celui correspondant au périphérique BT pour le cas qui t'intéresse). Il existe 2 ou 3 samples chez PalmSource et palmOne pour cela.

- Transmettre la commande de numérotation au téléphone (c'est plus ou moins standard mais il reste toujours des spécificités selon les téléphones). Pour cela, il vaut mieux chercher les informations du côté des constructeurs.

- Fermer le port série.
lmame
En général les GSM supportent tous la norme GSM, donc la commande devrait être:
ATD<no_telephone>;
auquel il faut en général rajouter le rn pour valider la commande...
le ";" veut dire de passer l'appel en mode VOICE, si tu ne le mets pas, il passera normalement l'appel en mode Fax...


Donc par exemple pour appeler le 0122334455 en mode VOICE:
ATD0122334455;
Patrice
La difficulté, selon le modem, consiste à trouver le bon mode pour passer en mode vocal sans raccrocher immédiatement à la fermeture du port série (et en général, la documentation est toujours très équivoque sur ce point).

Le ';' à la fin de la commande signifie normalement que tu restes en mode commande après l'envoi de la séquence. Ce qui évite en général le raccrochage en mode vocal mais pas toujours (hélas)...
lmame
CITATION(Patrice)
La difficulté, selon le modem, consiste à trouver le bon mode pour passer en mode vocal sans raccrocher immédiatement à la fermeture du port série (et en général, la documentation est toujours très équivoque sur ce point).

Le ';' à la fin de la commande signifie normalement que tu restes en mode commande après l'envoi de la séquence. Ce qui évite en général le raccrochage en mode vocal mais pas toujours (hélas)...


Bah j'ai essayé et sur tous les GSM (et modems GSM) que j'ai pu tester, ça passe (Nokia, SE, Wavecom etc...)...
Après, en effet parfois il y a des chaînes d'init...
georges.bessolo
En fait j'utilise CodeWarrior et Palm OS 5 SDK (68K) R3.
Patrice
Dans ce cas, cf. ma réponse (et les samples de PalmSource et palmOne)
georges.bessolo
Je cale complètement. Ca fait des semaines que je galère.
Y'aurait t'il un developpeur capable (moyennant finance bien sûr) de me développer un morceau de code qui sous CodeWarrior composerait un numéro de téléphone à l'aide de l'interface bluetooth ?
Patrice
rolleyes.gif Si je te passe 3 fonctions (à savoir ouverture du profil série BT, écriture d'une chaîne de caractères sur le port et fermeture du port), est-ce que tu te crois capable d'enoyer la commande de composition du numéro ?

Après il te restera à proposer à l'utilisateur de sélectionner son téléphone préféré pour la composition (par défaut, le code affiche le dialogue de sélection du périphérique à chaque ouverture).

Tout ça à base de samples, parce qu'il n'y a aucune raison de réinventer la poudre...
georges.bessolo
Je suis pas un as, mais je peux essayer.
Patrice
CODE
#include <PalmOS.h>

#include <BtCommVdrv.h>



// Communication management

static Boolean OpenBTPort(void);

static Boolean WriteBTPort(Char c);

static void    CloseBTPort(void);



//-----------------------------------------------------

// Open serial port over BT (RFCOMM)

//-----------------------------------------------------

static Boolean OpenBTPort(void)

{

    Err               err;

    SrmOpenConfigType config;

    BtVdOpenParams    param;

    BtLibSdpUuidType  uuid;



    // Prepare parameters

    MemSet(&uuid, sizeof(uuid), 0);

    uuid.size    = sizeof(uuid);

    uuid.UUID[0] = 0x11;     // Serial port UUID

    uuid.UUID[1] = 0x01;



    MemSet(&param, sizeof(param), 0);

    param.role                    = btVdClient;

    param.u.client.method         = btVdUseUuidList;

    param.u.client.u.uuidList.tab = &uuid;

    param.u.client.u.uuidList.len = 1;



    MemSet(&config, sizeof(config), 0);

    config.function     = 0;

    config.drvrDataP    = (MemPtr) &param;

    config.drvrDataSize = sizeof(param);



    // Open port

    err = SrmExtOpen(sysFileCVirtRfComm, &config, sizeof(config), &serport);



    // Return code

    return (err == errNone);

}



//-----------------------------------------------------

// Write one char on serial port

//-----------------------------------------------------

static Boolean WriteBTPort(Char c)

{

    Err err = serErrNotOpen;



    if (portok)

    {

 // Send commande

 SrmSend(serport, &c, 1, &err);



 // Report error

 if (err != errNone)

 {

     FrmAlert(bluwFormID);

 }

    }



    return (err == errNone);

}



//-----------------------------------------------------

// Close BT port

//-----------------------------------------------------

static void CloseBTPort(void)

{

    if (portok)

    {

 SrmClose(serport);

    }

}

Franchement, c'est du basique...
snark
Avec portok une variable globale boolénne, résultat de la fonction OpenBTPort(), je suppose?
Patrice
Euh oui... et le "handle" du port ouvert dans serport... (pas hyper clean icon_bla.gif )

CODE
Boolean portok;       // Port status

UInt16  serport;      // Serial port ID


Et une alerte en ressources pour les erreurs de comm (dans le Write)...
georges.bessolo
Jusque là tout va bien.
Le port bluetooth est ouvert, on peut y envoyer des caractères. Mais quelles sont les commandes permettant de commander la numérotation ?
Où trouver la liste des commandes ? Est-ce que ces fonctions ont un rapport avec les commandes API décrites dans le Palm OS Programmer's API Référence ?
Par exemple la fonctionTelSpcCallNumber permettant la composition de numéro ?
snark
Relis le 1er message de lmame plus haut...
Patrice
CITATION(georges.bessolo)
Par exemple la fonctionTelSpcCallNumber permettant la composition de numéro ?

Hum, le "Telephony Manager" n'est implémenté que sur les smartphones (Treo par exemple). Rien à voir avec ce que tu cherches à faire...
georges.bessolo
En fait la fonction :

erreur=SrmExtOpen(sysFileCVirtRfComm, &config, sizeof(config), &btPortID);


et là erreur = 0x030A (serErrNotSupported).

Le port ne s'ouvre pas, et je n'arrive pas à comprendre pourquoi la fonction SrmExtOpen ne fonctionne pas.

Cela n'est t'il pas dû au fait que l'on devrait charger la librairie "Serial Library" ???
Patrice
CITATION(Le PalmOS Reference Guide)
serErrNotSupported: The Serial Manager already has a port open.


Tu devrais passer plus de temps dans la littérature...
georges.bessolo
Moi j'ai ça pour le port est déjà ouvert: serErrAlreadyOpen.
georges.bessolo
Je suis allé dans:
http://www.palmos.com/dev/support/docs/pro...mms_SerRef.html

et j'ai trouvé çà:
serErrBadPort
The port parameter does not specify a valid port.

Si j'ai bien compris sysFileCVirtRfComm n'est pas un port valide ? icon_cry.gif
Patrice
1) Si tu utilises la doc de Protein pour du dév. 68k... rolleyes.gif

2) Si tu as une erreur serErrNotSupported, qu'est-ce que tu vas chercher avec d'autres erreurs ??? rolleyes.gif
georges.bessolo
Mais alors, comment continuer mon developpement si je ne sais pas où je vais. Je crois qu'il est bon que je sache pourquoi !
georges.bessolo
La doc Protein ne convient t'elle pas ?
georges.bessolo
Voilà, j'ai réussi grâce à votre aide à tous.
L'erreur (serErrNotSupported) retournée par SrmExtOpen était dûe au fait qu'avant toute chose j'avais chargée la librairie bluetooth (btLib) par:

erreur=BtLibOpen(gBtLibRefNum,false);

J'ai supprimé la ligne est c'est OK, le bonheur quoi icon_biggrin.gif !!!

Je vous remercie tous pour votre aide, sans quoi je n'y serais pas arrivé.

Juste une dernière question :
La commande ATD<no_telephone> doit faire partie d'une liste de commandes. Sauriez-vous me dire où trouver la liste complète ?

merci encore icon_arrow.gif anim_rasta.gif
snark
CITATION(georges.bessolo)
Juste une dernière question :
La commande ATD<no_telephone> doit faire partie d'une liste de commandes. Sauriez-vous me dire où trouver la liste complète ?

Un document de ce style devrait t'être utile! anim_wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.