Mise en œuvre de l'interface GSM sur un système linux embarqué



Documents pareils
Commandes Linux. Gestion des fichiers et des répertoires. Gestion des droits. Gestion des imprimantes. Formation Use-IT

Les différentes méthodes pour se connecter

Créer et partager des fichiers

Tutorial Terminal Server sous

Préparation à l installation d Active Directory

1 Démarrage de Marionnet

Application Note. EaseLoc Mise à jour de l application Over The Air (DOTA)

Advisor Master Advanced GSM SMS GPRS

Nokia Internet Modem Guide de l utilisateur

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

Le routeur de la Freebox explications et configuration

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

A L ERT. Pour démarrer rapidement avec

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Utilisation du client de messagerie Thunderbird

FreeNAS Shere. Par THOREZ Nicolas

TP 1 Prise en main de l environnement Unix

HighPush. document /06/2009 Révision pour version /11/2008 Revision pour la /10/2008 Documentation initiale.

Initiation à l informatique. Module 7 : Le courrier électronique ( , mail)

Thunderbird est facilement téléchargeable depuis le site officiel

Comment configurer Kubuntu

Gestion des sauvegardes

L3 informatique TP n o 2 : Les applications réseau

Windows Internet Name Service (WINS)

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

Procédure pas à pas de découverte de l offre. Service Cloud Cloudwatt

L informatique en BCPST

Installation et paramétrage de Fedora dans VirtualBox.

LOGICIEL KIPICAM : Manuel d installation et d utilisation

Gestionnaire de connexions Guide de l utilisateur

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Guide d utilisation de «Partages Privés»

Installation et utilisation du client FirstClass 11

Sélection du contrôleur

USTL - Licence ST-A 1ère année Initiation à la programmation TP 1

Le serveur web Windows Home Server 2011

Documentation Honolulu 14 (1)

- Visioconférence - Utiliser NetMeeting au quotidien. Richard BONMARIN DSO/DSI/EMC-EBZ

TP1 - Prise en main de l environnement Unix.

Un peu de vocabulaire

TAGREROUT Seyf Allah TMRIM

SSH. Romain Vimont. 7 juin Ubuntu-Party

Création, analyse de questionnaires et d'entretiens pour Windows 2008, 7, 8 et MacOs 10

Installation de Premium-RH

Cours Linux. Cours en ligne Administrateur Systèmes Linux. Académie Libre

Transférer des fichiers à l aide de WinSCP et 2 contextes d utilisation dans des sites SPIP avec FCK editor

Saisie sur un ordinateur OS/390 Ici sur jedi.informatik.uni-leipzig.de ou

Le service FTP. M.BOUABID, Page 1 sur 5

Service FTP. Stéphane Gill. Introduction 2

Mes documents Sauvegardés

Manuel d utilisation du web mail Zimbra 7.1

Le langage C. Séance n 4

Certificats Electroniques sur Clé USB

GUIDE D UTILISATION DES SERVICES PACKAGES

Manuel d Administration

Guide de présentation du courrier électronique. Microsoft Outlook Préparé par : Patrick Kenny

WebSpy Analyzer Giga 2.1 Guide de démarrage

TP1 : Initiation à l algorithmique (1 séance)

CRM PERFORMANCE CONTACT

ndv access point : Utilisation

Cours LG : Administration de réseaux et sécurité informatique. Dans les Paramètres Système onglet Processeur, le bouton "Activer PAE/NX"

Contrôleur de communications réseau. Guide de configuration rapide DN

et dépannage de PC Configuration Sophie Lange Guide de formation avec exercices pratiques Préparation à la certification A+

VMWare Infrastructure 3

Quelques éléments de compilation en C et makefiles

ESPACE COLLABORATIF SHAREPOINT

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Utilisez Toucan portable pour vos sauvegardes

Live box et Nas Synology

Premiers pas avec NetSupport SCHOOL

Cours CCNA 1. Exercices

Itium XP. Guide Utilisateur

Connexion d'un Ordi35 à une ClubInternet Box en WiFi

L accès à distance du serveur

Tuto 2 : Configuration Virtual box, Configuration et installation du serveur XiBO

Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

FlashWizard v4.5b PRO

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :

Connexion à SQL server

