Bluetooth, Installation et d'utilisation

Bluetooth est peut être déjà installé sur votre distribution. Si oui, cet article vous en fera prendre conscience, sinon, il vous aidera à l'ajouter.

La pile bluetooth officielle (celle intégrée dans les sources du noyau) sous linux s'appelle bluez. Comme beaucoup "d'extensions" au système d'exploitation, bluez est composé d'une partie rattachée au kernel, sous la forme de modules ou directement intégrée au noyau et d'une partie "cliente", des utilitaires s'exécutant dans l'espace utilisateur.

Pour savoir si votre distribution propose par défaut le support bluetooth, vous pouvez tenter plusieurs choses :

Quoiqu'il en soit, je vais reprendre dans cet article une procédure basique pour installer le support bluetooth sur une distribution linux quelle qu'elle soit. On va donc partir d'un kernel tout beau tout neuf de chez kernel.org, le compiler avec les options "qui vont bien", puis installer les outils clients. Cette présentation étant faite, il est temps à présent de se lancer.

Récupérer les sources du kernel

Rendez-vous sur kernel.org pour télécharger les sources d'un kernel. On y prend le dernier stable, le 2.6.14 à l'heure où j'écris ces lignes. Devenez root et sauvez le paquet dans /usr/src.

zazou@ZazouMobile:~$ su
Password:
ZazouMobile:/home/zazou# cd /usr/src
ZazouMobile:/usr/src# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2

Décompressez votre kernel tout neuf et faites un lien vers le répertoire ainsi obtenu nommé /usr/src/linux.

ZazouMobile:/usr/src# rm linux
ZazouMobile:/usr/src# tar xvjf linux-2.6.14.tar.bz2
ZazouMobile:/usr/src# ln -s linux-2.6.14 linux

Comme pour toute compilation de kernel, vous devez vérifier que nombre de versions d'outils sont à jour. Vous trouverez ces prérequis dans le fichier /usr/src/linux/Documentation/Changes, dans la section "Current Minimal Requirements".

Configurer et compiler le kernel.

Il est à présent temps de s'attaquer à la configuration du kernel ... Selon vos affinités, utilisez l'interface texte (make menuconfig), l'interface qt (make xconfig) ou l'interface gtk (make gconfig).

Je ne vais pas réécrire un article sur la configuration du kernel, ni vous fournir un .config qui fonctionne sur toutes les machines du monde ... En revanche, si vous voulez utiliser bluetooth sur votre machine, vous devez choisir les options suivantes :

Networking support  --->
    <M>   Bluetooth subsystem support  --->
        <M>   L2CAP protocol support
        <M>   SCO links support
        <M>   RFCOMM protocol support
        [*]     RFCOMM TTY support
        <M>   BNEP protocol support
        [*]     Multicast filter support
        [*]     Protocol filter support
        < >   HIDP protocol support
        Bluetooth device drivers  --->
	    <M> HCI USB driver
	    [*]   SCO (voice) support
	    <M> HCI UART driver
	    [*]   UART (H4) protocol support
	    [*]   BCSP protocol support
	    [ ]     Transmit CRC with every BCSP packet (NEW)
	    < > HCI BCM203x USB driver (NEW)
	    < > HCI BPA10x USB driver (NEW)
	    < > HCI BlueFRITZ! USB driver (NEW)
	    < > HCI DTL1 (PC Card) driver (NEW)
	    < > HCI BT3C (PC Card) driver (NEW)
	    < > HCI UART (PC Card) device driver (NEW)
	    <M> HCI VHCI (Virtual HCI device) driver

On aura besoin pour notre série de tests des couches L2CAP et RFCOMM. On ajoute SCO (qui sert à l'audio) et BNEP (encapsulation réseau au dessus de L2CAP) au cas où on voudrait s'en servir plus tard. HIDP permet d'utiliser des périphériques bluetooth autorisant l'interfaçage de l'ordinateur avec des humains (aussi connus sous le nom de clavier, souris, ...). Si ça peut vous être utile (c'est à dire si vous êtes humain et possédez un clavier ou une souris bluetooth), sélectionnez cette option.

