Bluetooth for Java 2 Standard Edition - LIA

Bluetooth for Java 2 Standard Edition
Analisi delle librerie disponibili
Massimo Albertin
[email protected]
Abstract
La Java Standard Edition (Java SE at a Glance) non dispone di librerie per la comunicazione bluetooth, come
invece è possibile trovare all’interno delle distribuzioni di
Java Mobile Edition (The Java ME Platform — the Most
Ubiquitous Application Platform for Mobile Devices)
presenti su dispositivi mobili tipo cellulari. Esiste una
specifica per la comunicazione bluetooth in java definita
all’interno del documento JSR-82 (JSR 82: JavaTM APIs
for Bluetooth), che è proprio quella implementata nella
J2ME. Le librerie analizzate in questo documento permettono la comunicazione tramite bluetooth ad esempio tramite dongle Bluetooth USB.
Dal momento che J2SE non dispone di una implementazione della JSR-82 e relativo supporto alla comunicazione bluetooth, è necessario un interfacciamento diretto al
sistema operativo. Questo porta a vincolare
l’applicazione alla piattaforma su cui dovrà essere eseguita l’applicazione, soprattutto se la libreria utilizzata
non rispetta perfettamente le specifiche JSR-82.
1
Introduzione
In questo documento verranno analizzate una serie di librerie per la comunicazione con dispositive Bluetooth.
Alcune implementazioni rispettano le specifiche JSR-82
presentando quindi interfacce comuni e modalità di accesso standardizzate, mentre altre fanno ricorso ad interfacce
proprietarie. Per accedere alla comunicazione e ai driver
bluetooth alcune librerie fanno ricorso alla JNI (Java
Native Interface) che si appoggia a codice nativo (prevantemente C o C++) interfacciato direttamente al driver relativo del sistema operativo. Questa soluzione rende tali
librerie non cross-platform e fortemente legate alla piattaforma per cui sono state progettate. Altre librerie utilizzano invece JavaComm (Java Communication API) per
interfacciarsi al dispositivo bluetooth rimanendo crossplatform. Questa soluzione permette solo in parte
l’indipendenza dalla piattaforma, in quanto comunque le
librerie JavaComm sono legate al sistema su cui si trovano. Esiste infatti una versione differente per linux e solaris, ma non una specifica per windows, seppur sia presente una versiona Generic. Inoltre tale librerie non sono
state pensate espressamente per bluetooth ma per interfacciarsi a dispositivi RS232.
Le prove delle librerie sono state effettuate con sistema
operativo Windows XP SP2, Debian unstable aggiornata
al 12/05/2006 e OpenSuse 10.2.
Bluetooth for Java 2 Standard Edition
Massimo Albertin
2
Windows
Di seguito è riportata un’analisi delle librerie disponibili
per piattaforma Windows.
2.1 Bluecove 1.2.1
E’ una libreria che si appoggia ai driver Microsoft presenti in Windows XP SP2 ed implementa in modo abbastanza completo le specifiche JSR-82. Permette trasferimenti
con profilo RFCOMM, ma non permette l’accesso tramite
L2CAP. Ciò è legato a vincoli imposti dal driver
Microsoft stesso che nasconde questo livello. Sul sito web
è possibile scaricare anche i sorgenti della libreria con
alcuni esempi per provarne le funzionalità. La libreria non
è corredata di documentazione, anche se i sorgenti della
libreria sono ben commentati, si consiglia quindi di fare
riferimento a documentazione per la generica JSR-82.
2.1.1 Note
Questa libreria non funziona se sono si sono installati
driver widcomm/broadcom che spesso vengono forniti
con i Dongle Bluetooth USB.
2.1.2 Installazione
Il file zip scaricabile dal sito contiene un file intelbth.dll
da copiare all’interno della cartella <WINDIR>/System32
e una libreria java bluecove.jar da aggiungere al classpath
del progetto java per poter utilizzare le funzioni implementate. Alternativamente è possibile aggiungere la libreria .jar al classpath dell’installazione di java.
2.1.3 Sito Web
http://code.google.com/p/bluecove/
2.2 Avelink
Si tratta di un’ulteriore implementazione per Windows, in
questo caso a pagamento, che rispetta le specifiche JSR82. Esistono differenti versioni per differenti dispositivi
bluetooth e per diversi sistemi tra cui anche Windows CE.
La documentazione è abbastanza dettagliata essendo un
prodotto commerciale. L’interfacciamento con il dispositivo avviene attraverso un driver proprietario da installare
al posto del driver attualmente in uso per la periferica
Bluetooth. Dal sito è possibile scaricare una versione trial
funzionante per 14 giorni.
2.2.1 Installazione
L’installazione prevede l’aggiornamento del driver della
periferica con il driver fornito da avelink. A questo punto
basta aggiungere al classpath di sistema o del progetto la
libreria jar per poter accedere alle funzionalità di comunicazione.
2.2.2 Sito Web
http://www.avelink/Bluetooth
1
3
Linux
Di seguito è riportata un’analisi delle librerie disponibili
per piattaforma Linux.
3.1 Avetana
Nonostante sia un po’ laboriosa l’installazione di tale software, si tratta di una implementazione di JSR-82 abbastanza completa. Comprende una implementazione dei
profile bluetooth RFCOMM, L2CAP e OBEX.
3.1.1 Installazione:
Questa implementazione di JSR-82 si appoggia alle librerie Bluez (Bluez) per linux che devono essere correttamente installate nel sistema. Prima di procedere con
l’installazione è importante controllare i prerequisiti sia in
termine di librerie che di configurazione del kernel del
sistema stesso.
Per quanto riguarda il kernel è fondamentale controllare e
nel caso ricompilare il kernel in modo da includere (si
consiglia kernel dal 2.6.16 in su) la gestione del bluetooth
nella sezione:
Networking-->Bluetooth
abilitando tutti i possibili profili bluetooth disponibili,
nelle prove effettuate è stato compilato il kernel con inclusione diretta dei driver ma si ottiene lo stesso risultato
anche configurando il bluetooth come moduli. Se configurati i moduli questi devono poi essere caricati tramite modprobe prima di eseguire l’applicazione java.
Per Debian è necessario installare i alcuni pacchetti tramite comando:
apt-get install bluez-utils libbluetooth1 libbluetooth1-dev
bluetooth
bluetooth-desktop
autoconf
per poter poi testare il corretto funzionamento
dell’interfaccia bluetooth è possibile installare anche
kbluetooth tramite il comando
apt-get install kbluetooth
un programma per kde grafico che permette un semplice
gestione dell’interfaccia bluetooth.
Alternativamente utilizzando altre distribuzioni Linux è
possibile scaricare queste librerie direttamente dal sito del
progetto Bluez, e seguire le istruzioni di installazione presenti sul sito web.
A questo punto è possibile procedere con l’installazione
del pacchetto avetanabt.
Per prima cosa è necessario impostare le variabili di sistema utilizzate dallo script di installazione install, in questo modo:
export JDK_HOME=/jdkDirectory
export JDK_PLATFORM=linux
export
BIN_DIR=/avetanaDirectory/binariesRiferimenti
a questo punto è possibile eseguire lo script di installazione nella directory /avetanaDirectory/binaries verranno
creati due files un file di libreria .so da spostare nella
directory di sistema /usr/lib e un file .jar da includere al
progetto java.
Lo script eseguirà dapprima un configure per controllare i
prerequisiti, nel caso fallisca controllare il messaggio di
errore ed installare le librerie mancanti.
La procedura di installazione creerà inoltre la documentazione delle classi nella cartella javadoc.
La procedura di installazione con OpenSuse è del tutto
analoga, una volta soddisfatte tutte le dipendenze di librerie richieste.
3.1.2 Note
È fortemente consigliata questa versione del software o
successive in quanto le precedenti avevano una serie di
problemi legati a bug consistenti negli script di installazione.
La compilazione su Open Suse 10.2 e Debian unstable
aggiornata a date successive a quella indicata
nell’introduzione potrebbe portare ad un fallimento. Questo perché le nuove versioni dei compilatori utilizzano
regole più stringenti che portano ad un fallimento generale della compilazione della parte scritta in C++ (file
bluez.cpp).
3.1.3 Sito Web
http://sourceforge.net/projects/avetanabt/
3.2 Impronto
E’ una libreria commerciale che si appoggia sulle librerie
Bluez di Linux. Il software è liberamente utilizzabile come studenti universitari a seguito di una registrazione sul
sito del produttore. Il funzionamento è del tutto analogo a
quello già visto per le librerie precedenti, anche se dai test
effettuati non si è riscontrata piena compatibilità con le
specifiche JSR-82 soprattutto per quanto riguarda
l’inquiry. La versione commerciale oltre a fornire i driver
fornisce una emulatore molto completo per i test dei dispositivi bluetooth in grado di emulare anche la locazione
fisica dei dispositivi stessi. Quest’ultimo non è però disponibile in licenza gratuita studenti.
La documentazione distribuita con la libreria è molto dettagliata anche nella versione gratuita e comprende oltre
alla javadoc di definizione delle api un documento pdf
con alcuni esempi e due esempi veri e proprio pronti da
compilare.
3.2.1 Installazione
L’installazione è molto semplice soprattutto in OpenSuse,
dal momento che viene fornito un pacchetto .rpm autoinstallante. L’installazione guidata non fa altro che copiare
la libreria java idev_bluez.jar in /usr/share/java, il codice
nativo di interfacciamento alla libreria bluez in /usr/lib/
libimpronto.so
e
la
documentazione
in
/usr/share/doc/impronto-1.3.
Nel caso in cui si voglia installare il prodotto in Debian si
consiglia di utilizzare il comando alien per produrre un
pacchetto di installazione .deb a partire dall’rpm e procedere poi con l’installazione tramite
dpkg –i pacchetto.deb
3.2.2 Note
Affinchè la libreria funzioni correttamente è necessario
includere nel classpath il file LinuzLicense.txt fornito con
la mail di registrazione.
Nel caso in cui si presenti un errore del tipo
cannot find libbluetooth.so.1
Bluetooth for Java 2 Standard Edition
Massimo Albertin
2
nonostante le bluez-libs siano state installate basta creare
un link simbolico con quel nome all’interno di /usr/lib che
punti alla libreria libbluetooth.so sicuramente già presente.
3.2.3 Sito Web
http://www.rococosoft.com/
3.3 JBluez
Si tratta di un porting java delle librerie Bluez (Bluez) di
linux che non rispettano gli standard JSR-82. Sul sito è
presenta la tutta la documentazione necessaria per corretto
utilizzo ed installazione, nonché le javadoc delle api fornite dalla libreria. E’ possibile scaricare anche il codice
sorgente.
3.3.1 Installazione
L’installazione è molto simile a quella già analizzata per
le librerie per Linux, il file zip scaricabile dal sito comprende oltre ai sorgenti un file jbluez.jar da includere al
classpath e un file libjbluez.so da inserire in /usr/lib.
3.3.2 Sito Web
http://jbluez.sourceforge.net/
JSR 82: JavaTM APIs for Bluetooth. (n.d.). Retrieved
Gennaio
13,
2007,
from
http://www.jcp.org/en/jsr/detail?id=82
Mahmoud, Q. H. (n.d.). The Java APIs for Bluetooth
Wireless
Technology.
Retrieved
from
http://developers.sun.com/techtopics/mobility/midp/articl
es/bluetooth2/
The Java ME Platform — the Most Ubiquitous
Application Platform for Mobile Devices. (n.d.).
Retrieved from http://java.sun.com/javame/index.jsp
3.4 JavaBluetooth
E’ un implementazione JSR-82 completamente in Java,
che utilizza JavaComm per interfacciarsi al dispositivo
bluetooth. Supporta HCI, L2CAP e SDP ma non
RFCOMM. Questa libreria non necessita di una vera e
proprio installazione a patto che sia già presente la libreria
JavaComm in classpath. E’ presente una documentazione
javadoc, ma non sono allegati esempi di funzionamento.
4
Conclusioni
Nel caso in cui si voglia utilizzare il bluetooth su piattaforma Windows la scelta migliore è sicuramente Bluecove che fornisce in licenza opensource un ottimo prodotto
semplice da installare. Per quanto riguarda linux invece
l’implementazione maggiormente compatibile con gli
standard è la avetana, a patto che venga utilizzata su distribuzioni non troppo recenti (almeno fino all’uscita di
una nuova release). Una alternativa potrebbe essere la
JavaBluetooth che però fa ricorso alle JavaComm che non
sono propriamente progettate per il bluetooth.
Riferimenti
Bluetooth
Learn.
(n.d.).
Retrieved
from
http://www.bluetooth.com/Bluetooth/Learn/
Bluez. (n.d.). Retrieved from http://www.bluez.org/
Fitton, D. (2006, Novembre 22). Java Bluetooth HOWTO.
Retrieved
Gennaio
13,
2007,
from
http://www.caside.lancs.ac.uk/java_bt.php
Hopkins, B., & Ranjith, A. (2003). Bluetooth for Java.
Apress.
Java Communication API. (n.d.). Retrieved from
http://java.sun.com/products/javacomm/
Java Native Interface. (n.d.). Retrieved from
http://java.sun.com/javase/6/docs/technotes/guides/jni/ind
ex.html
Java SE at a Glance. (n.d.). Retrieved from
http://java.sun.com/javase/
Bluetooth for Java 2 Standard Edition
Massimo Albertin
3