GenIP 30i : Passerelle intelligente dédiée aux applications industrielles les plus critiques

MO-Call pour les Ordinateurs. Guide de l utilisateur

Configurer une sauvegarde FTP simple et efficace

GSM/GPRS/GPS Traceur Véhicule G-1000 PRO Manuel D utilisation

Préconisations Techniques & Installation de Gestimum ERP

Cours Langage C/C++ Programmation modulaire

FileMaker Server 14. Aide FileMaker Server

BTS SIO option SISR Lycée Godefroy de Bouillon Clermont-Ferrand

AOLbox. Partage de disque dur Guide d utilisation. Partage de disque dur Guide d utilisation 1

But de cette présentation

INSTALLATION DE WINDOWS 2000 SERVER POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture IBM BladeCenter

Maintenance et gestion approfondie des Systèmes d exploitation Master 2 SILI. Année universitaire David Genest

Migration NT4 vers Windows 2003 Server

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

NOTICE D INSTALLATION ET D UTILISATION DE LIVE BACKUP

Serveurs de noms Protocoles HTTP et FTP

Transcription:

Mise en œuvre de l'interface GSM sur un système linux embarqué Résumé : Ce projet de TX consiste en le développement d une application d envoi de SMS à des étudiants, sur la carte FOX, système Linux embarqué. Je vais donc détailler le développement de cette application ainsi que les problèmes que j ai pu rencontrer. Abstract : This project consists in the development of an application which can send SMS to students through a Linux embedded system: the FOX Board. I will discuss about the development phase of the application and problems I have encountered. Mots clés Carte Fox Système embarqué GSM SMS Key Words Fox Board Embedded system GSM SMS Document rédigé par : Yoann SCULO 1

Sommaire Introduction... 3 1. Le matériel... 4 a. Carte FOX... 4 b. Modem Telit GM862... 4 2. Environnement de développement... 5 3. Développement du programme... 6 a. Utilisation des commandes AT... 6 b. Développement en C... 8 c. Utilisation du programme... 9 4. Développement de l application WEB... 10 5. Mise en œuvre du programme... 13 6. Discussion autour du travail réalisé... 16 a. Prise en main du système... 16 b. Utilisation du port série... 16 c. Utilisation de la commande CMGS... 16 7. Améliorations possibles... 17 a. Envoi de SMS... 17 b. Gestion du modem... 17 c. Serveur SMS... 17 8. Conclusion... 18 Bibliographie... 19 2

Introduction Ce projet a consisté en le développement d une application d envoi de SMS sur le système Linux embarqué de la société Acmesystems, la carte FOX. L idée était de pouvoir envoyer des SMS aux étudiants de manière simplifiée et automatisée grâce à une application web présente sur la carte. Ce projet a été réalisé en C et en Shell sous Linux. Je commencerai tout d abord par présenter le matériel que j ai utilisé, puis parlerai de l utilisation de l environnement de développement. J aborderai ensuite le développement du programme en C et l interface web en Shell Unix, en m attardant sur l utilisation des commandes AT et sur mes choix de développement. J en profiterai également pour expliquer l architecture de mon application, comment la mettre en place et l utiliser. Je terminerai par une discussion autour du travail que j ai réalisé, une critique sur mon travail et notamment les difficultés que j ai pu rencontrer. Et enfin, je proposerai plusieurs voies d amélioration pour l application. 3

1. Le matériel a. Carte FOX La carte FOX est un système embarqué à bas coût utilisant le système d exploitation Linux. Elle est dotée d un processeur AXIS à 100MHz et de 32 MB de RAM, de connectiques USB, Ethernet, d un port série console ainsi que 40 pins pouvant être reliées à plusieurs BUS de données. Elle permet de développer en bon nombre de langages : C, C++, PHP, PYTHON, Shell, et permet des connections HTTP, FTP, SSH et TELNET. De petite taille et faible consommation électrique (1 W) est idéale pour mettre en place rapidement des projets de type embarqué. b. Modem Telit GM862 Le modem GSM utilisé dans le cadre de ce projet est un modem de la marque Telit. Il est relié à la carte FOX par l intermédiaire d une carte d extension. La carte FOX peut communiquer avec le modem par l intermédiaire du port série /dev/ttys2. Pour ce projet j ai utilisé une carte SIM Orange classique sans code pin. Le protocole de commandes AT est utilisé via le port série pour soumettre différentes commandes au modem. On peut notamment dans notre cas manipuler et envoyer des SMS par l intermédiaire de celles-ci. 4