Pour les modules correspondant au matériel, choisissez ce qui correspond au vôtre. Dans cet article j'utilise un dongle usb générique. J'ai donc choisi le module usb (Transport défini dans la partie H:2 de la norme, donc bien supporté). Le driver UART sert dans le cas de cartes pcmcia ou de cartes série. Selon le protocole utilisé par ce type de matériel, vous aurez besoin du support h4 (générique) ou bcsp (spécifique aux chipsets CSR). Les autres modules correspondent à du matériel particulier (BT3C pour la carte pcmcia de chez 3Com par exemple). Il peut être bon de choisir de compiler vhci en module. Ce dernier permet d'émuler une interface bluetooth sans matériel bluetooth raccordé au PC et ça peut être utile pendant certaines phases de développement.

Installer le kernel

Tout commence par une simple ligne de commande. Cette dernière a le bon goût de vous laisser le temps d'aller prendre un café ...

ZazouMobile:/usr/src/linux# make && make modules_install

A son terme et si tout s'est bien passé, vous devez encore copier le kernel lui même et configurer votre boot loader (lilo ou grub généralement). Il y a quasimment autant de façons de faire que d'ordinateurs sous linux. Pour vous donner une idée, chez moi, ça consiste à copier le kernel au bon emplacement (cp arch/i386/boot/bzImage /vmlinuz-2.6.14), ajouter une entrée dans /etc/lilo.conf:

image=/vmlinuz-2.6.14
        label = Linux-2.6.14
        read-only
et enfin, faire prendre en compte cette entrée par lilo puis le réinstaller. (/sbin/lilo).

Pour bien faire, vous pouvez ajouter les lignes suivantes dans votre fichier /etc/modules.conf pour permettre aux modules d'être chargés automatiquement en cas de besoin. Théoriquement, seule la première des 6 lignes est nécessaire car les périphériques usb bluetooth utilisent tous les classe, sous classe et protocole E0/01/01 mais au cas où on peut faire une correspondance sur le couple ID vendeur/ID produit comme c'est le cas pour les 5 lignes qui suivent.

alias usb:v*p*dl*dh*dcE0dsc01dp01ic*isc*ip* hci_usb
alias usb:v057Cp3800dl*dh*dc*dsc*dp*ic*isc*ip* hci_usb
alias usb:v04BFp030Adl*dh*dc*dsc*dp*ic*isc*ip* hci_usb
alias usb:v044Ep3001dl*dh*dc*dsc*dp*ic*isc*ip* hci_usb
alias usb:v044Ep3002dl*dh*dc*dsc*dp*ic*isc*ip* hci_usb
alias usb:v0BDBp1002dl*dh*dc*dsc*dp*ic*isc*ip* hci_usb
alias net-pf-31 bluetooth
alias bt-proto-0 l2cap
alias bt-proto-2 sco
alias bt-proto-3 rfcomm
alias bt-proto-4 bnep
alias bt-proto-5 cmtp
alias bt-proto-6 hidp
alias tty-ldisc-15 hci_uart
alias char-major-10-250 hci_vhci

A l'issue de ces quelques commandes et modifications, vous devriez avoir un noyau 2.6 avec le support bluetooth fonctionnel. Pour le vérifier, il faut rebooter.

Après le reboot

Il va nous falloir procéder à l'installation des outils bluetooth. Pour ça, il faut consulter la liste de paquets de votre distribution ou se rendre sur http://www.bluez.org/ et télécharger les dernières versions des paquets suivants:

Les noms peuvent varier d'une distibution à l'autre. Notamment pour les librairies, on trouve souvent les entêtes à part dans un paquet se terminant par -dev ou -devel. Les deux derniers paquets sont optionnels et ne sont nécessaires respectivement que pour charger le firmware dans votre périphérique si celui-ce le requiert (par exemple pour les cartes pcmcia 3Com) et pour émuler un périphérique bluetooth lors de vos tests.

