Micro Projet Systèmes Embarqués Envoi et Réception de SMS sous

Transcription

Micro Projet Systèmes Embarqués Envoi et Réception de SMS sous
Nicolas BESSON
Emilie COUSIN
Nicolas MARTIN
Christophe PARIS
ESSI3 – STREAM
Mars 2002
Micro Projet Systèmes Embarqués
Envoi et Réception de SMS sous PocketPC
J.Y. TIGLI & E. MATHIEU
Présentation du sujet :
Dans le cadre du module Systèmes Embarqués, nous avons étudié la possibilité
d’envoyer et de recevoir des messages SMS sur un Pocket PC grâce à un modem GSM (ou
GPRS).
En effet, les SMS (Short Message Service) sont de plus en plus utilisés pour assurer une
communication simple et rapide. A l’heure actuelle, ils peuvent être expédiés depuis un
téléphone GSM, un système, un réseau informatique ou par internet.
Notre projet s’inscrit donc dans la mouvance actuelle des appareils et technologies
mobiles, comme les Pocket PC, appareil en pleine expansion.
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
SOMMAIRE
1
INTRODUCTION........................................................................................................................................................3
2
FONCTIONNALITES DE L’APPLICATION ....................................................................................................4
3
ETUDE DES METHODES DE DEVELOPPEMENT EXIS TANTES ..........................................................4
3.1
3.2
4
LE PROTOCOLE SMS ............................................................................................................................................ 4
LES METHODES POSSIBLES DE PROGRAMMATION ............................................................................................ 6
MAQUETTAGE, TEST ET VALIDATION :....................................................................................................10
4.1
4.1.1
4.1.2
4.1.3
4.1.4
4.2
4.2.1
4.2.2
4.2.3
4.2.4
4.3
4.3.1
4.3.2
4.3.3
4.3.4
4.4
ECRITURE /LECTURE SUR LE PORT SERIE ......................................................................................................... 10
Objectif ...........................................................................................................................................................10
Plate-forme de Test.......................................................................................................................................10
Tests pratiqués...............................................................................................................................................10
Résultats.........................................................................................................................................................11
ENCODAGE D’UN SMS....................................................................................................................................... 12
Objectif ...........................................................................................................................................................12
Plate-forme de Test.......................................................................................................................................12
Tests pratiqués...............................................................................................................................................12
Résultats.........................................................................................................................................................13
INTERFACE GRAPHIQUE...................................................................................................................................... 14
Objectif ...........................................................................................................................................................14
Plate-forme de Test.......................................................................................................................................14
Description de l’interface............................................................................................................................14
Evolutions.......................................................................................................................................................16
CONCLUSIONS SUR LES TESTS........................................................................................................................... 17
5
CONCLUSION............................................................................................................................................................19
6
BIBLIOGRAPHIE.....................................................................................................................................................20
6.1
6.2
SITE W EB :........................................................................................................................................................... 20
DOCUMENTATION............................................................................................................................................... 20
ANNEXES
ANNEXE 1 : LE PROTOCOLE SMS .............................................................................................................................21
ANNEXE 2 : 7 BIT DEFAULT ALPHABET................................................................................................................30
ANNEXE 3 : TRIUM MONDO.........................................................................................................................................34
ANNEXE 4 : GESTION DU PORT SERIE POUR POCKET PC ET WINDOWS CE....................................35
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 2 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
1 Introduction
A l’heure actuelle, les Pocket PC proposent les applications standards suivantes :
- une boîte de réception pour lire, écrire et envoyer des messages électroniques
comme vous pourriez le faire sur un PC normal.
- un calendrier qui permet de gérer un planning et des rendez- vous.
- un gestionnaire de contacts.
- un bloc-note.
- un gestionnaire de tâches.
- Pocket Internet explorer.
- Pocket Word.
- Pocket Excel.
- Microsoft Reader qui permet d’accéder à une bibliothèques de livres.
- un lecteur Windows Media Player pour écouter de la musique.
A cet ensemble de fonctions disponibles, nous nous proposons d’ajouter ou du moins
d’étudier la possibilité d’ajouter une application permettant l’envoi et la réception de SMS.
Nous allons dans un premier temps présenter les fonctionnalités de notre application
puis nous parlerons des normes existantes que nous avons étudiés ainsi que des méthodes de
développement possibles.
Dans une autre partie, nous montrerons les tests effectués avec notre maquette et pour
finir, nous établirons des conc lusions quant à la réalisation réelle d’une telle application.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 3 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
2 Fonctionnalités de l’application
L’objectif de notre application est de permettre l’envoi et la réception de messages SMS
sur un IPAQ Pocket PC grâce à une carte GSM.
Les fonctionnalités principales sont donc :
- l’écriture d’un message
- l’envoi d’un message à une adresse demandée par l’utilisateur
- la réception d’un message
- la lecture du message reçu
Pour un confort d’utilisation, nous proposons d’ajouter une gestion d’un répertoire
téléphonique qui associe un numéro de téléphone à un nom défini par l’utilisateur.
Il existe différentes méthodes pour développer ces fonctionnalités. Nous allons
maintenant les présenter et montrer comment nous les avons utilisées.
3 Etude des méthodes de développement existantes
Nous avons dans un premier temps effectué des recherches concernant le protocole
normalisé SMS. Nous nous sommes ensuite intéressés au différents méthodes de
programmation possibles.
3.1 Le protocole SMS
Le protocole SMS a été spécifié par l’organisation ETSI (European
Telecommunications Standards Institute) dans les documents GSM 03.40 et GSM 03.38.
Le SMS est un protocole appelé protocole sans connexion car, lors de l’acheminement
d’un message, aucune connexion n’est établie entre le terminal qui envoie et celui qui reçoit.
Il existe deux méthodes pour envoyer et recevoir des messages SMS, en mode texte ou
en mode PDU (Protocol Data Unit). Le mode texte est juste un codage de l’ensemble des bits
représentés par le mode PDU. Ces codages diffèrent selon les téléphones. Il est donc
préférable d’utiliser le mode PDU.
Les PDU contiennent non seulement les messages mais aussi un ensemble de métainformations à propos de l’émetteur, de son centre de message, etc.
L’envoi d’un SMS s’effectue en deux phases :
- l’acheminement du message depuis le terminal émetteur vers une entité
particulière appelé SMSC (Short Message Service Center)
- l’acheminement du message depuis le SMSC jusqu’au terminal récepteur.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 4 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
Chacune de ces deux phases correspond à une unité de donnée du protocole (PDU). Il
existe en fait 6 types de PDU :
Type PDU
Direction
Fonction
SMS-Deliver
SMSC => Terminal
Envoie un bref message
SMS-DELIVER-REPORT
Terminal => SMSC
Envoie le motif de la non réception du message
SMS-SUBMIT
Terminal => SMSC
Envoie un message bref
SMS-SUBMIT-REPORT
SMSC => Terminal
Envoie le motif de la non réception du message
SMS-STATUS-REPORT
SMSC => Terminal
Envoie l'indication de l'état d'un message
SMS-COMMAND
Terminal => SMSC
Envoie un ordre
La tache principale de SMS-DELIVER et de SMS-SUBMIT est celle de transmettre,
aux entités SMS, le contenu du message et les informations relatives au terminal GSM et au
SMSC. La structure de celles-ci est décrite en annexe.
Les PDU SMS-DELIVER-REPORT et SMS-SUBMIT-REPORT notifient aux
entités SMS que le message reçu n'est pas correct et qu'il faut effectuer une retransmission.
La PDU SMS-STATUS-REPORT contient des informations sur l'état du message: s'il
a été transmis ou non par l'entité réceptrice, et quand il a été transmis.
La PDU SMS-COMMAND contient les ordres qui doivent être associés à un message
déjà acheminé à travers le SMS-SUBMIT.
Un message est constitué d’au maximum 160 caractères où chaque caractère est codé
sur 7 bits en accord avec le 7-bit default alphabet décrit en annexe.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 5 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
3.2 Les méthodes possibles de programmation
Après avoir trouvé les renseignements concernant le protocole SMS, nous nous sommes
intéressés aux méthodes de programmation possibles.
Les différentes techniques disponibles sont les suivantes:
Ø Utiliser l’API SMS de Pocket PC 2002. En effet, la nouvelle version de Pocket PC, la
version 2002, fournit en natif une API permettant la gestion des SMS. Voici les
différentes fonctions qu’elle propose .
Function
SmsClearMessageNotification
SmsClose
SmsGetBroadcastMsgRanges
Description
Cancels registration for SMS notifications.
Closes an existing SMS Messaging handle.
Gets the range of broadcast messages the mobile will listen
for.
SmsGetMessageSize
Determines an upper-bound for the size of the buffer.
SmsGetMessageStatus
Retrieves a status report for a sent message.
SmsGetSMSC
Reads the default Short Message Service Center (SMSC)
address.
SmsGetPhoneNumber
Gets the phone number of the device associated with the
SMS bearer.
SmsGetTime
Gets an estimate of the current time approximated by the
SMSC's clock.
SmsOpen
Opens the SMS Messaging component for send and/or
receive access.
SmsReadMessage
Reads a previously received SMS message.
SmsSendMessage
Sends an SMS message.
SmsSetBroadcastMsgRanges Sets the broadcast message range the mobile will listen for.
SmsSetMessageNotification Starts your application when an SMS message arrives.
SmsSetSMSC
Sets the default SMSC.
Pour utiliser cette API, un SDK est disponible chez Microsoft à l’adresse suivante :
http://www.microsoft.com/mobile/developer/downloads/ppcsdk2002.asp.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 6 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
Ø Envoyer par le port IRDA du terminal à un téléphone mobile. C’est ensuite le téléphone
mobile qui se charge d’envoyer le SMS. Voici le schéma d’une telle architecture :
Réseau GSM
Téléphone cellulaire
Communication IRDA
Un logiciel existe utilisant cette méthode pour envoyer des SMS. Il s’agit de Visual IT
Simple
SMS
V2.0
dont
la
présentation
est
à
l’adresse
suivante :
http://www.mobilemag.ch/news/article.asp?articleid=1289) et dont une démo est
téléchargeable à l’adresse : http://www.visualit.co.uk/simplesms.htm
Ø Envoyer par l’intermédiaire de Pocket Outlook et du port IRDA du terminal et d’un
téléphone mobile.
En effet, SMS extension est une application intégrée dans Pocket Outlook qui vous
permet d'envoyer des SMS avec un téléphone équipé d'un port infrarouge IRDA. On peut
aussi envoyer des SMS d'alerte, recevoir des compte-rendus de réception et gérer
simplement la base de donnée des contacts. SMS extension est un freeware et la version
finale sera disponible très prochaine ment.
Vous pouvez télécharger ce programme sur PocketGear.com à l’adresse suivante :
http://www.pocketgear.com/software_detail.asp?id=2814&associateid=13
Ø Réaliser une communication directe avec le port série sur lequel se trouve le modem
GPS.
Une technique simple est de pouvoir dialoguer directement avec le modem GSM à
l’aide de commande AT. Le jeu le plus courant de commandes textuelles est appelé le jeu
AT ou encore Hayes , du nom de l'entreprise ayant commercialisé les premiers modems
dits intelligents. Le jeu se compose de commandes simples préfixées par AT. Chaque
commande doit se terminer par le caractère de fin de ligne retour chariot (0D en
hexadécimal). Les commandes peuvent être envoyées en minuscule ou en majuscule.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 7 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
Dans le cadre de notre projet, les techniques suivantes ont du être abandonnées :
Ø Utilisation de l’API SMS de Pocket PC 2002. En effet, nous disposions d’un Trium
Mondo pour développer et celui-ci n’a pas la version 2002 de Pocket PC.
Ø Utilisation du port IRDA du terminal avec un téléphone mobile. En effet, nous n’avons
pas à notre disposition de téléphone possédant un port IRDA.
Ø Utilisation de Pocket Outlook et du port IRDA du terminal. En effet, il nous a été
déconseillé d’utiliser cette méthode.
Nous nous sommes donc dirigés vers la dernière solution qui consiste à utiliser le port
série sur lequel est connecté le modem GSM. En effet, le Trium Mondo possède un modem
GSM intégré connecté sur le port COM6.
Il faut noter que cette méthode est indépendante du terminal utilisé et peut donc être
réutilisée pour un Ipaq.
Après avoir décidé d’utiliser cette méthode, nous avons défini l’architecture de
l’application pour l’envoi d’un SMS de la façon suivante :
Paramètres du
port
Message
Date de validité
Encodeur de
SMS
Numéro du
destinataire
Trame SMS
Port Série
Modem GSM
Réseau GSM
Envoi d’un SMS par modem GSM
Les composants «Message », « Date de validité » et « Numéro du destinataire » sont
des éléments qui doivent être saisis par l’utilisateur à travers l’interface graphique.
L’encodeur de SMS est un composant qui encode une trame SMS envoyée par la suite
sur le modem.
La trame ainsi constituée est ensuite écrite à l’aide de commandes AT sur le port série
connecté au modem GSM.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 8 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
En ce qui concerne la réception d’un SMS, l’architecture est la suivante :
Message
Paramètres du
port
Réseau GSM
Modem GSM
Port Série
Trame SMS
Réception d’un SMS par modem GSM
Décodeur de
SMS
Numéro de
l’émetteur
La trame SMS est reçue sur le modem GSM qui la transmet par le port série à
l’application. Elle est ensuite décodée pour récupérer les informations du message, le message
texte ainsi que le numéro de l’émetteur. Celles-ci sont ensuite fournies à l’utilisateur grâce à
l’interface graphique.
Par manque de temps, nous n’avons pu développer le décodage d’un message. Par
contre, la lecture/écriture sur le port et l’encodage d’un message ont été réalisé et testé. Nous
allons maintenant présenter les tests effectués et les conclusions obtenues.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 9 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
4 Maquettage, Test et Validation :
4.1 Ecriture/Lecture sur le port série
4.1.1 Objectif
L’objectif de ce test est d’écrire et lire des données sur le port série du Trium Mondo, afin
de pouvoir dialoguer avec le modem GSM interne.
4.1.2 Plate-forme de Test
•
•
•
•
•
Développement d’une application eMbedded Visual C++ 3.0.
ActiveSync 3.5 FR sur port série.
Trium Mondo connecté à la plate- forme de développement.
Remote registry editor de Visual c++ 3.0 pour avoir accès à la base de registre et tout
particulièrement la clef indiquant le port de communication du modem.
Remote process viewer d e Visual c++ 3.0 pour visualiser les différents processus
tournant sur le Trium.
Le prototype permettant de faire ce test se trouve dans le répertoire : Src/TryPort2
4.1.3 Tests pratiqués
L’application de test développée permet donc d’envoyer une chaîne de caractère sur le
port série (COM6 :). Cette chaîne doit être saisie dans la zone «Emit » et doit être une
commande AT.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 10 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
Nous avons utilisé les commandes AT suivantes :
- ATZ : correspondant à un reset du modem, la réponse doit être la chaîne "OK"
- ATI0 : demande d’informations sur le modem, la réponse doit être le numéro
d’identification du fabricant.
Les étapes lors de l’appui sur le bouton send sont
les suivantes :
• Ouverture d’un handle sur le port COM6 :
• Configuration du port série :
o vitesse = 9600 bauds
o parité présente ou non
o bit de stop présent ou non
o taille de l’octet 8 ou 7 bits
• Configuration du timeout en lecture et en
écriture
• Ecriture de la chaîne de caractères
• Lecture de la réponse avec timeout
• Affichage du résultat dans la zone
« Receive »
• Libération du handle
4.1.4 Résultats
L’ouverture du port se déroule normalement, la configuration aussi et l’écriture ne pose
pas de problèmes. Malheureusement, après de nombreuses tentatives, avec des configurations
différentes, nous n’avons pas réussi à lire une réponse émise par le modem.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 11 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
4.2 Encodage d’un SMS
4.2.1 Objectif
L’objectif de ce test est de produire une trame SMS correspondant au message que l’on
désire envoyer.
4.2.2 Plate-forme de Test
•
•
•
•
Développement d’une application eMbedded Visual C++ 3.0.
ActiveSync 3.5 FR sur port série.
Trium Mondo connecté à la plate- forme de développement.
PDUSpy qui permet de décoder une trame SMS et d’afficher les différentes
informations contenues
Le prototype permettant de faire ce test se trouve dans le répertoire : Src/smsCodereMb
4.2.3 Tests pratiqués
Le test consiste à renseigner les différents champs de l’interface, puis en utilisant
PDUSpy, de retrouver ces données dans l’onglet de décodage. L’encodage est réalisé par une
classe en C++ (SMS_SUBMIT) disponible dans les sources.
NO SMSC ADDRESS PRESENT
MESSAGE HEADER FLAGS (0x11)
MESSAGE TYPE
: SMS SUBMIT
REJECT DUPLICATES : NO
VALIDITY PERIOD
: RELATIVE
REPLY PATH
: NOT SET
USER DATA HEADER
: NO UDH
REQ. STATUS REPORT : NO
MSG REFERENCE NR. : 0 (0x00)
RECIPIENTS ADDRESS
NUMBER IS
: +0615652185
TYPE OF NR. (0x10) : INTERNATIONAL
NPI
(0x01) : ISDN/TELEPHONE (E.164/E.163)
PROTOCOL IDENTIFIER (0x00)
MESSAGE ENTITIES
: SME-to-SME
PROTOCOL USED
: implicit
DATA CODING SCHEME
COMPRESSION
MESSAGE CLASS
ALPHABET USED
(0x00)
: OFF
: NONE
: 7bit default
VALIDITY OF MESSAGE : 15,0 hrs
USER DATA PART OF SM
USER DATA LENGTH
: 10 septets
USER DATA (TEXT)
: HelloHello
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 12 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
4.2.4 Résultats
Récapitulatif des différents tests :
Data
Phone Number
Validity
Résultat
HelloHello
0615652185
15 hours
OK
HelloHello
0615652185
OK
0615652185
15 hours
OK
0615652185
OK
HelloHello
15 hours
OK
HelloHello
OK
15 hours
OK
OK
HelloHello@
*
*
Invalide
* toutes les valeurs possibles, - aucune valeur
Si les données du message à encoder contient des caractères autres que l’alphanumérique
le codage n’est pas correcte, car selon la spécification il faudrait utiliser une table de
conversion. (http://www.dreamfabric.com/sms/default_alphabet.html).
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 13 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
4.3 Interface graphique
4.3.1 Objectif
Cette maquette est un exemple d’application qui pourrait être développée pour les
Pocket PC. Cet outil permet d’envoyer des SMS, de gérer un carnet de numéros de
téléphones, de manière simple et intuitive.
4.3.2 Plate-forme de Test
•
•
•
Développement d’une application eMbedded Visual C++ 3.0.
ActiveSync 3.5 FR sur port série.
Trium Mondo connecté à la plate- forme de développement.
Le prototype permettant de faire ce test se trouve dans le répertoire : Src/sendSMS
4.3.3 Description de l’interface
Le logiciel contient trois zones distinctes :
- une zone dans laquelle on peut entrer un
numéro de téléphone,
- une zone contenant la liste des contacts,
- une zone dans laquelle on écrit le message
à envoyer.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 14 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
Il est possible d’ajouter un numéro de
téléphone dans la liste des contacts en
appuyant sur le bouton ajouter. Il suffit alors
de donner un nom au contact, qui sera associé
à ce numéro de téléphone.
Lorsqu’un numéro se trouve dans la
liste des contacts, il suffit de le sélectionner
(identifié par le nom de son propriétaire) dans
la liste déroulante du « carnet d’adresses ».
Lorsqu’on écrit un numéro qui fait
parti du carnet d’adresses, celui-ci s’affiche
automatiquement.
Le contenu du SMS est limité à 160
caractères. Une zone de texte indique le
nombre de caractères restant à écrire avant
d’atteindre cette limite.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 15 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
4.3.4 Evolutions
Ø Evolutions impératives :
Dans sa version définitive, l’application devra intégrer la gestion du modem GSM
et la configuration de celui-ci.
Ø Evolutions facultatives :
La version définitive pourrait lier son carnet d’adresses à celui contenu dans
Outlook.
Elle pourrait gérer automatiquement le découpage de longs messages en plusieurs
fragments.
Elle pourrait importer le carnet d’adresses inclus dans la carte SIM.
Elle pourrait intégrer l’envoi d’images liées au message.
Elle pourrait stocker les messages envoyés, afin de pouvoir les visualiser
ultérieurement.
Elle pourrait envoyer un même message à une liste de contacts.
Elle pourrait permettre de recevoir des SMS.
Elle pourrait permettre de faire du chat par SMS avec d’autres personnes utilisant
le même programme.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 16 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
4.4 Conclusions sur les tests
A la suite des tests, nous avons conclu sur différents problèmes technologiques qu’il
faudrait résoudre pour envisager une version finale du produit.
Pour corriger le problème du port série, il faudrait monter un projet de recherche sur les
modems GSM afin de connaître précisément les commandes AT normalisées.
La réalisation de cette application en version finale impliquerait une décomposition en
tâches suivantes :
Ø Gestion du modem :
Travail à effectuer : Initialisation du modem, configuration du modem, lecture,
écriture et attente de données.
Matériel nécessaire : Un modem GSM, une station de développement avec Visual
Embedded Tools et un PDA
Coût : Prix du PDA (~700 Euros), prix du modem GSM compatible avec le PDA
(~550 Euros)
Temps de travail : Difficile à évaluer car dépend de la disponibilité de la
documentation technique du modem GSM. En moyenne, 1
mois et demi pour une personne.
Ø Encodage d‘une trame SMS :
Travail à effectuer : Encodage de toutes les trames du protocole SMS (envoi d’un
message, acquittement, erreur).
Matériel nécessaire : Une station de développement avec Visual Embedded Tools.
Coût : Aucun.
Temps de travail : 2 mois pour une personne.
Ø Décodage d‘une trame SMS :
Travail à effectuer : Décodage de toutes les trames du protocole SMS (réception
d’un message, acquittement, erreur).
Matériel nécessaire : Une station de développement avec Visual Embedded Tools.
Coût : Aucun.
Temps de travail : 2 mois pour une personne.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 17 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
Ø Réalisation de l’interface graphique :
Travail à effectuer : Réaliser une interface agréable, conviviale, facile d’utilisation
et adaptée au PDA.
Matériel nécessaire : Une station de développement avec Visual Embedded Tools,
un émulateur Pocket PC pour tester localement et un PDA
pour une étude ergonomique.
Coût : Prix du PDA (~700 Euros).
Temps de travail : 3 semaines pour une personne.
Ø Intégration et validation :
Travail à effectuer : Assembler les différents éléments, tester et valider.
Matériel nécessaire : Tout le matériel nécessaire à chacune des tâches.
Coût : Aucun supplémentaire.
Temps de travail : 3 semaines pour une personne.
Voici donc un récapitulatif pour la réalisation d’un produit final :
Tâche
Coût en Euros Temps de travail Nombre de personnes
en semaines
Gestion du modem
1250
5
1
Encodage des trames
0
8
1
Décodage des trames
0
8
1
Interface Graphique
0
3
1
Intégration
0
3
1
Total
1250
27
5
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 18 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
5 Conclusion
Nous avons atteint l’objectif initial qui était la compréhension et l’étude de l’envoi de
SMS depuis un Pocket PC à l’aide d’un modem GSM. Les résultats de cette étude pourront
être réutilisés dans un projet futur.
Ce projet nous a permis d’effectuer des recherches sur un sujet qui ne possède pas
beaucoup de documentation, et d’apporter notre contribution au développement des nouvelles
technologies.
L’application que nous avons développée permettra de remplir sa mission dès que nous
aurons à notre disposition un modem GSM fonctionnel et une carte SIM permettant d’envoyer
des SMS gratuitement.
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 19 sur 40
Nicolas BESSON – Emilie COUSIN – Nicolas MARTIN – Christophe PARIS
ESSI3 - STREAM
6 Bibliographie
6.1 Site Web :
Trium
http://www.mitsubishi-telecom.com
Site du fabricant du Mondo.
Informations techniques sur l’appareil (orienté sur la vente du produit).
ETSI
http://www.etsi.org/
Description des standards dans les télécoms
Advanced Wireless Planet
http://www.gsm- modem.de/sms-pdu- mode.html
Détail sur les différents formats de SMS
DreamFabric
http://www.dreamfabric.com/sms/
Décodage d’une trame SMS en émission et en réception sur un téléphone mobile.
Nobbi
http://www.nobbi.com
Site des créateurs de PDUSpy, qui permet de décoder les différentes trames SMS.
SendMyStuff
http://www.aspekt1.net/ms/sms
SendMyStuff est un outils permettant la création d’un message SMS-SUBMIT.
GsmLib
http://www.pxh.de/fs/gsmlib
Librairie de gestion de modem GSM et de création de messages SMS sous Win32 et Linux.
SmartSMS
http://www.smartsms.ch/
Outils pour envoyer des SMS payant depuis un PC tournant sous Windows.
6.2 Documentation
Spécification ETSI : 03.40
Référence: TS/SMG-040340QR2
Technical realization of the Short Message Service (SMS).
Systèmes embarqués - Projet envoi d’un SMS sous Pocket PC
Page 20 sur 40
Annexe 1 : le protocole SMS
1 Trame SMS-SUBMIT
Voici les éléments de base de la trame SMS-SUBMIT :
Représentation
2 octets
1 octet
Integer
2-12 octets
1 octet
Integer
1-7 octets
Integer
(dépend du TP-DCS)
Description
Length of SMSC information
First octet of the PDU
TP-MR
TP-DA
TP-PID
TP-DCS
TP-VP
TP-UDL
TP-UD
1.1 Length of SMSC information
Ce champ représente la longueur des informations concernant le centre de messages
SMS.
Cet octet est optionnel. S’il est présent et qu’il a une valeur égale à 0 ou s’il est émis, cela
signifie que les informations stockées dans le téléphone concernant le SMSC seront utilisées.
1.2 First octet of the PDU
Le premier octet de la trame a la forme suivante:
Bit n° 7
Nom TP-RP
6
TP-UDHI
5
TP-SRR
4
TP-VPF
3
TP-VPF
2
TP-RD
1
TP-MTI
0
TP-MTI
1.2.1 TP-MTI
Ce champ est le “Message Type Indicator”, il renseigne sur le type de message. Dans le
cas du SMS-SUBMIT, le bit n°1 et 0 ont respectivement les valeurs 0 et 1.
Les différentes valeurs possibles sont les suivantes :
Bit
n°1
0
0
1
1
0
0
Bit
n°0
0
0
0
0
1
1
Description
Sens
SMS-DELIVER
SMS-DELIVER-REPORT
SMS-STATUS-REPORT
SMS-COMMAND
SMS-SUBMIT
SMS-SUBMIT-REPORT
SC -> MS
MS -> SC
SC -> MS
MS -> SC
MS -> SC
SC -> MS
1.2.2 TP-RD
Ce champ est le « Reject Duplicates », il indique si un message identique à un message
déjà reçu et stocké par le centre de messages doit être rejeté ou accepté.
1.2.3 TP-VPF
Ce champ est le « Validity Period Format », il définit la présence et le format de la période
de validité du message. Les différentes valeurs sont les suivantes :
Bit n°4 Bit n°3
0
0
1
0
0
1
1
1
Description
Le champ TP-VP est absent
Le champ TP-VP est présent au format relatif sur 1 octet
(représentation avec un entier)
Réservé
Le champ TP-VP est présent au format absolu sur 7 octets
(représentation avec un semi-octet)
1.2.4 TP-SRR
Ce champ est le « Status Report Request », il indique si le message nécessite un
acknowledge ou non. Le bit est placé à 1 s’il est demandé.
1.2.5 TP-UDHI
Ce champ est le « User Data Header Indicator », il indique si le champ TP-UD comporte
une entête. Le bit est placé à 1 si oui.
1.2.6 TP-RP
Ce champ est le « Reply Path », il indique si un répertoire de réponse existe ou non. Le bit
est placé à 1 si oui.
1.2.7 Exemple
Si le premier octet a une valeur de 11 en hexadécimal, cela signifie la chose suivante :
Bit n°
Nom
7
0
6
0
5
0
4
1
3
0
2
0
1
0
0
1
Il s’agit donc d’un message de type SMS-SUBMIT qui sera accepté même si un
message identique existe dans le SMSC. Le champ TP-VP sera présent et aura un format
relatif. Aucun acknowledge n’est demandé, le champ TP-UD ne contient pas d’entête et il
n’existe pas de répertoire de réponse.
1.3 TP-MR
Ce champ est le « Message Reference », il s’agit d’un identifiant du message. Si sa valeur
est 00, cela signifie que le téléphone aura libre choix pour cet identifiant de message.
1.4 TP-DA
Ce champ est « Destination Address », il précise les informations concernant l’adresse
du destinataire du message. Il se décompose de la façon suivante :
Représentation
Integer
1 octet
Length Semi-Octets
Description
Address Length
Type of Address
Address Value
Taille Octets
1
1
x
1.4.1 Address Length
Ce champ indique la longueur de l’adresse en nombre de semi-octets (1octet=2semioctets), c’est un entier.
1.4.2 Type of Address
Ce champ indique le format de l’adresse (du numéro de téléphone). Il se décompose de
la façon suivante :
Bit n°
Nom
7
Toujours à 1
6
5
4
Type-of-number
3
2
1
0
Numbering Pla n Identification
Ø Type of number
Ce champ représente le type de l’adresse.Voici les différentes valeurs possibles de ce
champ:
Bit n°6
0
0
0
0
1
1
1
1
Bit n°5
0
0
1
1
0
0
1
1
Bit n°4
0
1
0
1
0
1
0
1
Description
Type inconnu
Numéro international.
Numéro national.
Numéro spécifique d’ un réseau.
Subscriber number.
Alphanumérique
Abréviation
Réservé
Ø Numbering Plan Identification
Ce champ n’est valable que pour un « type- number » égal à 000 ou 001 ou 010. Pour les
autres valeurs de « type of number », il doit être transmis avec la valeur 0000.
Les valeurs possibles dans le cas où il est valable sont :
Bit n°3
0
0
0
0
1
1
1
1
Bit n°2
0
0
0
1
0
0
0
1
Bit n°1
0
0
1
0
0
0
1
1
Bit n°0
0
1
1
0
0
1
0
1
Description
Inconnu
ISDN/telephone numbering plan (E.164/E.163).
Data numbering plan (X.121).
Telex numbering plan
National numbering plan.
Private numbering plan
ERMES numbering plan (ETSI DE/PS 3 01-3)
Réservé
Ø Exemple
Un type d’adresse égal à 91 en hexadécimal signifie qu’il s’agit d’un numé ro de
téléphone international.
Bit n° 7
Valeur 1
6
0
5
0
4
1
3
0
2
0
1
0
0
1
1.4.3 Address value
Ce champ contient l’adresse. Elle est encodée de la façon suivante :
les chiffres sont inversés deux à deux. Par exemple le numéro suivant : 06 65 45
51 27 est codé par la valeur hexadécimal 60 56 54 15 72.
1.5 TP-PID
Ce champ est le “Protocol Identifier”, il s’agit d’un octet utilisé de la façon suivante:
Ø Le «MS» interprètera des valeurs réservées ou inconnues de ce champ comme une
valeur 00000000.
Ø Le « SC » refusera les messages contenant une valeur réservée ou inconnue pour ce
champ.
1.6 TP-DCS
Ce champ est le “Data Coding System”,il indique quel codage est utilisé pour le message.
Dans notre cas, nous utiliserons la valeur 00 qui signifie un codage sur 7 bits. Pour
information, la valeur 02 signifie un codage sur 8 bits.
1.7 TP-VP
Ce champ est le « Validity Period », il donne le temps au bout duquel le message expire.
Ø Pour un format relatif
Il s’agit d’un Integer donnant la longueur de la période depuis le moment où le
message a été reçu par le centre de messages.
Valeur du champ
0 to 143
144 to 167
168 to 196
197 to 255
Valeur de la période
(TP-VP + 1) * 5 min (i.e. des intervalles de 5 min jusqu’à 12 h)
12 hr + ((TP-VP - 143) * 30 min)
(TP-VP - 166) * 1 jour
(TP-VP - 192) * 1 semaine
Ø Pour un format absolu
Il est donné sur 7 octets contenant le champ « TP-SCTS » qui
précise le format utilisé.
1.8 TP-UDL
Ce champ est le « User Data Length », il indique la longueur du message selon le
codage du message. Par exe mple, pour un codage sur 7 bits, la longueur donnera le nombre de
septets (données codés sur 7 bits)
1.9 TP-UD
Ce champ est le « User Data », il contient le message à envoyer. Sa longueur maximale
est de 140 octets. Il contient soit le message seul, soit une entête suivi du message.
1.10 Exemple de trame
00
11 00 0B 91 6407281553F8 00 00 AA 0A E8329BFD4697D9EC37
Cette trame correspond à l’envoi du message « hellohello » au numéro de téléphone
« 0708251358 ».
2 Trame SMS-DELIVER
Voici les éléments de base de la trame SMS-DELIVER :
Représentation
2 octets
2-12octets
1 octet
2-12 octets
1 octet
Integer
1-7 octets
Integer
(dépend du TP-DCS)
Description
Length
of
SMSC
information
TP-DA
First octet of the PDU
TP-OA
TP-PID
TP-DCS
TP-SCTS
TP-UDL
TP-UD
2.1 Length of SMSC information
Ce champ représente la longueur des informations concernant le centre de messages
SMS. Elle comprend la longueur du type d’adresse et de l’adresse elle- même.
2.2 TP-DA
Ce champ est « Destination Address », il précise les informations concernant l’adresse
du centre de message destinataire. Il se décompose de la façon suivante :
Représentation Description
1 octet
Type of Address
n Semi-Octets Address Value
2.2.1 Type of Address
Ce champ indique le format de l’adresse (du numéro de téléphone). Il a la même forme
que le champ de même nom vu précédemment.
2.2.2 Address value
Ce champ contient l’adresse. Elle est encodée de la façon suivante :
les chiffres sont inversés deux à deux. Par exemple le numéro suivant : 06 65
45 51 27 est codé par la valeur hexadécimal 60 56 54 15 72.
2.3 First octet of the PDU
Le premier octet de la trame a la forme suivante:
Bit n° 7
Nom TP-RP
6
TP-UDHI
5
TP-SRI
4
unused
3
unused
2
1
TP-MMS TP-MTI
0
TP-MTI
2.3.1 TP-MTI
Ce champ est le “Message Type Indicator”, il renseigne sur le type de message. Dans le
cas du SMS-DELIVER, le bit n°1 et 0 ont respectivement les valeurs 0 et 0.
Les différentes valeurs possibles sont les suivantes :
Bit
n°1
0
0
1
1
0
0
Bit
n°0
0
0
0
0
1
1
Description
Sens
SMS-DELIVER
SMS-DELIVER-REPORT
SMS-STATUS-REPORT
SMS-COMMAND
SMS-SUBMIT
SMS-SUBMIT-REPORT
SC -> MS
MS -> SC
SC -> MS
MS -> SC
MS -> SC
SC -> MS
2.3.2 TP-MMS
Ce champ est le «More Message to Send », il indique s’il y a d’autres messages en
attente pour le même destinataire. Ce champ est à 1 s’il y a des messages en attente et 0 sinon.
2.3.3 TP-SRI
Ce champ est le «Status Report Indication », il indique si le message nécessite un
rapport d’exécution ou non. Le bit est placé à 1 s’il est demandé et à 0 sinon.
2.3.4 TP-UDHI
Ce champ est le « User Data Header Indicator », il indique si le champ TP-UD comporte
une entête. Le bit est placé à 1 si oui.
2.3.5 TP-RP
Ce champ est le « Reply Path », il indique si un répertoire de réponse existe ou non. Le
bit est placé à 1 si oui.
2.3.6 Exemple
Si le premier octet a une valeur de 4 en hexadécimal, cela signifie la chose suivante :
Bit n°
Nom
7
0
6
0
5
0
4
0
3
0
2
1
1
0
0
0
Il s’agit donc d’un message de type SMS-DELIVER. Aucun acknowledge n’est
demandé, il indique qu’il n’y a qu’un message à recevoir et qu’il n’existe pas de répertoire de
réponse.
2.4 TP-OA
Ce champ est « Originating Address », il précise les informations concernant l’adresse du
destinataire du message. Il se décompose de la même façon que le champ TP-DA de la trame
SMS-SUBMIT
2.5 TP-PID
Ce champ est le “Protocol Identifier”, il s’agit d’un octet utilisé de la façon suivante:
Ø Le «MS» interprètera des valeurs réservées ou inconnues de ce champ comme une
valeur 00000000.
Ø Le « SC » refusera les messages contenant une valeur réservée ou inconnue pour ce
champ.
2.6 TP-DCS
Ce champ est le “Data Coding System”,il indique quel codage est utilisé pour le message.
Dans notre cas, nous utiliserons la valeur 00 qui signifie un codage sur 7 bits. Pour
information, la valeur 02 signifie un codage sur 8 bits.
2.7 TP-SCTS
Ce champ est le « Service Centre Time Stamp », il donne le temps local. Il est donné par
des semi-octets dont la signification est la suivante :
Year
Nbre de Semi-octets 2
Month
2
Day
2
Hour
2
Minute
2
Second
2
TimeZone
2
De plus, chaque semi-octet est codé par inversion. Voici un exemple :
Le 12 février (02) 1999 à 5h 57min 30s dans la zone locale GMT+3 sera codé :
0x99 0x20 0x21 0x50 0x75 0x03 0x21
2.8 TP-UDL
Ce champ est le « User Data Length », il indique la longueur du message selon le
codage du message. Par exemple, pour un codage sur 7 bits, la longueur donnera le nombre de
septets (données codés sur 7 bits)
2.9 TP-UD
Ce champ est le « User Data », il contient le message à envoyer. Sa longueur maximale
est de 140 octets. Il contient soit le message seul, soit une entête suivi du message.
2.10 Exemple de trame
07 91
04 0B
72 83 01 00 10 F5
C8 72 38 88 09 00 F1 00
00 99 30 92 51 61 95 80
0A E8329BFD4697D9EC37
Cette trame correspond à la réception du message « hellohello » venant du numéro de
téléphone « 0708251358 ».
Annexe 2 : 7 bit default alphabet
This is the 7 bit default alphabet as specified by GSM 03.38. The corresponding ISO8859-1 decimal codes are shown in the rightmost column. Note that the euro sign (€) is a
member of the ISO-8859-15 character set.
0x00
0x01
0
1
COMMERCIAL AT
POUND SIGN
@
£
ISO-8859-1
DEC
64
163
0x02
0x03
2
3
DOLLAR SIGN
YEN SIGN
$
¥
36
165
0x04
0x05
0x06
4
5
6
LATIN SMALL LETTER E WITH GRAVE
LATIN SMALL LETTER E WITH ACUTE
LATIN SMALL LETTER U WITH GRAVE
è
é
ú
232
233
250
0x07
0x08
7
8
LATIN SMALL LETTER I WITH GRAVE
LATIN SMALL LETTER O WITH GRAVE
ì
ò
236
242
0x09
9
Ç
199
0x0A
10
0x0B
11
0x0C
0x0D
12
13
0x0E
14
0x0F
15
0x10
0x11
Hex
Dec
Character name
LATIN CAPITAL LETTER C WITH
CEDILLA
LINE FEED
LATIN CAPITAL LETTER O WITH
STROKE
Character
10
Ø
216
ø
248
13
Å
197
å
229
16
17
LATIN SMALL LETTER O WITH STROKE
CARRIAGE RETURN
LATIN CAPITAL LETTER A WITH RING
ABOVE
LATIN SMALL LETTER A WITH RING
ABOVE
GREEK CAPITAL LETTER DELTA
LOW LINE
?
_
95
0x12
0x13
18
19
GREEK CAPITAL LETTER PHI
GREEK CAPITAL LETTER GAMMA
F
G
0x14
0x15
0x16
20
21
22
GREEK CAPITAL LETTER LAMBDA
GREEK CAPITAL LETTER OMEGA
GREEK CAPITAL LETTER PI
?
O
?
0x17
0x18
23
24
GREEK CAPITAL LETTER PSI
GREEK CAPITAL LETTER SIGMA
?
S
0x19
0x1A
0x1B
25
26
27
GREEK CAPITAL LETTER THETA
GREEK CAPITAL LETTER XI
ESCAPE TO EXTENSION TABLE
T
?
0x1B0A 27 10 FORM FEED
12
0x1B14 27 20 CIRCUMFLEX ACCENT
0x1B28 27 40 LEFT CURLY BRACKET
0x1B29 27 41 RIGHT CURLY BRACKET
^
{
}
94
123
125
0x1B2F 27 47 REVERSE SOLIDUS (BACKSLASH)
0x1B3C 27 60 LEFT SQUARE BRACKET
\
[
92
91
0x1B3D 27 61 TILDE
0x1B3E 27 62 RIGHT SQUARE BRACKET
0x1B40 27 64 VERTICAL BAR
~
]
|
126
93
124
€
164 (ISO-885915)
0x1B65
27
101
EURO SIGN
0x1C
0x1D
0x1E
28
29
30
LATIN CAPITAL LETTER AE
Æ
LATIN SMALL LETTER AE
æ
LATIN SMALL LETTER SHARP S (German) ß
198
230
223
0x1F
0x20
31
32
LATIN CAPITAL LETTER E WITH ACUTE Ê
SPACE
202
32
0x21
0x22
0x23
33
34
35
EXCLAMATION MARK
QUOTATION MARK
NUMBER SIGN
!
"
#
33
34
35
0x24
36
CURRENCY SIGN
¤
164 (ISO-88591)
0x25
0x26
0x27
37
38
39
PERCENT SIGN
AMPERSAND
APOSTROPHE
%
&
'
37
38
39
0x28
0x29
40
41
LEFT PARENTHESIS
RIGHT PARENTHESIS
(
)
40
41
0x2A
0x2B
0x2C
42
43
44
ASTERISK
PLUS SIGN
COMMA
*
+
,
42
43
44
0x2D
0x2E
45
46
HYPHEN-MINUS
FULL STOP
.
45
46
0x2F
0x30
0x31
47
48
49
SOLIDUS (SLASH)
DIGIT ZERO
DIGIT ONE
/
0
1
47
48
49
0x32
0x33
50
51
DIGIT TWO
DIGIT THREE
2
3
50
51
0x34
0x35
0x36
52
53
54
DIGIT FOUR
DIGIT FIVE
DIGIT SIX
4
5
6
52
53
54
0x37
55
DIGIT SEVEN
7
55
0x38
0x39
0x3A
56
57
58
DIGIT EIGHT
DIGIT NINE
COLON
8
9
:
56
57
58
0x3B
0x3C
59
60
SEMICOLON
LESS-THAN SIGN
;
<
59
60
0x3D
0x3E
0x3F
61
62
63
EQUALS SIGN
GREATER-THAN SIGN
QUESTION MARK
=
>
?
61
62
63
0x40
0x41
64
65
INVERTED EXCLAMATION MARK
LATIN CAPITAL LETTER A
¡
A
161
65
0x42
0x43
0x44
66
67
68
LATIN CAPITAL LETTER B
LATIN CAPITAL LETTER C
LATIN CAPITAL LETTER D
B
C
D
66
67
68
0x45
0x46
69
70
LATIN CAPITAL LETTER E
LATIN CAPITAL LETTER F
E
F
69
70
0x47
0x48
0x49
71
72
73
LATIN CAPITAL LETTER G
LATIN CAPITAL LETTER H
LATIN CAPITAL LETTER I
G
H
I
71
72
73
0x4A
0x4B
74
75
LATIN CAPITAL LETTER J
LATIN CAPITAL LETTER K
J
K
74
75
0x4C
0x4D
0x4E
76
77
78
LATIN CAPITAL LETTER L
LATIN CAPITAL LETTER M
LATIN CAPITAL LETTER N
L
M
N
76
77
78
0x4F
0x50
79
80
LATIN CAPITAL LETTER O
LATIN CAPITAL LETTER P
O
P
79
80
0x51
0x52
0x53
81
82
83
LATIN CAPITAL LETTER Q
LATIN CAPITAL LETTER R
LATIN CAPITAL LETTER S
Q
R
S
81
82
83
0x54
0x55
84
85
LATIN CAPITAL LETTER T
LATIN CAPITAL LETTER U
T
U
84
85
0x56
0x57
0x58
86
87
88
LATIN CAPITAL LETTER V
LATIN CAPITAL LETTER W
LATIN CAPITAL LETTER X
V
W
X
86
87
88
0x59
0x5A
89
90
LATIN CAPITAL LETTER Y
LATIN CAPITAL LETTER Z
Y
Z
89
90
0x5B
91
Ä
196
0x5C
92
Ö
214
LATIN CAPITAL LETTER A WITH
DIAERESIS
LATIN CAPITAL LETTER O WITH
DIAERESIS
0x5D
93
LATIN CAPITAL LETTER N WITH TILDE
LATIN CAPITAL LETTER U WITH
DIAERESIS
Ñ
209
0x5E
94
Ü
220
0x5F
0x60
95
96
SECTION SIGN
INVERTED QUESTION MARK
§
¿
167
191
0x61
0x62
0x63
97
98
99
LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C
a
b
c
97
98
99
0x64
0x65
100
101
LATIN SMALL LETTER D
LATIN SMALL LETTER E
d
e
100
101
0x66
0x67
0x68
102
103
104
LATIN SMALL LETTER F
LATIN SMALL LETTER G
LATIN SMALL LETTER H
f
g
h
102
103
104
0x69
0x6A
105
106
LATIN SMALL LETTER I
LATIN SMALL LETTER J
i
j
105
106
0x6B
0x6C
0x6D
107
108
109
LATIN SMALL LETTER K
LATIN SMALL LETTER L
LATIN SMALL LETTER M
k
l
m
107
108
109
0x6E
0x6F
110
111
LATIN SMALL LETTER N
LATIN SMALL LETTER O
n
o
110
111
0x70
0x71
0x72
112
113
114
LATIN SMALL LETTER P
LATIN SMALL LETTER Q
LATIN SMALL LETTER R
p
q
r
112
113
114
0x73
0x74
115
116
LATIN SMALL LETTER S
LATIN SMALL LETTER T
s
t
115
116
0x75
0x76
0x77
117
118
119
LATIN SMALL LETTER U
LATIN SMALL LETTER V
LATIN SMALL LETTER W
u
v
w
117
118
119
0x78
0x79
120
121
LATIN SMALL LETTER X
LATIN SMALL LETTER Y
x
y
120
121
0x7A
122
z
122
0x7B
123
LATIN SMALL LETTER Z
LATIN SMALL LETTER A WITH
DIAERESIS
ä
228
0x7C
124
ö
246
0x7D
125
ñ
241
0x7E
126
LATIN SMALL LETTER N WITH TILDE
LATIN SMALL LETTER U WITH
DIAERESIS
ü
252
0x7F
127
LATIN SMALL LETTER A WITH GRAVE
à
224
LATIN SMALL LETTER O WITH
DIAERESIS
Annexe 3 : TRIUM MONDO
Model
Height (mm)
Width (mm)
Depth (mm)
Weight
Network
gprs
hscsd
WAP
Talk time (hours)
Standby (hours)
Display
SMS
smsext
Picture SMS
smsemotions
smschat
t9
Icons
Ringtones
Vibrating Alarm
voicedial
voicectrl
voicerec
handsfree
infrared
Fax
organizer
calendar
email
html
radio
mp3
games
Trium Mondo
139.5
84
19
200 g
EGSM 900/1800
Yes
No
Yes
upto 3
upto 100
N/A
Yes
No
No
No
No
No
No
Yes
No
No
No
Yes
Yes
No
Yes
Yes
Yes
Yes
No
No
Yes
Yes
Annexe 4 : Gestion du port série
pour Pocket PC et Windows CE
Les ports séries sont l'un des modes de communication qui est souvent utilisé en
industrie. Lors de projet, on doit implémenter une couche de communication pour les ports
séries et régulièrement le document associé fournit par le constructeur de carte électronique
est un exemple en C pour attaquer directement le HardWare de votre matériel. Or si nous
disposons d'un OS tel que Windows CE, alors on va rapidement se rendre compte que ce type
d'accès direct est interdit. Nous sommes obligés de passer par un driver.
Ce document explique l'utilisation des fonctions API qui utilisent les fonctions des
drivers de base qui seront utiles pour programmer une communication via les ports série que
se soit pour Pocket PC ou Windows CE en général.
1 Comment utiliser un port série via les API ?
Pour pouvoir effectuer une communication via un port série, il faut en premier lieu
pouvoir l'atteindre par l'intermédiaire de l'OS. Pour effectuer cette manœuvre, on dispose
d'API permettant d'obtenir un chemin entre votre application et le port série en passant
successivement les couches de l'OS et des drivers associés à la gestion des ports série.
La fonction CreateFile va renvoyer une instance sur le chemin d'accès qui permettra
d'utiliser le port série. Il nous suffit seulement de lui passer en paramètre le nom du port que
l’on souhaite utiliser. Cette fonction va par la suite récupérer dans la base de registre les
informations correspondant au port de communication désigné tel que son adresse de base,
etc.
Une fois que nous possédons ce chemin d'accès, nous devez passer à l'étape suivant qui
est la configuration du port série. Pour ce faire, il faut configurer le registre hardware du port
via les fonctions GetCommState et SetCommState.
Ces fonctions vont récupérer dans une structure les informations du registre pour ensuite
les remettre modifiées selo n nos désirs.
Une fois ces étapes finalisées, vous pouvez commencer à dialoguer. Pour envoyer un
caractère sur le port série, on utilise la fonction WriteFile. Pour Recevoir un caractère sur le
port série, la fonction ReadFile.
Pour mettre fin à la communication, il suffit de libérer le port série en libérant l'instance
créée précédemment. Pour cette manœuvre il faut utiliser la fonction CloseHandle.
Explication détaillée de l'utilisation de ces fonctions ci-après.
2 Comment avoir accès au port série ?
Pour avoir accès au port série, il faut créer une instance de type HANDLE qui permettra
via les drivers d'activer l'utilisation d'un port.
Pour ce faire, nous disposons de cette fonction :
HANDLE CreateFile(
LPCTSTR lpFileName,
// pointer sur le nom du port à utiliser
DWORD dwDesiredAccess,
// mode d'accès (read-write)
DWORD dwShareMode,
// share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
DWORD dwCreationDisposition,
// Condition pour créer l'instance
DWORD dwFlagsAndAttributes,
// file attributes
HANDLE hTemplateFile
// handle to file with attributes to copy
);
Exemple commenté:
// Déclaration de notre instance pour accueillir l'accès au port série
HANDLE hPort;
//Nom du port série auquel on veut accéder
LPSTR lpszPortName = _T("COM1:");
//Les deux points ( : ) sont important ils indiquent à la fonction qu'il s'agit du chemin d'une
// ressource de communication. Ce chemin est connu de Windows grâce à la base de registre
// de l'OS. Il n'est donc pas nécessaire de connaître l'adresse de base du port série en question
//Ouverture du port série.
hPort = CreateFile (
lpszPortName,
//Pointer to the name of the port
GENERIC_READ | GENERIC_WRITE, //accès en lecture ou en écriture
0,
//Share mode
NULL,
//Pointer to the security attribute
OPEN_EXISTING,
//Cela indique que l'instance sera créée
//à condition que le port de communication
//demandé existe et donc est connu de l'OS
0,
//Port attributes
NULL);
//Handle to port with attribute to copy
//Vérification sur la création de l'instance
if ( hPort == INVALID_HANDLE_VALUE )
{
//code d'erreur
}
3 Comment configurer le port série ?
Pour qu'une communication entre deux appareils puisse exister, il faut qu'ils parlent le
même langage. Pour ce faire, la configuration des ports série doit être identique des deux
cotés.
Le procédé de configuration est simple et se passe en trois temps.
- Récupérer la structure de configuration du port série
- Mettre à jour cette structure selon nos critères
- Renvoyer la structure vers le port série
Au bout de cette étape les registres de nos ports série sont prêts, nous pouvons
communiquer.
La structure du port série :
typedef struct _DCB {
DWORD DCBlength;
DWORD BaudRate;
DWORD fBinary: 1;
DWORD fParity: 1;
DWORD fOutxCtsFlow:1;
DWORD fOutxDsrFlow:1;
DWORD fDtrControl:2;
DWORD fDsrSensitivity:1;
DWORD fTXContinueOnXoff:1;
DWORD fOutX: 1;
DWORD fInX: 1;
DWORD fErrorChar: 1;
DWORD fNull: 1;
DWORD fRtsControl:2;
DWORD fAbortOnError:1;
DWORD fDummy2:17;
WORD wReserved;
WORD XonLim;
WORD XoffLim;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
char XonChar;
char XoffChar;
char ErrorChar;
char EofChar;
char EvtChar;
WORD wReserved1;
} DCB;
//dcb
//sizeof(DCB)
//current baud rate
//binary mode, no EOF check
//enable parity checking
//CTS output flow control
//DSR output flow control
//DTR flow control type
// DSR sensitivity
// XOFF continues Tx
//XON/XOFF out flow control
//XON/XOFF in flow control
//enable error replacement
//enable null stripping
//RTS flow control
//abort reads/writes on error
//reserved
//not currently used
//transmit XON threshold
//transmit XOFF threshold
//number of bits/byte, 4-8
//0-4=no,odd,even,mark,space
//0,1,2 = 1, 1.5, 2
//Tx and Rx XON character
//Tx and Rx XOFF character
//error replacement character
//end of input cha racter
//received event character
//reserved; do not use
La fonction de récupération :
BOOL GetCommState(
HANDLE hFile,
LPDCB lpDCB
);
//instance d'accès de votre port série
//Pointeur sur votre structure de configuration
La fonction de renvoie :
BOOL SetCommState(
HANDLE hFile,
LPDCB lpDCB
);
// instance d'accès de votre port série
// Pointeur sur votre structure de configuration
Exemple commenté :
Nous ne sommes pas obligé de mettre à jour entièrement la structure, car elle
représente une copie du registre du port série et donc les champs non modifiés resterons à
l’ancienne valeur ou à la valeur par défaut.
DCB PortDCB;
//Récupération des informations enregistées du port série dans votre structure.
GetCommState (hPort,
// instance d'accès de votre port série
&PortDCB);
// Structure de configuration
// mise à jour de la structure
PortDCB.DCBlength = sizeof (DCB);
PortDCB.BaudRate = 9600;
PortDCB.fBinary = TRUE;
PortDCB.fParity = TRUE;
PortDCB.fOutxCtsFlow = FALSE;
PortDCB.fOutxDsrFlow = FALSE;
PortDCB.fDtrControl = DTR_CONTROL_ENABLE;
PortDCB.fDsrSensitivity = FALSE;
PortDCB.fTXContinueOnXoff = TRUE;
PortDCB.fOutX = FALSE;
PortDCB.fInX = FALSE;
PortDCB.fErrorChar = FALSE;
PortDCB.fNull = FALSE;
PortDCB.fRtsControl = RTS_CONTROL_ENABLE;
PortDCB.fAbortOnError = FALSE;
PortDCB.ByteSize = 8;
PortDCB.Parity = NOPARITY;
PortDCB.StopBits = ONESTOPBIT;
//Mis à jour des nouvelles informations dans le registre du port série
if (!SetCommState (hPort, &PortDCB))
{
// code d'erreur
}
4 Comment écrire sur le port série ?
Pour ce faire, utiliser cette fonction :
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
//Instance de notre accès au port série
//Pointeur sur la donnée à écrire
//Nombre de bytes à écrire
//pointeur sur le nombre de bytes écrits
//Doit être NULL pour windows CE
Exemple commenté :
DWORD dwNumBytesWritten;
BYTE Byte = 'a';
if (!WriteFile (hPort,
&Byte,
1,
&dwNumBytesWritten,
NULL))
{
//code d'erreur
}
// Instance d'accès de notre port série
//Pointeur sur la donnée à envoyer
//Nombre de byte à envoye r
//Pointer sur la variable contenant le nombre
//bytes écrits dans le buffer
//Doit être NULL pour Windows CE
5 Comment lire sur le port série ?
Le port série peut recevoir différents types d'événements comme l'arrivée d'une donnée,
buffer d'envoie vide ou différents signaux (CTS, DSR) ce qui permet une large manipulation
de ceux-ci
Ici seul l'arrivée d'une donnée nous intéresse.
Exemple commenté :
BYTE Byte;
DWORD dwCommStatus,
DWORD dwBytesTransferred;
// variable de stockage pour les évènements
//Cette fonction définit les évènements pour lesquels ont va réagir par rapport à notre instance
SetCommMask (hPort,
EV_RXCHAR );
//ici EV_RXCHAR indique que l'on va détecter la
// réception de données (cette entrée est de type
// DWORD)
//Cette fonction est bloquante, elle va attendre des événements définis par le mask et
//Elle stockera le type d'événement qui l'aura réveillée dans une variable.
WaitCommEvent (hPort,
//instance d'accès du port série
&dwCommStatus,
//Pointeur sur la variable de stockage pour les
//évènements
//Cette entrée est de type LPDWORD
0);
//pointeur sur la structure d'overlapped.
//Ici il n'y en a pas.
//cette entrée est de type LPOVERLAPPED
//Cette fonction permet la lecture du buffer d'entrée du port série
ReadFile (hPort,
//Instance sur l'accès du port série
&Byte,
//Conteneur pour récupérer le byte lu
1,
//Nombre de byte à lire
&dwBytesTransferred,
//Pointer sur le nombre de byte lu, sert à
//la gestion propre de la fonction read.
0);
//Doit être NULL pour Windows CE
// Permet l'affichage de votre conteneur
Printf("%c",Byte);
6 Comment fermer l'accès au port série ?
Pour ce faire, utilisez cette fonction :
BOOL CloseHandle(
HANDLE hObject
);
//Instance d'accès du port série

Documents pareils