2. Environnement de développement La compilation d un programme en C sur la carte fox nécessite un compilateur croisé permettant de compiler le code C pour les processeurs AXIS. La compilation directe sur la carte n étant pas possible, j ai par conséquent utilisé le SDK fourni pour la carte fox pour compiler le programme. Avant toute chose il faut se rendre dans le dossier du SDK (~/devboard-r2_01 pour ma part) et y taper la commande suivante afin d initialiser l environnement de développement.. init_env Ensuite, il faut choisir le compilateur AXIS make cris-axis-linux-gnu On doit alors créer un Makefile pour notre programme. Voici celui utilisé dans le projet : AXIS_USABLE_LIBS=UCLIBC GLIBC include $(AXIS_TOP_DIR)/tools/build/Rules.axis PROGS = sms INSTDIR= $(prefix)/mnt/flash INSTMODE= 0755 INSTOWNER= root INSTGROUP= root OBJS = main.o atcommand.o modem.o all: $(PROGS) $(PROGS): $(OBJS) $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@ scp sms root@fox01:/mnt/flash/tx clean: rm -f *.o rm -f sms Il n y a alors plus qu à faire un make pour compiler le programme et à l envoyer sur la carte en FTP ou SCP. Ayant dû compiler à de très nombreuses reprises mon programme, j ai rajouté l envoi du fichier dans le makefile via la commande scp. Les fichiers utilisateurs sont déposés sur la carte Flash dans le répertoire /mnt/flash. 5

La connexion à la carte fox se fait en telnet (ou ssh) simplement à l aide de la commande suivante (fox01 étant associé à l adresse ip 192.168.0.90 sur mon poste de développement) telnet fox01 3. Développement du programme a. Utilisation des commandes AT L application à réaliser se base entièrement sur l utilisation de commandes AT. Le modem se commande donc directement grâce à celles-ci. Pour le développement du programme, je n ai eu besoin que de quelques unes parmi toutes celles existantes. Ces commandes AT suivent une certaine syntaxe et nécessitent une mise en forme particulière pour leur envoi sur le modem. Ce dernier reconnaît plusieurs caractères de contrôle : <CR> <LF> <CTRL+Z> Caractère de retour chariot : Sa valeur ASCII en décimal est fixée à 13 par défaut. (et peut être changée grâce au paramètre AT S3) Sa valeur hexadécimale quant à elle est 0x0D. Caractère d interligne : Sa valeur ASCII en décimal est fixée à 10 par défaut Combinaison des touches CTRL et Z. Sa valeur hexa est 0x1A Ces caractères sont demandés et utilisés par le modem pour identifier les commandes AT. Chacune d entre-elles utilise ces caractères de contrôle plus ou moins différemment. Voici un aperçu des différentes commandes que j ai utilisées avec leurs caractères de contrôle. ATE0<CR> Cette commande permet de désactiver la commande écho (ATE1 la réactive). Cela demande donc au modem de ne pas répéter systématiquement les commandes qui lui sont envoyées. AT+CMGF=1<CR> Cette commande permet de régler le format de message pour l envoi de SMS. Par défaut, le modem est en mode PDU (AT+CMGF=0). C'est-à-dire que l envoi de message se fait en hexadécimal. AT+CMGF=1 permet de passer en mode texte, ce qui simplifie les manipulations de SMS. 6

