Desarrollo de Aplicaciones BT en Java
El standard JABWT (Java API's for the Bluetooth wireless technology) se encuentra definido en la especificación JSR-82 y es capaz de soportar el desarrollo de aplicaciones BT de manera segura, portátil y altamente utilizable.
Requerimientos
BLUEZ - Stack de código para el manejo del protocolo Bluetooth 2.0 en ambiente Linux.
Avetana - Provee funcionalidades Bluetooth a softwares desarrollados en Java ( javax.microedition.*, javax.bluetooth.*)
Stack de Protocolo
El stack BT es la componente de software o firmware que tiene acceso directo al dispositivo BT. Controla configuraciones del dispositivo, parámetros de comunicación y niveles de potencia.
HCI - Capa que hace de interfaz entre la radio y el computador huesped (host).
L2CAP - Multiplexa todos los datos que pasan a través de la unidad.
SDP - Encuentra servicios en dispositivos BT remotos.
RFCOMM - Protocolo de puerto serie virtual, emula puertos serie a través de L2CAP
OBEX - Transmisión de archivos genéricos entre dispositivos.
Administración de Dispositivos
La especificación Java para BT presenta dos clases principales -Local Device y Remote Device- que permited administrar los dispositivos. Estas clases permiten obtener información del dispositivo propio (Local Device) e información sobre los dispositivos que se encuentran en el área (Remote Device).
Device Discovery
La clase DiscoveryAgent y la interfaz DiscoveryListener proveen de los servicios de descubrimiento de dispositivos.Existen tres modos de obtener dispositivos accesibles.
DiscoveryAgent.startInquiry()-Se debe especificar un event listener que responda a los eventos relacionados.
DiscoveryListener.deviceDiscovered()-Es llamado cada vez que una peticón encuentra un dispositivo.DiscoveryListener.inquiryCompleted() es invocado cuando la petición es terminada o cancelada.
DiscoveryAgent.retrieveDevices()-Si el dispositivo no desea esperar a descubrir nuevos dispositivos.
Service Discovery
Permite conocer que servicios brinda el dispositvo remoto (eg. impresora). El método searchServices() de la clase DiscoveryAgent permite buscar servicios en un dispositivo remoto. Una vez encontrados los servicios, se invocará a servicesDiscovered() implementado en la interfaz DiscoveryListener. Todo esto ocurre en el cliente.
Service Registration
En el servidor deben estar registrados los servicios internamente en la SDDB (Service Discovery database). Se describe un breve resumen de esta etapa:
Una llamada a Connector.open() crea un nuevo ServiceRecord. Esta conexión resultanet se castes a un notificador del tipo StreamConnectionNotifier.
Se usa el objeto LocalDevice y el StreamConnectionNotifier para obtener el ServiceRecord
El notificador StreamConnectionNotifier llama a acceptAndOpen() y espera por clientes. El sistema crea un registro de servicio en el SDDB. La hebra que maneja acceptAndOpen() se bloquea hasta que responde un cliente.
Cuando el servidor esta listo para terminar, llama a close() en el StreamConnectionNotifier. El sistema remueve el registro de servicio del SDDB.
Comunicación
La comunicación entre dispositivos se logra al compartir el mismo protocolo, el cual puede ser RFCOMM, L2CAP, OBEX u otro soportdo por ambos. En el caso del proyecto se utiliza el protocolo RFCOMM (BT Serial Port Profile).
Descarga del Proyecto
El proyecto puede ser descargado desde ACÁ.
______________________________________________________________________
|