La procédure d'installation de ces paquets ne nécessite pas d'explication particulière, on s'en sort à chaque fois par un ./configure; make; make install, urpmi ou encore apt-get install. Au pire, vous devrez vous assurer du lancement des démons hcid et sdpd au lancement de la machine.

Au terme de cette installation, vous aurez un système bluetooth fonctionnel. Insérez votre périphérique et commençons la découverte.

Utilitaires et fichiers de configuration

Bien, votre kernel a le support bluetooth, il est temps de le tester ...

La configuration de bluetooth passe par l'outil hciconfig. Dans la pratique on utilise des fichiers de configuration pour automatiser la configuration, dans le répertoire /etc/bluetooth/. Toutefois, j'oriente volontairement cette découverte vers une utilisation de bidouilleur/développeur/geek, qui permettra de comprendre bluez. Vous aurez tout le temps ensuite d'utiliser les facilités fournies par votre distribution préférée.

Ci dessous se trouvent les commandes à taper pour initialiser et rendre découvrable et connectable un ordinateur équipé d'un dongle bluetooth sur son port usb.

ZazouMobile:/home/zazou# hciconfig hci0 up piscan
ZazouMobile:/home/zazou# hciconfig hci0 -a
hci0:   Type: USB
        BD Address: 00:02:72:B3:46:D8 ACL MTU: 377:10  SCO MTU: 16:0
        UP RUNNING PSCAN ISCAN
        RX bytes:468 acl:10 sco:0 events:39 errors:0
        TX bytes:539 acl:10 sco:0 commands:22 errors:0
        Features: 0xff 0xff 0x0d 0x38 0x00 0x00 0x00 0x00
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH HOLD SNIFF PARK
        Link mode: SLAVE ACCEPT
        Name: 'ZazouMobile-0'
        Class: 0x3e0100
        Service Classes: Networking, Rendering, Capturing
        Device Class: Computer, Uncategorized
        HCI Ver: 1.1 (0x1) HCI Rev: 0x3 LMP Ver: 1.1 (0x1) LMP Subver: 0x800
        Manufacturer: Broadcom Corporation (15)

Normalement, les modules hci_usb et bluetooth ont dû se charger tout seuls, si ce n'est pas le cas, chargez les avant de taper hciconfig.

On constate que l'on a bien un module USB (ouf !) et on trouve son adresse. On voit que l'interface a été montée (UP), que l'on est découvrables (ISCAN) et connectables (PSCAN). Si vous avez un autre équipement bluetooth, vous pouvez lancer une recherche et vous devriez voir apparaître dans la liste des périphériques, un ordinateur nommé bluez, qui est le nom par défaut de votre ordinateur.

A notre tour d'explorer notre environnement ... On va utiliser l'outil hcitool pour découvrir qui se trouve dans notre "voisinage bluetooth". Ne perdez pas patience, une recherche de périphériques bluetooth prend un peu plus de 10 secondes, et ce sans chercher les noms, si on cherche les noms des périphériques, on doit interroger chaque périphérique trouvé au cours de la recherche, ce qui ajoute au délai.

ZazouMobile:/home/zazou# hcitool inq
Inquiring ...
        00:0E:6D:4E:52:EF       clock offset: 0x2eb5    class: 0x500204
ZazouMobile:/home/zazou# hcitool scan
Scanning ...
        00:0E:6D:4E:52:EF       Z-Gage QD

