• Aucun résultat trouvé

Micro Projet Systèmes Embarqués Envoi et Réception de SMS sous PocketPC J.Y. TIGLI & E. MATHIEU

N/A
N/A
Protected

Academic year: 2022

Partager "Micro Projet Systèmes Embarqués Envoi et Réception de SMS sous PocketPC J.Y. TIGLI & E. MATHIEU"

Copied!
40
0
0

Texte intégral

(1)

Nicolas MARTIN Christophe PARIS

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.

(2)

SOMMAIRE

1 INTRODUCTION ...3

2 FONCTIONNALITES DE L’APPLICATION ...4

3 ETUDE DES METHODES DE DEVELOPPEMENT EXIS TANTES ...4

3.1 LE PROTOCOLE SMS ... 4

3.2 LES METHODES POSSIBLES DE PROGRAMMATION... 6

4 MAQUETTAGE, TEST ET VALIDATION :...10

4.1 ECRITURE/LECTURE SUR LE PORT SERIE... 10

4.1.1 Objectif ...10

4.1.2 Plate-forme de Test...10

4.1.3 Tests pratiqués...10

4.1.4 Résultats ...11

4.2 ENCODAGE DUN SMS... 12

4.2.1 Objectif ...12

4.2.2 Plate-forme de Test...12

4.2.3 Tests pratiqués...12

4.2.4 Résultats ...13

4.3 INTERFACE GRAPHIQUE... 14

4.3.1 Objectif ...14

4.3.2 Plate-forme de Test...14

4.3.3 Description de l’interface...14

4.3.4 Evolutions...16

4.4 CONCLUSIONS SUR LES TESTS... 17

5 CONCLUSION...19

6 BIBLIOGRAPHIE...20

6.1 SITE WEB :... 20

6.2 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

(3)

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.

(4)

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éveloppe ment 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éta- informations à 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.

(5)

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.

(6)

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 Description

SmsClearMessageNotification Cancels registration for SMS notifications.

SmsClose Closes an existing SMS Messaging handle.

SmsGetBroadcastMsgRanges 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.

(7)

Ø 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 :

Téléphone cellulaire

Réseau GSM

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.

(8)

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 :

Modem GSM Port Série

Trame SMS Encodeur de

SMS

Numéro du destinataire Message

Réseau GSM

Envoi d’un SMS par modem GSM

Date de validité

Paramètres du port

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.

(9)

En ce qui concerne la réception d’un SMS, l’architecture est la suivante :

Modem GSM Port Série Trame SMS

Réseau GSM

Paramètres du port

Décodeur de SMS

Numéro de l’émetteur

Message

Réception d’un SMS par modem GSM

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.

(10)

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.

(11)

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.

(12)

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 (0x00) COMPRESSION : OFF MESSAGE CLASS : NONE

ALPHABET USED : 7bit default VALIDITY OF MESSAGE : 15,0 hrs

USER DATA PART OF SM

USER DATA LENGTH : 10 septets USER DATA (TEXT) : HelloHello

(13)

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).

(14)

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.

(15)

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.

(16)

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.

(17)

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.

(18)

Ø 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

en semaines

Nombre de personnes

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

(19)

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.

(20)

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).

(21)

Annexe 1 : le protocole SMS

1 Trame SMS-SUBMIT

Voici les éléments de base de la trame SMS-SUBMIT : Représentation Description

2 octets Length of SMSC information 1 octet First octet of the PDU

Integer TP-MR

2-12 octets TP-DA

1 octet TP-PID

Integer TP-DCS

1-7 octets TP-VP

Integer TP-UDL

(dépend du TP-DCS) 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 6 5 4 3 2 1 0

Nom TP-RP TP-UDHI TP-SRR TP-VPF TP-VPF TP-RD TP-MTI 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

Bit n°0

Description Sens

0 0 SMS-DELIVER SC -> MS

0 0 SMS-DELIVER-REPORT MS -> SC

1 0 SMS-STATUS-REPORT SC -> MS

1 0 SMS-COMMAND MS -> SC

0 1 SMS-SUBMIT MS -> SC

0 1 SMS-SUBMIT-REPORT SC -> MS

(22)

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 Description

