6. Liaison Bluetooth
Une pile libre de liaison Bluetooth [7]X. Garreau, " Bluetooth, installation et utilisation ", GNU/Linux Magazine France n°78 (2005), disponible à http://www.unixgarden.com/index.php/comprendre/bluetooth-installation-et-utilisation a été développée, principalement par M. Ringwald, et son code source mis à disposition à http://code.google.com/p/btstack Cette pile est compatible avec les API POSIX et COCOA, tel que nous l'illustrerons ci-dessous, mais surtout donne accès à toutes les étapes de gestion des paquets et donc permet d'étendre la capacité de communication de l'iPod au-delà des périphériques qualifiés de compatibles par Apple.
Figure 5 : Structure de BTstack, fournissant BTDaemon chargé de l'interface entre la matériel (géré par le système d'exploitation d'Apple) et les applications utilisateurs, ainsi que les bibliothèques de gestion des trames Bluetooth - nommées BTStackManager - pour COCOA.
Partant de cette base, nous nous sommes proposés :
d'adapter les scripts de compilation (configure et Makefile) afin de pouvoir exploiter notre toolchain pour cross-compiler BTstack sous GNU/Linux ;
de compléter les fonctionnalités de la bibliothèque afin de fournir un support complet du protocole RFCOMM - fournissant l'équivalent d'un port série virtuel - pour une liaison bidirectionnelle.
Dans tous les cas, l'exploitation de la pile BTstack nécessite de désactiver la gestion de la communication Bluetooth par le système d'Apple afin de libérer la ressource pour notre propre gestionnaire.
Il est également nécessaire d'installer BTstack sur iPod : la solution la plus simple est de passer par Rock. Toutefois, il est malgré tout nécessaire de compiler les sources issues du SVN du projet en vue d'avoir sur sa machine les bibliothèques qui seront nécessaires pour la compilation de ses propres applications.
La procédure est très classique :
Télécharger les sources svn checkout http://btstack.googlecode.com/svn/trunk.
Dans le répertoire nouvellement créé, faire un ./bootstrap.sh suivi d'un :
|
|
./configure --target=iphone --with-sdk-version=SDK_Vers \ --with-gcc-version=GCC_Vers \ --prefix=/somewhere/ipod/btstack \ --with-developer-path=/somewhere/ipod/toolchain/ \ --enable-launchd |
pour configurer les sources (au moment de la rédaction, nous utilisons 3.2 pour GCC_Vers et 4.2.1 pour SDK_Vers). Le point important est le --enable-launchd, qui va permettre de ne lancer BTDaemon que lorsqu'une application en a besoin, launchd ayant un rôle équivalent à inetd pour les connexions réseau entrantes. Il est envisageable de devoir modifier certaines occurrences de sdk en minuscules vers des SDK en majuscules lors de l'exploitation du script configure destiné à MacOS sous GNU/Linux.
Une fois la configuration finie, un simple make && make install suffit pour compiler et installer les bibliothèques et les binaires. En cas de problème concernant libstdc++, vérifier le lien symbolique dans $IPOD/toolchain/sys/usr/lib : la bibliothèque libstdc++.dylib doit pointer sur libstdc++.6.dylib, sinon créer le lien symbolique manuellement.
Bien que nous ayons recompilé BTDaemon, nous sommes surtout intéressés par la disponibilité des bibliothèques associées à BTstack, et nous nous contentons d'exploiter le paquet cydia ou rock de BTstack pour placer une version fonctionnelle de BTDaemon et des scripts associés aux emplacements appropriés de l'arborescence. Pour ceux souhaitant ne pas utiliser la version disponible par Cydia/Rock, le script package.sh contenu dans le SVN permettra de générer le .deb ou sera source d'inspiration pour une installation totalement manuelle.
Dans le cas de la modification de BTDaemon en lui-même, le remplacement par une version personnelle se fera par écrasement du binaire (BTDaemon) et de la bibliothèque (libBTstack.dylib) sur l'iPod par les nouvelles versions, puis par l'exécution des commandes :
|
|
/bin/launchctl unload /Library/LaunchDaemons/ch.ringwald.BTstack.plist /bin/launchctl load /Library/LaunchDaemons/ch.ringwald.BTstack.plist |
afin de s'assurer que la nouvelle version sera à l'avenir bien prise en compte.