Dans l'exemple ci-dessus, nous avons un trouvé un périphérique bluetooth nommé Z-Gage QD. La classe nous apprend qu'il s'agit d'un téléphone (voir Assigned Numbers - Bluetooth Baseband sur bluetooth.org). Pour être précis, dans la classe, le 02 veut dire téléphone, le 04 signifie cellulaire dans le cas d'un téléphone, quand au 50, il nous apprend que ce téléphone cellulaire est capable de "Object Transfer" et de "Telephony" ce qui correspond bien à ce qu'on pouvvait déjà faire avec un téléphone avant bluetooth (téléphoner et s'échanger des vCards, images, sonneries, etc ... via la liaison infrarouge).

Utilisons sdptool pour vérifier les services offerts par ce téléphone ... Cet outil étant bavard, on le limite dans sa sortie pour ne garder que les noms des services mis à disposition.

ZazouMobile:/home/zazou# sdptool browse 00:0E:6D:4E:52:EF | grep "Service Name"
Service Name: Fax
Service Name: Dial-up Networking
Service Name: Bluetooth Serial Port
Service Name: OBEX Object Push
Service Name: OBEX File Transfer
Service Name: Handsfree Audio Gateway

Chouette, on a un Fax ! Et un modem, pour se connecter à internet de partout, ça peut être utile. On constate aussi la présence d'un port série virtuel, on verra quoi faire avec pour s'assurer de briller en société ultérieurement. On retrouve également nos deux possibilités habituelles pour utiliser OBEX, l'Object Push qui permet de transférer des objets (un transfert d'objet par connexion), et File Transfer, qui permet, à l'instar du ftp que l'on connaît de traiter plusieurs échanges au sein d'une même connexion. Naturellement, on trouve le classique Handsfree Audio Gateway, qui permet brancher les oreillettes bluetooth.

Et après ?

Les outils que j'ai cité font bien d'autres choses utiles pour des tests et leur sources sont une mine d'or pour le développeur découvrant bluetooth sous linux. hcitool permet notamment de faire des connexions/déconnexions, des recherches de périphériques avec ou sans interrogation du nom, hciconfig permet de configurer le comportement de bluez de façon avancée, sdptool permet de gérer la base de services locale, conjointement à sdpd.

Il existe également des outils d'aide aux tests qui sont utiles en phase de développement, pour tester les diverses couches de la pile bluetooth d'un périphérique distant ou de vérifier le fonctionnement d'une application particulière. Il s'agit de l2test, rctest, scotest qui contiennent des jeux de tests pour vérifier le bon fonctionnement des couches l2cap, rfcomm et sco respectivement.

Enfin, le meilleur ami du développeur bluetooth sous linux est hcidump, qui permet de tracer l'intégralité des trames bluetooth transitant par la machine (Attention à l'utiliser en root, sinon, on ne récupère pas l'intégralité des trames).

Quelques exemples

De nombreuses applications bluetooth nécessitent un "Pairing", une relation de confiance entre les périphériques. On crée cette confiance par le partage d'un mot de passe. Ce mot de passe contient des caractères alphanumériques. Vous devez le saisir dans le fichier /etc/bluetooth/pin. Rappelez vous que ce mot de passe doit être tapé aussi sur les périphériques distants (souvent disposant de méthodes de saisie pas pratiques, privilégiez donc des caractères simples.

D'expérience, je vous conseille de faire le pairing une fois pour toutes depuis les appreils distants. Comme ça c'est fait, ça marche et on n'en parle plus. Lorsque votre dispositif bluetooth distant vous demande le code pour se connecter à votre ordinateur linux, tapez la même chose que ce que vous aviez saisi dans /etc/bluetooth/pin. Si ça ne marche pas du premier coup, réessayez, il faut souvent insister quand on utilise bluetooth.

Partager une connexion internet

Si vous souhaitez permettre l'accès à internet à un pda équipé de bluetooth mais pas du WiFi ni d'ethernet, vous pouvez très simplement utiliser bluez pour le faire.

Il nous faut au préalable configurer bluez pour qu'il tente de rester maître de ses connexions. Il faut pour cela vérifier que la ligne sui vante existe et n'est pas commentée dans /etc/bluetooth/hcid.conf:

lm accept,master

On utilise plus exactement le démon pand (PAN pour Personnal Area Network). Ce dernier peut être utilisé en client ou en point d'accès. Nous voulons être point d'accès nous utilisons donc les options --listen et --role NAP.

ZazouMobile:/usr/src# pand --listen --role NAP

Notez que pand se charge d'ajouter le service "Network Access Point" à la base sdp locale :