0 0 Le champ TP-VP est absent

1 0 Le champ TP-VP est présent au format relatif sur 1 octet (représentation avec un entier)

0 1 Réservé

1 1 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.

(23)

1.2.7 Exemple

Si le premier octet a une valeur de 11 en hexadécimal, cela signifie la chose suivante :

Bit n° 7 6 5 4 3 2 1 0

Nom 0 0 0 1 0 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 Description Taille Octets Integer Address Length 1

1 octet Type of Address 1 Length Semi-Octets Address Value x

1.4.1 Address Length

Ce champ indique la longueur de l’adresse en nombre de semi-octets (1octet=2semi- octets), 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° 7 6 5 4 3 2 1 0

Nom Toujours à 1 Type-of-number Numbering Pla n Identification

(24)

Ø Type of number

Ce champ représente le type de l’adresse.Voici les différentes valeurs possibles de ce champ:

Bit n°6 Bit n°5 Bit n°4 Description

0 0 0 Type inconnu

0 0 1 Numéro international.

0 1 0 Numéro national.

0 1 1 Numéro spécifique d’ un réseau.

1 0 0 Subscriber number.

1 0 1 Alphanumérique

1 1 0 Abréviation

1 1 1 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 Bit n°2 Bit n°1 Bit n°0 Description

0 0 0 0 Inconnu

0 0 0 1 ISDN/telephone numbering plan (E.164/E.163).

0 0 1 1 Data numbering plan (X.121).

0 1 0 0 Telex numbering plan

1 0 0 0 National numbering plan.

1 0 0 1 Private numbering plan

1 0 1 0 ERMES numbering plan (ETSI DE/PS 3 01-3)

1 1 1 1 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 6 5 4 3 2 1 0

Valeur 1 0 0 1 0 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.

(25)

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 Valeur de la période

0 to 143 (TP-VP + 1) * 5 min (i.e. des intervalles de 5 min jusqu’à 12 h) 144 to 167 12 hr + ((TP-VP - 143) * 30 min)

168 to 196 (TP-VP - 166) * 1 jour 197 to 255 (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)

(26)

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 Description

2 octets Length of SMSC

information

2-12octets TP-DA

1 octet First octet of the PDU

2-12 octets TP-OA

1 octet TP-PID

Integer TP-DCS

1-7 octets TP-SCTS

Integer TP-UDL

(dépend du TP-DCS) 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

(27)

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 6 5 4 3 2 1 0

Nom TP-RP TP-UDHI TP-SRI unused unused TP-MMS TP-MTI 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

Bit n°0

Description Sens

0 0 SMS-DELIVER SC -> MS

0 0 SMS-DELIVER-REPORT MS -> SC

1 0 SMS-STATUS-REPORT SC -> MS

1 0 SMS-COMMAND MS -> SC

0 1 SMS-SUBMIT MS -> SC

0 1 SMS-SUBMIT-REPORT 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

(28)

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° 7 6 5 4 3 2 1 0

Nom 0 0 0 0 0 1 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 Month Day Hour Minute Second TimeZone

Nbre de Semi-octets 2 2 2 2 2 2 2

De plus, chaque semi-octet est codé par inversion. Voici un exemple :

(29)

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 72 83 01 00 10 F5

04 0B 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 ».

(30)

This is the 7 bit default alphabet as specified by GSM 03.38. The corresponding ISO- 8859-1 decimal codes are shown in the rightmost column. Note that the euro sign (€) is a member of the ISO-8859-15 character set.

Hex Dec Character name Character ISO-8859-1 DEC

0x00 0 COMMERCIAL AT @ 64

0x01 1 POUND SIGN £ 163

0x02 2 DOLLAR SIGN $ 36

0x03 3 YEN SIGN ¥ 165

0x04 4 LATIN SMALL LETTER E WITH GRAVE è 232

0x05 5 LATIN SMALL LETTER E WITH ACUTE é 233

0x06 6 LATIN SMALL LETTER U WITH GRAVE ú 250

0x07 7 LATIN SMALL LETTER I WITH GRAVE ì 236

0x08 8 LATIN SMALL LETTER O WITH GRAVE ò 242

