Camillos Renaud Hertz Florent Lunven Thomas Plaisance Remy Master SDRP 2006-2007 PROJET RESEAU AVANCE Contrôle à distance de XMMS via bluetooth 1. Introduction Le projet consiste en la réalisation d'une commande à distance pour XMMS à l'aide d'un Sony-Ericsson p910i via bluetooth. XMMS est un lecteur audio open-source disponible sur la grande majorité des distributions linux. 2. Réalisation Le premier choix que nous avons dû faire est la manière de faire transiter les informations de XMMS vers notre application "serveur" côté PC. XMMs est doté d'un système de plugin qui permet d'accéder aux différentes fonctions du lecteur mais étant donné le temps imparti pour le projet et celui qu'il nous faudrait pour connaître les interfaces nous avons opté pour une autre solution, utiliser une application shell tierce permettant de contrôler les fonctions de base d'XMMS. Nous avons choisi xmmsctrl (http://user.it.uu.se/~adavid/utils/) une application open source qui en lui passant les commandes en arguments (comme "vol" pour le volume ou "playlist" pour obtenir la liste de lecture complète) imprime le résultat sur la sortie standard. Cela nous a permis de réaliser le projet entièrement en Java (5.0 côté serveur et J2ME côté téléphone). 3. Le Serveur sur le PC Dans ce projet, nous avons implémenté deux classes: -Server.java -XmmsShellHelper.java. 1.Server.java Server.java a été créée afin d'établir la connexion via bluetooth coté ordinateur. Pour cela, on utilise rfcomm car il est simple d'utilisation et qu'il envoi des messages non bornés. Cette classe permet à un client (téléphone) de se connecter et de se déconnecter autant de fois qu'il le souhaite. Elle utilise l'objet provenant de la classe XmmsShellHelper.java. C’est dans cette partie que le serveur va répondre aux sollicitations du téléphone en envoyant à celui-ci les données qu’ils demandent. 2.XmmsShellHelper.java XmmsShellHelper.java permet de gérer le logiciel Xmms. Cette classe utilise le logiciel Xmmsctrl qui permet de diriger Xmms à partir d'un shell. Comme par exemple « Xmmsctrl play » qui va lancer le « play » sur xmms. Par ce même procédé, nous avons implémenté les fonctions de contrôle du volume ainsi que « play, stop, pause ,next, prev». 4. Le Client sur le téléphone En ce qui concerne la partie sur le téléphone , nous n'avons qu'une seule et unique classe qui se charge de tout , elle va donc devoir gérer la connexion avec le serveur , les communications , la création de l'interface graphique ainsi que tout le cote événementiel (quand on clique sur un bouton par exemple). Pour gérer tout cela en une seule classe nous avons procéder par étape: Tout d'abord , nous créons l'interface graphique et tous les éléments dont on aura besoin de (StringItem , TextBox ....) , pour certains nous leur ajoutons un listener qui permettra , de définir les comportements lors d'un évènements. Ensuite grâce a la fonction connect(String url) qui utilise un StreamConnection , on crée la connexion avec le serveur proposant le service xmms-bluetooth ( a l'heure actuelle , nous codons l'adresse a utiliser , via le protocole btspp , en dur , alors qu'on pourrait faire cela dynamiquement). Une fois la connexion établie , il faut pouvoir communiquer de façon bi-directionnelle avec le serveur , nous avons donc mis en place deux flux de stream grâce a un Input et un Output stream , on pourra donc recevoir des informations et envoyer des directives grâce a des tableaux de bytes. C'est justement les actions causées par les conséquences d'un clique , l'envoi de données ou/et la réception ; par exemple en cliquant sur vol+ on augmentera la valeur du volume puis on enverra la directive pour ajuster le volume sur xmms, avec la methode next on dit qu'on veut avancer dans la playlist puis on reçoit le titre du nouveau morceau Ces évènements sont gérés grâce a la méthode commandAction ou il suffit de rajouter un cas si on veut rajouter un événement (a condition d'avoir aussi rajouter le listener correspondant au bouton) De plus , une fois la connexion établie , il y a une prise d'information pour connaître le titre courant et le volume courant au moment de la connexion Une fois que l'on a finit de manipuler xmms il suffit de quitter la middlet et la méthode disconnect() sera appellée et fermera la connexion . 5. Utilisation du logiciel Pour utiliser le logiciel, il faut installer sur le téléphone, les fichiers ProjetBT.jar et ProjetBT.jad disponible dans l’archive. Ces fichiers sont obtenus à partir du fichier source Client.java et compilés avec l’aide du J2ME Wireless Toolkit. Dans ce fichier Client.java se trouve l’adresse du serveur codé en dur ainsi que le channel, il faut donc modifier ce fichier puis le recompiler pour pouvoir l’utiliser. Une fois cela, fait, il convient de lancer le serveur sur le PC, après avoir compilé les fichiers Server.java et XmmsShellHelper.java (ne pas oublier de bien installer la bibliothèque Rfcomm), il faut lancer le serveur avec la commande Server suivi de l’addresse propre du serveur et du channel de communication. Pour le bon fonctionnement du programme, Xmms doit être lancé et une playlist doit être déjà insérée. Après le lancement du serveur sur le PC, nous pouvons lancer le programme ProjetBT sur le téléphone et utiliser le stylet du téléphone pour commander l’interface graphique et donc Xmms. 6. Conclusion et extensions possibles Conformément à nos attentes en début de projet, nos objectifs principaux ont été atteint. Nous avons établi une connexion bidirectionnelle entre le client sur le téléphone et le serveur sur le PC. Cette connexion permet au téléphone d’envoyer des données au serveur, permettant ainsi de gérer l’interface graphique du téléphone, mais aussi au serveur d’envoyer des données au téléphone pour avoir une synchronisation possible entre les 2 éléments. Ainsi l’interface graphique de notre téléphone permet d’effectuer les commandes de bases d’un lecteur Audio comme Xmms, tel que lecture, pause, stop, changement de chanson, changement du volume. Il reste cependant bien entendu des évolutions et améliorations possibles : - dans un premier temps, la mise en place d’un service SDP pour pouvoir gérer dynamiquement les connexions entre téléphone et PC. - mais également favoriser une meilleur gestion de la playlist. Actuellement, sur le téléphone ne s’affiche que la musique en cours, une évolution serait de permettre sur le téléphone un affichage complet de la playlist de Xmms, pour permettre de choisir directement n’importe quel fichier a lire depuis le téléphone. - enfin nous pourrions obtenir une gestion événementielle au niveau logiciel, pour permettre qu’une modification sur Xmms directement avec le PC se répercute sur le téléphone.