ZazouMobile:/usr/src# sdptool browse local | grep "Service Name"
Service Name: SDP Server
Service Name: Public Browse Group Root
Service Name: Network Access Point

On peut ensuite surveiller les connexions grâce à pand --list, pand -l ou pand --show. Ces trois commandes sont équivalentes.

ZazouMobile:/usr/src# pand --show
bnep0 00:02:78:39:CE:C8 NAP

On voit ici que pand est connecté au périphérique bluetooth dont l'adresse est 00:02:78:39:CE:C8. Il a créé une interface bnep0 pour représenter cette connexion.

Effectivement ifconfig -a nous montre une nouvelle interface:

ZazouMobile:/usr/src# ifconfig -a
bnep0     Lien encap:Ethernet  HWaddr 00:02:72:B3:46:D8
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:1547 (1.5 KiB)  TX bytes:0 (0.0 b)

Il nous faut monter cette interface et lui affecter une adresse. Cela se fait comme pour toutes les interfaces ethernet, wifi ou ppp. Par l'affectation d'une adresse IP. On doit faire la même chose sur le client à moins que qu'un serveur DHCP soit configuré quelque part.

Je décide ici d'utiliser l'ip 192.168.100.254 pour le point d'accès et 192.168.100.1 pour le client. La passerelle du client est donc 192.168.100.254 et le masque de réseau est 255.255.255.0

Sur le serveur:

ZazouMobile:/usr/src# ifconfig bnep0 192.168.100.254
ZazouMobile:/usr/src# ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: icmp_seq=0 ttl=128 time=88.5 ms
64 bytes from 192.168.100.1: icmp_seq=1 ttl=128 time=38.6 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=128 time=102.6 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=128 time=41.6 ms

--- 192.168.100.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 38.6/67.8/102.6 ms

Bien, ça fonctionne. Pour mieux faire il faudrait automatiser cette affectation d'adresse sur le serveur. A titre d'exemple, sur une debian celà consiste à ajouter ces quelques lignes au fichier /etc/network/interfaces:

allow-hotplug bnep0
iface bnep0 inet static
        address 192.168.100.254
        netmask 255.255.255.0

Pour l'automatiser sur le client, on peut installer un serveur dhcp, ce n'est pas difficile mais ça sort un peu du cadre de cette introduction à Bluetooth. Voyez du côté du serveur dhcp de l'isc par exemple, très simple à mettre en oeuvre.

Enfin, il nous faut autoriser le routage des paquets arrivant de bluetooth et à destination du monde et à mettre en place le masquerading... La méthode à l'ancienne consiste à placerces deux lignes par exemple en fin de fichier /etc/init.d/rc.local, pour avoir quelque chose qui fonctionne sur la plupart des distributions sans se soucier de savoir si c'est bien.

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Un test sur http://mire.ipadsl.net/ nous informe d'un débit un peu inférieur à 90kbps. C'est peu mais c'est mieux que rien et ça peut suffir pour aller consulter un webmail ou des feed RSS depuis un PDA. Rappelons nous qu'il y a peu de temps, on ne se connectait qu'à 33600 ou 56000kbps (les bauds ne sont pas des bps mais je me permet de prendre ce raccourci ici).

Naturellement, on peut optimiser et faire plus sûr notamment si votre machine fait déjà routeur. Consultez les documentations à votre disposition pour adapter cette base.

Sur debian, par exemple, pour activer le routage on met plutôt ip_forward=yes dans le fichier /etc/network/options. Mais sur d'autres distributions, ce fichier peut ne pas exister. En connaissant les commandes, on s'en sort toujours.

Console python bluetooth

Nokia a décidé de fournir aux heureux développeurs détenteurs d'un téléphone basé sur la plate-forme Series60 (3650, 6260, NGage, NGage-QD, 6600 etc ...) d'outils de développement python. C'est une bonne initiative pour les amateurs de python mais quel est le rapport avec bluetooth ?

D'une on peut utiliser bluetooth dans les scripts python mais surtout, Nokia nous propose une console python sur le téléphone accessible via bluetooth. Voyons celà tout de suite.