0x09 9 LATIN CAPITAL LETTER C WITH

CEDILLA Ç 199

0x0A 10 LINE FEED 10

0x0B 11 LATIN CAPITAL LETTER O WITH

STROKE Ø 216

0x0C 12 LATIN SMALL LETTER O WITH STROKE ø 248

0x0D 13 CARRIAGE RETURN 13

0x0E 14 LATIN CAPITAL LETTER A WITH RING

ABOVE Å 197

0x0F 15 LATIN SMALL LETTER A WITH RING

ABOVE å 229

0x10 16 GREEK CAPITAL LETTER DELTA ?

0x11 17 LOW LINE _ 95

0x12 18 GREEK CAPITAL LETTER PHI F

0x13 19 GREEK CAPITAL LETTER GAMMA G

0x14 20 GREEK CAPITAL LETTER LAMBDA ?

0x15 21 GREEK CAPITAL LETTER OMEGA O

0x16 22 GREEK CAPITAL LETTER PI ?

0x17 23 GREEK CAPITAL LETTER PSI ?

0x18 24 GREEK CAPITAL LETTER SIGMA S

0x19 25 GREEK CAPITAL LETTER THETA T

0x1A 26 GREEK CAPITAL LETTER XI ?

0x1B 27 ESCAPE TO EXTENSION TABLE

0x1B0A 27 10 FORM FEED 12

(31)

0x1B28 27 40 LEFT CURLY BRACKET { 123

0x1B29 27 41 RIGHT CURLY BRACKET } 125

0x1B2F 27 47 REVERSE SOLIDUS (BACKSLASH) \ 92

0x1B3C 27 60 LEFT SQUARE BRACKET [ 91

0x1B3D 27 61 TILDE ~ 126

0x1B3E 27 62 RIGHT SQUARE BRACKET ] 93

0x1B40 27 64 VERTICAL BAR | 124

0x1B65 27

101 EURO SIGN € 164 (ISO-8859-

15)

0x1C 28 LATIN CAPITAL LETTER AE Æ 198

0x1D 29 LATIN SMALL LETTER AE æ 230

0x1E 30 LATIN SMALL LETTER SHARP S (German) ß 223 0x1F 31 LATIN CAPITAL LETTER E WITH ACUTE Ê 202

0x20 32 SPACE 32

0x21 33 EXCLAMATION MARK ! 33

0x22 34 QUOTATION MARK " 34

0x23 35 NUMBER SIGN # 35

0x24 36 CURRENCY SIGN ¤ 164 (ISO-8859-

1)

0x25 37 PERCENT SIGN % 37

0x26 38 AMPERSAND & 38

0x27 39 APOSTROPHE ' 39

0x28 40 LEFT PARENTHESIS ( 40

0x29 41 RIGHT PARENTHESIS ) 41

0x2A 42 ASTERISK * 42

0x2B 43 PLUS SIGN + 43

0x2C 44 COMMA , 44

0x2D 45 HYPHEN-MINUS - 45

0x2E 46 FULL STOP . 46

0x2F 47 SOLIDUS (SLASH) / 47

0x30 48 DIGIT ZERO 0 48

0x31 49 DIGIT ONE 1 49

0x32 50 DIGIT TWO 2 50

0x33 51 DIGIT THREE 3 51

0x34 52 DIGIT FOUR 4 52

0x35 53 DIGIT FIVE 5 53

0x36 54 DIGIT SIX 6 54

(32)

0x39 57 DIGIT NINE 9 57

0x3A 58 COLON : 58

0x3B 59 SEMICOLON ; 59

0x3C 60 LESS-THAN SIGN < 60

0x3D 61 EQUALS SIGN = 61

0x3E 62 GREATER-THAN SIGN > 62

0x3F 63 QUESTION MARK ? 63

0x40 64 INVERTED EXCLAMATION MARK ¡ 161

0x41 65 LATIN CAPITAL LETTER A A 65

0x42 66 LATIN CAPITAL LETTER B B 66

0x43 67 LATIN CAPITAL LETTER C C 67

0x44 68 LATIN CAPITAL LETTER D D 68

0x45 69 LATIN CAPITAL LETTER E E 69

0x46 70 LATIN CAPITAL LETTER F F 70