AT+CMGS="06XXXXXXXX"<CR> Cette commande permet de commencer la rédaction d un SMS. On précise en argument le numéro de téléphone choisi. En retour on obtient le caractère d invite de commande «>» qui nous invite à rentrer le texte du SMS Texte du SMS<CTRL+Z><CR> Cette fin de commande permet alors de préciser le texte et de valider l envoi du SMS par un CTRL+Z et un retour chariot Le modem répond à ces commandes par des messages de retour. Ces derniers indiquent si celles-ci ont été exécutées avec succès ou non. La plupart de ces réponses sont entourées des caractères <CR><LF> Il y a toutefois des exceptions, notamment pour AT+CMGS qui renvoie +CMGS: <mr> ou +CMS ERROR: <err> Mais dans la plupart des cas les retours sont rapportés de la manière suivante : <CR><LF>OK<CR><LF> <CR><LF>ERROR<CR><LF> <CR><LF>...<CR><LF> Ces commandes AT doivent être transmises au modem par le port série /dev/ttys2.il existe plusieurs façons de communiquer sur le port série : Termnetd (http://foxlx.acmesystems.it/?id=69) Il s agit d un processus permettant de relier un port TCP/IP à un port série de manière transparente. Une fois que le deamon est lancé sur la carte fox, il est possible de se connecter depuis l extérieur grâce à la commande telnet fox01 7000 Le port 7000 redirige directement sur le port série et il est alors possible de rentrer manuellement des commandes AT et de voir leur comportement direct sur le modem. Ce programme est utile pour comprendre le fonctionnement des commandes AT. Script Chat (http://linux.about.com/od/commands/l/blcmdl8_chat.htm) Il est possible d utiliser la commande UNIX chat permettant de dialoguer de manière automatisée avec le modem. 7

/usr/sbin/chat -V -s -f <fichier_script> > /dev/ttys2 < /dev/ttys2 2> <fichier_resultat> La réponse du modem est alors enregistrée dans le fichier de résultat choisi. Programme en C Il est également possible de dialoguer avec le modem via un programme C. Le dialogue se fait alors en écrivant et en lisant sur /dev/ttys2. La prise en main est beaucoup plus complexe que les 2 précédentes méthodes, mais permet une totale maitrise du modem. Après avoir bien compris le fonctionnement du modem j ai donc travaillé sur un programme en C. b. Développement en C Le développement du programme d envoi de SMS a été entièrement réalisé en C à l aide des bibliothèques standards. J ai tout d abord entrepris de développer le programme dans une optique de serveur dialoguant en permanence avec le modem (écoute + écriture). En effet, mon idée était de faire tourner un thread permettant de lire les informations données par le modem et à la fois de pouvoir lui soumettre différentes commandes et récupérer leur réponse. Ce système se basait sur la reconnaissance des commandes AT à partir de leur structure (caractères de contrôle) et non de leur contenu. J analysais la structure des messages envoyés par le modem pour en déduire le type de réponse en renvoyant le contenu du message sans pour autant l identifier. J ai hélas eu beaucoup de mal à essayer de mettre en place ce système. Le dialogue avec le modem en série n était vraiment pas simple, et je me retrouvais avec des commandes qui se parasitaient entres elles. Je n arrivais en effet pas à isoler correctement tous les messages voulus, et me retrouvais avec des SMS envoyés avec des messages complètement inattendus. La difficulté résidant essentiellement dans la différence de syntaxe entre chaque message. Par conséquent, le traitement était devenu très complexe. Vouloir faire un programme compliqué dès le départ m a fait perdre beaucoup de temps. J ai finalement entièrement modifié mon approche en travaillant avec des fonctions simples de dialogue avec le modem. Plutôt que créer un système généraliste complexe prenant en compte tous les types de réponses possibles avec le modem, j ai travaillé sur des fonctions adaptées à chaque commande AT se basant sur leur contenu plutôt que sur leur forme. Cette technique simple permet d envoyer 8

un message AT, d attendre de recevoir la réponse escomptée et de s arrêter. Ce système est peut être plus redondant que le premier en terme de code source, cependant il me permet de déterminer clairement le message attendu et par conséquent de le détecter plus simplement. Le code source se compose de trois fichiers.c et trois fichiers header associés - main.c - atcommand.c - modem.c main.c contient en plus du main les fonctions de paramétrage de la communication série utilisant termios. J ai tenté d externaliser celles-ci, mais sans résultat à cause de la variable globale tty_fd qui m en a empêché. atcommand.c contient mes deux fonctions principales. ATSendAT permet d envoyer la commande AT. Le but est de tester la communication avec le modem. J utilise cette fonction avant tout envoi de SMS afin de vérifier l état du modem. ATSendSMS permet quant à elle d envoyer un sms à un numéro donné. Ces deux fonctions attendent les réponses possibles du modem. Suivant celles-ci les fonctions renvoient 1 ou 0 pour (succès/échec) modem.c contient différentes fonctions de manipulation du modem. Action d allumer ou d éteindre le modem, redémarrage etc. Cependant, faute de temps, je n ai pas eu le temps d implémenter ces fonctions. J ai tenté de manipuler les valeurs des pins du modem en C, mais je n ai hélas pas réussi à trouver les bons entêtes à inclure pour faire fonctionner mon code. Les fonctions ne demandent qu à être codées, le site d acmesystems présente différents exemples utiles, cependant je n ai pas trouvé les header associés aux fonctions utilisées. c. Utilisation du programme./sms send <numero_telephone> <texte> Permet alors d envoyer un message (<texte>) au numéro précisé en argument (<numero_telephone>)./sms init Permet d initialiser la communication avec le port série./sms restart Permet de redémarrer le modem. Cette commande est inactive, mais prévue dans le code. 9

4. Développement de l application WEB Afin de pouvoir manipuler et contrôler simplement l envoi de SMS aux étudiants, une application web a été développée à l aide de scripts CGI en Shell. Le PHP n était pas une option car non présent sur la carte. Les scripts CGI en C auraient quant à eux été trop complexes et longs à mettre au point. J ai par conséquent travaillé en Shell classique. L application réalisée permet à l aide de différentes interfaces d envoyer un SMS à tous les étudiants d une UV ou bien à tous les étudiants de toutes les UV. Le choix individuel des étudiants dans la liste n est pas encore fonctionnel. Seul le bouton «Tous» fonctionne et permet de sélectionner tous les étudiants de l UV. Le Shell ne gérant pas les tableaux, je n ai en fait pas encore trouvé de moyen de transférer correctement le résultat d une liste déroulante. Actuellement une chaîne est renvoyée avec un caractère d espacement, mais je n ai pas encore réussi à découper cette chaîne de manière dynamique quel que soit le nombre de valeurs cochées. Page d accueil d envoi de SMS 10

Envoi de SMS à une UV donnée L application permet également de consulter les résultats à une UV. Résultat aux UV : choix d UV On nous propose alors de choisir l UV dont les résultats nous seront affichés à l écran 11

Résultats aux UV : affichage et envoi des résultats Il est alors possible d envoyer le résultat des étudiants par SMS à chacun d entre eux. J ai également mis en place un système de logs qui permet de retracer toutes les activités de l application au niveau du modem. Affichage des logs de l application 12

J en ai profité pour créer un formulaire de redémarrage du modem. Ce dernier ne redémarre pas encore car, comme indiqué précédemment, je n ai pas codé cette fonction. Cependant le mécanisme est fonctionnel et un clic sur le bouton de redémarrage est enregistré dans les logs. 5. Mise en œuvre du programme Au démarrage, le modem n est pas allumé ni configuré. Il a fallu par conséquent créer un script de démarrage déposé dans /etc/init.d/boottime que voici : #!/bin/sh # démarrage du modem setbits -p b -b 7 -s 1 # Lancement de termnetd /mnt/flash/termnetd # Initialisation série du modem /mnt/flash/tx/sms -init sleep 20 # Initialisation AT du modem /usr/sbin/chat -V -s -f /mnt/flash/tx/scripts/scriptat.chat > /dev/ttys2 < /dev/ttys2 2> /mnt/flash/tx/scripts/scriptat_result.txt # Ecriture des logs echo "`date` : MODEM start" >> /mnt/flash/tx/log/fox.log Je commence par allumer le modem, j initialise la connexion série avec mon programme en C puis attends 20 secondes que le modem soit identifié sur le réseau. Le temps choisi est totalement arbitraire. Cela semble fonctionner correctement avec cette période, mais idéalement il serait intéressant d interroger le modem pour déterminer s il est bien connecté au réseau. Ensuite j exécute un script chat que voici : ABORT BUSY ABORT 'NO CARRIER' ABORT ERROR '' AT OK ATZ OK 'ATE0' OK 'AT+CMGF=1' OK '' 13

Ce dernier me permet de désactiver l écho afin de ne pas recevoir mes commandes en double, et me permet d activer le mode texte pour l envoi de SMS. Par défaut l envoi de SMS se fait en mode PDU (sous forme hexadécimale), ce qui est bien plus compliqué à utiliser. Une fois ce script exécuté, le modem est prêt à être utilisé. Je rajoute un log à la fin pour identifier le démarrage du modem dans les logs. J en profite également pour démarrer le deamon termnetd qui me permet de communiquer à tout moment avec le port série en me connectant sur le port 7000 de la carte fox. Il m est alors possible de tester simplement des commandes AT via la console. telnet fox01 7000 Ce programme est indépendant de mon projet, il m a permis d exécuter très simplement des commandes AT et par conséquent de comprendre le fonctionnement de la communication série et comportement des commandes AT. Par soucis de sécurité, il serait mieux à terme de le retirer. Sinon, n importe qui pourrait communiquer avec le modem à distance. L arborescence de l application est la suivante : /mnt/flash/tx /log fox.log /resultats liste_uv.csv uv01.csv uv02.csv /scripts scriptat.chat scriptat_result.txt /uv liste_uv.csv uv01.csv uv02.csv / sms /mnt/flash/etc/httpd/cgi envoi_sms.sh index.sh logs.sh modem.sh resultats_uv.sh /mnt/flash/etc/httpd/html javascript.js style.css /mnt/flash/etc/init.d/boottime script_demarrage.sh 14

Afin de stocker les différentes informations de l application, j ai opté pour des fichiers.csv dont la structure est la suivante : Les fichiers /mnt/flash/tx/resultats/liste_uv.csv et /mnt/flash/tx/uv/liste_uv.csv contiennent la liste des UV (une uv par ligne). Les fichiers résultats des uv, présents dans /mnt/flash/tx/resultats/ sont de la forme Prénom;Nom;Numéro_de_telephone;Lettre Les fichiers de listing des étudiants présents dans /mnt/flash/tx/uv sont de la forme Prénom ;Nom;Numéro_de_telephone Dans le cadre de cette TX, j ai stocké toutes les données et exécutables sur la carte flash. Cependant, le nombre d écritures sur une carte flash est limité. Par conséquent, il serait judicieux de changer le stockage des informations. Le programme en C, ainsi que les sources de l application web peuvent rester sur la carte flash, par contre toutes les autres données pourraient être stockées en mémoire RAM. Au démarrage de la carte fox, les données seraient déplacées de la carte flash vers la mémoire RAM. Un système de CRON permettrait de sauvegarder de temps en temps sur la carte flash les données en mémoire vive. Cette technique permettrait de limiter le nombre d écritures sur la carte. Cependant en cas de coupure du système il y aurait immanquablement des pertes de données depuis la dernière sauvegarde CRON. 15

6. Discussion autour du travail réalisé a. Prise en main du système Une grande partie de mon travail a consisté à prendre en main le système et comprendre son fonctionnement. Tout d abord, n ayant jusque là jamais manipulé Linux de manière poussée ni de système embarqué, j ai déjà passé du temps à lire la documentation, à faire des tests sur des programmes basiques en Shell et en C. Ensuite, je me suis attelé à l utilisation des commandes AT et l interaction avec le modem. J ai commencé par utiliser termnetd pour comprendre comment le modem réagissait. Il a fallu que je lise l imposante documentation du constructeur du modem pour découvrir notamment comment retirer l écho ou bien comment envoyer des SMS en mode texte par exemple. De plus, j ai découvert entre autres qu une session temnetd ne devait pas être ouverte pour que mon programme fonctionne. En effet, dans ce cas les commandes renvoyées par le modem sont redirigée sur le port 7000 et non sur mon programme. Ce qui avait pour conséquence un plantage systématique du programme. Je n ai hélas fini par découvrir la raison de ce problème qu après de nombreuses heures de recherche. b. Utilisation du port série Je n avais jusque là jamais utilisé de communication série. J ai mis un certain temps à comprendre comment fonctionnait celle-ci et surtout comment lire et envoyer les données qui m intéressaient dans le cas de ce projet. J ai notamment dû rechercher comment fonctionnait termios pour la configuration de la communication. c. Utilisation de la commande CMGS J ai pu réaliser qu il ne fallait vraiment pas se fier aux sites qui ne sont pas ceux du constructeur. Comme indiqué sur une documentation de modem non-officielle qui me semblait sérieuse, j ai essayé d envoyer la commande CMGS en une fois (sans attendre le prompt «>»). J ai passé beaucoup de temps à essayer de faire fonctionner l envoi de SMS de cette façon. J ai finalement découvert que cela ne fonctionnait que lorsque l on envoyait la commande en deux fois. (Suite de 2 appels de write au lieu d un) 16

7. Améliorations possibles a. Envoi de SMS Le choix des destinataires dans une liste et l envoi des SMS ne fonctionne pas encore correctement. Pour l instant, seul le clic sur le bouton «Tous» permet d envoyer un SMS à une UV. L inexistence des tableaux en Shell m a compliqué la tâche pour récupérer les éléments choisis dans la liste déroulante des destinataires. Le formulaire renvoie pour l instant une chaine de numéros séparée par des «;» Cependant je n ai pas encore trouvé le moyen de séparer chaque numéro de manière dynamique. C'est-à-dire sans savoir à l avance le nombre de numéros présents. La finalisation de cette fonctionnalité serait donc une voie d amélioration du programme actuel. Les formulaires de saisie actuels renvoient des caractères spéciaux pour les champs de type text ou textarea lors qu ils sont transmis. Actuellement la ponctuation, les accents ou bien les retours chariots sont encodés différemment et apparaissent par conséquent dans les SMS envoyés. Cela nuit à la compréhension et à la lisibilité. Je n ai pas encore trouvé le moyen de retransformer ces chaines dans l encodage adéquat. Mais une modification de ce point permettrait d avoir un envoi propre de chaque SMS, quel que soit le contenu de celui-ci. b. Gestion du modem Il peut être intéressant de manipuler le modem indépendamment de sa fonction principale d envoi de SMS. Par exemple lire les SMS reçus, ou bien redémarrer le modem peut être utile. J ai commencé dans cette optique à développer des fonctions dans le fichier modem.c Je n ai pas été plus loin que leur déclaration, mais l idée peut être, à mon sens, intéressante afin de bénéficier d outils supplémentaires de contrôle de l application. c. Serveur SMS Je n ai hélas pas eu le temps de travailler sur la seconde partie de la TX qui était le développement d un serveur SMS permettant le dialogue par SMS avec les étudiants. L idée était de pouvoir interagir avec le serveur de manière à récupérer différentes informations. Toutefois, le terrain est bien préparé. J ai développé une fonction qui permet d envoyer un SMS à un destinataire donné. Il «suffirait» de développer une fonction offrant la possibilité de lire les SMS reçus, d analyser leur contenu et d y répondre. 17

8. Conclusion Cette TX m a été bénéfique sur de nombreux points. Tout d abord j ai pu développer en C sur un système embarqué Linux pour la première fois. J y ai découvert toutes les possibilités qu offrait ce genre de système, les contraintes de développement mais aussi le fonctionnement de la crosscompilation. J ai pu découvrir comment utiliser un port série pour écrire ou lire des informations mais également pu comprendre le fonctionnement d un modem GSM et découvrir comment le manipuler grâce aux commandes AT. J ai passé beaucoup de temps sur ce projet à comprendre le fonctionnement de la carte, du port série et des commandes AT. J ai rencontré beaucoup de problèmes qui étaient surtout dus à mon apprentissage progressif et à mes erreurs de compréhension. J ai compris progressivement mes erreurs, et appris grâce à celles-ci. Cela m a fait perdre un certain temps, cependant je pense avoir appris vraiment beaucoup de choses de cette manière. Je regrette de ne pas avoir pu me pencher sur la seconde partie de la TX pour l échange de SMS, mais je pense avoir déjà pu préparer le terrain pour sa réalisation. J ai pu ainsi réaliser à travers ce projet, que ce domaine m intéressait vraiment et que cela confirmait ma volonté de travailler dans les systèmes embarqués par la suite. 18

Bibliographie Carte FOX : http://foxlx.acmesystems.it/?id=4 http://foxlx.acmesystems.it/?id=14 Modem et commandes AT : http://www.telit.com/en/products/gsm-gprs.php?p_id=12&p_ac=show&p=4 http://www.developershome.com/sms/smsintro.asp 19