Sur le PC

Sur le site développeur de Nokia, on cherche Python for Series 60 dans la liste Technologies. Il faut attentivement lire la page pour trouver à laquelle des 3 éditions appartient son téléphone. Pour les NGage, il s'agit du fichier PythonForSeries60_for_1stEd_FP1_SIS.zip.

Une fois dézippé, on trouve plusieurs documentations de qualité au format pdf et le fichier .sis qui est l'installeur de python pour le téléphone. Reste donc à envoyer ce fichier sur le téléphone ... Il faut ici avoir le réflexe OBEX.

Pour envoyer des fichiers, on a besoin d'ussp-push. Je n'ai pas trouvé de paquets binaires. Il faut donc retrousser ses manches et en télécharer les sources. Il vous faudra naturellement un environnement de développement (gcc, ld et la libc-dev) et les librairies glib et openobex et les fichiers de développement correpondants. Sur debian il s'agit des paquet libglib1.2, libglib1.2-dev, libopenobex-1.0.0 et libopenobex-1.0.0-dev.

Ensuite, tapez make. Ceci vous crée un binaire ussp-push. A vous de le copier où bon vous semble. J'ai également dû créer un lien symbolique pour satisfaire les dépendances de l'exécutable (ln -s /usr/lib/libopenobex-1.0.so /usr/lib/libopenobex-1.0.so.1). On peut églament s'en sortir en éditant le makefile. Faites comme bon vous semble, tant que ce la fonctionne.

Une fois ussp-push compilé, on peut enfin transférer notre fichier :

ZazouMobile:/home/zazou# sdptool browse 00:0E:6D:4E:52:EF
...
Service Name: OBEX Object Push
Service RecHandle: 0x10003
Service Class ID List:
  "OBEX Object Push" (0x1105)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 9
  "OBEX" (0x0008)
...
ZazouMobile:/home/zazou# ussp-push 00:0E:6D:4E:52:EF@9 PythonForSeries60_1stEd.SIS PythonForSeries60_1stEd.SIS
Sur le téléphone

Le NGage reçoit le fichier comme un SMS à ceci près que l'affichage de ce "message" provoque le lancement de l'installation. Quand on vous demande "Installer Python for Series 60 ?", dites oui. Vous trouverez à la fin de cette installation une nouvelle application nommée Python sur le téléphone.

Sur le PC

Nous avons quelques préparatifs supplémentaires à faire ici.

ZazouMobile:/home/zazou# sdptool add --channel 1 SP
Serial Port service registered
ZazouMobile:/home/zazou# rfcomm listen /dev/rfcomm0 1
Waiting for connection on channel 1
...

On doit tout d'abord accepter les connexions de type port série virtuel. On ajoute alors ce profil à la base SDP locale. On attribue ensuite un numéro de canal rfcomm à notre périphérique (le même que celui saisi dans la base, ici, le 1). On attend ensuite une connexion sur le canal 1 (c'est en fait le dlci 2 et vous savez pourquoi si vous avez suivi la théorie). On affecte à cette connexion le port série virtuel /dev/rfcomm0.

Sur le téléphone

On peut enfin lancer l'application Python, dans le menu, on choisit Bluetooth console et le téléphone recherche les périphériques présents. On choisit le bon et on constate alors (si on a hcidump lancé quelque part) qu'une recherche SDP se lance pour trouver un service "Serial Port" ... S'il est trouvé on nous demande si on souhaite avoir cette connexion là par défaut puis il tente de se connecter et ...

Sur le PC

... notre commande rfcomm listen /dev/rfcomm0 1 se réveille et on est alors relié via un câble série virtuel ...

...
Connection from 00:0E:6D:4E:52:EF to /dev/rfcomm0
Press CTRL-C for hangup

Reste à connecter un terminal à ce port série. On installe à cette fin kermit (ou ckermit) par exemple. Ensuite, en root:

ZazouMobile:/home/zazou# kermit
C-Kermit 8.0.211, 10 Apr 2004, for Linux
 Copyright (C) 1985, 2004,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/zazou/) C-Kermit>set transmit linefeed on