0x47 71 LATIN CAPITAL LETTER G G 71

0x48 72 LATIN CAPITAL LETTER H H 72

0x49 73 LATIN CAPITAL LETTER I I 73

0x4A 74 LATIN CAPITAL LETTER J J 74

0x4B 75 LATIN CAPITAL LETTER K K 75

0x4C 76 LATIN CAPITAL LETTER L L 76

0x4D 77 LATIN CAPITAL LETTER M M 77

0x4E 78 LATIN CAPITAL LETTER N N 78

0x4F 79 LATIN CAPITAL LETTER O O 79

0x50 80 LATIN CAPITAL LETTER P P 80

0x51 81 LATIN CAPITAL LETTER Q Q 81

0x52 82 LATIN CAPITAL LETTER R R 82

0x53 83 LATIN CAPITAL LETTER S S 83

0x54 84 LATIN CAPITAL LETTER T T 84

0x55 85 LATIN CAPITAL LETTER U U 85

0x56 86 LATIN CAPITAL LETTER V V 86

0x57 87 LATIN CAPITAL LETTER W W 87

0x58 88 LATIN CAPITAL LETTER X X 88

0x59 89 LATIN CAPITAL LETTER Y Y 89

0x5A 90 LATIN CAPITAL LETTER Z Z 90

0x5B 91 LATIN CAPITAL LETTER A WITH

DIAERESIS Ä 196

0x5C 92 LATIN CAPITAL LETTER O WITH

DIAERESIS Ö 214

(33)

0x5E 94 LATIN CAPITAL LETTER U WITH

DIAERESIS Ü 220

0x5F 95 SECTION SIGN § 167

0x60 96 INVERTED QUESTION MARK ¿ 191

0x61 97 LATIN SMALL LETTER A a 97

0x62 98 LATIN SMALL LETTER B b 98

0x63 99 LATIN SMALL LETTER C c 99

0x64 100 LATIN SMALL LETTER D d 100

0x65 101 LATIN SMALL LETTER E e 101

0x66 102 LATIN SMALL LETTER F f 102

0x67 103 LATIN SMALL LETTER G g 103

0x68 104 LATIN SMALL LETTER H h 104

0x69 105 LATIN SMALL LETTER I i 105

0x6A 106 LATIN SMALL LETTER J j 106

0x6B 107 LATIN SMALL LETTER K k 107

0x6C 108 LATIN SMALL LETTER L l 108

0x6D 109 LATIN SMALL LETTER M m 109

0x6E 110 LATIN SMALL LETTER N n 110

0x6F 111 LATIN SMALL LETTER O o 111

0x70 112 LATIN SMALL LETTER P p 112

0x71 113 LATIN SMALL LETTER Q q 113

0x72 114 LATIN SMALL LETTER R r 114

0x73 115 LATIN SMALL LETTER S s 115

0x74 116 LATIN SMALL LETTER T t 116

0x75 117 LATIN SMALL LETTER U u 117

0x76 118 LATIN SMALL LETTER V v 118

0x77 119 LATIN SMALL LETTER W w 119

0x78 120 LATIN SMALL LETTER X x 120

0x79 121 LATIN SMALL LETTER Y y 121

0x7A 122 LATIN SMALL LETTER Z z 122

0x7B 123 LATIN SMALL LETTER A WITH

DIAERESIS ä 228

0x7C 124 LATIN SMALL LETTER O WITH

DIAERESIS ö 246

0x7D 125 LATIN SMALL LETTER N WITH TILDE ñ 241 0x7E 126 LATIN SMALL LETTER U WITH

DIAERESIS ü 252

(34)

Annexe 3 : TRIUM MONDO

Model Trium Mondo

Height (mm) 139.5 Width (mm) 84 Depth (mm) 19 Weight 200 g

Network EGSM 900/1800

gprs Yes

hscsd No

WAP Yes

Talk time (hours) upto 3 Standby (hours) upto 100

Display N/A

SMS Yes

smsext No

Picture SMS No smsemotions No

smschat No

t9 No

Icons No

Ringtones Yes Vibrating Alarm No voicedial No voicectrl No voicerec Yes handsfree Yes infrared No

Fax Yes

organizer Yes calendar Yes

email Yes

html No

radio No

mp3 Yes

games Yes

(35)

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.

(36)

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 }

(37)

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 { //dcb

DWORD DCBlength; //sizeof(DCB) DWORD BaudRate; //current baud rate

DWORD fBinary: 1; //binary mode, no EOF check DWORD fParity: 1; //enable parity checking DWORD fOutxCtsFlow:1; //CTS output flow control DWORD fOutxDsrFlow:1; //DSR output flow control DWORD fDtrControl:2; //DTR flow control type DWORD fDsrSensitivity:1; // DSR sensitivity DWORD fTXContinueOnXoff:1; // XOFF continues Tx

DWORD fOutX: 1; //XON/XOFF out flow control DWORD fInX: 1; //XON/XOFF in flow control DWORD fErrorChar: 1; //enable error replacement DWORD fNull: 1; //enable null stripping DWORD fRtsControl:2; //RTS flow control

DWORD fAbortOnError:1; //abort reads/writes on error DWORD fDummy2:17; //reserved

WORD wReserved; //not currently used WORD XonLim; //transmit XON threshold WORD XoffLim; //transmit XOFF threshold BYTE ByteSize; //number of bits/byte, 4-8 BYTE Parity; //0-4=no,odd,even,mark,space BYTE StopBits; //0,1,2 = 1, 1.5, 2

char XonChar; //Tx and Rx XON character char XoffChar; //Tx and Rx XOFF character char ErrorChar; //error replacement character char EofChar; //end of input cha racter char EvtChar; //received event character WORD wReserved1; //reserved; do not use } DCB;

(38)

La fonction de récupération : BOOL GetCommState(

HANDLE hFile, //instance d'accès de votre port série

LPDCB lpDCB //Pointeur sur votre structure de configuration );

La fonction de renvoie : BOOL SetCommState(

HANDLE hFile, // instance d'accès de votre port série

LPDCB lpDCB // 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 }

(39)

4 Comment écrire sur le port série ?

Pour ce faire, utiliser cette fonction : BOOL WriteFile(

HANDLE hFile, //Instance de notre accès au port série LPCVOID lpBuffer, //Pointeur sur la donnée à écrire DWORD nNumberOfBytesToWrite, //Nombre de bytes à écrire

LPDWORD lpNumberOfBytesWritten, //pointeur sur le nombre de bytes écrits LPOVERLAPPED lpOverlapped //Doit être NULL pour windows CE );

Exemple commenté :

DWORD dwNumBytesWritten;

BYTE Byte = 'a';

if (!WriteFile (hPort, // Instance d'accès de notre port série &Byte, //Pointeur sur la donnée à envoyer 1, //Nombre de byte à envoye r

&dwNumBytesWritten, //Pointer sur la variable contenant le nombre //bytes écrits dans le buffer

NULL)) //Doit être NULL pour Windows CE {

//code d'erreur }

(40)

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, // variable de stockage pour les évènements DWORD dwBytesTransferred;

//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 );

Références

Documents relatifs

Such questions form part of the broader problems that health care professionals and the community in general have to resolve, namely to balance- on the one hand - self-care,

— The valence fluctuation phenomena, together with the description of the metal insulator transition of SmS are formulated within the alloy analogy picture for correlated d and

l) Dès le début du Trias, affaissement, étirement et :fissuration de la zone Mont-Rose, créant là un très abondant volcanisme basaltique. Dans les zones

For this to happen, Goldkuhl (2011) identified a set of characteristics that the knowledge creator should let guide his/her actions: Curiosity, Openness, Clarity, Honesty, Accuracy,

It took nearly 2 years to reach remission, a term used in the literature to describe 3 consecutive months symptom-free.. The public reserves the term for illnesses

Although the process of design and development of system evaluation quiz via SMS is still in its early stage, it is predicted that this system will be able to attract the attention

“The support is a strong indicator of the continued trust from our partners,” he said, and added that in recognition of the ECA’s role in setting the development agenda in Africa,

Dans un contexte d’enseignement supérieur et de recherche, il peut paraître étonnant que l’on trouve des échanges de messages comme celui figurant dans