(/home/zazou/) C-Kermit>set line /dev/rfcomm0
(/home/zazou/) C-Kermit>connect
Connecting to /dev/rfcomm0, speed 9600
 Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------

Connected.
Python 2.2.2 (#0, Sep 26 2005, 11:58:40)
[GCC 2.9-psion-98r2 (Symbian build 540)] on symbian_s60
Type "copyright", "credits" or "license" for more information.
Type "commands" to see the commands available in this simple line editor.
>>> import appuifw
>>> appuifw.note(u"Hello World!", "info")

Les explications de texte sont relativement courtes. set transmit linefeed on nous permet d'avoir des retours à la ligne corrects. set line /dev/rfcomm0 nous permet de choisir le "port série" à utiliser et connect se passe d'explication.

Nous sommes ensuite connectés à un interpréteur python sur le téléphone. Nous pouvons donc envoyer des instructions depuis kermit, en passant par un port série virtuel créé grâce à bluetooth, à un interpéteur python s'exécutant sur un téléphone sous Symbian, ... On peut voir ça comme de l'énorme n'importe quoi, je vous le concède mais pour les personnes qui développent des applications pour la téléphonie mobile, la simplicité de python couplée à la facilité de pouvoir taper du code avec un vrai clavier et en voir directement les effets sur le téléphone est un formidable coup d'accélérateur en terme de temps de développement. (Une belle réduction du Time To Market dirait-on à la direction).

Une fois vos scripts au point, vous pouvez naturellement les installer. Consultez les pdf livrés avec le .zip que nous avons téléchargé pour en savoir plus.

Bref ... Nous autres codeurs qu'est ce qui nous intéresse là dedans ? Les 2 commandes pardi !

La première commande charge la glue graphique avec l'interface utilisateur Nokia (APPlication UI FrameWork).

La seconde nous permet d'utiliser un des "dialogues" prédéfinis, ici de type info. Le texte devant apparaître est transformé en Unicode, toutes les chaînes étant codées ainsi sous Symbian.

Réception de fichiers

Le principe est toujours le même. Trouver l'outil (obexserver) et ajouter le service à la base SDP locale. D'expérience, il faut utiliser le canal 10 avec les Nokia.

ZazouMobile:/home/zazou# sdptool add --channel=10 OPUSH
OBEX Object Push service registered
ZazouMobile:/home/zazou# obexserver
Waiting for connection...

.........................................HEADER_LENGTH = 41546
put_done() Skipped header 42
put_done() Skipped header 44
Filename = Screenshot002.jpg
Wrote /tmp/Screenshot002.jpg (41546 bytes)
scshot

Pour conclure

On le voit, les outils bluetooth sont là, fonctionnent très correctement mais sont d'une utilisation encore très peu pratique. Une des propositions du Google summer of code consistait à créer une interface conviviale d'utilisation de bluetooth pouro ubuntu. A priori, il n'y a toujours rien dans la 5.10 ("Breezy Badger") donc je suppose que le projet n'a pas eu de suite convaincante.

C'est un des aspects de linux ou il reste une niche à combler pour des développeurs d'outils utilisateur. Tout existe, il faut juste le rendre pratique. Avis au amateurs. KDE et GNOME ont chacun des projets conséquents qui vont au delà du simple wrapper d'outil en ligne de commande. Celui de GNOME n'est pas encore utilisable à mon sens (pas celui dispo sur ubuntu) parce qu'à peine commencé. Celui de KDE en est déjà à un stade très avancé mais on ne peux pas dire qu'il soit terminé non plus.

Quoiqu'il en soit, 2006 devrait être l'année du wireless usb. Il était donc temps que l'on vous parle de bluetooth avant que cette technologie ne devienne complètement "has-been" ;)

@+

Xavier Garreau - <xavier@xgarreau.org>
http://www.xgarreau.org/

Liens & Références :

a+

Auteur : Xavier GARREAU
Modifié le 02.01.2006